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()mpirunmpiexec MPI_Init()MPI_Init(argc, argv)MPI_Init(argc, argv)
argcしargvてMPI を初期化するMPI_Init(argc, argv)場合MPI_Init()は、を使用します。それ以外の場合は問題ありません(必要な場合もあります)。