我正在尝试测量多线程程序的执行时间。我在主程序中使用这段代码来计算时间:
clock_t startTime = clock();
//do stuff
clock_t stopTime = clock();
float secsElapsed = (float)(stopTime - startTime)/CLOCKS_PER_SEC;
现在问题是: 例如,我用4个线程运行我的程序(每个线程在一个核心上运行), 执行时间是21.39。我在运行时检查我的系统监视器,执行时间约为5.3。
似乎实际执行时间乘以THREADS的数量。
问题是什么?
答案 0 :(得分:8)
这是因为您正在监视CPU time,这是CPU执行代码所花费的累计时间,而不是Wall time,即startTime
和stopTime
之间的实际时间。 5.3 * 4 = 21.2
。
确实clock_t:
返回程序消耗的处理器时间。
如果你做数学:4
这就是你所获得的意思,你有一个好的多线程代码,加速为5.3
。
因此,为了衡量待机时间,您应该使用std::chrono::high_resolution_clock,例如,您应该返回gettimeofday()
。您还可以使用经典double startTime = omp_get_wtime();
// do stuff
double stopTime = omp_get_wtime();
double secsElapsed = stopTime - startTime; // that's all !
。
如果您使用OpenMP进行多线程处理,您还有omp_get_wtime()
passParams(10, NULL, 1);