Asynchronous MPI结束和MPI结束。它们是如何工作的?

Asynchronous MPI结束和MPI结束。它们是如何工作的?,asynchronous,parallel-processing,mpi,nonblocking,Asynchronous,Parallel Processing,Mpi,Nonblocking,使用缓冲发送和非阻塞发送,我想知道它们如何以及是否在我的应用程序中实现了新的并行级别,最终生成了一个线程。 假设一个从进程生成大量数据并希望将其发送到主进程。我的想法是启动缓冲或非阻塞发送,然后立即开始计算下一个结果 当我需要发送新数据时,我会检查是否可以重用缓冲区。这将在我的应用程序中CPU和通信之间引入一个新的并行级别。有人知道MPI是如何做到这一点的吗?MPI是否生成新线程来处理Bsend或Isend? 谢谢。您正在寻找的是使用您自己的缓冲区(MPI_Isend)的非阻塞发送。无需担心线程

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

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

您正在寻找的是使用您自己的缓冲区(
MPI_Isend
)的非阻塞发送。无需担心线程问题--
Isend
应立即返回以继续您自己的代码。然后,您将继续工作,并在传递给
Isend
MPI\u请求上发布
MPI\u Wait
请求。然后,这将阻塞,直到缓冲区可以再次使用为止。如果您有空间容纳多个缓冲区,则可以通过分配多个缓冲区并使用通过
MPI_Waitany
可用的缓冲区来提高并行性

您正在寻找的是使用您自己的缓冲区(
MPI_Isend
)的非阻塞发送。无需担心线程问题--
Isend
应立即返回以允许您继续自己的代码。然后,您将继续工作,并在传递给
Isend
MPI\u请求上发布
MPI\u Wait
请求。然后,这将阻塞,直到缓冲区可以再次使用为止。如果您有空间容纳多个缓冲区,则可以通过分配多个缓冲区并使用通过
MPI_Waitany
可用的缓冲区来提高并行性

另一个值得一提的功能是
MPI_Test
,它告诉您传输是否在没有阻塞的情况下完成。感谢您的友好回答。事实上,我的问题是如何实现这些功能,而不是如何使用它们。Isend在系统级会发生什么?一条新的线分叉了?@GBBL:啊。您的问题的答案是特定于实现的(请记住,有几种流行的MPI实现)。对于我最熟悉的mpich,我认为有一个持续运行的deamon进程,它通过IPC本地处理客户端进程请求节点。另一个值得一提的功能是
MPI_Test
,它告诉您传输是否在没有阻塞的情况下完成。感谢您的友好回答。事实上,我的问题是如何实现这些功能,而不是如何使用它们。Isend在系统级会发生什么?一条新的线分叉了?@GBBL:啊。您的问题的答案是特定于实现的(请记住,有几种流行的MPI实现)。对于我最熟悉的mpich,我认为有一个持续运行的deamon进程,它通过IPC本地处理客户端进程请求节点。