首页 > 解决方案 > MPI 函数 MPI_Comm_split_type 中的“int key”参数是什么?

问题描述

具体功能参考官方文档:

#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 key参数用于以下目的: 在每个子组中,进程按照参数 key 的值定义的顺序排列,根据它们在旧组中的排名打破平局

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

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

标签: cparallel-processingmpihpc

解决方案


如评论中所述,密钥用于确定新通信器中进程的等级。最低的键被赋予 0 级,次低的 1 级,依此类推。因此,我们在旧通信器中使用相同颜色的 3 个等级,这些等级提供 5、167 和 19 的键,提供 5 键的进程将在新通信器中具有 0 级,提供 19 的键将等级为 1,而提供 167 的将具有等级 2。通过保留原始通信器中的等级顺序来打破平局。因此,如果您简单地提供 0 键并让所有调用 MPI_Comm_split 的进程提供相同的颜色,这将产生一个新的通信器,其中的等级与旧的完全相同。作为最后一个例子,考虑一个大小为 nproc 的通信器,每个进程的等级为 my_rank。


推荐阅读