27

これがMPI_Init関数の使用方法です

int main(int argc, char **argv)
{
    MPI_Init(&argc, &argv);
…
}

MPI_Initがargvの値の代わりにargcとargvへのポインターを使用するのはなぜですか?

4

5 に答える 5

22

ここに記載されている回答によると:

MPI を使用してコマンド ライン経由で引数を渡す

ほとんどの 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 のパラメーターを区別することは非常に困難 (不可能?) です。

于 2012-04-21T00:03:48.010 に答える
4

コマンドラインから mpi 引数を削除できる可能性があると思います。引数カウントをポインタで渡すと、メインのポイントからその値を変更できます。

于 2010-04-15T23:41:06.103 に答える
-5

2 つのポインターを渡すだけの方がオーバーヘッドは少なくなります。

于 2010-04-17T15:22:22.003 に答える