首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MPI_Comm_split解释

MPI_Comm_split解释
EN

Stack Overflow用户
提问于 2016-04-10 16:16:57
回答 1查看 5.9K关注 0票数 6

有人能解释并告诉我更多关于MPI_Comm_split通信器的信息吗?

代码语言:javascript
运行
复制
MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,&my_row_comm);

这只是我通过阅读一些基本文档而遇到的一个例子。也许有人能告诉我这个通讯器是怎么工作的?

EN

回答 1

Stack Overflow用户

发布于 2016-04-11 06:15:42

首先,让我们看一下手册页:

代码语言:javascript
运行
复制
MPI_Comm_split(3)                     MPI                    MPI_Comm_split(3)

NAME
       MPI_Comm_split -  Creates new communicators based on colors and keys

SYNOPSIS
       int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)

INPUT PARAMETERS
       comm   - communicator (handle)
       color  - control of subset assignment (nonnegative integer).  Processes
              with the same color are in the same new communicator
       key    - control of rank assignment (integer)

OUTPUT PARAMETERS
       newcomm
              - new communicator (handle)

那又能做些什么呢?

嗯,顾名思义,它将把通信器comm分解为不相交的子通信器newcommcomm的每个进程将成为这些子通信器中唯一的一个,因此输出newcomm仅为一个通信器(对于当前进程)。但是,从全球范围来看,您必须了解newcomm的许多版本都是不同的子通信器,对输入comm进行分区。

这就是函数的作用。但它是如何做到的呢?

这就是两个参数colorkey发挥作用的地方:

  • color是一个整数值,它允许决定当前进程将落在哪个子通信器中。更具体地说,comm的所有进程( color将具有相同的数值)都将是同一个子通信器newcomm的一部分。例如,如果要定义color = rank%2; ( rankcomm中进程的级别),那么您将创建(全局)两个新的通信器:一个用于奇数级别的进程,另一个用于偶数级别的进程。然而,请记住,每个过程只会看到其中一个新的沟通者,他们是.因此,总之,color允许区分您将创建的各种“球队”,就像球衣足球队在比赛中穿的颜色一样(因此,我猜是这样命名的)。
  • key将允许随意决定如何将流程排序到它们所属的新的通信器中。例如,如果您设置了key = rank;,那么在每个新的通信器newcomm中,排名的 order (而不是排名本身)将遵循原始通信器comm中的排序顺序。但是如果您不关心排序,那么您可以设置key=0;,并且在每个新的通信器中的排名将由库决定.

最后,有两个简单的例子:

  • MPI_Comm_split(comm, 0, rank, &newcomm)只会将comm复制到newcomm (就像MPI_Comm_dup()一样)。
  • MPI_Comm_split(comm, rank, rank, &newcomm)只会为每个进程返回等价的MPI_COMM_SELF
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36532233

复制
相关文章

相似问题

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