我有一个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
中看到更多信息(链接是v2.1随附的文档,例如Ubuntu 18.04 LTS,但在新版本中也基本相同),但是假设您可以使用at在单个主机上运行所有内容至少4个CPU内核,rankfile将类似于:
mpiexec
其中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
使用该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
CPU启用了超线程,因此每个等级都绑定到两个硬件线程。