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

mer*_*ert 11 c openmp

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

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

在计算开始之前

ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
Run Code Online (Sandbox Code Playgroud)

计算结束后

ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
Run Code Online (Sandbox Code Playgroud)

cpu_time()函数定义

double cpu_time(void)
{
  double value;
  value = (double) clock () / (double) CLOCKS_PER_SEC;
  return value;
}
Run Code Online (Sandbox Code Playgroud)

打印结果

printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
Run Code Online (Sandbox Code Playgroud)

样本结果

7.009537 - 11.575277 seconds.
Run Code Online (Sandbox Code Playgroud)

Jen*_*edt 18

clock函数测量CPU时间,主动在CPU上花费的时间,OMP函数测量执行期间的时间,两个完全不同的东西.

你的过程似乎在等待某个地方时被阻止了.

  • 在Windows上,`clock()`实际上测量了挂起时间. (8认同)
  • @Mysticial,再次,他们似乎遵循自己的心情,而不是标准.标准说:*时钟函数返回实现对程序使用的处理器时间的最佳近似值,因为实现定义的时代开始仅与程序调用有关.* (3认同)

Hri*_*iev 11

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


chr*_*ock 6

clock()函数返回CPU时间,而不是停机时间.相反,使用gettimeofday().