我有顺序代码可以通过 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/