[英]c++ timing same loop gives different results
有人可以解释为什么多次运行此代码会产生非常可变的结果吗? 除非我做错了什么,否则它应该衡量我的系统(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;
}
您如何编译该代码? 您正在使用哪些标志?
如果您正在使用任何级别的优化(使用其中一个优化标志,请参见例如: https ://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html for gcc),则将编译函数printstuff()零指令,如您在此处看到的: https : //godbolt.org/z/gXq-mG
如果您没有使用任何优化标志,则该循环仍将执行得太快,以至于您无法测量任何东西(您很有可能正在测量噪声)。
如果您想对代码进行基准测试,建议您使用Google Benchmark
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.