[論文レビュー] OMP2MPI: Automatic MPI code generation from OpenMP programs
OMP2MPI は、OpenMP プログラムを自動的に MPI コードに変換するソースツーソースコンパイラであり、ノードを超えた分散メモリ HPC クラスタでの実行を可能にする。これは、OpenMP の並列ループを MPI 通信を用いたマスターウェイター パatters に変換することで実現され、正しくスケーラブルなコードが得られ、64 コア環境では通常の OpenMP バージョンやシーケンシャルバージョンを上回る 20× を超えるスケールアップが達成される。
In this paper, we present OMP2MPI a tool that generates automatically MPI source code from OpenMP. With this transformation the original program can be adapted to be able to exploit a larger number of processors by surpassing the limits of the node level on large HPC clusters. The transformation can also be useful to adapt the source code to execute in distributed memory many-cores with message passing support. In addition, the resulting MPI code can be used as an starting point that still can be further optimized by software engineers. The transformation process is focused on detecting OpenMP parallel loops and distributing them in a master/worker pattern. A set of micro-benchmarks have been used to verify the correctness of the the transformation and to measure the resulting performance. Surprisingly not only the automatically generated code is correct by construction, but also it often performs faster even when executed with MPI.
研究の動機と目的
- 単一ノードの共有メモリシステムを超えてスケーリング可能な OpenMP プログラムを、自動的にポータブルな MPI コードに生成することにより、その実現を図ること。
- 大規模な HPC クラスターや分散メモリの多数コアシステムで使用可能な、正しく構築された OpenMP から MPI への実用的で正しい変換を提供すること。
- 可読性を保ちつつ、専門家によるチューニングが可能な、パフォーマンスに競争力のある MPI 最適化の出発点を提供すること。
- ソフトウェア分散共有メモリランタイムの制限を克服し、明示的な MPI 通信パターンを露呈させること。
提案手法
- ツールは C/C++ の OpenMP ソースコードを解析し、抽象構文木(AST)を生成するために Mercurium コンパイラフレームワークを使用する。
- OpenMP の並列ループを特定し、静的解析を用いて共有変数、プライベート変数、およびリダクション変数(リダクション句の特別な処理を含む)を検出する。
- 各 OpenMP 並列領域を、ワークロード配布と結果収集に MPI_Send および MPI_Recv を使用するマスターウェイター パatters に変換する。
- 静的および動的ワークロード配布戦略をサポートし、負荷の不均衡が検出された場合には動的配布が使用される。
- データ配布は、最後のスレーブが書き込み操作を実行する場合にのみ、完全な配列を送信する。
- 最終化処理として、並列化されていないコードをマスターに割り当て、適切なクリーンアップを保証するための MPI_Finalize を挿入する。
実験結果
リサーチクエスチョン
- RQ1ソースツーソースコンパイラとして、OpenMP の並列ループを分散メモリ環境での実行に適した等価な MPI コードに自動的かつ正しく変換できるか?
- RQ2自動生成された MPI コードは、共有メモリシステム上での元の OpenMP バージョンと比較して、パフォーマンスを維持または向上させるか?
- RQ3生成された MPI コードは、クラスタ環境における多数コアでの効果的なスケーリングを達成できるか?
- RQ464 コアシステム上での生成コードのパフォーマンスは、シーケンシャルバージョンおよび元の OpenMP 実装と比較してどの程度か?
- RQ5可読性と構造を考慮すると、生成コードは専門家によるさらなる最適化がどの程度可能か?
主な発見
- OMP2MPI ツールは、大規模な HPC クラスターや実験的多数コアプラットフォームを含む、分散メモリシステム間でポータブルな正しく実行可能な MPI コードに OpenMP プログラムを成功裏に変換した。
- 生成された MPI コードは、元の OpenMP バージョンよりも優れたスケーラビリティを達成し、64 コア環境ではシーケンシャルベースラインと比較して 20× を超えるスケールアップを実現した。
- 平均して、生成された MPI コードは元の OpenMP バージョンを上回るパフォーマンスを示しており、一部のケースでは MPI が共有メモリシステム上でも OpenMP よりも効率的である可能性を示した。
- 変換は構築段階で正しく、意味的損失がなく、リダクション句の適切な初期化と蓄積を含む、OpenMP の主要な構文的特徴をサポートした。
- 静的および動的ワークロード配布をサポートしており、動的配布により不規則または不均衡な計算の負荷バランスが向上した。
- 生成されたコードは可読性が高く、さらなる手動最適化に適しており、パフォーマンスチューニングの実用的出発点として有効である。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。