我如何验证是否有MPI向我的节点发送消息?

时间:2019-07-16 15:52:02

标签: python mpi

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

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

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

我进行了一些研究,发现了一种称为“探针”的方法,但对它的作用或用法却找不到有用的文档。因此,我不知道它是否可以解决我的问题。

我想要的想法非常简单:使用mpi4py的“ recv”方法时,我只需要检查是否有要接收的数据。如果有代码,则代码执行某些任务,如果没有代码,则执行其他任务。

1 个答案:

答案 0 :(得分:1)

(详细介绍了Gilles Gouaillardet的评论)

如果您知道最终会收到一条消息,但是希望在准备和发送消息时能够运行一些计算,则可以使用非阻塞接收, not {{1 }}。

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

这比使用探针要好得多,因为您可以确保尽早准备好接收缓冲区,并且不会阻止发送方,等待接收方看到有消息并发布接收方。

对于特定的实现,您将必须查阅所使用的Python MPI包装器的手册。您可能还会在MPI标准本身中找到有用的信息。