MPI 函数 MPI_Comm_split_type 中的 "int key" 参数是什么?

What is the "int key" argument in the MPI function MPI_Comm_split_type?

具体功能参考官方文档:

#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

如上面link所述,int key参数用于以下目的: 在每个子组中,进程按照参数键的值定义的顺序排名,并根据它们在旧组中的排名打破平局

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

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

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