c ++定时相同的循环给出不同的结果
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) then the function printstuff() is compiled to zero instructions, as you can see here: https://godbolt.org/z/gXq-mG
如果您没有使用任何优化标志,该循环仍然会执行得太快,您无法测量任何东西(您很可能是在测量噪音)。
如果你想对代码进行基准测试,我会推荐你 Google Benchmark
有人可以解释为什么 运行多次使用此代码会产生非常多变的结果吗? 除非我做错了什么,否则它应该测量我的系统(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) then the function printstuff() is compiled to zero instructions, as you can see here: https://godbolt.org/z/gXq-mG
如果您没有使用任何优化标志,该循环仍然会执行得太快,您无法测量任何东西(您很可能是在测量噪音)。
如果你想对代码进行基准测试,我会推荐你 Google Benchmark