我在Linux上测量排序算法的CPU时间和墙钟时间。我使用getrusage
来测量CPU时间,使用clock_gettime CLOCK_MONOTONIC
获取墙钟时间。虽然我注意到CPU时间比墙钟时间长 - 这是正确的吗?我一直认为CPU时间必须小于墙钟时间。我的示例结果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
我在Linux上测量排序算法的CPU时间和墙钟时间。我使用getrusage
来测量CPU时间,使用clock_gettime CLOCK_MONOTONIC
获取墙钟时间。虽然我注意到CPU时间比墙钟时间长 - 这是正确的吗?我一直认为CPU时间必须小于墙钟时间。我的示例结果:
3.000187 seconds [CPU]
3.000001 seconds [WALL]
如果一项计算需要两秒的处理器时间,那么两个处理器可以在一秒钟内(理论上)完成它。因此,一个双处理器系统每秒钟有两个 CPU 秒。即使你的进程没有明确使用多线程,你所使用的库或操作系统可能会使用多个处理器来为你的进程执行工作。
此外,一些计算是近似的。系统可能会以一些小单位(比如微秒)来跟踪处理器时间,并且每当进程获得至少半个微秒的处理器时间时,就会向进程收取一个微秒的费用。(这应该是给所有回答浮点数问题建议使用整数算术以避免舍入误差的人一个教训。所有离散算术都可能存在舍入误差。)
getrusage
可能会返回进程中所有线程的 CPU 时间总和。如果您有多个线程,则这可能导致 CPU 时间高于墙钟时间。getrusage(RUSAGE_SELF, &rus)
,并且只有一个线程:(int main(){//...}
) - mazixgetrusage
的精度有限。您可以尝试多次运行程序以查看两个值的变化情况。 - Benawii
cat /proc/cpuinfo | grep processor | wc -l
告诉我有 2 个处理器。 - mazix