如何使用MPI_Irecv执行后台任务并作为中断通知?

如何使用MPI_Irecv执行后台任务并作为中断通知?,mpi,openmpi,Mpi,Openmpi,我的伪代码如下所示: //Some work MPI_Send(....) MPI_Irecv(&yesno, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); //Do some WORK1 (background work) till MPI_Irecv completes and when receive completes do WORK 2. --WORK1 --WORK2 我应该将WORK1和WORK2放在哪

我的伪代码如下所示:

//Some work
MPI_Send(....)
MPI_Irecv(&yesno, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
//Do some WORK1 (background work) till MPI_Irecv completes and when receive completes do WORK 2.
--WORK1
--WORK2
我应该将WORK1和WORK2放在哪里,以及如何在接收完成时将控制重定向到WORK2

更多信息:
我正在尝试实现一个主从程序,在这个程序中,主程序将工作分配给从程序。当主设备发出功表示从设备1时,主设备继续工作,完成时需要从设备1中断。当这种中断发生时,一些代码需要由主机执行。然后,主机需要从中断前中断的位置继续。

如果WORK1是一个循环,则在每次迭代的开始/结束时使用
MPI\u Test()
,查看IRecv发出的请求是否已完成。如果有,则执行WORK2,发布新的IRecv,然后继续下一次迭代WORK1


如果WORK1是一个连续任务,那么您仍然有两个选项。您可以像上面描述的那样简单地使用
MPI\u Test()
调用,但这不是很优雅。相反,您可能希望在发布初始IRecv的位置生成一个新线程,然后只需使用
MPI_Wait()
等待它在原始线程执行工作时完成1。如果您的MPI实现是halfay Delegate,
MPI_Wait()
应该只阻止调用它的线程,这样WORK1就可以正常进行。

如果OP将生成一个额外的线程,为什么不简单地使用
MPI_Recv
并节省一些资源呢?