1

MPI では、MPI_Comm_Spawn で子をスポーンすると、マスター プロセスがスポーンを実行します。今、子供たちはいくつかの仕事を始めています。マスターと他の親レベルのプロセスに、子プロセスが終了したことを通知するにはどうすればよいですか?

4

2 に答える 2

0

バイナリ プログラムのラッパーを作成することを検討してください。プログラムを直接スポーンする代わりに、ラッパーのインスタンスをスポーンします。これにより、バイナリが起動され、終了するのを待ってから、スポーナー プロセスと通信します。

于 2013-02-21T17:34:58.153 に答える
0

suzterpattが示唆したように、ラッパープログラムで同じ問題を解決しました。

master を呼び出すプログラムMPI_Comm_spawn、slave をコードを変更せずにスポーンするプログラム、wrapper をラッパー プログラムとします。

あなたのスレーブ自体がmpiプログラムであり、それ自体と通信するために独自のコミュニケーターが必要であると考えてみましょう(コメントでそれを言ったからです)。

  • master は でラッパーを生成しますMPI_Comm_spawn
  • ラッパーはスレーブ バイナリを実行します (おそらく を使用system)。ただし、MPI 呼び出しはありません (そうしないと、スレーブは MPI コンテキストを取得できません)。
  • スレーブは MPI_Comm_spawn から作成された MPI コンテキストを取得し、そのジョブを実行します
  • スレーブが終了すると、ラッパーはスレーブの終了をマスターに通知します。

私のソリューションが MPI 標準を尊重しているとは保証できませんが、Linux 環境のクラスターで OpenMPI 1.10 を使用するとうまくいきました。バイナリラッパーを試し、マスターとスレーブの間で通信するためのファイルを書きました。

于 2018-02-20T08:05:32.097 に答える