web-dev-qa-db-ja.com

MPIとOpenMPの違いは何ですか?

OpenMPとMPIの主な違いを(簡単に言えば)知りたいです。

34
elenaa

OpenMPは、共有メモリデバイスでプログラムする方法です。これは、すべての並列スレッドがすべてのデータにアクセスする場所で並列処理が発生することを意味します。

考えてみてください。特定のforループの実行中に、異なるスレッド間でループを分割することにより、並列処理が発生する可能性があります。

[〜#〜] mpi [〜#〜]は、分散メモリデバイスでプログラムする方法です。これは、すべての並列プロセスが他のプロセスから独立して独自のメモリ空間で動作している場合に、並列処理が発生することを意味します。

あなたはそれを考えることができます:あなたが書いたコードのすべてのビットは、すべてのプロセスによって独立して実行されます。並列処理が発生するのは、プロセスIDのみに基づいて、グローバルプロセスのどの部分で作業する必要があるかを各プロセスに正確に伝えるためです。

もちろん、OpenMPとMPIプログラムを記述する方法も非常に異なります。

59
NoseKnowsAll

[〜#〜] mpi [〜#〜]は、Message Passing Interfaceの略です。これは、メッセージの受け渡し(送信、受信、ブロードキャストなど)に関するAPI宣言のセットであり、実装から期待される動作を示します。

「メッセージの受け渡し」という考え方はかなり抽象的です。ローカルプロセス間またはネットワークホスト間で分散されたプロセス間でメッセージを渡すことを意味する可能性があります。現代の実装では、汎用性を高め、複数の基盤メカニズム(共有メモリアクセス、ネットワークIOなど)を抽象化することを非常に困難にしています。

OpenMPは、共有メモリマルチプロセッシングプログラムを(おそらく)簡単に作成できるようにするAPIです。メッセージを渡すという概念はありません。代わりに、一連の標準関数とコンパイラディレクティブを使用して、ローカルスレッドを並行して実行するプログラムを作成し、それらのスレッドの動作(アクセスするリソース、同期方法など)を制御します。 OpenMPはコンパイラのサポートを必要とするため、サポートされている言語の拡張として見ることもできます。

また、アプリケーションがMPIとOpenMPの両方を使用できることも珍しくありません。

15
Cong Ma