我正在使用带有MPI的Python进行项目。在继续执行其他任务之前,项目的每个节点都需要知道是否有任何传入消息。
我正在一个由多个节点执行某些操作的系统上工作。一些节点可能需要其他节点的输出,因此需要知道此输出是否可用。
出于说明目的,让我们考虑两个节点,A和B。A需要B的输出来执行其任务,但是如果输出不可用,则A需要执行其他一些任务,然后验证B是否已发送了它的输出。再次循环。我想做的是验证A中B的输出是否可用。
我进行了一些研究,发现了一种称为“探针”的方法,但对它的作用或用法却找不到有用的文档。因此,我不知道它是否可以解决我的问题。
我想要的想法非常简单:使用mpi4py的“ recv”方法时,我只需要检查是否有要接收的数据。如果有代码,则代码执行某些任务,如果没有代码,则执行其他任务。
答案 0 :(得分:1)
(详细介绍了Gilles Gouaillardet的评论)
如果您知道最终会收到一条消息,但是希望在准备和发送消息时能够运行一些计算,则可以使用非阻塞接收, not {{1 }}。
基本上使用probe
尽快设置接收请求。如果您想知道消息是否已经准备好,请使用MPI_Irecv
来检查请求。
这比使用探针要好得多,因为您可以确保尽早准备好接收缓冲区,并且不会阻止发送方,等待接收方看到有消息并发布接收方。
对于特定的实现,您将必须查阅所使用的Python MPI包装器的手册。您可能还会在MPI标准本身中找到有用的信息。