代码之家  ›  专栏  ›  技术社区  ›  user287745

在消息传递(MPI)中,MPI_send and recv“what waits”

  •  1
  • user287745  · 技术社区  · 15 年前

    第一:

    未缓冲,阻塞(同步)

    mpi_send 阻塞函数调用,发送方函数/程序是否被阻塞?

    或者

    mpi_发送 被阻止,以便程序可以继续工作直到消息被发送?

    第二:

    类似的困惑,是不是 mpi_recv

    这么愚蠢的问题的原因:

    另一个原因:

    有可能在 由进程调用,其他进程不能使用 因为它在工作?!

    2 回复  |  直到 15 年前
        1
  •  8
  •   Stan Graves    15 年前

    第一:是,呼叫程序被“阻止”,因为在消息被“发送”之前,MPI_Send呼叫不会返回

    一些附加信息:

    MPI_Send是一个“阻塞”调用,因为在消息发送之前,调用不会将控制权返回给调用方。“sent”的定义是保存消息的用户缓冲区可以安全地重用。无法保证已收到消息,甚至无法保证已在远程列组中达到MPI_Recv调用。(确切的行为取决于实现。RDMA风格的互连导致了“内部黑盒”行为的大多数问题。)

    MPI-Isend是一个“非阻塞”调用。控件将“立即”返回到调用程序…但缓冲区无法重用,直到程序调用MPI_Test或MPI_Wait确认消息已“发送”

        2
  •  3
  •   suszterpatt    15 年前

    最后一个问题的答案是“否”:在执行其他进程时,某些进程可能会被阻止,等待发送或接收完成。阻塞调用只阻塞调用它们的进程。