C++:Linux中的时序(使用clock())不同步(由于OpenMP?)

Dem*_*Imp 1 c c++ time clock openmp

在程序的顶部和末尾,我使用clock()来计算程序完成所需的时间.不幸的是,它的报告时间似乎只有一半.我用"time"命令仔细检查了这一点.

我的计划报告:在45.86s完成

时间命令报告:实际0m22.837s用户0m45.735s sys 0m0.152s

使用我的手机定时,它在23秒完成(又名:"真实"时间)."用户"时间是所有线程的总和,因为我使用的是OpenMP.(你可以在这里阅读:'真实','用户'和'sys'在时间(1)的输出中是什么意思?)

那么,为什么clock()报告的是"用户"时间而不是"真实"时间?我应该使用不同的函数来计算程序运行的时间吗?

作为旁注,Windows的clock()按预期工作,并在"实际"时间内报告.

Dan*_*her 6

用户0m45.735s

clock() 根据7.27.2.1测量所用过程的CPU时间(尽可能好)

时钟函数返回实现对程序使用的处理器时间的最佳近似值,因为实现定义的时代开始仅与程序调用相关.

而不是挂钟时间.因此clock()报告接近报告正常和符合标准的user时间time.

要测量经过的时间,如果你可以假设POSIX,使用clock_gettime可能是最好的选择,标准函数time()也可以用于此,但不是非常细粒度.