[論文レビュー] OMP2HMPP: HMPP Source Code Generation from Programs with Pragma Extensions
OMP2HMPP は、Mercurium フレームワークを活用して変数の生存期間とデータ依存関係を分析することで、OpenMP拡張 C コードを GPGPU 加速用の HMPP 合致コードに自動的に変換するソースツーソースコンパイラである。順次実行と比較して平均 113× の高速化を達成し、手動最適化された HMPP バージョンとほぼ同等のコードを生成する。これにより、HPC および組み込み GPU の両方でポータブルな高性能コンピューティングが可能になる。
High-performance computing are based more and more in heterogeneous architectures and GPGPUs have become one of the main integrated blocks in these, as the recently emerged Mali GPU in embedded systems or the NVIDIA GPUs in HPC servers. In both GPGPUs, programming could become a hurdle that can limit their adoption, since the programmer has to learn the hardware capabilities and the language to work with these. We present OMP2HMPP, a tool that, automatically trans-lates a high-level C source code(OpenMP) code into HMPP. The generated version rarely will differs from a hand-coded HMPP version, and will provide an important speedup, near 113%, that could be later improved by hand-coded CUDA. The generated code could be transported either to HPC servers and to embedded GPUs, due to the commonalities between them.
研究の動機と目的
- OpenMP 拡張 C コードを HMPP 指令に自動変換することで、GPGPU プログラミングの複雑さを低減すること。
- 手作業で最適化されたバージョンと同等の性能と構造を実現する HMPP 最適化コードを生成すること。
- HPC サーバーと組み込み GPU を含む異種アーキテクチャ間で GPGPU アプリケーションのポータビリティを可能にすること。
- 低レベルの GPU プログラミングモデルに熟練していない開発者にとって、パフォーマンス最適化された出発点を提供すること。
- 将来的に Par4All のようなツールと統合し、順次 C/C++ コードからエンドツーエンドの自動並列化を実現することを検討すること。
提案手法
- BSC の Mercurium ソースツーソースコンパイルフレームワークを用いて、入力された OpenMP C コードを解析し、抽象構文木(AST)とシンボルテーブルを抽出する。
- 静的解析により、OpenMP パラレル化領域における変数のスコープ、ライブネス、およびデータアクセスパターンを特定する。
- callsite、codelet、group、advancedload、delegatestore、synchronize、release、noupdate、target などの HMPP 指令を適用し、OpenMP リージョンを GPU カーネルにマッピングする。
- noupdate および advancedload を使用して、複数のカーネルで使用される変数に対して、不要なアップロードやダウンロードを回避することで、データ転送を最適化する。
- 依存関係が許容する場合には GPU カーネルを非同期実行することで、並行性を向上させ、レイテンシを隠蔽する。
- CUDA および将来の OpenCL ターゲットをサポートする HMPP 合致 C コードを生成し、GPU プラットフォーム間でのポータビリティを確保する。
実験結果
リサーチクエスチョン
- RQ1最小限のパフォーマンス劣化で、ソースツーソースコンパイラが OpenMP 拡張 C コードから自動的に HMPP 合致コードを生成できるか?
- RQ2自動生成された HMPP コードは、手作業で最適化された HMPP 実装とどれほど性能と構造で近いのか?
- RQ3生成されたコードは、HPC および組み込み GPU プラットフォームの両方でどれほど高い高速化を達成できるか?
- RQ4データ転送の最小化や非同期実行などの最適化は、変換中に自動的に適用可能か?
- RQ5生成されたコードのパフォーマンスは、順次実行、OpenMP、および手作業で最適化された CUDA バージョンと比べてどうか?
主な発見
- OMP2HMPP は、テストされた HPC および組み込み GPU プラットフォームにおいて、順次実行バージョンと比較して平均 113× の高速化を達成した。
- 生成されたコードは、元の OpenMP バージョンと比較して平均 31× 以上の高速化を達成し、顕著なパフォーマンス向上を示した。
- 生成された HMPP コードのパフォーマンスは、手作業で最適化された HMPP バージョンとほとんど区別がつかず、構造的およびデータ移動の点でも最小限の差異にとどまった。
- noupdate および advancedload 指令を効果的に使用することで、データ転送のオーバーヘッドが著しく削減され、不要なアップロードやダウンロードが回避された。
- 生成されたコードは、NVIDIA Tesla GPU を搭載した HPC サーバーと組み込みシステムの Mali GPU を含む異種アーキテクチャ間でポータブルに動作した。
- ほとんどのベンチマークにおいて、生成されたコードのパフォーマンスは手作業で最適化された CUDA バージョンの 1.7× 以内に収まり、さらなるチューニングのための強力な最適化ポテンシャルを示した。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。