首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPI:获取给定通信器中所有处理器的级别

MPI:获取给定通信器中所有处理器的级别
EN

Stack Overflow用户
提问于 2015-03-27 22:58:53
回答 2查看 5.1K关注 0票数 2

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-28 00:02:44

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

如果您的通信器是MPI_COMM_WORLD的子通信器,那么处理器将按照从0到子通信器大小的等级重新命名。

如果您正在寻找您的子通信器处理器的全局级别(如MPI_COMM_WORLD中所指定的)。您必须使用MPI_GatherMPI_Allgather,其进程级别在MPI_COMM_WORLD

代码语言:javascript
运行
复制
// 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);
票数 3
EN

Stack Overflow用户

发布于 2018-03-15 11:38:12

再加上帕特里克的回答:

要获得从comm_1到comm_2的进程级别,或者相反,您可以首先提取底层MPI_Group,然后使用军衔

代码语言:javascript
运行
复制
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中的相应级别。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29311526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档