Compiler construction MPI阻塞接收语义

Compiler construction MPI阻塞接收语义,compiler-construction,mpi,recv,Compiler Construction,Mpi,Recv,在阅读有关在MPI中阻止发送和接收的内容时,我感到困惑。如MPI标准2.2第3.4节通信模式所述: 。。。上一节中描述的接收操作是阻塞:it 仅在接收缓冲区包含新接收的 信息在匹配的发送完成之前,可以完成接收 (当然,只有在匹配发送开始后才能完成)。 有人能给我解释一下,在相应的发送完成之前,阻塞接收是如何完成的吗?我的理解是,当数据准备好在接收缓冲区中使用时(即数据已完全接收),阻塞接收(MPI_recv)返回。不是这样吗?你的理解是正确的 标准中所描述的情况(接收在发送完成之前完成)告诉您不

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

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


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

你的理解是正确的

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

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

有人能给我解释一下如何在之前完成阻塞接收吗 相应的发送已完成

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

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

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

这是正确的