我和我的朋友就对 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 s),但是当我们划分它时,它给我们的结果类似于 2.34385e-07 s ...
所以这是我的问题:
- 我们是否应该将(es)除以迭代次数,如果是,为什么?
- 我们如何以更易于阅读的形式打印 2.34385e-07 s?(比方说,它花了 0.00000003 秒)?
我们是否应该先调用一次函数,然后测量迭代的 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";