0

我正在编写一个使用 OpenMPI 的 C++ 程序。它以“轮次”执行,在每一轮中,进程 0 将数据块发送给其他进程,它们对其进行处理并将结果发送回,当没有更多块要发送时,进程 0 发送“完成”消息给对方进程。“完成”消息只是带有标签 3 的单整数消息。我的第一轮执行得很好。但是,当我进入第二轮时,在进程 0 有机会发送任何内容之前,进程 1-p“探测”和“接收”完成消息(更不用说完成消息了)。

我现在已经多次检查了我的代码,似乎这条消息的唯一来源是进程 0 在上一轮发送它的地方——但每个进程都已经收到了。我宁愿不发布我的代码,因为它很大,但是有谁知道 MPI 消息是否可以像这样接收两次?

4

1 回答 1

0

我想我可能有答案......由于完成消息中的实际数据无关紧要,我不认为让进程实际接收它。事实证明,在上一轮中,进程正在“探测”消息并发现标签为 3,然后跳出循环。因此,在第二轮中,消息仍在等待接收,所以当他们调用 MPI_Probe 时,他们发现与上一轮相同的消息。

为了解决这个问题,我只是调用了 MPI_Recv。我查看了 MPI_Cancel ,但找不到足够的信息来查看它是否合适。对不起,我的问题误导了!

于 2013-08-13T20:36:41.187 回答