如何衡量程序是否 运行 在 Linux 中的多个内核上并行?

How to measure if a program was run in parallel over multiple cores in Linux?

我想知道我的程序是否 运行 在多个内核上并行运行。我可以获得 perf 工具来报告计算中使用了多少个内核,但如果它们被同时使用 (并行).

如何做到这一点?

您可以尝试使用命令 top 在另一个终端,而程序是 运行。它将显示您机器上所有内核的使用情况。

一些可能的解决方案:

  • 在另一个终端上使用 htop,因为您的程序正在执行。 htop 分别显示每个 CPU 的负载,因此在一个空闲的系统上,您可以判断是否有多个核心参与执行您的程序。

    它还能够单独显示每个线程,并且汇总一个程序的整体 CPU 使用情况,这意味着并行程序通常会显示 CPU 使用百分比超过 100%。

  • 使用 time 命令或 shell 内置命令执行您的程序。例如,在我的系统 bash 下:

    $ dd if=/dev/zero bs=1M count=100 2>/dev/null | time -p xz -T0 > dev/null
    real 0.85
    user 2.74
    sys 0.14
    

    很明显,总 CPU 时间 (user+sys) 明显高于经过的挂钟时间 (real)。这表明并行使用多个内核。但是请记住,一个效率低下或 I/O-bound 的程序可能具有较低的整体 CPU 使用率 尽管 同时使用多个内核。

  • 使用 top 并监控 CPU 使用百分比。这种方法比 time 更不具体,并且对于没有充分利用可用处理能力的并行程序也有同样的弱点。