为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
守候你守候我 2019-07-25 10:16:38
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();#endifcpu_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 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

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


查看完整回答
反对 回复 2019-07-25
?
慕森王

TA贡献1777条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-07-25
?
皈依舞

TA贡献1851条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 2232 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信