【问题标题】: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) 在数据准备好使用时返回 接收缓冲区(即数据已被完全接收)。这是 不是这样吗?

      没错。

      【讨论】:

        猜你喜欢
        • 2012-08-24
        • 2011-05-03
        • 2021-12-30
        • 1970-01-01
        • 2013-03-07
        • 2014-08-15
        • 2018-09-10
        • 2015-08-17
        • 1970-01-01
        相关资源
        最近更新 更多