【问题标题】:How many hops do the default implementations of MPI_Reduce and MPI_Allreduce take?MPI_Reduce 和 MPI_Allreduce 的默认实现需要多少跳?
【发布时间】:2023-03-21 20:59:01
【问题描述】:

我正在尝试计算在 MPI_Reduce 和 MPI_Allreduce 中通常会涉及多少个单独的并行“跳跃”阶段,以获得这些操作中涉及的最小延迟的大致数字。基本上假设消息非常小,因此延迟将占主导地位(?)

比如说,减少 100 个 MPI 进程。一个实现可能需要 99 个“延迟”:每个进程相互发送消息。另一种实现可以使每个进程向所有其他节点发送消息,并且只需要 1 量的“延迟”(虽然是的,无法真正想象它会这么简单:会有争用增加了这个)

【问题讨论】:

  • MPI 没有“默认实现”。在 Open MPI 的情况下,coll/tuned 组件(可能是默认组件)根据通信器和消息大小选择一种算法(在多个算法中)。
  • 典型的算法是基于树的,这意味着 P 进程的消息数量将缩放为 log2(P)。这是对天真的“发送给所有人”实现的巨大改进——即使在 1024 个进程上,您看到的消息也只有 1000 多条。MPI 将优化使用共享内存在节点上进行减少,因此有效延迟这里会少很多。在实践中,节点数量可能是最重要的因素。

标签: parallel-processing mpi


【解决方案1】:

为了完善@GillesGouaillardet 的好评,几个 MPI 实现使用基于动态/自动调整的方法。这是广泛使用的OpenMPI 和MPICH 实现的情况(假设它们配置正确)。选择的算法可能取决于几个因素(如您在研究论文中所见)。即使在您的特定情况下:例如,缓冲区大小也很重要。延迟并不总是限制因素,尤其是在节点很少的情况下。此外,网络拓扑(如胖树、超立方体、环面等)和节点的互连技术对延迟和吞吐量有显着影响。一个有效的实现必须考虑到这一点才能有效,主要是为了避免网络的争用。话虽如此,它们是可以在胖树/超立方体/蝴蝶网络(用于两种集体操作)上的log(n) 跃点(具有n 节点数)中执行此操作的算法。对于基于环面的网络,跳数受拓扑本身的限制,更具体地说,受环面的diameter 的限制,通常类似于O(n^(1/d))(d 的数量圆环的尺寸)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多