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/10673732/

相关文章:

c++ - OpenMP 的缩放问题

c - 伪终端不打印输出

c++ - 编译成可执行文件

c++ - Openmp 结果不可靠?

c++ - 超线程如何影响并行化?

c++ - OpenMP 循环中的索引是否按升序处理?

c - 避免 CUDA 字符串搜索中的分支发散

c - 为什么写作是主要的;在C中给出一个段错误

c - 类似函数的宏和变量

c - 在 Code::Blocks 中运行 OpenMP