MPI实现:MPI_Recv可以接收来自多个MPI_Send的消息吗?

6
现在我正在尝试使用MPI_Send和MPI_Recv在多个进程之间传递最佳解决方案。每个进程中找到的最佳解决方案应该传递给存储所有最佳解决方案并在需要时发送到其他进程的控制进程。我的问题是如何实现它?例如,一旦进程1找到一个新的最佳解决方案,它可以调用MPI_Send并将其发送到控制进程。控制进程是否有办法检测到需要接收消息?每个MPI_Send是否都需要一个MPI_Recv?期待听到专家们的建议。谢谢!
感谢您的建议。我想要做的是让几个工作进程向一个控制进程发送消息。工作进程决定何时发送。控制进程必须检测何时接收。MPI_Probe能够做到这一点吗?
3个回答

15

是的,MPI_RECV可以将MPI_ANY_SOURCE指定为消息源的等级,因此您应该能够实现您想要的功能。


6
MPI_Recv可以使用MPI_ANY_SOURCE作为从任何其他等级接收消息的方式。
根据工作负载和控制进程的性质,您可能希望在代码中保留控制,并仅偶尔进入MPI库。在这种情况下,MPI_IRecv 在 MPI_ANY_SOURCE 和 MPI_Test 上可能是一个不错的选择。
如果基于消息内容需要进行一些处理,则MPI_Probe或MPI_IProbe允许在实际MPI_Recv之前检查消息头。例如,MPI_Probe允许确定消息大小,并创建适当大小的缓冲区。
此外,如果所有工作等级偶尔达到“屏障”点时应该检查最佳解决方案,则MPI_Gather / MPI_Bcast集体操作也可能是合适的。
请记住,进入长时间计算阶段的等级有时会干扰良好的消息传播。如果存在延长的计算阶段,则有助于确保在该阶段之前已传递所有MPI消息。如果在群集中使用RDMA样式互连,则这变得更加重要。MPI_Barrier将确保所有等级在任何MPI等级可以从MPI_Barrier调用返回之前进入MPI_Barrier。

3

请看MPI_Probe

(翻译:请参考MPI_Probe。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接