2012-02-03 117 views
2

阅读关于在MPI中阻塞发送和接收时,我感到困惑。如在MPI标准2.2,3.4节通信模式表示:MPI阻塞接收语义

...在最后一节中所描述的接收操作是阻塞:接收缓冲器包含新接收的消息 它 仅返回之后。 接收可以在匹配发送完成之前完成 (当然,只有在匹配发送开始后它才能完成)。

谁能向我解释如何阻塞收到相应的发送已完成才能完成?我的理解是,当数据准备用于接收缓冲区时(即数据已完全接收),阻塞接收(MPI_recv)会返回。这不是这种情况吗?

回答

5

你的理解是正确的。

标准中描述的情况(接收完成之前发送完成)告诉你不要依赖库调用的顺序。在特定的机器/实施中不一定需要这种情况。

如果您考虑同步发送和阻止接收微小消息。同步发送只能在匹配接收开始后完成,可能由'确认消息(ACK)'指示。在ACK到达发送者之前,实际的消息传送可能会完全传送(接收可能会返回)(发送可能会返回)。请记住这是高度实现/机器特定的。

1

有人可以向我解释在相应的发送完成之前,阻止接收可以如何完成,然后 ?

“发送完成”的定义是用户代码可以安全地更改发送缓冲区的内容。不保证相应recv的状态。

在某些情况下,recv必须在发送缓冲区安全更改之前完成(并返回)。例如,ack必须从recv端发送到发送端,以表明修改发送缓冲区是安全的(在RDMA集合协议消息传输中是常见的)。

我理解的是一个 阻断接收(MPI_RECV)返回时数据是准备在 要使用的接收缓冲器(即,数据已被完全接收)。这是不是 ?

这是正确的。