【问题标题】:Generalization of MPI rank number to MPI groups?将 MPI 等级数推广到 MPI 组?
【发布时间】:2012-04-25 21:30:09
【问题描述】:

有没有将等级编号推广到组编号?对于我的代码,我想创建 MPI::COMM_WORLD 的分层分解。假设我们使用 16 个线程。我使用 MPI::COMM_WORLD.Split 创建 4 个通信器,每个通信器有 4 个等级。现在是否有一个 MPI 函数可以为相应的四个组提供一些唯一的 id?

【问题讨论】:

    标签: mpi


    【解决方案1】:

    好吧,您仍然可以通过MPI_COMM_WORLD 中的原始等级来引用每个进程。您还可以通过MPI_Comm_split()colorkey 参数完全控制每个进程在其新通信器中接收的等级。这些信息足以创建旧等级和新组/等级之间的映射。

    【讨论】:

    • 你说得对,我添加到MPI_Comm_split() 的信息足以计算我要求的信息。但在 10.000 个内核的情况下做到这一点并非易事。这就是我询问是否支持直接在 MPI 基础上执行此操作的原因。
    • 对我来说似乎很简单。如果您有 N*M 个进程要拆分为 M 个 N 组,则每个进程调用 Split() 并使用 rank / N 颜色(以及可选的 rank % N 键)。这会将等级 0..N-1 放入第 0 组,将 N..2*N-1 放入第 1 组,依此类推,并保留每个组中进程的原始顺序。 j 组中等级为i 的进程是MPI_COMM_WORLD 中等级为j*N+i 的进程。
    【解决方案2】:

    如果您不喜欢@suszterpatt 的回答(我喜欢),您总是可以滥用笛卡尔通信器,并假装通信器中索引 (2,3) 处的进程是层次分解的第 2 组中的进程 3。

    但不要读到这篇文章并消除我推荐这种滥用的印象,这只是一个想法。

    【讨论】:

      猜你喜欢
      • 2014-02-06
      • 2013-09-27
      • 2017-04-26
      • 2018-05-20
      • 1970-01-01
      • 2021-06-05
      • 2013-12-12
      • 2014-05-07
      相关资源
      最近更新 更多