3

私が知っているように、並列処理メッセージパッシングインターフェイスとマルチスレッドには2つの方法があります。マルチスレッドは、メッセージ パッシング インターフェイスのない分散メモリ システムには使用できません。ただし、メッセージ パッシング インターフェイスは、「共有メモリ」と「分散メモリ」のどちらのシステムにも使用できます。私の質問は、MPI で並列化され、共有メモリ システムで実行されるコードのパフォーマンスについてです。このコードのパフォーマンスは、マルチスレッドで並列化されたコードと同じ範囲ですか?

アップデート:

私の仕事は、プロセスが繰り返し相互に通信する必要があり、通信配列が 200*200 マトリックスになる可能性があることです。

4

3 に答える 3

3

答えは次のとおりです. MPI プロセスは主に個別の OS プロセスであり、それらの間の通信は、通信するプロセスが同じ共有メモリ ノードで実行される場合、何らかの共有メモリ IPC 技術を使用して行われます。個別の OS プロセスであるため、MPI プロセスは一般にデータを共有せず、場合によっては各プロセスでデータを複製する必要があり、最適なメモリ使用量が得られません。一方、スレッドは大量のデータを共有でき、キャッシュの再利用の恩恵を受けることができます。特に、大規模な最終レベルのキャッシュを共有するマルチコア CPU (現在の世代の x86 CPU の L3 キャッシュなど) では有効です。スレッド間のデータ交換のためのより軽量な方法 (作業データは既に共有されているため、通常は同期のみ) と組み合わせた場合のキャッシュの再利用は、個別のプロセスによる 1 つの達成よりも優れたパフォーマンスにつながる可能性があります。

しかし、もう一度 - それは依存します。

于 2012-05-26T12:53:54.283 に答える
2

MPI と OpenMP のみを考慮すると仮定しましょう。これらは、あなたが言及した 2 つの並列プログラミング ファミリの 2 つの主要な代表であるためです。分散システムの場合、MPI は異なるノード間の唯一のオプションです。ただし、単一ノード内では、よくおっしゃる通り、MPI を使用でき、OpenMP も使用できます。どちらがより良いパフォーマンスを発揮するかは、実際に実行しているアプリケーション、特にその計算/通信比率によって異なります。ここでは、マルチコア プロセッサの MPI と OpenMP の比較を見ることができ、同じ観察結果を確認できます。

さらに一歩進んで、ハイブリッド アプローチを使用できます。ノード間で MPI を使用してから、ノード内で OpenMP を使用します。これはハイブリッド MPI+OpenMP 並列プログラミングと呼ばれます。ハイブリッド CMP+SMT プロセッサを含むノード内でこれを適用することもできます。

ここここでいくつかの情報を確認できます。さらに、このホワイト ペーパーでは、MPI アプローチとハイブリッド MPI + OpenMP アプローチを比較します。

于 2012-05-26T12:53:22.910 に答える
0

私の意見では、彼らは単純に別の仕事で優れています。アクター モデルは、さまざまなタイミングで多くの異なるタスクを非同期に実行するのに優れていますが、OpenMP/TBB/PPL モデルは、1 つのタスクを非常に簡単かつ確実に並行して実行するのに優れています。

于 2012-05-26T12:57:11.587 に答える