如何检查MPI单方通信是否完成?

How to check if MPI one-sided communication has finished?

我正在使用 MPI_Raccumulate 函数,它是使用预定义聚合函数从源到目标的单向通信。

我想在程序结束时检查所有 MPI_Raccumulate 调用是否已完成(发送方发送数据并且接收方成功接收数据)。然而,MPI_Wait似乎并不是解决这个问题的办法;它只等待检查源缓冲区是否可更新(对用户可用)。

有没有办法(1)检查一个特定的MPI-单方通信调用是否已经完全完成(在发送方和接收方)? (2) 确认每个处理器中没有send/receive个MPI请求?

我的应用程序应该使用单向通信,但需要在特定任务结束时确认没有更多的通信。

谢谢

完成 RMA 请求仅确保本地完成,从而确保缓冲区重用。远程完成需要以下之一:

  • MPI_Win_complete,在 PSCW 使用模型中
  • MPI_Win_fence,在BSP使用模型中
  • passive-target 使用模型中的
  • MPI_Win_unlock(_all)MPI_Win_flush(_all)

您可能不想使用 request-based RMA。常规功能足以满足几乎所有使用模型。唯一明显有用的请求 RMA 操作是 MPI_Get(或 MPI_Get_accumulateMPI_NO_OP,这是 MPI_Get 的原子等价物)。我说这是作为 MPI-3 的一部分对这些功能负有最大责任的人。