【发布时间】: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 将优化使用共享内存在节点上进行减少,因此有效延迟这里会少很多。在实践中,节点数量可能是最重要的因素。