我如何知道在MPI_Comm_Spawn调用之后是否所有子进程都已完成?

我如何知道在MPI_Comm_Spawn调用之后是否所有子进程都已完成?,mpi,Mpi,在MPI中,如果我使用MPI_Comm_spawn生成子进程,则主进程将执行生成。现在孩子们开始做一些工作。如何通知主进程和其他父级进程子进程已完成 考虑在二进制程序周围编写一个包装器。不是直接生成程序,而是生成包装器实例,包装器实例将依次启动二进制文件,等待它完成,然后与生成器进程通信。正如suszterpatt所建议的那样,我用包装器程序解决了同样的问题 让master为调用MPI\u Comm\u spawn的程序,slave为希望在不修改其代码的情况下生成的程序,wrapper为wrap

在MPI中,如果我使用MPI_Comm_spawn生成子进程,则主进程将执行生成。现在孩子们开始做一些工作。如何通知主进程和其他父级进程子进程已完成

考虑在二进制程序周围编写一个包装器。不是直接生成程序,而是生成包装器实例,包装器实例将依次启动二进制文件,等待它完成,然后与生成器进程通信。

正如suszterpatt所建议的那样,我用包装器程序解决了同样的问题

让master为调用
MPI\u Comm\u spawn
的程序,slave为希望在不修改其代码的情况下生成的程序,wrapper为wrapper程序

让我们考虑一下,你的奴隶本身就是一个MPI程序,需要它自己的通信器来与自己通信(因为你在评论中这样说)。

  • master使用
    MPI\u Comm\u spawn
    生成包装
  • 包装器执行从二进制文件(可能使用
    系统
    )。但是没有任何MPI调用(否则从机将无法获取MPI上下文)
    
  • slave获取从MPI_Comm_spawn创建的MPI上下文并执行其任务
  • 当从机完成时,包装器向主机发出从机结束的信号

我不能保证我的解决方案遵守MPI标准,但它在具有linux环境的集群上使用OpenMPI 1.10对我有效。它尝试使用二进制包装器,并编写文件以在主设备和从设备之间进行通信。

通过对讲机向它们发送消息如何?或者使用MPI_屏障
,这也适用于内部通讯器。@HristoIliev:孩子们对繁殖一无所知。这是一个我无法改变的二进制程序。子进程将调用MPI_Finalize。然后,由于MPI的进程控制机制不提供等待衍生进程简单完成的方法,因此您无法使用MPI完成太多操作-在衍生进程之后,您将获得一个内部通讯器,并且希望您在衍生进程中使用它与父进程进行通信@HristoIliev:你是在暗示MPI中没有办法让一个并行进程产生另一个并行进程,等待它完成,然后继续吗?@HristoIliev:那么我就有麻烦了……别无选择。我需要生成的进程进行通信,否则我不会使用Comm\u Spawn。@StefanoBorini您可以使用
MPI\u Comm\u get\u parent
来获取能够与调用
Comm\u Spawn的进程通信的内部通信器