MPI阻塞接收语义

时间:2012-02-03 11:56:27

标签: compiler-construction mpi recv

在阅读有关阻止发送和接收MPI时,我感到困惑。如MPI标准2.2第3.4节通信模式中所述:

  

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

有人可以向我解释阻止接收如何在相应的发送完成之前完成?我的理解是,当数据准备好在接收缓冲区中使用时(即数据已被完全接收),阻塞接收(MPI_recv)返回。情况不是这样吗?

2 个答案:

答案 0 :(得分:5)

您的理解是正确的。

标准中描述的情况(接收在发送完成之前完成)告诉您不要依赖库调用的顺序。没有必要在特定的机器/实现上使用。

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

答案 1 :(得分:1)

  

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

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

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

  

我的理解是a   阻塞接收(MPI_recv)在数据准备好使用时返回   接收缓冲区(即数据已被完全接收)。这是   不是这样吗?

这是正确的。