共有メモリは通常、メッセージ パッシングよりも効率的です。メッセージ パッシングは通常、データ移動 (ソースから宛先へのデータの移動) を増やす必要があり、パフォーマンスとエネルギーの両面でコストがかかります。このコストは、世代ごとに増加し続けると予測されています。
この資料では、MPI のみのアプリケーションは通常、ハイブリッド アプリケーションと同等かそれ以上であると述べていますが、通常はより多くのメモリを必要とします。
ただし、これらは、示されている大規模なハイブリッド アプリケーションのほとんどが、並列計算とシリアル通信に基づいているという事実に基づいています。
この種の実装では、通常、次の問題が発生しやすくなります。
不均一なメモリ アクセス: 1 つのノードに 2 つのソケットを持つことは、HPC で一般的なセットアップです。最近のプロセッサはオンチップのメモリ コントローラを備えているため、メモリの半分はローカル メモリ コントローラから簡単にアクセスできますが、残りの半分はリモートメモリ コントローラ (つまり、他のソケットに存在するもの)を通過する必要があります。したがって、プログラムがメモリを割り当てる方法は非常に重要です。メモリがシリアル化フェーズで (可能な限り最も近いメモリで) 予約されている場合、コアの半分がより長いメイン メモリ アクセスに苦しむことになります。
ロード バランス: 各 *並列計算からシリアル化された通信** フェーズは、同期バリアを意味します。このバリアにより、最速のコアが並列領域で最も遅いコアを待機するようになります。最速/最低のアンバランスは、OS プリエンプション (時間は他のシステム プロセスと共有されます)、動的周波数スケーリングなどの影響を受ける可能性があります。
この問題の中には、他の問題よりも簡単に解決できるものがあります。たとえば、複数ソケットの NUMA 問題は、異なる MPI プロセスを同じノード内の異なるソケットに配置することで軽減できます。
共有メモリの並列処理の効率を実際に活用するには、通信と計算をオーバーラップさせ、すべてのプロセス間の負荷分散を確保して、同期コストを軽減することが最善の方法です。
ただし、負荷が分散され、大きな同期障壁を課さないハイブリッド アプリケーションを開発することは非常に困難であり、現在、この複雑さに対処するための強力な研究努力が行われています。