【发布时间】:2021-05-24 04:41:46
【问题描述】:
我在每个流程中制作大量数据,我需要通过 MPI 广播在流程之间共享这些数据,
我怎样才能最小化成本,或者有什么算法可以通过 MPI 在进程之间广播海量数据?
【问题讨论】:
标签: c++ c parallel-processing mpi broadcast
我在每个流程中制作大量数据,我需要通过 MPI 广播在流程之间共享这些数据,
我怎样才能最小化成本,或者有什么算法可以通过 MPI 在进程之间广播海量数据?
【问题讨论】:
标签: c++ c parallel-processing mpi broadcast
我怎样才能将成本降到最低,或者是否有任何广播算法 MPI 处理进程间的海量数据?
请记住MPI_Bcast:
在广播期间,一个进程向所有进程发送相同的数据 在通讯器中。
如果这是您想要的,您将不得不依赖底层硬件,并且您正在使用的 MPI 标准的实现可以有效地实现 MPI_Bcast 例程。甚至可能发生(取决于您的实现)MPI_Reduce is actually faster than MPI_Bcast。不过,在某些实现中,例如 Open MPI,您可以使用标志进一步调整 MPI_Bcast 使用的算法
--mca coll_tuned_use_dynamic_rules 1 --mca coll_tuned_bcast_algorithm 4
另一种选择是尝试使用非阻塞版本的 MPI 广播,即MPI_Ibcast:
将消息从具有“root”等级的进程广播到所有其他进程 通信器以非阻塞方式处理进程
您可以尝试将计算与通信重叠。尽管如此,该计算不应修改 MPI 例程使用的缓冲区(有关原因的更多信息,请参见 here)。
【讨论】:
根据您的网络拓扑,您可以使用技术来最大限度地减少发送大型消息的延迟。例如,如果您的拓扑是分层拓扑,您可以通过多个MPI_Send 和MPI_Recv 操作来实现广播。
在这方面以及为了更好地理解分层广播,我建议你看看这个link
除此之外,您还可以使用 MPI 操作的异步(非阻塞)版本来提高传输大数据量的性能。
【讨论】: