如何检查MPI片面通信是否已完成?

时间:2016-01-12 03:17:15

标签: mpi communication mpi-rma

我正在使用MPI_Raccumulate功能,它是从源到目的地的单向通信,具有预定义的聚合功能。

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

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

我的应用程序应使用片面通信,但需要确认在特定任务结束时不再有通信。

感谢

1 个答案:

答案 0 :(得分:1)

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

  • MPI_Win_complete,在PSCW使用模式中
  • MPI_Win_fence,在BSP使用模式中
  • 被动目标使用模型中的
  • MPI_Win_unlock(_all)MPI_Win_flush(_all)

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