これがMPI_Init関数の使用方法です
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
…
}
MPI_Initがargvの値の代わりにargcとargvへのポインターを使用するのはなぜですか?
ここに記載されている回答によると:
ほとんどの MPI 実装では、この関数の mpirun 関連の引数がすべて削除されるため、関数を呼び出した後、通常の (mpirun 以外の) コマンド実行のようにコマンド ライン引数に対処できます。
つまり、その後
mpirun -np 10 myapp myparam1 myparam2
argc = 7(?) mpirun パラメーターのため (これもいくつか追加されているようです)、myparam1 と myparam2 のインデックスは不明です
しかしその後
MPI_Init(&argc, &argv)
argc = 3 で、myparam1 は argv[1] にあり、myparam2 は argv[2] にあります。
どうやらこれは標準外のようですが、Linux mpich でテストしたところ、確かにそのようです。この動作がなければ、アプリケーションのパラメーターと mpirun のパラメーターを区別することは非常に困難 (不可能?) です。
コマンドラインから mpi 引数を削除できる可能性があると思います。引数カウントをポインタで渡すと、メインのポイントからその値を変更できます。
2 つのポインターを渡すだけの方がオーバーヘッドは少なくなります。