2011-10-27 69 views
1

我用函數clock()測量了時間,但它給出了不好的結果。我的意思是,對於使用一個線程的程序和使用多線程的OpenMP運行的相同程序,它會得到相同的結果。但事實上,我注意到我的手錶有很多線程程序計數更快。 所以我需要一些掛鐘定時器...多線程程序的測量時間

我的問題是:這個問題有什麼更好的功能? clock_gettime()或mb gettimeofday()?還是MB別的東西?

if clock_gettime(),然後用哪個時鐘? CLOCK_REALTIME或CLOCK_MONOTONIC?

使用Mac OS X(雪豹)

回答

1

我覺得時鐘()計算所有線程之間的總CPU使用率,我有這個問題太...

掛鐘計時方法的選擇是個人喜好。我使用內聯包裝函數來獲取時間戳(取兩個時間戳的差值來計算處理時間)。爲了方便,我使用了浮點(單位是秒,不必擔心整數溢出)。使用多線程時,有很多異步事件,在我看來,時間低於1微秒是沒有意義的。這工作對我非常好,到目前爲止:)

無論你選擇,一個包裝是試驗

inline double my_clock(void) { 
    struct timeval t; 
    gettimeofday(&t, NULL); 
    return (1.0e-6*t.tv_usec + t.tv_sec); 
} 

使用最簡單的方法:

double start_time, end_time; 
start_time = my_clock(); 
//some multi-threaded processing 
end_time = my_clock(); 
printf("time is %lf\n", end_time-start_time); 
3

如果你想掛鐘時間,並且clock_gettime()可用,這是一個不錯的選擇。如果您正在測量時間間隔,請使用CLOCK_MONOTONIC,如果要獲取一天中的實際時間,請使用CLOCK_REALTIME

CLOCK_REALTIME爲您提供一天的實際時間,但會受到系統時間調整的影響 - 所以如果系統時間在程序運行時進行調整,會擾亂使用時間間隔的測量。

CLOCK_MONOTONIC不給你一天的正確時間,但它確實指望以同樣的速度,並且不受更改系統時間 - 所以它是理想的測量時間間隔,但沒用當一天的正確時間是需要顯示或時間戳。