如何衡量程序是否 运行 在 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
更不具体,并且对于没有充分利用可用处理能力的并行程序也有同样的弱点。
我想知道我的程序是否 运行 在多个内核上并行运行。我可以获得 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
更不具体,并且对于没有充分利用可用处理能力的并行程序也有同样的弱点。