【问题标题】:MPI blocking receive semanticsMPI 阻塞接收语义
【发布时间】:2012-02-26 01:10:36
【问题描述】:
我在阅读有关在 MPI 中阻止发送和接收时感到困惑。如 MPI 标准 2.2 第 3.4 节通信模式中所述:
...上一节中描述的接收操作是阻塞的:它
只有在接收缓冲区包含新接收到的数据后才返回
信息。 可以在匹配的发送完成之前完成接收
(当然,只有在匹配发送开始后才能完成)。
有人可以向我解释如何在相应的发送完成之前完成阻塞接收?我的理解是,当数据准备好在接收缓冲区中使用(即数据已被完全接收)时,阻塞接收(MPI_recv)会返回。不是这样吗?
【问题讨论】:
标签:
compiler-construction
mpi
recv
【解决方案1】:
你的理解是正确的。
标准中描述的情况(在发送完成之前接收完成)告诉您不要依赖库调用的顺序。在特定机器/实现上不一定是这种情况。
如果您考虑同步发送和阻塞接收一条小消息。同步发送可能仅在匹配接收开始后完成,可能由“确认消息(ACK)”指示。在 ACK 到达发送方(发送可能返回)之前,实际的消息传输可能已完全传输(接收可能返回)。请记住,这是高度实现/机器特定的。
【解决方案2】:
有人可以向我解释一下阻塞接收是如何完成的吗
对应的发送完成了吗?
“发送完成”的定义是用户代码可以安全地更改发送缓冲区的内容。不保证相应recv的状态。
在某些情况下,recv 必须先完成(并返回),然后才能安全地更改发送缓冲区。例如,必须从接收端向发送端发送一个 ack,以表明可以安全地更改发送缓冲区(在 RDMA 集合协议消息传输中很常见)。
我的理解是
阻塞接收 (MPI_recv) 在数据准备好使用时返回
接收缓冲区(即数据已被完全接收)。这是
不是这样吗?
没错。