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