如何检查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_accumulate
和 MPI_NO_OP
,这是 MPI_Get
的原子等价物)。我说这是作为 MPI-3 的一部分对这些功能负有最大责任的人。
我正在使用 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_accumulate
和 MPI_NO_OP
,这是 MPI_Get
的原子等价物)。我说这是作为 MPI-3 的一部分对这些功能负有最大责任的人。