多线程环境下的执行时间

execution time in multithreading environment

本文关键字:执行时间 环境 多线程      更新时间:2023-10-16

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

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

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

似乎实际执行时间乘以线程数。

有什么问题吗?

这是因为您正在监视CPU时间,这是CPU执行代码所花费的累积时间,而不是墙时间,这是您的startTimestopTime之间经过的实际时间。

返回程序所消耗的处理器时间。

如果你做数学:5.3 * 4 = 21.2,这是你得到的意思,你有良好的多线程代码与4的加速。

因此,要测量墙时间,您应该使用std::chrono::high_resolution_clock,例如,您应该返回5.3。您也可以使用经典的gettimeofday()

如果你使用OpenMP多线程,你也有omp_get_wtime()

double startTime = omp_get_wtime();
// do stuff
double stopTime = omp_get_wtime();
double secsElapsed = stopTime - startTime; // that's all !