MPI 3.0のコードを書くとき、私は合格しなければならないargc
とargv
のMPI_Init
通話やない、なぜ?
編集:ビル・バースの答えはいくつかの質問を提起したので、私はいくつかの発言をしたいと思います:
- MPI 1.1以降、
argc
/を渡すargv
必要はありません。 - 質問は、具体的理由/ 1パスすべきでない程度である
argc
/argv
(なぜあなたはいけません、本当にその後、答えではありません)。 - それでも、
argc
/argv
を渡すことができない場合がありますMPI_Init
(mainが制御範囲外にあり、MPIが実装の詳細である場合、静的初期化を使用してMPIを起動するライブラリを作成します)。
EDIT2:なぜ使用しないのかMPI_Init(argc, argv)
という質問が頻繁に出てきました。いくつかの理由:
古い/非準拠/準拠のMPI <1.1実装との互換性のためにこれを行うことはできません。MPI2またはMPI3機能を使用している場合、これらは機能しません。
MPI_Init()
と同じ方法でMPIランタイムを初期化しますMPI_Init(argc, argv)
MPI_Init(argc, argv)
MPIの実行時に渡される引数を削除argc
し、argv
そして MPIを初期化します。私の知る限り、それはきれいにするための唯一の方法であるargc
とargv
あなたがそれを使用する必要が全くMPI引数を持たないためにこれらが必要な場合はそう。MPI_Init()
より多くの状況で使用できますMPI_Init(argc, argv)
。たとえば、MPIを実装の詳細として使用しているライブラリは、MPIが初期化されているかどうかをテストできます。初期化されていない場合は、呼び出すMPI_Init()
と正しいことが起こります。あなたのユーザーは、あなたがMPIを使用していることを知らない、渡す必要はありませんargc
、argv
......あなたのライブラリーを使用するために、あなたのライブラリに、(場合には、それは引数を取っていない)自分のメインを変更する必要はありません。
MPI_Init()
mpirun
mpiexec
MPI_Init()
MPI_Init(argc, argv)
MPI_Init(argc, argv)
argc
しargv
てMPI を初期化するMPI_Init(argc, argv)
場合MPI_Init()
は、を使用します。それ以外の場合は問題ありません(必要な場合もあります)。