多线程环境下的执行时间
execution time in multithreading environment
我正在尝试测量多线程程序的执行时间。我在主程序中使用了这段代码来计算时间:
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执行代码所花费的累积时间,而不是墙时间,这是您的startTime
和stopTime
之间经过的实际时间。
返回程序所消耗的处理器时间。
如果你做数学: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 !
相关文章:
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 在Qt中设置pixmap时的执行时间很奇怪
- 异步控制线程执行时间
- 如何对 g++ 设置执行时间限制?
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 多线程环境下的执行时间