rit*_*ter 11 parallel-processing mpi openmpi
说,我使用MPI运行并行程序.执行命令
mpirun -n 8 -npernode 2 <prg>
Run Code Online (Sandbox Code Playgroud)
总共启动了8个流程.这是每个节点2个进程和总共4个节点.(OpenMPI 1.5).节点包含1个CPU(双核),节点之间的网络互连是InfiniBand.
现在,可以确定等级编号(或过程编号)
int myrank;
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
Run Code Online (Sandbox Code Playgroud)
这将返回0到7之间的数字.
但是,如何确定节点编号(在本例中为0到3之间的数字)和节点内的进程编号(0到1之间的编号)?
小智 11
我相信你可以用这种方式用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);
Run Code Online (Sandbox Code Playgroud)
Dav*_*id 9
这取决于MPI实现 - 并且没有针对此特定问题的标准.
Open MPI有一些可以提供帮助的环境变量.OMPI_COMM_WORLD_LOCAL_RANK将为您提供节点内的本地排名 - 即.这是您正在寻找的流程编号.因此,对getenv的调用将解决您的问题 - 但这不能移植到其他MPI实现.
有关Open MPI中(短)变量的列表,请参见http://icl.cs.utk.edu/open-mpi/faq/?category=running#mpi-environmental-variables.
我不知道相应的"节点号".