【问题标题】:Minimising the MPI broadcast for massive data最小化海量数据的 MPI 广播
【发布时间】:2021-05-24 04:41:46
【问题描述】:

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

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

【问题讨论】:

    标签: c++ c parallel-processing mpi broadcast


    【解决方案1】:

    我怎样才能将成本降到最低,或者是否有任何广播算法 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)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-04-01
        • 2013-09-27
        • 1970-01-01
        • 2014-05-07
        • 2018-05-20
        • 2013-09-01
        • 2022-09-23
        • 1970-01-01
        相关资源
        最近更新 更多