最小化海量数据的 MPI 广播

Minimising the MPI broadcast for massive data

我在每个进程中制作大量数据,我需要通过 MPI 广播在进程之间共享这些数据,

如何才能最小化成本,或者有什么算法可以通过MPI在进程之间广播海量数据?

How can I minimise the cost or is there any algorithm for broadcasting the massive data between processes by MPI?

请记住 MPI_Bcast:

During a broadcast, one process sends the same data to all processes in a communicator.

如果那是您想要的,您将不得不依赖底层硬件,并且您正在使用的 MPI 标准的实现实现了 MPI_Bcast routine efficiently. It might even happen that (depending upon your implementation) 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:

Broadcasts a message from the process with rank "root" to all other processes of the communicator in a nonblocking way

您可以尝试将计算与通信重叠。尽管如此,该计算不应修改 MPI 例程使用的缓冲区(有关原因的更多信息,请参阅 )。

根据您的网络拓扑,您可以使用技术来最大限度地减少发送大消息的延迟。例如,如果你的拓扑结构是层次结构的,你可以通过多个MPI_SendMPI_Recv操作来实现广播。 在这方面,为了更好地理解分层广播,我建议你看看这个 link

除此之外,您还可以使用 MPI 操作的异步(非阻塞)版本来提高传输大数据量的性能。