複数のホストで OpenMP プログラムを実行できるかどうかを知りたいです。これまでのところ、複数のスレッドで実行できるがすべて同じ物理コンピューター内で実行できるプログラムについて聞いただけです。2 つ (またはそれ以上) のクライアントでプログラムを実行することは可能ですか? MPI を使用したくありません。
2 に答える
はい、分散システムで OpenMP プログラムを実行することは可能ですが、周りのすべてのユーザーの手の届くところにあるとは思えません。ScaleMP は vSMP を提供します。vSMP は、多数のネットワーク ホスト上に仮想 NUMA マシンを作成し、この VM 内で通常の OS (Linux または Windows) を実行できる高価な商用ハイパーバイザー ソフトウェアです。高速ネットワーク相互接続 (InfiniBand など) と専用ホスト (通常の OS の下でハイパーバイザーとして実行されるため) が必要です。ここには稼働中の vSMP クラスターがあり、変更されていない OpenMP アプリケーションを実行しますが、パフォーマンスはデータ階層とアクセス パターンに大きく依存します。
NICTAは以前、vNUMAという名前の同様のSSIハイパーバイザーを開発していましたが、開発も停止しました. さらに、彼らのソリューションは IA64 固有のものでした (IA64 は Intel Itanium であり、現在の世代の x86 CPU である Intel64 と間違わないでください)。
Intel はかつて Cluster OpenMP (ClOMP、Clang に OpenMP サポートをもたらす類似の名前のプロジェクトと間違わないでください) を開発していましたが、「顧客の間で一般的に関心が低く、利益を示したケースが予想よりも少なかった」ために放棄されました。 (ここから)。ClOMP は OpenMP に対する Intel の拡張機能であり、Intel コンパイラ スイートに組み込まれていました。たとえば、GCC では使用できませんでした (GCC用の ClOMP 開発を開始するというこの要求は行き詰まりました)。古いバージョンの Intel コンパイラ (バージョン 9.1 から 11.1) にアクセスできる場合は、(試用) ClOMP ライセンスを取得する必要があります。期限切れ。また、バージョン 12.0 以降、Intel コンパイラは ClOMP をサポートしなくなりました。
他の研究プロジェクトは存在しますが (「分散共有メモリ」で検索してください)、vSMP (ScaleMP ソリューション) だけが本番 HPC 環境に十分に成熟しているようです (それに応じて価格も設定されています)。代わりに、ほとんどの努力が Co-Array 言語 (Co-Array Fortran、Unified Parallel C など) の開発に向けられているようです。Berkeley UPCを確認するか、MPI の学習に時間を費やすことをお勧めします。MPI は今後数年でなくなることはありません。
以前は、Cluster OpenMPがありました。
Cluster OpenMP は、MPI に頼らずに複数の SMP マシンを利用できる OpenMP の実装でした。この進歩により、明示的なメッセージング コードを記述する必要がなくなり、プログラミング パラダイムを混在させる必要がなくなるという利点がありました。Cluster OpenMP の共有メモリは、分散共有メモリ サブシステムを通じてすべてのマシンで維持されていました。クラスター OpenMP は、OpenMP の緩和されたメモリの一貫性に基づいており、絶対に必要な場合にのみ共有変数の一貫性を保つことができます。ソース
クラスター OpenMP のパフォーマンスに関する考慮事項
一部のメモリ操作は、他の操作よりもはるかにコストがかかります。Cluster OpenMP で優れたパフォーマンスを実現するには、保護されたページへのアクセス数と比較して、保護されていないページへのアクセス数をできるだけ多くする必要があります。これは、特定のノードでページが最新の状態になると、次の同期の前に多数のアクセスが行われる必要があることを意味します。これを実現するには、プログラムの同期をできるだけ少なくし、特定のページのデータをできるだけ再利用する必要があります。これは、アトミック コンストラクトやロックなどのきめの細かい同期を回避し、データの局所性が高いsourceを持つことを意味します。