当使用
没有
使用
注意:我正在使用
-O3
编译下面的基准代码时,我对它在延迟方面所产生的差异感到印象深刻,因此我开始想知道编译器是否会通过某种方式删除代码来作弊。有没有办法检查这一点?使用-O3
进行基准测试是安全的吗?能否真实地期望15倍的速度提升?没有
-O3
的结果:平均值:239纳秒,最小值为230纳秒(900万次迭代)使用
-O3
的结果:平均值:14纳秒,最小值为12纳秒(900万次迭代)int iterations = stoi(argv[1]);
int load = stoi(argv[2]);
long long x = 0;
for(int i = 0; i < iterations; i++) {
long start = get_nano_ts(); // START clock
for(int j = 0; j < load; j++) {
if (i % 4 == 0) {
x += (i % 4) * (i % 8);
} else {
x -= (i % 16) * (i % 32);
}
}
long end = get_nano_ts(); // STOP clock
// (omitted for clarity)
}
cout << "My result: " << x << endl;
注意:我正在使用
clock_gettime
来测量:long get_nano_ts() {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
return ts.tv_sec * 1000000000 + ts.tv_nsec;
}
x
进行一些不可逆的操作,例如输出它。 - David Schwartz