MPI函数MPI_Comm_split_type中的“ int键”自变量是什么?

时间:2019-06-03 13:58:36

标签: c parallel-processing mpi hpc

参考特定功能的官方文档:

#include <mpi.h>
int MPI_Comm_split_type(MPI_Comm comm, int split_type, int key,
    MPI_Info info, MPI_Comm *newcomm)

从这里: https://www.open-mpi.org/doc/v3.0/man3/MPI_Comm_split_type.3.php

如上面的链接所述, int键参数用于以下目的: 在每个子组中,进程均按参数键的值定义的顺序进行排序,并根据其在旧组中的排名断开联系

我不太确定我是否理解它,因此我的问题是:

键下的值是否将成为新通信器中每个进程的新等级值? 我是否需要以这种方式显式传递每个进程的等级/ ID?

1 个答案:

答案 0 :(得分:0)

如注释中所述,该键用于确定新通信器中进程的等级。最低的键被指定为零等级,第二低的键被指定为1,依此类推。因此,在旧的通信器中,我们有3个等级使用相同的颜色,并且这些等级提供了5、167和19的键,提供5的键的进程将在新的通信器中具有0的等级,而提供19的键将拥有等级1,而提供167则具有等级2。通过像原始传播者中那样保留等级顺序来打破联系。因此,如果您仅提供键0,并让所有调用MPI_Comm_split的进程提供相同的颜色,这将产生一个新的通讯器,其等级与旧的等级完全相同。作为最后一个示例,考虑一个大小为nproc的通信器,每个进程的等级为my_rank。如果随后在每个进程提供相同颜色的情况下调用MPI_Comm_split,并且密钥为(nproc-my_rank),则新的通信器将具有与旧的通信器相同的大小,但是等级的顺序将颠倒。