我有许多进程(大约 100 到 1000 个),每个进程都必须向其他进程中的一些(比如大约 10 个)发送一些数据。(通常,但并非总是如此,如果 A 发送给 B,B 也发送给 A。)每个进程都知道它必须从哪个进程接收多少数据。
所以我可以使用MPI_Alltoallv
, 许多或大部分消息长度为零。但是,我听说出于性能原因,最好使用多个MPI_send
和MPI_recv
通信而不是全局MPI_Alltoallv
. 我不明白的是:如果一系列发送和接收调用比一个 Alltoallv 调用更有效,为什么 Alltoallv 不只是实现为一系列发送和接收?
对我(和其他人?)来说,只使用一个全球电话会更方便。此外,我可能不得不担心不会遇到多个 Send 和 Recv 的死锁情况(可以通过一些奇偶策略或更复杂的方法修复?或使用缓冲的发送/接收?)。
你同意这MPI_Alltoallv
比10和;慢吗?如果是,为什么和多少?MPI_Send
MPI_Recv