我想进行计时测试以学习如何使用“ time.h”进行基准测试。但是我注意到第一次测试总是比较长。
0 1 2 3 4 5 6 7 8 9
time 0.000138
0 1 2 3 4 5 6 7 8 9
time 0.000008
0 1 2 3 4 5 6 7 8 9
time 0.000007
如果我想在同一个main()函数中进行多个测试,则结果将不可靠。这是在上面打印输出的愚蠢代码。
#include <stdio.h>
#include <time.h>
const int COUNT = 10;
void test() {
clock_t start = clock();
for(int i = 0; i < COUNT; i++) {
printf("%d ", i);
}
printf("\ntime %lf\n", (double)(clock() - start) / (double)CLOCKS_PER_SEC );
}
int main() {
test();
test();
test();
return 0;
}
我通过忽略第一个“测试”功能解决了这个问题。同样,编写第一个“ printf”,该“ printf”也将在测试有效之前打印一些整数。但是我想这不是一个适当的解决方案。
CPU具有缓存。当代码和数据不在缓存中时,代码需要更长的时间才能运行。
衡量性能时,通常会丢弃首次运行(或前几次运行)的结果的标准做法。有时称为“缓存预热”。