GPU(Graphics Processing Unit)のプログラムから性能を最大限に引き出すためのソフトウェアレベルの手法・技術群の総称。CUDA・OpenCL などの GPU プログラミング言語上でプログラマが手動で適用する変換・チューニングを主対象とし、コンパイラ自動最適化やハードウェア改修は含まない。 ## 定義 GPU は大量の並列スレッドを同時実行する throughput-oriented プロセッサであり、単一スレッドの性能より全体スループットを優先する。最適化とは、この並列性を活かしながらメモリ帯域幅・計算量・同期オーバーヘッドの制約を同時に満たすバランスを見つける行為である。 **GPU の基本実行モデル**: - スレッドは thread block に束ねられ、Streaming Multiprocessor (SM) にマップされる - SM 内スレッドは 32 スレッドの warp 単位で命令をロックステップ実行(SIMT) - メモリ階層: レジスタ(最速) → シェアードメモリ(SM 内) → L1/L2 キャッシュ → デバイスメモリ(低速) → ホストメモリ(PCIe 経由) - TLP(スレッドレベル並列性)と ILP(命令レベル並列性)の両方が利用率に寄与 ## 分類体系(Hijma ほか 2023 による) [[Pieter Hijma]] らは 450 本の論文を分析し、4 テーマ・28 技術に分類した([[@2023__CSUR__Optimization Techniques for GPU Programming]]): ### テーマ 1: メモリアクセス - **オンチップ**: 専用メモリ使用・ワープ関数・レジスタブロッキング・レジスタ使用削減・再計算 - **オフチップ**: [[コアレスドメモリアクセス]]・空間的ブロッキング・[[カーネルフュージョン]]・ソフトウェアプリフェッチング・データ圧縮・プリコンピュート ### テーマ 2: 不規則性 - ループアンローリング・[[分岐発散]]削減・疎行列フォーマット・カーネル分割・冗長計算削減 ### テーマ 3: バランシング - ベクトル化・高速数学関数・ワープ中心プログラミング・スレッド毎ワーク変化・スレッドブロックリサイズ・[[Auto-tuning]]・負荷分散・同期削減・アトミック削減・ブロック間同期 ### テーマ 4: ホストインタラクション - ホスト通信・CPU/GPU 計算分担 ## アプリケーション特性による最適化選択 カーネルの性格によって適用すべき最適化が異なる: - **compute-bound カーネル**: ループアンローリング・スレッド毎ワーク変化・ベクトル化・auto-tuning が有効 - **memory-bound カーネル**: コアレスドアクセス・空間的ブロッキング・レジスタブロッキング・カーネルフュージョンが有効 - **データ再利用あり**: 専用メモリ・空間的ブロッキング・レジスタブロッキング・カーネルフュージョンが特に有効 - **不規則カーネル**: データ圧縮・分岐発散削減・疎行列フォーマット・カーネル分割・負荷分散が有効 ## 横断的知見 - **最適化は相互依存する**: カーネルフュージョンはメモリアクセス削減だけでなくブロック間同期を可能にしてプリフェッチングを実現する。ループアンローリングはレジスタブロッキングを促進する。これらの連鎖があるため、単一最適化の効果を分離して評価することは困難である([[@2023__CSUR__Optimization Techniques for GPU Programming]]) - **採用頻度トップ 4 はコアレスドアクセス・専用メモリ使用・分岐発散削減・auto-tuning**: これらは GPU の基本的な制約(帯域幅・分岐・パラメータ探索)を直撃する技術であり、アーキテクチャが変化しても汎用性を保つ([[@2023__CSUR__Optimization Techniques for GPU Programming]] Fig. 3) - **アーキテクチャ世代によって効果が激変する**: Fermi の L1/L2 キャッシュ導入(2010)でコアレッシング効果が低下、Turing のキャッシュ統合(2018)でテクスチャメモリ効果が激減、Volta の Tensor Core(2017)で MMA 命令が特殊最適化ドメインを開いた([[@2023__CSUR__Optimization Techniques for GPU Programming]] §7.3) - **LLM 推論との接点**: [[LLM推論]]の高速化(Flash Attention・Page Attention 等)はカーネルフュージョン・シェアードメモリ活用・Tensor Core 利用といった GPU 最適化技術の直接応用である。ただし本サーベイ(2021 年以前)は LLM 時代の最適化を対象外としている ## 未解決の問い - Ampere(2020)・Hopper(2022)以降のアーキテクチャ(HBM3・NVLink・Transformer Engine)において各最適化技術の効果はどう変化するか - LLM 推論に特化した最適化技術(Flash Attention・Paged Attention・continuous batching)は本分類体系のどのテーマに属し、どう拡張されるか - [[Auto-tuning]] フレームワークは探索空間の爆発をどう扱うか。機械学習ベースのチューナーは汎化するか - 複数最適化を同時に適用したときの相互作用を事前に予測するモデルは存在するか