OpenMP时间和时钟()计算两个不同的结果

我有顺序代码通过OpenMP并行化。 我已经把相应的编译指示和testing。 在testing时,我通过检查在主函数中花费的时间来解释性能增益。 奇怪的是通过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函数测量执行过程中的时间,这两个完全不同的东西。

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

你观察到的是任何并行应用程序的完全有效的结果 – clock()返回的所有线程的CPU时间总和大于omp_get_wtime()测量的omp_get_wtime() 时间 ,除非应用程序大多在睡眠或等待。

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