确定性地将 Open MPI 等级绑定到 NUMA 节点核心的输入

问题描述 投票:0回答:1

尝试将 Open MPI 等级绑定到 NUMA 节点计算机上的每个核心。 该机器有 2 个节点,每个节点有 12 个核心。 节点没有名称,所以我无法做到

--host a:12,b:12
另外,我想将额外的排名确定性地绑定到特定的核心上,超额订阅时如何做到这一点?

第一个问题是:如何将24个rank绑定到NUMA节点核心上?每个核心一个等级

mpirun -n 24 --bind-to numa --report-bindings ./app
这个命令将返回
There are not enough slots available in the system
,而如果我这样做
lscpu
,输出会显示
CPU(s): 24, NUMA node(s): 2

第二个问题是:如果我想在同一台 NUMA 机器上绑定 27 个Rank(超额订阅),如何确定性地进行? 当我想要超额订阅 3 个Rank 时,如何做到这一点,以便每次运行应用程序时,额外的 3 个Rank 始终绑定到相同的 3 个核心?

mpi openmpi
1个回答
0
投票

如何将24个rank绑定到NUMA节点核心上?每个核心一个等级

首先,正如 @Gilles 指出的:确保您的 24 个核心是实际的物理核心,而不是超线程。

最安全(也是最繁琐)的是将有序处理器列表提供给

mpirun
命令。 对你来说,那就是:

mpirun -np 24 --report-bindings --cpu-list 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 --bind-to cpu-list:ordered ./app

这使您可以完全控制在何处生成哪个进程,这在某些进程进行大量通信时非常有用。您可以确保它们从硬件角度彼此接近。或者您想避免使用某些核心,因为其他作业正在其上运行。

如果我想在同一台 NUMA 机器上绑定 27 个Rank(超额订阅),如何确定地做到这一点?

首先,这是生产代码中通常应该避免的事情。特别是对于代码,每个进程都执行相同的操作。它会降低你的效率,因为你的程序只能与最慢的核心一样快!

也就是说,您应该能够使用排名文件,进一步描述herehere

例如,假设您想在核心 0 上固定 4 个进程:

rankfile

rank 0=localhost slot=0:0
rank 1=localhost slot=0:0
rank 2=localhost slot=0:0
rank 3=localhost slot=0:0

然后

mpirun -np 4 --report-bindings -rf rankfile ./app
© www.soinside.com 2019 - 2024. All rights reserved.