複数の独立した GPU カーネルを単一のカーネルに統合する最適化技術。ループフュージョンの GPU 版に相当するが、カーネルの起動境界でグローバルメモリが暗黙的に同期される点がループフュージョンと本質的に異なる。 ## 定義 GPU プログラムは通常、複数のカーネルを順次起動する。各カーネル起動の境界ではグローバルメモリが暗黙的に同期され、中間結果が一旦デバイスメモリに書き出される。カーネルフュージョンはこの中間書き出しを排除し、データをレジスタまたはシェアードメモリ上で次の処理ステージに直接渡す。 **フュージョンの三方式**(Wang ほか [378] による分類): 1. **inner thread 方式**: 各スレッドが両カーネルの処理を担当。スレッドブロックとグリッドサイズが一致する必要がある 2. **inner thread block 方式**: 各スレッドブロックが両カーネルを順次処理。スレッドブロック間の独立性が必要 3. **inter thread block 方式**: ブロック番号に基づいて処理を振り分け ## 主な効果 - **グローバルメモリ帯域幅削減**: 同一データを扱う複数カーネルの中間書き出しを排除(最も普及した理由) - **キャッシュ効果向上**: データがキャッシュ/レジスタ上に留まる - **カーネル起動オーバーヘッド削減**: 起動回数を減らす - **データ再利用の向上**: 中間結果をレジスタ経由で渡す場合、同一スレッドがデータを保持し続ける ## トレードオフ・制約 - **レジスタ圧力増大**: フューズされたカーネルはより多くのレジスタを消費し、オキュパンシーが低下する可能性がある - **スレッドマッピング制約**: 2 カーネルが同一スレッド数でない場合、一方をシリアライズしてフュージョンするトレードオフが生じる - **グローバル同期不要の場合のみ適用可能**: フューズする 2 カーネルが異なるスレッドブロック間の同期を必要とする場合、通常のフュージョンは不可(ブロック間同期技術が必要) - **「fusibility」の判定**: 中間結果をレジスタで渡すには同一スレッドマッピングが必要。シェアードメモリ経由ならブロックマッピングが一致すれば可 ## 横断的知見 - **LLM 推論の中核技術**: [[FlashAttention]](Dao ほか 2022)はソフトマックス計算とアテンション行列積を単一カーネルに統合したカーネルフュージョンの代表例であり、HBM 往復を削減することで大幅な高速化を実現する。GPU 最適化の古典的技術が深層学習推論で再発見されている形態といえる。4 世代にわたる進化(FA1→FA4)はカーネルフュージョンの設計が GPU アーキテクチャの世代交代に密結合していることを示す——A100 ではタイリング+オンライン softmax の融合設計が中心だったが、Hopper ではワープ特化で非同期テンソルコアを活かす融合パイプラインへ、Blackwell ではテンソルメモリ(TMEM)と 2-CTA MMA モードを用いた融合設計へと、融合の「何をオンチップに留めるか」の対象が世代ごとに変わっている。(Source: [[@2022__arXiv__FlashAttention - Fast and Memory-Efficient Exact Attention with IO-Awareness]], [[@2026__arXiv__FlashAttention-4 - Algorithm and Kernel Pipelining Co-Design for Asymmetric Hardware Scaling]]) - **10〜17% の性能向上がグラフアルゴリズムで報告**: Liu ほか(2019)はグラフアルゴリズムで Kepler 2012 で 10〜74% の改善を報告するが、13% の低下も記録。全メモリ集約的アプリケーションでフュージョンが効果的だが、文脈依存性が高い([[@2023__CSUR__Optimization Techniques for GPU Programming]] §A.1.8) - **カーネル分割(Kernel Fission)と双対**: 大型カーネルをより単純な小カーネルに分割するカーネル分割は、フュージョンとは逆方向の最適化であり、規則性向上・auto-tuning 適用性向上の目的で使われる。どちらを選ぶかはカーネルの複雑性・データ共有パターン・レジスタ圧力によって異なる - **Triton・CuTe-DSL は手書きカーネルフュージョンの実装コストを Python レベルに下げる**: LLM高速化の勉強会資料は、素朴な Python + Torch 実装がループ 1 回あたり 10〜100 μs を消費し GPU 上での実装が必須になることを述べ、CUDA を書く工数・専門エンジニア雇用コストを避けるための DSL として Triton と CuTe-DSL を挙げる。近年の FlashAttention や vLLM の実装が基本的にこれらで書かれているという観察は、[[カーネルフュージョン]]の実装がカーネルフュージョン概念そのものの理論的発展から、そのフュージョンを Python から低コストで書けるツールチェーンの発展へ重心を移していることを示す。(Source: [[@2026__SpeakerDeck__LLM高速化(勉強会)]]) - **カーネル境界の暗黙同期という同じ問題に、Rubin は「フュージョンしない」第 3 の解を持ち込む**: カーネルフュージョンはカーネル起動境界のグローバルメモリ暗黙同期を、複数カーネルを 1 つに統合することで排除する。これに対し [[NVIDIA Rubin GPU]] のタイルレベル・カーネル間トリガリングは、producer/consumer を別カーネルのまま維持しつつ、producer の広範な完了を待たずデータドリブンなポーリングで consumer の対応タイルを早期開始する。フュージョンが「境界を消す」解であるのに対し、Rubin の機構は「境界は残すが待ち時間を細粒度化する」解であり、フュージョンできない(スレッドマッピング不一致・レジスタ圧力過大などで fusibility 条件を満たさない)producer-consumer 対にも適用できる点が異なる。Blackwell の programmatic dependent launch(粗粒度の早期開始)から Rubin のタイルレベルトリガリングへの進化は、フュージョン不可能なケースへの対処がハードウェアスケジューリング側でも独立に進んでいることを示す。(Source: [[@2026__NVIDIA Developer Blog__Inside NVIDIA Rubin GPU Architecture Powering the Era of Agentic AI]]) - **垂直フュージョンと水平フュージョンの区別は、演算強度引き上げ技術の系統立てに直結する**: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] は、同一データへの逐次演算を統合する「垂直フュージョン(vertical fusion)」と、データをまたぐ並列演算を統合する「水平フュージョン(horizontal fusion)」を区別し、CUTLASSやOpenAI TritonがTMEM/TMAを用いてこれらを効率的に実装すると述べる。本概念ページの三方式分類(inner thread/inner thread block/inter thread block)がスレッドマッピングの視点であるのに対し、垂直/水平の区別はデータフローの視点であり、両分類は直交する形で同じフュージョン技術を異なる軸から整理している。L2正規化の具体例(4カーネル・0.083 FLOPs/byte → 1カーネル・約0.25 FLOPs/byte)は、フュージョンが[[Rooflineモデル]]上の演算強度を定量的にどれだけ動かすかを示す数少ない具体的な数値例であり、「フュージョンが有効」という定性的主張に定量的な裏付けを与える。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] §Kernel Fusion) - **PyTorchのTorchInductorは要素積演算(elementwise/pointwise)のフュージョンを自動化するが、非標準演算やカスタムCUDA演算は手動フュージョンが必要**という限界がch.9で明示されている。これは本概念ページの「Triton・CuTe-DSLが手書きカーネルフュージョンの実装コストをPython レベルに下げる」という横断的知見と符合し、自動フュージョン(コンパイラ)と半手動フュージョン(DSL)という2つの異なるレベルの自動化が並行して発展している状況を示す。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] §PyTorch and Arithmetic Intensity) - **『機械学習システムデザイン』7章は、本ページの垂直/水平フュージョンの区別を、GPUカーネル起動境界という具体的な文脈より手前にある、コンパイラ一般のIR最適化として提示する**: 同章は推論最適化のIR(中間表現)パイプラインにおいて、融合演算(局所的最適化。複数の逐次ループを1つに統合し冗長なメモリアクセスを避ける)と、計算グラフ全体を対象とする垂直融合・水平融合(全体的最適化)を区別し、畳み込みニューラルネットワークの計算グラフに対する垂直融合・水平融合の図解を示す。この区別は、[[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]]がCUTLASSやOpenAI TritonのTMEM/TMA実装という具体的なGPUハードウェア機構に結びつけて説明する垂直/水平フュージョンの、より一般化された(ハードウェア非依存の)前段の説明として読める。同一の垂直/水平フュージョンという概念が、2022年の一般的なMLシステム教科書ではコンパイラのIR最適化として、2025年のGPU性能エンジニアリング書ではCUDA固有のカーネル実装技法として、異なる抽象度で独立に説明されている。加えて7章は、人間設計のヒューリスティックの限界(非最適解・非適応性)を克服する手段としてautoTVM(部分グラフの実行時間を予測するコストモデルを機械学習で訓練し最適化探索を行う手法)を紹介しており、本ページの「Triton・CuTe-DSLが手書きカーネルフュージョンの実装コストを下げる」という既存知見とは異なる方向——最適化の探索そのものを機械学習に委ねる方向——の自動化を提示する。(Source: [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]] §7.4.1.1, §7.4.1.2, [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] §Kernel Fusion) ## 未解決の問い - FlashAttention のようなカーネルフュージョンは手動で設計されているが、FA4 の CuTe-DSL(Python ベース)実装はコンパイル時間を 20-30 倍短縮した。この方向は自動フュージョンとどう交差するか - 3 個以上のカーネルを同時にフュージョンする場合の最適な分割点はどう決定するか - Hopper の Non-Coherent MicroBenchmarks や Tensor Memory Accelerator (TMA) はカーネルフュージョンのトレードオフをどう変えるか - Rubin のタイルレベル・カーネル間トリガリングが十分に細粒度化した場合、カーネルフュージョンそのものの必要性は薄れるか。「境界を消す」設計と「境界の待ち時間を減らす」設計はどちらが今後の主流になるか、それとも用途(fusibility の有無)で使い分けが続くか ## 関連 - ソース: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] / [[@2026__SpeakerDeck__LLM高速化(勉強会)]] / [[@2026__NVIDIA Developer Blog__Inside NVIDIA Rubin GPU Architecture Powering the Era of Agentic AI]] / [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]] - 概念: [[GPU最適化]] / [[LLM推論]] / [[Rooflineモデル]] / [[推論最適化]] - エンティティ: [[NVIDIA Rubin GPU]] / [[CUTLASS]] ## 出典 - [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]](§Kernel Fusion。垂直/水平フュージョン、CUTLASS/OpenAI TritonのTMEM/TMA実装) - [[@2023__OReillyJapan__機械学習システムデザイン - Chapter 7 モデルのデプロイと予測サービス]](§7.4.1.1 モデルの最適化: 融合演算、垂直融合・水平融合。§7.4.1.2 autoTVMによる最適化探索の自動化)