2016-01-12 39 views
1

我正在使用MPI_Raccumulate函数,它是使用预定义的聚合函数从源到目的地的单向通信。如何检查MPI单向通信是否完成?

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

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

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

谢谢

+0

我不明白你的send-Recv问题。你在使用通配符吗? – Jeff

回答

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的一部分,这些功能最负责任的人。

+0

一旦我有一个真正的键盘,我会重新格式化这个... – Jeff

+0

谢谢杰夫,BSP模型是我使用的执行模型。 (我应该用这个词,BSP:D)似乎MPI_Win_flush是我想要的! – syko

+0

对于被动目标RMA或非RMA实施(如邻居集体),“MPI_Win_fence”的大多数用途更好。你的沟通模式是什么? – Jeff