c - OpenMP time 和 clock() 给出了两个不同的结果

标签 c openmp

我有顺序代码可以通过 OpenMP 并行化。我已经放入了相应的编译指示并进行了测试。我通过检查主函数花费的时间来衡量性能增益。

奇怪的是通过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.

最佳答案

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

您的进程似乎在某处等待而被阻塞。

关于c - OpenMP time 和 clock() 给出了两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44509637/

相关文章:

c - 函数总是返回指向 null 的指针

c++ - 使用 Visual Studio 2013 的 OpenMP 性能下降

c++ - OpenMP:同时写入 std::map

c - posix 互斥锁没有按预期工作

c - 为什么这个小程序会导致无限循环?

android - 通过 native C 从 list 中读取 Android 权限

c - 无法弄清楚为什么 printf 在标准输出上打印不同

c - 在 OpenMP 中使用临界区

multithreading - Cython:使 prange 并行化线程安全

c#-4.0 - C# HPC - MPI 和 OpenMP