我有通过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函数测量执行期间的时间,两个完全不同的东西.
你的过程似乎在等待某个地方时被阻止了.
Hri*_*iev 11
您观察到的是任何并行应用程序的完全有效结果 - 返回的所有线程的组合CPU时间clock()通常大于测量的挂钟时间,omp_get_wtime()除非您的应用程序主要是休眠或等待.