[英]measuring time of multi-threading program
我用函數clock()測量了時間,但結果不好。 我的意思是它為具有一個線程的程序和使用具有許多線程的OpenMP運行的相同程序提供相同的結果。 但事實上,我注意到我的手表有許多線程程序計數更快。 所以我需要一些掛鍾定時器......
我的問題是:這個問題有什么更好的功能? clock_gettime()或mb gettimeofday()? 或者別的什么?
如果clock_gettime(),那么用哪個時鍾? CLOCK_REALTIME還是CLOCK_MONOTONIC?
使用mac os x(雪豹)
如果你想要掛鍾時間,並且clock_gettime()
可用,那么這是一個不錯的選擇。 如果您正在測量時間間隔,請使用CLOCK_MONOTONIC
,使用CLOCK_REALTIME
獲取實際時間。
CLOCK_REALTIME
為您提供實際的一天中的時間,但會受到系統時間調整的影響 - 因此,如果在程序運行時調整系統時間,則會使用它來查看間隔測量值。
CLOCK_MONOTONIC
沒有給你正確的時間,但它確實以相同的速率計數並且不受系統時間變化的影響 - 所以它非常適合測量間隔,但是當需要正確的時間來顯示時,它是無用的對於時間戳。
我認為clock()計算所有線程中的總CPU使用率,我也有這個問題...
掛鍾計時方法的選擇是個人喜好。 我使用內聯包裝函數來獲取時間戳(使用2個時間戳的差異來計算處理時間)。 為方便起見,我使用了浮點數(單位是秒,不必擔心整數溢出)。 對於多線程,有很多異步事件,在我看來,時間低於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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.