在 MPI 中检查 "handshake"?

Check for "handshake" in MPI?

有没有办法在启动 MPI_Send 之前检查非阻塞接收是否被 posted(对于给定的源和标签)?我有这样一种情况,发送者和接收者都不知道他们想发送给谁/从谁那里接收。我的想法是首先 post 在所有选定的接收器上打开 Irecv。然后,发件人将检查某个等级是否已 post 接收,并且仅在为真时才发送(否则继续)。所有发送成功后,接收方将取消未完成的 Irecvs。

感谢您的任何建议。

您可以使用不同的数据传输标签执行 MPI_Irecv,使用源作为 MPI_ANY。使用阻塞 MPI_Recv 也可以解决问题。收到消息后(MPI_Test 的标志==1),您可以通过阅读 MPI_Status.MPI_SOURCE(如果状态参数为 MPI_STATUS_IGNORE 则不可用)来检查实际来源是谁。

如果您没有明确要求传输必须同步,那么使用单方通信可能会更有效率(发件人只需输入它在接收器上的数据。

附加信息:Introducing One-Sided Communication