使用缓冲发送和非阻塞发送我想知道如何以及他们是否在我的应用程序中实现新级别的并行性,最终生成一个线程。 想象一下,从属进程会生成大量数据并希望将其发送给主数据库。我的想法是启动缓冲或非阻塞发送,然后立即开始计算下一个结果。
正当我必须发送新数据时,我会检查是否可以重用缓冲区。这将在我的应用程序中引入CPU和通信之间的新级别的并行性。有谁知道MPI是如何做到的? MPI是否生成一个新线程来处理Bsend或Isend? 感谢。
答案 0 :(得分:4)
您正在寻找的是使用您自己的缓冲区(MPI_Isend
)的非阻塞发送。无需担心线程 - ISend
应该立即返回以让您继续自己的代码。然后,您可以继续工作,并在MPI_Wait
上发送MPI_Request
个请求,并将其传递给Isend
。然后这将阻塞,直到缓冲区可以再次使用。如果您有多个缓冲区的空间,则可以通过分配多个缓冲区并使用MPI_Waitany
中可用的缓冲区来提高并行度。