スレッドのサポートがあることを指定した MPI プログラムで、すべてのスレッドが MPI::Bcast 呼び出しを行うかどうか疑問に思っていました (呼び出しでは、送信側プロセスが 1 つのスレッドしか所有していないことを確認してください)。他のスレッドまたは各プロセスの 1 つのスレッドのみ (最速)?
3 に答える
一般的な MPI 実装は、プロセス間の通信を扱います。スレッドをサポートする実装では、複数のスレッドが 1 つだけではなく、一部またはすべての MPI 呼び出しを実行できるようになっています。プロセス呼び出しのすべてのT
スレッドは、MPI_Bcast
プロセスが T 回呼び出したことを意味しMPI_Bcast
、コミュニケーターの他のすべてのランクが同じことを行うことを期待しています。
MPI の実装におけるスレッド サポートのレベルに応じて (MPI でのスレッド サポートは非常に大雑把であることを確認してください)、MPI 呼び出しはプロセスごとに 1 回だけ行われます。
Novocrat の回答に追加するには:
MPI における計算の基本単位は「ランク」です。ほとんどの (すべて?) MPI の興味深い実装では、ランクはプロセスです。プロセス内のすべてのスレッドは、同じランク ID を共有します。
MPI 標準では、MPI_THREAD_SINGLE、MPI_THREAD_FUNNELED、MPI_THREAD_SERIALIZED、および MPI_THREAD_MULTIPLE の複数レベルのスレッド並列処理がサポートされています。
これらのうち、MPI_THREAD_MULTILE だけが実際に複数のスレッドで MPI ライブラリへの重複呼び出しを行っています。他の 3 つのケースは、Rank が「シングル スレッド」であるかのように処理できるというアプリケーションからのアサーションです。詳細については、MPI_INIT_THREAD の MPI 標準エントリを参照してください。