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()
。