我得到了一个通讯器,如何获得该通讯器中所有处理器的等级?

我所能找到的就是如何获取给定通信器中的处理器数量,但是似乎没有一个函数来获得等级集合。

最佳答案

等级总是线性分配的。如果您的通信器的大小为p,那么所有处理器的等级将为0, 1, 2, ..., p-1

如果您的通信器是MPI_COMM_WORLD的子通信器,那么将使用从0到子通信器大小的等级重新标记处理器。

如果要查找子通信器的处理器的全局等级(在MPI_COMM_WORLD中分配)。您必须使用MPI_GatherMPI_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/

10-10 08:50