特定于组的MPI排名到单个处理单元

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

我有一个MPI应用程序(比如说-np 6),在该应用程序中,我提前知道MPI等级0, 2,and 3与等级1, 4, and 5相比在计算上非常轻巧,我想通过将等级0, 2, and 3固定到相同的物理处理单元。然后,将引脚1, 4, and 5分别分配给各自的物理处理单元。

我知道有很多MPI风格,语法也有所不同,但是我找不到任何实际决定各个等级位置的东西,而不仅仅是指定统一的2 ppn或类似的东西。但是我必须想象这是可能的,我只是不确定它会落在哪里,固定吗?捆绑?映射?等等

感谢您的帮助!

binding mapping mpi openmpi pinning
1个回答
1
投票

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启用了超线程,因此每个等级都绑定到两个硬件线程。

© www.soinside.com 2019 - 2024. All rights reserved.