Konsep Inti
ディレクティブベースのプログラミングにおける計算の削減、メモリアクセスの削減、およびメモリスループットの向上を同時に実現する。
Abstrak
本論文は、ディレクティブベースのプログラミングのためのコード最適化手法であるACCサチュレーターを提案している。ACCサチュレーターは、等価飽和法を使用して、入力コードを完全に書き換えながら依存関係を維持し、最適なケースを抽出する。
具体的には以下の3つのステップで最適化を行う。
- 入力コードからSSA形式を構築し、等価クラスを持つe-グラフを作成する。
- FMAオペレーションの導入や演算の順序変更などの書き換えルールを適用し、等価飽和を行う。コストモデルに基づいて最適な解を選択する。
- 選択された最適な式に基づいて出力コードを生成する。一時変数の挿入や計算順序の最適化などを行う。
実験では、NAS Parallel BenchmarksとSPEC ACCELベンチマークスイートを用いて評価を行った。ACCサチュレーターは、NVHPC compilerで最大2.23倍、GCC compilerで最大5.08倍の性能向上を達成した。メモリアクセスの削減と計算の最適化により、メモリスループットを大幅に向上させることができた。
Statistik
最適化前のNPB-BTのカーネル実行時間は14.85秒(NVHPC)、28.04秒(GCC)
ACCサチュレーターにより、NPB-BTの実行時間は12.23秒(NVHPC)、12.74秒(GCC)に短縮された
SPEC ACCELベンチマークでは、OpenACCの場合平均1.08倍、OpenMPの場合平均1.47倍の性能向上が得られた
Kutipan
"ディレクティブベースのコードは一般的なプログラミングスタイルを維持し、コンパイル時まで特殊化されない。コンパイラがアクセラレータの性質を考慮しながら、計算、メモリアクセスの冗長性、およびそれらの順序を処理する責任がある。"
"現在のコンパイラは各メトリックを順次最適化するため、改善の機会が限られている。特に、ユーザー指定のディレクティブはループ構造を固定するため、ディレクティブ以外の手法を使ってコードを最適化する取り組みはほとんどない。"