1

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

4

2 回答 2

0

考虑为您的二进制程序编写一个包装器。与其直接生成程序,不如生成包装器的实例,包装器将依次启动二进制文件,等待它完成,然后与生成器进程通信。

于 2013-02-21T17:34:58.153 回答
0

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

让 master 是调用的程序MPI_Comm_spawn,slave 是你想要在不修改其代码的情况下生成的程序,而 wrapper 是包装程序。

让我们考虑一下您的从站本身就是一个 mpi 程序,需要自己的通信器与自己通信(因为您在评论中说过)。

  • master 使用MPI_Comm_spawn.
  • wrapper 执行从属二进制文件(可能带有system)。但是没有任何 MPI 调用(否则从站将不会获得 MPI 上下文)。
  • slave 获取从 MPI_Comm_spawn 创建的 MPI 上下文并完成其工作
  • 当从站完成时,包装器向主站发出从站结束的信号。

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

于 2018-02-20T08:05:32.097 回答