我正在使用MPI_Raccumulate
功能,它是从源到目的地的单向通信,具有预定义的聚合功能。
我想在程序结束时检查所有MPI_Raccumulate
调用是否已完成(发送方已发送数据,接收方是否已成功接收数据)。但是,MPI_Wait
似乎不是这个问题的解决方案;它只等待检查源缓冲区是否可更新(可供用户使用)。
有没有办法(1)检查特定的MPI单向通信呼叫是否已完全完成(在发送方和接收方)? (2)确认每个处理器中没有发送/接收MPI请求?
我的应用程序应使用片面通信,但需要确认在特定任务结束时不再有通信。
感谢
答案 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_accumulate
和MPI_NO_OP
,这是MPI_Get
的原子等价物。我说这是对这些功能负有最大责任的人是MPI-3的一部分。