多线程环境中的执行时间

时间:2015-07-09 08:42:24

标签: c++ multithreading

我正在尝试测量多线程程序的执行时间。我在主程序中使用这段代码来计算时间:

clock_t startTime = clock();
//do stuff
clock_t stopTime = clock();
float secsElapsed = (float)(stopTime  - startTime)/CLOCKS_PER_SEC;

现在问题是: 例如,我用4个线程运行我的程序(每个线程在一个核心上运行), 执行时间是21.39。我在运行时检查我的系统监视器,执行时间约为5.3。

似乎实际执行时间乘以THREADS的数量。

问题是什么?

1 个答案:

答案 0 :(得分:8)

这是因为您正在监视CPU time,这是CPU执行代码所花费的累计时间,而不是Wall time,即startTimestopTime之间的实际时间。 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);