Linux(およびその他のUnix系システム)のC++では、長い計算時間を要するCPU(ウォールクロックではない)時間を計測する必要があるため、clock() 。問題:32ビットシステムでは、これは約2000または4000秒後にラップアラウンドします。32ビットLinuxクロック()オーバーフロー
これにはどのような回避策がありますか?
Linux(およびその他のUnix系システム)のC++では、長い計算時間を要するCPU(ウォールクロックではない)時間を計測する必要があるため、clock() 。問題:32ビットシステムでは、これは約2000または4000秒後にラップアラウンドします。32ビットLinuxクロック()オーバーフロー
これにはどのような回避策がありますか?
は、次の構造体を埋めるgetrusage
を使用したいですgettimeofday()を2回使用すると、ms精度が返されます。
clock()
の精度が必要ですか?ない場合は、time()
を二回使用し、その差を取ることができます。
time_t start, end;
double diff;
time(&start);
// Do your stuff...
time(&end);
diff = difftime(end, start);
EDIT:litbとしてtime()
対策リアルタイム(ないCPU時間が)彼のコメントで指摘したが、そうclock()
を行います。 CPU時間を測定する場合は、litbのアドバイスに従って、getrusage()
を使用してください。
繰り返し単位で時間を取得し、ロールオーバーするたびに乗数変数intをインクリメントしますか? (man getrusage
)
別の詳細については、manページを、いつものように
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
相談:完了するために
struct rusage {
struct timeval ru_utime; /* user time used */
struct timeval ru_stime; /* system time used */
...
};
、struct timeval
:
時間は壁時計の時間ではありませんか?つまり、プログラムのCPU使用量が少ない場合は少なくなりません。 –
それは正しいですが、それもそうですclock() –
誰もあなたを修正するように見えません、私はもう一度やります:時計は壁時計の時刻ではありません。 「プログラムが使用したプロセッサ時間の近似値」を返します。 –