我得到了一个通讯器,如何获得该通讯器中所有处理器的等级?
我所能找到的就是如何获取给定通信器中的处理器数量,但是似乎没有一个函数来获得等级集合。
最佳答案
等级总是线性分配的。如果您的通信器的大小为p
,那么所有处理器的等级将为0, 1, 2, ..., p-1
。
如果您的通信器是MPI_COMM_WORLD的子通信器,那么将使用从0
到子通信器大小的等级重新标记处理器。
如果要查找子通信器的处理器的全局等级(在MPI_COMM_WORLD
中分配)。您必须使用MPI_Gather
或MPI_Allgather
,并将进程排名在MPI_COMM_WORLD
中:
// get global rank
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
// getting size of your communicator
int size;
MPI_Comm_size(your_comm, &size);
// all-gather global ranks
int * ranks = malloc(sizeof(int)*size);
MPI_Allgather(&rank, 1, MPI_INT, ranks, 1, MPI_INT, your_comm);
关于c++ - MPI:获取给定通信器中所有处理器的排名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29311526/