每当我尝试比较两个竞争算法(使用C ++)的执行时间时,我会像以前在这个问题中建议的那样使用std::chrono
:Measuring execution time of a function in C++
但是,我始终注意到所比较的算法的执行顺序会显着影响执行时间。它甚至经常改变哪种竞争算法被认为是最快的。例如,假设我有两个算法algo1
和algo2
。
我的意思是下面的代码:
std::chrono::high_resolution_clock::time_point start0, start1;
std::chrono::high_resolution_clock::time_point end0, end1;
start1 = std::chrono::high_resolution_clock::now();
algo1();
end1 = std::chrono::high_resolution_clock::now();
start2 = std::chrono::high_resolution_clock::now();
algo2();
end2 = std::chrono::high_resolution_clock::now();
auto time_elapsed1 = std::chrono::duration_cast<std::chrono::nanoseconds>(end1 - start1).count();
auto time_elapsed2 = std::chrono::duration_cast<std::chrono::nanoseconds>(end2 - start2).count();
从下面的代码中得到不同的结果:
std::chrono::high_resolution_clock::time_point start0, start1;
std::chrono::high_resolution_clock::time_point end0, end1;
start2 = std::chrono::high_resolution_clock::now();
algo2();
end2 = std::chrono::high_resolution_clock::now();
start1 = std::chrono::high_resolution_clock::now();
algo1();
end1 = std::chrono::high_resolution_clock::now();
auto time_elapsed1 = std::chrono::duration_cast<std::chrono::nanoseconds>(end1 - start1).count();
auto time_elapsed2 = std::chrono::duration_cast<std::chrono::nanoseconds>(end2 - start2).count();
对于我可能想要比较的几乎所有算法1和2而言。
所以,我的问题是双重的:1)为什么会这样,即为什么订单很重要? 2)是否有更好的方法来比较两种算法的执行时间,即如何进行更好和更准确的比较呢?
PS:当然,我总是在测试所有编译器&#39;优化。