阅读关于在MPI中阻塞发送和接收时,我感到困惑。如在MPI标准2.2,3.4节通信模式表示:MPI阻塞接收语义
...在最后一节中所描述的接收操作是阻塞:接收缓冲器包含新接收的消息 它 仅返回之后。 接收可以在匹配发送完成之前完成 (当然,只有在匹配发送开始后它才能完成)。
谁能向我解释如何阻塞收到相应的发送已完成才能完成?我的理解是,当数据准备用于接收缓冲区时(即数据已完全接收),阻塞接收(MPI_recv
)会返回。这不是这种情况吗?
阅读关于在MPI中阻塞发送和接收时,我感到困惑。如在MPI标准2.2,3.4节通信模式表示:MPI阻塞接收语义
...在最后一节中所描述的接收操作是阻塞:接收缓冲器包含新接收的消息 它 仅返回之后。 接收可以在匹配发送完成之前完成 (当然,只有在匹配发送开始后它才能完成)。
谁能向我解释如何阻塞收到相应的发送已完成才能完成?我的理解是,当数据准备用于接收缓冲区时(即数据已完全接收),阻塞接收(MPI_recv
)会返回。这不是这种情况吗?
你的理解是正确的。
标准中描述的情况(接收完成之前发送完成)告诉你不要依赖库调用的顺序。在特定的机器/实施中不一定需要这种情况。
如果您考虑同步发送和阻止接收微小消息。同步发送只能在匹配接收开始后完成,可能由'确认消息(ACK)'指示。在ACK到达发送者之前,实际的消息传送可能会完全传送(接收可能会返回)(发送可能会返回)。请记住这是高度实现/机器特定的。
有人可以向我解释在相应的发送完成之前,阻止接收可以如何完成,然后 ?
“发送完成”的定义是用户代码可以安全地更改发送缓冲区的内容。不保证相应recv的状态。
在某些情况下,recv必须在发送缓冲区安全更改之前完成(并返回)。例如,ack必须从recv端发送到发送端,以表明修改发送缓冲区是安全的(在RDMA集合协议消息传输中是常见的)。
我理解的是一个 阻断接收(MPI_RECV)返回时数据是准备在 要使用的接收缓冲器(即,数据已被完全接收)。这是不是 ?
这是正确的。