我使用此方法:Measure execution time in C (on Windows)来衡量所有线程的执行时间。我在Windows上,而且我使用的是VC ++。
这样的事情:
//initialize start, end, frequency
std::thread thread1(...);
// and so on I initialise all the threads
thread1.join();
//join all threads
//time = (start-end)/frequency
printf(time);
我多次运行它,我经常得到不同的执行时间。我喜欢30%的变化。(这意味着我得到的值在100到70之间)。我不明白为什么? 30%不是我的小变化。
由于
答案 0 :(得分:0)
许多事情都会影响执行时间,从系统负载到内存使用到星形对齐。您没有指定执行时间的顺序,但是对于较低的值,30%的偏差当然不是闻所未闻的。主要的好处是,执行时间本身基本上不会告诉我们系统。
答案 1 :(得分:0)
QueryPerformanceCounter
是一个系统范围的计数器,因此您的结果取决于系统负载和进程调度的详细信息。
您可以使用返回
的QueryProcessCycleTime
进程线程使用的CPU时钟周期数。该值包括在用户模式和内核模式下花费的周期。
您可以使用GetCurrentProcess
获取当前流程的句柄。