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