C++ 最大限度地减少海量数据的MPI广播

C++ 最大限度地减少海量数据的MPI广播,c++,c,parallel-processing,mpi,broadcast,C++,C,Parallel Processing,Mpi,Broadcast,我在每个流程中生成大量数据,我需要通过MPI broad casting在流程之间共享这些数据 如何将成本降至最低,或者是否有任何算法可以通过MPI在进程之间广播海量数据 我怎样才能最大限度地降低成本,或者是否有广播算法 通过MPI在进程之间传输海量数据 请记住: 在广播期间,一个进程向所有进程发送相同的数据 在通讯器中 如果这是您想要的,那么您必须依赖于下面的硬件,并且基于此,您正在使用的MPI标准的实现高效地实现例程。甚至可能发生这种情况(取决于您的实现)。然而,在某些实现中,例如openm

我在每个流程中生成大量数据,我需要通过MPI broad casting在流程之间共享这些数据

如何将成本降至最低,或者是否有任何算法可以通过MPI在进程之间广播海量数据

我怎样才能最大限度地降低成本,或者是否有广播算法 通过MPI在进程之间传输海量数据

请记住:

在广播期间,一个进程向所有进程发送相同的数据 在通讯器中

如果这是您想要的,那么您必须依赖于下面的硬件,并且基于此,您正在使用的MPI标准的实现高效地实现例程。甚至可能发生这种情况(取决于您的实现)。然而,在某些实现中,例如openmpi,您可以使用标志进一步优化
MPI\u Bcast
使用的算法

--mca coll_tuned_use_dynamic_rules 1 --mca coll_tuned_bcast_algorithm 4
另一种选择是尝试使用MPI广播的非阻塞版本,即:

将级别为“root”的进程中的消息广播给所有其他进程 以非阻塞方式运行通信器的进程


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

根据您的网络拓扑,您可以使用技术来最小化发送大型消息的延迟。例如,如果您的拓扑是分层拓扑,则可以通过多个
MPI_Send
MPI_Recv
操作来实现广播。 在这方面,为了更好地理解分层广播,我建议您看看这个

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