【问题标题】:MPI_Bsend and MPI_Isend. How do they work?MPI_Bsend 和 MPI_Isend。它们是如何工作的?
【发布时间】:2011-03-11 02:41:32
【问题描述】:

使用缓冲发送和非阻塞发送我想知道它们如何以及是否在我的应用程序中实现新级别的并行性,最终生成一个线程。 想象一下,一个slave进程产生了大量的数据,想要发给master。我的想法是启动缓冲或非阻塞发送,然后立即开始计算下一个结果。

就在我必须发送新数据时,我会检查是否可以重用缓冲区。这将在我的应用程序中在 CPU 和通信之间引入新的并行度。有人知道这是如何在 MPI 中完成的吗? MPI 是否生成一个新线程来处理 Bsend 或 Isend ? 谢谢。

【问题讨论】:

    标签: asynchronous parallel-processing mpi nonblocking


    【解决方案1】:

    您正在寻找的是使用您自己的缓冲区 (MPI_Isend) 的非阻塞发送。无需担心线程——ISend 应该立即返回以让您继续自己的代码。然后您将继续您的工作,并在您传递给IsendMPI_Request 上发布MPI_Wait 请求。然后这将阻塞,直到缓冲区可以再次免费使用。如果您有多个缓冲区的空间,则可以通过分配多个缓冲区并使用通过MPI_Waitany 获得的任何缓冲区来提高并行性。

    【讨论】:

    • 另一个值得一提的函数是MPI_Test,它会告诉你传输是否在没有阻塞的情况下完成。
    • 感谢您的友好回答。事实上,我的问题是关于如何实现这些功能,而不是关于如何使用它们。 Isend 在系统级别会发生什么?一个新线程被分叉了?
    • @GBBL:啊。您的问题的答案是特定于实现的(请记住,有几种流行的 MPI 实现)。对于我最熟悉的 mpich,我认为有一个持续运行的守护进程,通过 IPC 在节点本地处理客户端进程请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 2014-09-08
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多