設定パラメータの最適値を自動的に探索するプロセス。特に GPU プログラミングにおいては、スレッドブロックサイズ・スレッド毎ワーク量・タイルサイズ・疎行列フォーマットパラメータなど、性能に大きく影響するが最適値を解析的に求めることが困難なパラメータの組み合わせを自動探索する。
## 定義
GPU カーネルの性能は多数のパラメータに依存する。これらパラメータの最適値は (1) カーネル固有の計算特性、(2) 入力データの特性、(3) 実行アーキテクチャの三者の交差で決まり、解析的に求めることは一般に困難である。Auto-tuning はこの問題を設定空間の自動探索として定式化し、ベンチマーク実行を繰り返しながら最良設定を発見する。
## フレームワーク例
- **Kernel Tuner** ([Ben van Werkhoven], [389]): 汎用 GPU カーネル auto-tuning フレームワーク
- **CLTune** ([287]): OpenCL/CUDA 向け探索最適化チューナー
- **PADL** ([58]): 近似離散ラドン変換の OpenCL チューニング事例
- **OpenTuner** ([147]): 汎用 auto-tuning フレームワーク
- **Kernel Tuning Toolkit** ([304]): カーネル実行 API 付きベンチマーク基盤
## 主な適用領域(文献の集計より)
1. 疎行列演算(SpMV): フォーマットパラメータ・ブロックサイズ
2. ステンシル演算: タイルサイズ・スレッド数
3. 密行列乗算(DGEMM/SGEMM): タイル・アンローリング因子
4. 線形代数全般(Cholesky 因子分解等)
## 横断的知見
- **auto-tuning は GPU 最適化の必要条件化している**: Hijma ほか(2023)の分析で全論文の 1/8 超が auto-tuning を採用。スレッドブロックサイズ単一パラメータですら最適値を解析的に決定することが困難であり、特にスレッド数がレジスタ数・シェアードメモリ量・TLP に同時に影響するためである([[@2023__CSUR__Optimization Techniques for GPU Programming]] §6.3.6)
- **性能移植性(Performance Portability)もまた auto-tuning の目標**: Magni ほか(2013, 2014)は AMD Cypress・Tahiti・NVIDIA Fermi・Kepler の 4 アーキテクチャで thread coarsening パラメータが大幅に異なることを実証し、アーキテクチャ非依存な高性能コードは auto-tuning なしには書けないことを示した([[@2023__CSUR__Optimization Techniques for GPU Programming]] §6.3.4)
- **疎行列ドメインが最大の利用領域**: 疎行列のフォーマット選択と行列スパース性が相互依存するため、auto-tuning が特に有効であり、広く採用されている
## 未解決の問い
- 機械学習ベースのコスト予測モデルは、探索空間のどの部分を事前刈り込みできるか
- 一つのアーキテクチャで得た auto-tuning 結果を次世代アーキテクチャに転用する際の劣化はどの程度か
- 入力データの特性変化に対してオンライン再チューニングを行う場合、収束速度と実行コストのトレードオフをどう扱うか
- LLM カーネル(Flash Attention 等)に特化した auto-tuning 空間の設計はどうあるべきか