我如何使用 MPI 验证是否有传入消息到我的节点?

How can I verify if there is an incoming message to my node with MPI?

我正在做一个使用 Python 和 MPI 的项目。在继续执行其他任务之前,我项目的每个节点都需要知道是否有任何传入消息。

我正在处理一个由多个节点执行某些操作的系统。某些节点可能需要其他节点的输出,因此需要知道此输出是否可用。

为了便于说明,让我们考虑两个节点,A 和 B。A 需要 B 的输出来执行它的任务,但是如果输出不可用,A 需要执行一些其他任务,然后验证 B 是否已发送它再次循环输出。我想要做的是验证 B 在 A 中的输出可用性。

我进行了一些研究,发现了一些关于名为 probe 的方法的信息,但我不理解,也没有找到关于它的作用或如何使用的有用文档。所以,不知道能不能解决我的问题。

我想要的思路很简单,就是用mpi4py的方法"recv",只需要检查是否有数据接收即可。如果有代码执行某些任务,如果没有代码执行其他任务。

(详细说明 Gilles Gouaillardet 的评论)

如果您知道您最终会收到一条消息,但希望能够在准备和发送消息时运行 进行一些计算,您希望使用non-blocking 接收,不是probe.

基本上使用MPI_Irecv尽快设置接收请求。如果您想知道消息是否准备好,请使用MPI_Test检查请求。

这比使用探测要好得多,因为你确保接收缓冲区尽早准备好并且发送方不被阻塞,等待接收方看到有消息并且post收到。

对于具体的实现,您将不得不查阅您使用的 Python MPI 包装器的手册。您还可以在 MPI 标准本身中找到有用的信息。