MPI实现:MPI_Recv可以从许多MPI_Send接收消息吗?

时间:2010-02-25 17:38:43

标签: implementation mpi

现在我正在尝试使用MPI_Send和MPI_Recv在多个进程中传递最佳找到的解决方案。每个流程中找到的最佳解决方案应该传递到控制流程,以便存储所有最佳解决方案并在需要时发送到其他流程。我的问题是如何实现它?例如,一旦进程1找到新的最佳,它就可以调用MPI_Send并将其发送到控制进程。有没有办法让控制过程检测到有消息要接收?每个MPI_Send都需要MPI_Recv吗?期待听取您的专家的意见。谢谢!

感谢您的建议。我想要做的是让几个工作进程向一个控制进程发送消息。工作流程决定何时发送。控制过程必须检测何时接收。 MPI_Proble可以这样做吗?

3 个答案:

答案 0 :(得分:11)

是的,MPI_RECV可以指定MPI_ANY_SOURCE作为消息来源的排名,这样您就可以做到你想要的。

答案 1 :(得分:5)

MPI_Recv可以使用MPI_ANY_SOURCE作为从任何其他级别接收消息的方式。

根据控制过程的工作量和性质,您可能希望保留代码中的控制权,并且只能不时输入MPI库。在这种情况下,MPI_ANY_SOURCE和MPI_Test上的MPI_IRecv可能是一个很好的方法。

如果根据消息内容需要进行某些处理,MPI_Probe或MPI_IProbe允许在消息实际为MPI_Recv之前检查消息头。例如,MPI_Probe允许确定消息的大小,并创建适当大小的缓冲区。

此外,如果在检查最佳解决方案时所有工作等级偶尔会达到“障碍”点,则MPI_Gather / MPI_Bcast集体操作也可能是合适的。

请记住,进入长计算阶段的排名有时会干扰良好的消息传播。如果存在扩展的计算阶段,则确保在该阶段之前已传递所有MPI消息可能是有帮助的。这一点变得更加重要,因为群集中正在使用RDMA样式互连。在任何MPI等级可以从MPI_Barrier呼叫返回之前,MPI_Barrier将确保所有等级进入MPI_Barrier。

答案 2 :(得分:3)

查看MPI_Probe

相关问题