簡體   English   中英

測量多線程程序的時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM