メモリ共有するプロセス間では共有メモリを使いたい場合、メモリ共有するノードだけでグループを作りたい場合などがある。
MPI ver3 以降なら、MPI_Comm_split_type で、メモリ共有するプロセスだけでcommを分けることができる。
#include <mpi.h>
#include <stdio.h>
int main(int argc,char **argv)
{
MPI_Init(&argc, &argv);
MPI_Comm shared_nodes;
int all_rank;
MPI_Comm_rank(MPI_COMM_WORLD, &all_rank);
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &shared_nodes);
int shm_rank;
MPI_Comm_rank(shared_nodes, &shm_rank);
int shm_head_rank = all_rank;
MPI_Bcast(&shm_head_rank, 1, MPI_INT, 0, shared_nodes);
if (shm_head_rank == all_rank) {
printf("all_rank=%d, head_rank=%d, in_shm_rank=%d (HEAD)\n",
all_rank, shm_head_rank, shm_rank);
} else {
printf("all_rank=%d, head_rank=%d, in_shm_rank=%d\n",
all_rank, shm_head_rank, shm_rank);
}
MPI_Comm_free(&shared_nodes);
MPI_Finalize();
}