OpenMP time和clock()计算两个不同的结果

OpenMP time和clock()计算两个不同的结果

我有通过OpenMP并行化的顺序代码。我已经放了相应的pragma并测试它。在测试时,我通过检查主要功能所花费的时间来解释性能提升。奇怪的是通过计算的经过时间cpu_time()omp_get_wtime()返回两个不同的结果。您认为原因是什么?

通过cpu_time()函数计算的经过时间与顺序时间类似。

在计算开始之前

ctime1_ = cpu_time();#ifdef _OPENMP
ctime1 = omp_get_wtime();#endif

计算结束后

ctime2_ = cpu_time();#ifdef _OPENMP
ctime2 = omp_get_wtime();#endif

cpu_time()函数定义

double cpu_time(void){
  double value;
  value = (double) clock () / (double) CLOCKS_PER_SEC;
  return value;}

打印结果

printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);

样本结果

7.009537 - 11.575277 seconds.


守候你守候我
浏览 2233回答 3
3回答

梵蒂冈之花

该clock功能测量CPU时间,主动在CPU上花费的时间,OMP功能测量执行期间的时间,两个完全不同的东西。你的过程似乎在等待某个地方时被阻止了。

慕森王

您观察到的是任何并行应用程序的完全有效结果 - 返回的所有线程的组合CPU时间clock()通常大于测量的挂钟时间,omp_get_wtime()除非您的应用程序主要是休眠或等待。

皈依舞

该clock()函数返回CPU时间,而不是停机时间。相反,使用gettimeofday()。
打开App,查看更多内容
随时随地看视频慕课网APP