gpt4 book ai didi

c++ - MPI_Comm_split 解释

转载 作者:太空狗 更新时间:2023-10-29 20:10:50 24 4
gpt4 key购买 nike

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

MPI_Comm_split(MPI_COMM_WORLD, my_row, my_rank,&my_row_comm);

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

最佳答案

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

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 拆分为 disjoint 子通信器 newcommcomm 的每个进程都将进入这些子通信器中的一个,因此输出 newcomm 只是一个单独的通信器(对于当前进程)。但是,从全局来看,您必须了解 newcomm 的多个版本是不同的子通信器,对输入的 comm 进行分区。

这就是函数的作用。但它是如何做到的呢?
嗯,这就是两个参数 colorkey 发挥作用的地方:

  • color 是一个整数值,允许决定当前进程将落入哪个子通信器。更具体地说,所有 commcolor 将具有相同数值的进程将是同一子通信器 newcomm 的一部分。例如,如果您要定义 color = rank%2;(其中 rankcomm 中进程的等级),那么您将创建(全局)两个新的通信器:一个用于奇数等级的过程,一个用于偶数等级的过程。但是,请记住,每个进程只会看到它们所属的这些新通信器中的一个……所以总而言之,color 允许区分您将创建的各种“团队”,就像足球队在比赛中会穿上 Jersey 的颜色来区分自己(我想这就是这个名字的由来)。
  • 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

关于c++ - MPI_Comm_split 解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36532233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com