我在linux上测量排序算法的cpu时间和挂起时间。我使用getrusage
来衡量一个cpu时间,使用clock_gettime CLOCK_MONOTONIC
来计算一个时间。虽然我注意到cpu时间比壁时间大 - 这是正确的吗?我一直认为cpu时间必须小于壁时间。我的例子结果如下:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
答案 0 :(得分:7)
如果计算需要两秒的处理器时间,那么两个处理器可以(理想情况下)在一秒钟内完成它。因此,双处理器系统对于每个挂钟时钟具有两个CPU秒。即使您没有在流程中明确使用多线程,您使用的库或操作系统也可能使用多个处理器来为您的流程执行工作。
此外,一些会计是近似的。系统可能会以某个小单位跟踪处理器时间,例如以参数为目的的微秒,并在进程收到至少半微秒的处理器时间的任何时候向进程充电一微秒。 (这应该是所有回答浮点问题的人的教训,建议使用整数运算来避免舍入误差。所有离散算法都可能有舍入错误。)
答案 1 :(得分:1)
根据您使用的参数,getrusage
可能会返回进程中所有线程的CPU时间总和。如果您有多个线程,则可能导致CPU时间高于挂钟时间。
此外,虽然结果结构以微秒为单位存储值,但实际精度可能远低于此值,因此差异很小。