私はこのように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でローカルスレッド時間を測定するより良い方法はありますか?