将特定 MPI 等级分组到单个处理单元
Group specific MPI ranks to a single processing unit
我有一个 MPI 应用程序(比方说 -np 6
),其中我提前知道 MPI 等级 0, 2,and 3
与等级 1, 4, and 5
相比在计算上非常轻,我想通过将等级 0, 2, and 3
固定到同一个物理处理单元来节省资源。然后将每个等级 1, 4, and 5
固定到它们自己的各个物理处理单元。
我知道 MPI 有很多种,语法也各不相同,但是我找不到任何东西可以实际规定各个等级的位置,而不仅仅是指定统一的 2 ppn 或类似的东西。但我必须想象这是可能的,我只是不确定它落在哪里,固定?捆绑?映射?等等
感谢您的帮助!
Open MPI 支持所谓的等级文件,这些文件指定每个等级到主机和该主机上的处理元素的映射。您可以在 man page for mpiexec
中看到更多内容(link 是 v2.1 的文档,例如 Ubuntu 18.04 LTS,但在新版本中也基本相同),但是假设你 运行 一台主机上的所有东西都至少有 4 CPU 个核心,rankfile 看起来像:
rank 0=hostname slot=0
rank 1=hostname slot=1
rank 2=hostname slot=0
rank 3=hostname slot=0
rank 4=hostname slot=2
rank 5=hostname slot=3
其中 hostname
是主机名,可能 localhost
。
这是一个例子:
首先,显示当前 MPI 等级的 CPU 亲和力的小实用程序脚本 show_affinity
:
#!/bin/bash
echo "$OMPI_COMM_WORLD_RANK: $(grep Cpus_allowed_list /proc/self/status)"
二、样例rankfile
:
rank 0=localhost slot=0
rank 1=localhost slot=1
rank 2=localhost slot=0
rank 3=localhost slot=0
rank 4=localhost slot=2
rank 5=localhost slot=3
MPI 使用该排名文件 show_affinity
启动:
$ mpiexec -H localhost -rf rankfile ./show_affinity
0: Cpus_allowed_list: 0-1
1: Cpus_allowed_list: 2-3
2: Cpus_allowed_list: 0-1
3: Cpus_allowed_list: 0-1
4: Cpus_allowed_list: 4-5
5: Cpus_allowed_list: 6-7
CPU 启用了超线程,因此每个等级都绑定到两个硬件线程。
我有一个 MPI 应用程序(比方说 -np 6
),其中我提前知道 MPI 等级 0, 2,and 3
与等级 1, 4, and 5
相比在计算上非常轻,我想通过将等级 0, 2, and 3
固定到同一个物理处理单元来节省资源。然后将每个等级 1, 4, and 5
固定到它们自己的各个物理处理单元。
我知道 MPI 有很多种,语法也各不相同,但是我找不到任何东西可以实际规定各个等级的位置,而不仅仅是指定统一的 2 ppn 或类似的东西。但我必须想象这是可能的,我只是不确定它落在哪里,固定?捆绑?映射?等等
感谢您的帮助!
Open MPI 支持所谓的等级文件,这些文件指定每个等级到主机和该主机上的处理元素的映射。您可以在 man page for mpiexec
中看到更多内容(link 是 v2.1 的文档,例如 Ubuntu 18.04 LTS,但在新版本中也基本相同),但是假设你 运行 一台主机上的所有东西都至少有 4 CPU 个核心,rankfile 看起来像:
rank 0=hostname slot=0
rank 1=hostname slot=1
rank 2=hostname slot=0
rank 3=hostname slot=0
rank 4=hostname slot=2
rank 5=hostname slot=3
其中 hostname
是主机名,可能 localhost
。
这是一个例子:
首先,显示当前 MPI 等级的 CPU 亲和力的小实用程序脚本 show_affinity
:
#!/bin/bash
echo "$OMPI_COMM_WORLD_RANK: $(grep Cpus_allowed_list /proc/self/status)"
二、样例rankfile
:
rank 0=localhost slot=0
rank 1=localhost slot=1
rank 2=localhost slot=0
rank 3=localhost slot=0
rank 4=localhost slot=2
rank 5=localhost slot=3
MPI 使用该排名文件 show_affinity
启动:
$ mpiexec -H localhost -rf rankfile ./show_affinity
0: Cpus_allowed_list: 0-1
1: Cpus_allowed_list: 2-3
2: Cpus_allowed_list: 0-1
3: Cpus_allowed_list: 0-1
4: Cpus_allowed_list: 4-5
5: Cpus_allowed_list: 6-7
CPU 启用了超线程,因此每个等级都绑定到两个硬件线程。