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

时间:2013-02-21 15:48:37

标签: mpi

在MPI中,如果我使用MPI_Comm_Spawn生成子项,则主进程执行生成。现在孩子们开始做一些工作。如何通知主服务器以及其他父级流程已完成?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

让master成为调用MPI_Comm_spawn的程序,slave是你想要生成的程序而不修改它的代码,包装器就是包装程序。

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

  • master使用MPI_Comm_spawn生成包装器。
  • 包装器执行从属二进制文件(可能带有system)。但没有任何MPI调用(否则slave将无法获得MPI上下文)。
  • slave获取从MPI_Comm_spawn创建的MPI上下文并完成其工作
  • 当奴隶完成时,包装器将奴隶的结束发信号通知主人。

我无法保证我的解决方案符合MPI标准,但在带有Linux环境的群集上,OpenMPI 1.10适用于我。它尝试使用二进制包装器并编写文件以在主服务器和从服务器之间进行通信。