6

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

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

4

3 回答 3

15

是的,MPI_RECV 可以将 MPI_ANY_SOURCE 指定为消息源的等级,因此您应该能够做您想做的事情。

于 2010-02-25T17:47:33.407 回答
6

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_Barrier 将确保在任何 MPI 等级可以从 MPI_Barrier 调用返回之前,所有等级都进入 MPI_Barrier。

于 2010-02-25T23:21:58.923 回答
3

看看MPI_Probe

于 2010-02-25T18:24:51.617 回答