2013-02-21 100 views
1

在MPI中,如果我用MPI_Comm_Spawn产生子项,主进程执行产卵。现在孩子们开始做一些工作。我如何告知主人和其他家长级别的流程,孩子们已经完成了?如何知道在MPI_Comm_Spawn调用后是否所有子进程都已完成?

+0

如何通过通讯器发送消息给他们?或者使用'MPI_BARRIER',它也可以与intercommunicators协同工作。 – 2013-02-21 16:07:38

+0

@HristoIliev:孩子们对Spawn一无所知。这是一个我无法改变的二进制程序。孩子们会打电话给MPI_Finalize。 – 2013-02-21 16:10:48

+0

然后你可以用MPI做的事情并不多,因为它的过程控制机制不能提供一种方法来等待产生的过程简单地完成 - 产卵后你会得到一个互通器,并且你有望在产卵后使用它与父母交谈的过程。 – 2013-02-21 17:05:54

回答

0

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

+0

不是一个选项。我需要产生的进程进行通信,否则我不会使用Comm_Spawn。 – 2013-02-21 19:06:09

0

我解决了与包装程序相同的问题,suszterpatt建议。

让master成为调用MPI_Comm_spawn的程序,slave是您想要生成但不修改其代码的程序,wrapper是包装程序。

让我们考虑一下,你的奴隶本身就是一个mpi程序,需要自己的沟通者与自己沟通(因为你在评论中说过)。

  • master产生与MPI_Comm_spawn包装。
  • 包装器执行从机二进制文件(可能与system)。但是没有任何MPI调用(否则slave不会获得MPI上下文)。
  • 从设备获取从MPI_Comm_spawn创建的MPI上下文并执行其作业
  • 从设备完成时,包装器将从设备的末端指示给主设备。

我不能保证我的解决方案符合MPI标准,但它对于Linux环境的集群上的OpenMPI 1.10有效。它用二进制包装器进行了尝试,并编写了文件以在主站和从站之间进行通信。

相关问题