1

私はこのように2つのイベント間の物理的な時間を測定しています:

#include <time.h>
#include <sys/time.h>

timeval wall_time0;
timeval wall_time1;

// start of period measurement
gettimeofday( &wall_time0 , 0);

...stuff happening 

// end of period measurement
gettimeofday( &wall_time1 , 0);

return ( ( wall_time1.tv_sec - wall_time0.tv_sec ) + (( wall_time1.tv_usec - wall_time0.tv_usec )/(double)1000000) );

しかし今、スレッドが実際に使用している論理時間を測定する方法が必要です。つまり、理論的には、他のスレッドやシステムおよびカーネルロジックの実行に費やされた時間を差し引いた物理時間でなければなりません。

私はこれがそれを行う方法だと思いました:

clock_t mTime0;
clock_t mTime1;

//start of period measurement
mTime0=clock();

... stuff happening


//end of period measurement
mTime1=clock();
return (mTime1-mTime0)/(double)CLOCKS_PER_SEC;

しかし、いくつかの測定を行ったところ、2 つの問題に気付きました。

1) 一部の測定値では物理時間よりも大きく、これは正しくありません (つまり、特定のループでは、物理時間は 0.2495.. であり、「論理」(clock() で測定) は 0.27 になります。より小さい測定値の場合は、次のようになります)。ゼロに切り上げるだけで、2番目の問題につながります...)

2) 得られた時刻は、gettimeofday によって返される時刻よりもかなり粗いようです。

Linuxでローカルスレッド時間を測定するより良い方法はありますか?

4

3 に答える 3

3

使用できる精度の高いオプションがいくつかあります - を見てくださいsys/timex.h。また、たとえばBoost Date.Timeには、ミリ秒以上の精度のタイマーがあります。

「合計時間 > 物理経過時間」に関しては、マルチスレッドのタイミングでそれを見てきました。これは単なる「アカウンティング」の問題です。すべての CPU の「消費」が追加され、すべてのスレッドが機能する場合、マルチスレッド コードでの経過時間よりも長くなる可能性があります。スケジューリングのオーバーヘッドが追加され、経過時間よりも長くなります。

于 2010-10-25T15:11:13.763 に答える
2

tv_usecフィールドstruct timevalはマイクロ秒単位であり、単位ではありません1/(double)CLOCKS_PER_SEC

于 2010-10-25T16:09:31.553 に答える
0

少し調査した後、 getrusage が前述の両方のニーズを満たすことがわかりました。

getrusage の man ページ

したがって、基本的に必要なコードは、物理的な時間を で測定する方法と非常に似ていgettimeofdayます。getrusage

#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>

timeval processed_time0;
timeval processed_time1;
rusage paramStruct
// start of period measurement
int result = getrusage( &paramStruct);
processed_time0 = paramStruct.ru_utime;

...stuff happening 

// end of period measurement
int result = getrusage( &paramStruct );
processed_time1 = paramStruct.ru_utime;

return ( ( processed_time1.tv_sec - processed_time0.tv_sec ) + (( processed_time1.tv_usec - processed_time0.tv_usec )/(double)1000000) );

この方法は私に両方を与えます

1) 現在の処理所要時間

2) マイクロ秒の分解能

Boost Date.Timeを調査しましたが、ドキュメントにはプロセスまたはユーザー対システム時間について言及しているものは何もありません。ライブラリは物理的な時間の測定に関係していると思います

于 2010-10-26T12:33:14.713 に答える