C/C++ コード (または一般的なコード) のベンチマークについて友人と興味深い議論をしました。getrusage
特定のコードの CPU 時間を測定するために使用する単純な関数を作成しました。(特定の機能を実行するのにかかった CPU の時間を測定します)。例を挙げましょう:
const int iterations = 409600;
double s = measureCPU();
for( j = 0; j < iterations; j++ )
function(args);
double e = measureCPU();
std::cout << (e-s)/iterations << " s \n";
(es) を反復回数で割るべきか、そうでないかという議論がありました。つまり、除算しない場合、結果は許容される形式 (例: 3.0 秒) ですが、除算すると、2.34385e-07 秒のような結果が得られます ...
だからここに私の質問があります:
- (es) を反復回数で割るべきですか? そうであれば、なぜですか?
- 2.34385e-07 をより人間が読める形式で出力するにはどうすればよいでしょうか? (たとえば、0.00000003 秒かかりました) ?
最初に関数呼び出しを 1 回行い、その後、反復の CPU 時間を次のように測定する必要があります。
// first function call, doesnt bother with it at all function(args); // real benchmarking const int iterations = 409600; double s = measureCPU(); for( j = 0; j < iterations; j++ ) function(args); double e = measureCPU(); std::cout << (e-s)/iterations << " s \n";