最小化海量数据的 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_Send
和MPI_Recv
操作来实现广播。
在这方面,为了更好地理解分层广播,我建议你看看这个 link
除此之外,您还可以使用 MPI 操作的异步(非阻塞)版本来提高传输大数据量的性能。
我在每个进程中制作大量数据,我需要通过 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_Send
和MPI_Recv
操作来实现广播。
在这方面,为了更好地理解分层广播,我建议你看看这个 link
除此之外,您还可以使用 MPI 操作的异步(非阻塞)版本来提高传输大数据量的性能。