我在linux上测量排序算法的cpu时间和wall time。我getrusage
用来测量 cpu 时间并clock_gettime CLOCK_MONOTONIC
获得挂墙时间。虽然我注意到 CPU 时间比挂墙时间大 - 对吗?我一直认为cpu时间必须小于wall time。我的示例结果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
我在linux上测量排序算法的cpu时间和wall time。我getrusage
用来测量 cpu 时间并clock_gettime CLOCK_MONOTONIC
获得挂墙时间。虽然我注意到 CPU 时间比挂墙时间大 - 对吗?我一直认为cpu时间必须小于wall time。我的示例结果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
如果计算需要两秒的处理器时间,那么两个处理器可以(理想情况下)在一秒内完成它。因此,双处理器系统每挂钟秒有两个 CPU 秒。即使您没有在进程中显式使用多线程,您使用的库或操作系统也可能使用多个处理器来为您的进程执行工作。
此外,一些会计是近似的。系统可能会以某个小单位跟踪处理器时间,例如出于论证目的的微秒,并在进程收到至少半微秒的处理器时间时对进程收取微秒的费用。(对于所有回答浮点问题并建议使用整数算术以避免舍入错误的人来说,这应该是一个教训。所有离散算术都可能存在舍入错误。)
Depending on the argument you use, getrusage
may return the sum of CPU time across all threads in your process. If you have more than one thread this can cause the CPU time to be higher than the wall clock time.
Also, while the result structure stores the values in microseconds, the actual precision may be much lower than that, hence the small discrepancy.