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