2017-02-09 2 views
1

たとえば、MPI_Comm_spawnが呼び出されたときに、すべてのプロセスが必要なデータを持つ必要があるのだろうかと思います。MPI_Comm_spawnを呼び出すときに、すべてのプロセスがすべてのデータを必要としますか?

この関数を呼び出すと、操作を実行するルートプロセスが定義され、このランクは明らかに関数に適切なパラメータを与える必要があります。すなわち:

MPI_Comm_spawn("./a.out", &argvs, maxprocs, info, 0, MPI_COMM_WORLD, &intercomm, MPI_ERRCODES_IGNORE); 

我々はランク0がルートであることがわかっている場合は、他のプロセスが変数を設定しておく必要があります:argvs、maxprocsに及び情報を?または、その情報をランク0に入れるだけで十分でしょうか?

答えて

3

ありませんが、これは、文書から明らかなようだ:
MPI_Comm_spawn
どこ

ARGV
maxprocsに(のみルートで有意な文字列の配列、)コマンドの引数:開始するプロセスの最大数(整数、有効: :ルート
情報: どこで、どのように開始するには、ランタイムシステムを伝えるキーと値のペアのセットのみルート)だから、

で有意なプロセス(ハンドル、 「他の」プロセスは、私がドキュメントから理解している限り、上記のものを設定する必要はありません。
集合的な呼び出しであることに留意してください。

3

MPI_Comm_spawnの最初の4つの引数は、指定されたルートプロセスでのみ重要ですが、コミュニケータのすべてのプロセスが呼び出しを行う必要があります。したがって、彼らはMPI_Comm_spawnによって返されるインターコミュニケータを介して子ジョブと通信する能力を獲得する。場合は、あなたが最初のジョブ内のすべてのランクは、子ジョブと通信できることが必要ですが、唯一のルートランクしていない、あなたの代わりにMPI_COMM_WORLDMPI_COMM_SELFを使用することができます。

int rank; 

MPI_Comm_rank(MPI_COMM_WORLD, &rank); 
if (rank == 0) { 
    MPI_Comm_spawn("./a.out", args, maxprocs, info, 0, MPI_COMM_SELF, 
        &intercomm, MPI_ERRCODES_IGNORE); 
} 
関連する問題