我得到了一个通信器,我如何获得该通信器中所有处理器的级别?
我所能找到的就是如何在给定的通信器中获取处理器的数量,但是似乎没有一个函数可以得到一个级别的集合。
发布于 2015-03-28 00:02:44
职级总是线性分配的。如果通信器的大小为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);
发布于 2018-03-15 11:38:12
再加上帕特里克的回答:
要获得从comm_1到comm_2的进程级别,或者相反,您可以首先提取底层MPI_Group
,然后使用军衔
MPI_Comm comm = MPI_COMM_WORLD;
MPI_Comm my_comm;
int n;
MPI_Comm_size(comm, &n);
int rank1[n] = {0,1,2,3,...}
int rank2[n];
// Some Code
MPI_Group world_group;
MPI_Group my_comm_group;
MPI_Comm_group(comm, &world_group);
MPI_Comm_group(my_comm, &my_comm_group);
MPI_Group_translate_ranks(world_group, n, rank1, my_comm_group, rank2);
您将得到数组rank1在数组rank2中的相应级别。
https://stackoverflow.com/questions/29311526
复制相似问题