【问题标题】:What is the "int key" argument in the MPI function MPI_Comm_split_type?MPI 函数 MPI_Comm_split_type 中的“int key”参数是什么?
【发布时间】:2019-10-19 02:24:19
【问题描述】:

具体功能参考官方文档:

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

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

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

【问题讨论】:

  • 如果您想控制如何将坦克分配给新通信器中的 MPI 任务,请使用 key。如果您不需要/关心特定排名,则只需在所有排名上使用key=0

标签: c parallel-processing mpi hpc


【解决方案1】:

如 cmets 中所述,密钥用于确定进程在新通信器中的等级。最低的键被赋予等级 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),那么新通信器的大小将与旧通信器相同,但排名顺序将颠倒。

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多