我是MPI的新手。我在Linux机器上使用MPICH2,其中包含以下信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 40
On-line CPU(s) list: 0-39
Thread(s) per core: 2
Core(s) per socket: 10
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 85
Model name: Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz
Stepping: 4
CPU MHz: 799.844
CPU max MHz: 3000.0000
CPU min MHz: 800.0000
BogoMIPS: 4400.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 1024K
L3 cache: 14080K
NUMA node0 CPU(s): 0-9,20-29
NUMA node1 CPU(s): 10-19,30-39
我的理解是我在这台机器上有2个节点,20个核心和40个线程(即处理器)。它是否正确?如果是的话,我想我应该设置MPICH来产生20个进程(每个物理核心上有一个进程),对吧?但是,当我运行命令mpiexec -n 20 MyProgram
时,平均CPU使用率仅为50%。如果我更改为mpiexec -n 40 MyProgram
,CPU使用率为100%,但整体性能实际上变差,所以我认为我可能过度指定。
答案 0 :(得分:0)
CPU使用率是一种误导性指标。 CPU使用率反映了在逻辑CPU上调度某些任务的时间部分。 CPU平均值就是所有逻辑核心的平均值。所以50%的CPU平均值只是意味着每个其他逻辑CPU都有100%的使用率(其他0%)。因此,在每个物理核心始终被利用的情况下,您会观察到这一点。
CPU使用率确实意味着资源利用率。有些工作负载可以从使用超线程中获益,而工作负载则不会。使用比物理内核更少的线程(例如,内存带宽有限)可以更快地实现工作负载。使用比逻辑CPU更多的线程可以更快地完成工作负载(例如,I / O延迟受限)。
始终使用您的效果指标(例如时间)来确定最佳配置。如果您想了解资源利用率,您必须查看许多不同的性能指标,周期,指令,内存带宽,缓存,....