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

时间:2012-05-20 13:16:19

标签: c openmp

我有通过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.

3 个答案:

答案 0 :(得分:16)

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

您的过程似乎在某个地方等待阻止。

答案 1 :(得分:9)

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

答案 2 :(得分:6)

clock()函数返回 CPU 时间,而不是 wall 时间。相反,请使用gettimeofday()