# Rooflineモデル
## 定義
Roofline モデル(屋根線モデル)は、ハードウェアの性能限界を可視化する性能分析フレームワークである。縦軸に演算性能(FLOP/s)、横軸に演算強度(Arithmetic Intensity; FLOP/Byte)を取ったグラフ上に、ピーク演算性能と帯域幅上限という 2 つの「屋根線」を引く。プログラムの実測点がこのグラフのどこに位置するかで、「演算バウンド(compute-bound)」か「帯域幅バウンド(memory-bound)」かを判定し、最適化の方向性を示す。
XProf では高レベルの [[MLプロファイリング]] ツールとして Roofline 分析を提供し、プログラムがハードウェアの性能限界のどの部分に当たっているかを可視化する。([[@2026__MLSys2026__XProf - An Open, Scalable and Extensible Profiling System for the Modern ML Stack]])
## 演算強度と屋根線
演算強度(Arithmetic Intensity, AI) = 演算量(FLOP) / メモリアクセス量(Byte)
2 つの屋根線:
- **演算の屋根(Compute Roof)**: ピーク演算性能 P_peak [FLOP/s]
- **帯域幅の屋根(Memory Bandwidth Roof)**: ピーク帯域幅 B_peak × AI [FLOP/s]
実測性能は必ずこの 2 線の最小値を上回れない。演算強度が低いとメモリ帯域幅に律速され、高いと演算器が律速される。
## MLワークロードへの適用
現代の ML モデルでは:
- **演算バウンド**: 大きな行列積(GEMMなど)。演算強度が高く、計算器の利用率を上げることが最適化の鍵。
- **帯域幅バウンド**: 活性化関数・要素積演算・アテンション機構など。メモリアクセスを減らす(フュージョン等)ことが効果的。
- **LLM の注意機構**: シーケンス長に対して IO コストが二乗で増加し、典型的に帯域幅バウンドになりやすい。
## ridge point の具体例(GPUカーネルレベル)
`AI Systems Performance Engineering`(ch.6)は、2つのfloat32(8バイト)をロードして加算(1 FLOP)し1つのfloat32(4バイト)を書き戻す単純なカーネルを例に、演算強度を1 FLOP/12バイト ≈ 0.083 FLOPs/byteと計算する。Blackwellのridge point(約80 TFLOPs ÷ 8 TB/s ≈ 10 FLOPs/byte)と比較すると、このカーネルは100倍以上左(メモリバウンド側)に位置し、明確にメモリバウンドと判定される。低精度化(FP32→FP16→FP8→FP4)は転送バイト数を減らして演算強度を引き上げ、カーネルをridge pointの右側(演算バウンド)に近づける主要な手段として提示される。128バイトのメモリトランザクションはFP32で32値・FP16で64値・FP8で128値・FP4で256値を運べる。Blackwellはさらにハードウェアによる圧縮重みのオンザフライ展開を持ち、実効メモリ帯域幅をさらに押し上げる。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 6 GPU Architecture, CUDA Programming, and Maximizing Occupancy]] §Roofline Model)
## 横断的知見
- **占有率の最大化とRoofline上の演算強度引き上げは独立した最適化軸である**: [[GPU占有率(Occupancy)]]はレイテンシ隠蔽(同じメモリバウンド状態でもGPUをアイドルにしない)によってスループットを上げる手段だが、Roofline上でメモリバウンドという状態そのものを脱却するには演算強度を上げる(低精度化・演算の再利用増加など)必要がある。書籍(ch.6)はLLM decodeフェーズを「占有率を上げても解決しない」メモリバウンドワークロードの典型例として挙げ、この2軸が別問題であることを明示する。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 6 GPU Architecture, CUDA Programming, and Maximizing Occupancy]] §Maintaining High Occupancy and GPU Utilization, §Roofline Model)
- **XProf の高レベル可視化ツールと、書籍の一次的な数式的定義は同じ枠組みを別の層で扱う**: XProf(§定義)は Roofline 分析を ML プロファイラの一機能として提供する高レベルツールだが、[[@2026__技術評論社__実践的パフォーマンスエンジニアリングによるAI高速化 - Chapter 2 パフォーマンス計測]] は算術強度 I=F/B の定義・行列積(GEMM)の算術強度の具体的な計算(FP8/FP32/GEMVでの数値例)・リッジポイントによる演算律速/メモリ律速の判定という、Roofline モデルそのものの数理的基礎を提供する。両者を合わせると、「ツールが何を計算しているか」の内部ロジックが明確になる。(Source: [[@2026__MLSys2026__XProf - An Open, Scalable and Extensible Profiling System for the Modern ML Stack]], [[@2026__技術評論社__実践的パフォーマンスエンジニアリングによるAI高速化 - Chapter 2 パフォーマンス計測]] §2.3.5)
- **テンソル並列化のような分散計算はメモリ帯域の屋根自体を引き下げる**: 書籍の事例(§2.3.5 事例B)では、GEMM を複数GPUでテンソル並列に分散すると、メモリ帯域幅がノード内通信の 0.6TB/s まで下がり、単一GPU内の主記憶帯域(2TB/s)を仮定した場合よりリッジポイントが低い方へシフトし、同じ算術強度でも演算律速からメモリ律速に転じることがある。これは Roofline モデルの「屋根」がハードウェア単体でなく、実際の並列化戦略・通信階層によって動的に決まることを示す実例であり、XProf のような単一デバイス視点の Roofline 可視化を分散設定に適用する際に注意すべき点である。(Source: [[@2026__技術評論社__実践的パフォーマンスエンジニアリングによるAI高速化 - Chapter 2 パフォーマンス計測]] §2.3.5)
- **演算強度を引き上げる技術は「タイリング・再利用」「フュージョン」「疎性・低精度」の3系統に整理できる**: ch.6 が演算強度の数式的定義とridge pointの判定基準を与えるのに対し、[[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] はridge pointを演算バウンド側へ動かす具体的な実装技術を列挙する。多段マイクロタイリング・スレッドブロッククラスタ(DSMEM/TMAマルチキャスト)はメモリから読んだ1バイトの再利用回数を増やす系統、[[カーネルフュージョン]]は中間結果のグローバルメモリ往復そのものを消す系統、2:4構造化スパース性と低精度Tensor Core(TF32→FP8→FP4)は分母(転送バイト数)を減らす系統であり、3系統は独立に併用できる。ch.9 の L2 正規化の例では、4カーネルの素朴実装(0.083 FLOPs/byte)を1カーネルに融合するだけで約0.25 FLOPs/byteまで演算強度が上がり、ridge point方向への移動を定量的に確認できる。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 6 GPU Architecture, CUDA Programming, and Maximizing Occupancy]] §Roofline Model, [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] §Kernel Fusion)
- **CUTLASSは演算強度引き上げ技術の「実装コスト」を解消するレイヤーとして機能する**: ch.9 が挙げるタイリング・ダブルバッファリング・フュージョンは理論上は開発者が手作業で実装すべき技術だが、[[CUTLASS]] はこれらをテンプレート宣言1つに圧縮し、手書きMMAカーネルの数%以内の性能(Tensor Core利用率98%)を達成する。Rooflineモデルが「どこまで演算バウンド側に寄せられるか」の理論的上限を示す一方、CUTLASSはその上限に近い実装を自動生成する実務的な橋渡し役であり、両者は理論と実装自動化という異なる層で補完し合う。(Source: [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]] §Using CUTLASS for Optimal Arithmetic Intensity and Tensor Core Performance)
## 未解決の問い
- HBM(High Bandwidth Memory)や HBM3/HBM4 など次世代メモリの登場で帯域幅の屋根が大幅に上昇した結果、従来は帯域幅バウンドだったオペレーションが演算バウンドに変わるケースは増えているか。
- フラッシュアテンション(FlashAttention)は IO 効率を改善することで Roofline 上の実測点を帯域幅の屋根に近づけるが、その効果は Roofline 分析ツールでどう可視化されるか。
- マルチチップ・マルチノード環境での Roofline 分析は、通信コストをどう組み込むか。演算強度の分母にネットワーク転送バイト数を含める拡張 Roofline は標準化されているか。書籍の事例(テンソル並列によるリッジポイントのシフト)は個別ケースの実測にとどまり、汎用的なマルチノード Roofline の定式化はまだ確認できていない。
- XProf の Roofline 分析はリアルタイムで更新されるか、それとも事後解析のみか。オンライン最適化ループへの組み込みは可能か。
- Roofline モデル(個別処理の理論限界とのギャップ評価)と [[アムダールの法則]](改善対象選定が全体高速化率の上限を決める評価)は、パフォーマンスエンジニアリングの意思決定フローにおいてどの順序・粒度で組み合わせるのが適切か。
## 関連
- ソース: [[@2026__MLSys2026__XProf - An Open, Scalable and Extensible Profiling System for the Modern ML Stack]] / [[@2026__技術評論社__実践的パフォーマンスエンジニアリングによるAI高速化 - Chapter 2 パフォーマンス計測]] / [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]]
- 概念: [[MLプロファイリング]] / [[GPU観測性]] / [[アムダールの法則]] / [[カーネルフュージョン]]
- エンティティ: [[OpenXLA]] / [[Google]] / [[CUTLASS]]
- 関連 MOC: [[Systems for ML - MOC]]
## 出典
- [[@2026__MLSys2026__XProf - An Open, Scalable and Extensible Profiling System for the Modern ML Stack]](slides §6 多段可視化表の高レベル行に Roofline Model が記載。MLSys 2026 発表ページのアブストラクト要約にも言及)
- [[@2026__技術評論社__実践的パフォーマンスエンジニアリングによるAI高速化 - Chapter 2 パフォーマンス計測]](§2.3.5、算術強度の定義・GEMM事例・リッジポイント)
- [[@2025__OReilly__AI Systems Performance Engineering - Chapter 9 Increasing CUDA Kernel Efficiency and Arithmetic Intensity]](§Kernel Fusion、§Using CUTLASS for Optimal Arithmetic Intensity and Tensor Core Performance)