有人能解释并告诉我更多关于MPI_Comm_split通信器的信息吗?
MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,&my_row_comm);
这只是我通过阅读一些基本文档而遇到的一个例子。也许有人能告诉我这个通讯器是怎么工作的?
发布于 2016-04-11 06:15:42
首先,让我们看一下手册页:
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
分解为不相交的子通信器newcomm
。comm
的每个进程将成为这些子通信器中唯一的一个,因此输出newcomm
仅为一个通信器(对于当前进程)。但是,从全球范围来看,您必须了解newcomm
的许多版本都是不同的子通信器,对输入comm
进行分区。
这就是函数的作用。但它是如何做到的呢?
这就是两个参数color
和key
发挥作用的地方:
color
是一个整数值,它允许决定当前进程将落在哪个子通信器中。更具体地说,comm
的所有进程( color
将具有相同的数值)都将是同一个子通信器newcomm
的一部分。例如,如果要定义color = rank%2;
( rank
是comm
中进程的级别),那么您将创建(全局)两个新的通信器:一个用于奇数级别的进程,另一个用于偶数级别的进程。然而,请记住,每个过程只会看到其中一个新的沟通者,他们是.因此,总之,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
https://stackoverflow.com/questions/36532233
复制相似问题