MPI阻塞接收语义

usm*_*man 2 compiler-construction mpi recv

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

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

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

Zul*_*lan 5

你的理解是正确的.

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

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