如何确定套接字/节点本地的MPI等级/进程号
比如说,我使用MPI运行一个并行程序。执行命令如何确定套接字/节点本地的MPI等级/进程号,mpi,parallel-processing,openmpi,Mpi,Parallel Processing,Openmpi,比如说,我使用MPI运行一个并行程序。执行命令 mpirun -n 8 -npernode 2 <prg> 这将返回一个介于0和7之间的数字 但是,如何确定节点编号(在本例中是介于0和3之间的编号)和节点内的进程编号(介于0和1之间的编号)?这取决于MPI实现-对于此特定问题没有标准 OpenMPI有一些环境变量可以提供帮助。OMPI_COMM_WORLD_LOCAL_RANK将为您提供节点内的本地排名-即,这是您正在查找的进程编号。因此,对getenv的调用将回答您的问题,但这不
mpirun -n 8 -npernode 2 <prg>
这将返回一个介于0和7之间的数字
但是,如何确定节点编号(在本例中是介于0和3之间的编号)和节点内的进程编号(介于0和1之间的编号)?这取决于MPI实现-对于此特定问题没有标准 OpenMPI有一些环境变量可以提供帮助。OMPI_COMM_WORLD_LOCAL_RANK将为您提供节点内的本地排名-即,这是您正在查找的进程编号。因此,对getenv的调用将回答您的问题,但这不能移植到其他MPI实现中 有关OpenMPI中变量的(简短)列表,请参阅
我不知道对应的“节点号”。这个确切的问题在Markus Wittmann的博客上讨论过 建议采取三种策略:
对于某些工作代码(可能是LGPL许可的?),Wittmann从链接到。我相信您可以通过以下方式使用MPI-3实现:
MPI_Comm shmcomm;
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0,
MPI_INFO_NULL, &shmcomm);
int shmrank;
MPI_Comm_rank(shmcomm, &shmrank);
或者,您可以使用
int-MPI\u-Get\u处理器名称(char*name,int*resultlen)
若要检索节点名称,请在中将其用作颜色
int-MPI\u-Comm-split(MPI\u-Comm-Comm,int-color,int-key,MPI\u-Comm*newcomm)
这并不像
MPI\u Comm\u split\u type
那么简单,但是它提供了更多的自由来按照您想要的方式拆分您的通讯器。很好地解释了MPI\u Comm\u split\u type的功能。谢谢您的回答。粘贴的链接已断开。我发现这个链接很有效
MPI_Comm shmcomm;
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0,
MPI_INFO_NULL, &shmcomm);
int shmrank;
MPI_Comm_rank(shmcomm, &shmrank);