【发布时间】:2018-12-01 23:16:02
【问题描述】:
有人能解释为什么多次运行这段代码会得到非常多变的结果吗? 除非我做错了什么,否则它应该测量我的系统(MacOSX Sierra,Xcoe9.2)运行空 for 循环 1000 次所需的时间。
#include <iostream>
#include <chrono>
void printstuff (){
for (int i = 0; i < 1000; ++i){
//empty loop
}
}
int main(int argc, const char * argv[]) {
auto time1 = std::chrono::high_resolution_clock::now();
printstuff();
auto time2 = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(time2 - time1).count() << std::endl;
return 0;
}
【问题讨论】:
-
如果你想测量时间,你应该测量最后没有优化掉的东西。
-
您能否详细说明“最后测量的东西没有被优化掉”?
-
就是答案。编译器删除空循环。这种检测的配置文件还有其他问题。使用 perf、papi 或 vtune(我认为现在免费)。