我正在编写一个使用 OpenMPI 的 C++ 程序。它以“轮次”执行,在每一轮中,进程 0 将数据块发送给其他进程,它们对其进行处理并将结果发送回,当没有更多块要发送时,进程 0 发送“完成”消息给对方进程。“完成”消息只是带有标签 3 的单整数消息。我的第一轮执行得很好。但是,当我进入第二轮时,在进程 0 有机会发送任何内容之前,进程 1-p“探测”和“接收”完成消息(更不用说完成消息了)。
我现在已经多次检查了我的代码,似乎这条消息的唯一来源是进程 0 在上一轮发送它的地方——但每个进程都已经收到了。我宁愿不发布我的代码,因为它很大,但是有谁知道 MPI 消息是否可以像这样接收两次?