gpt4 book ai didi

performance - MPI Alltoallv或更好的个人Send and Recv? (表现)

转载 作者:行者123 更新时间:2023-12-05 00:32:20 33 4
gpt4 key购买 nike

我有许多进程(大约100到1000个进程),每个进程都必须向其他进程(例如大约10个)发送一些数据。 (通常,但不一定总是这样,如果A发送给B,B也发送给A。)每个进程都知道必须从哪个进程接收多少数据。

因此,我可以只使用MPI_Alltoallv,将许多或大多数消息的长度设为零。
但是,我听说出于性能的原因,使用几种MPI_sendMPI_recv 通信而不是而不是全局 MPI_Alltoallv 会更好。
我不明白的是:如果一系列发送和接收调用比一个Alltoallv调用更有效,为什么替代?

对于我(和其他人?)来说,只使用一个全局调用会更加方便。另外,我可能还需要担心不会因多个Send和Recv(通过某种奇偶策略或更复杂的方法?或通过使用缓冲的send/recv?方法而修复)陷入僵局。

您是否同意MPI_Alltoallv是必需的,而比10 MPI_SendMPI_Recv慢;如果是的话,为什么以及要多少?

最佳答案

通常,带有集合的默认建议是相反的:在可能的情况下使用集合操作,而不是自己编写代码。 MPI库掌握的有关通信模式的信息越多,内部进行优化的机会就越多。

除非有特殊的硬件支持,否则实际上是在发送和接收方面在内部实现了集体调用。但是实际的通信模式可能不只是一系列发送和接收。例如,使用树来广播一条数据可能比具有相同等级将其发送到一堆接收器要快。优化集体沟通需要做大量工作,而且很难做得更好。

话虽如此,MPI_Alltoallv有所不同。在MPI级别上可能难以针对所有不规则通信场景进行优化,因此可以想象某些自定义通信代码可以做得更好。例如,MPI_Alltoallv的实现可能正在同步:它可能要求所有进程“ checkin ”,即使它们必须发送长度为0的消息也是如此。我虽然不太可能实现这种实现,但是我使用here is one in the wild

因此,真正的答案是“取决于情况”。如果MPI_Alltoallv的库实现与该任务不匹配,则自定义通信代码将获胜。但是在走那条路之前,请检查MPI-3邻居集合是否很适合您的问题。

关于performance - MPI Alltoallv或更好的个人Send and Recv? (表现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13505799/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com