有人可以解释并告诉我更多有关MPI_Comm_split传播器的信息吗?
MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,&my_row_comm);
Run Code Online (Sandbox Code Playgroud)
这只是我通过阅读一些基本文档遇到的示例。也许有人可以告诉我此沟通工具的工作方式?
首先,让我们看一下手册页:
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)
Run Code Online (Sandbox Code Playgroud)
那怎么办?
嗯,顾名思义,它将把传播者comm分解为不相交的子传播者newcomm。的每个过程都comm将成为这些子通信newcomm器中唯一的一个,因此输出(对于当前过程)只有一个通信器这一事实。但是,从全球范围来看,您必须了解的许多版本newcomm是不同的子通信器,对输入进行了划分comm。
这就是函数的作用。但是它是如何做到的呢?
那么,这其中的两个参数color,并key开始发挥作用:
color是一个整数值,可用来确定当前进程将落入哪个子通信器中。更具体地,comm其color具有相同数值的所有过程将是相同子通信器的一部分newcomm。例如,如果要定义color = rank%2;(rank进程的等级在中comm),则将创建(全局)两个新的传播者:一个用于奇数等级的过程,另一个用于偶数等级的过程。但是,请记住,每个流程只会看到它们属于其中的一部分新沟通者。因此,总之,color 允许区分您将创建的各个“团队”,例如在比赛期间穿球衣球衣的颜色以区分自己(因此我假设使用的命名)。key将仅允许选择决定如何将流程归入它们所属的新通信器中。例如,如果您设置key = rank;,则每个新沟通者中的排名顺序(而不是排名本身)newcomm将遵循原始沟通者中的排名顺序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为每个流程返回等价的