1

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

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

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

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

谢谢

4

1 回答 1

1

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

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

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

于 2016-01-12T03:48:26.027 回答