松田研究室
FindingID: a-1-ssim-tile-shader-investigation
Status: stable / task A.1
← Findings Index
Investigation · Apple TBDR

A.1 SSIM タイルシェーダ — 実装試行せず documented investigation で close

TBDR imageblock_data を用いた SSIM tile shader 化は render-pipeline 大改修を伴い卒論完成までの時間枠で見合わず。卒論 第 3 軸 (Apple Silicon 固有最適化) に必要要件を記録する形で close。

negativerank: midinvestigative第 3 軸phase-5ssimtbdrmetalimageblockinvestigationdeferred
Δ Wallclock
expected -3〜5% (未検証)
Impact
TBDR imageblock_data ベースの SSIM tile shader 化は render pipeline 大改修 + backward 設計 + 既存テスト 23 件への影響が大きく、卒論 time-box では見合わない。必要要件のみ記録して close。期待効果は SSIM kernel -50% / trainer 全体 -3〜5%。
01

本文

TBDR imageblock_data を用いた SSIM tile shader 化は render-pipeline 大改修 を伴い卒論完成までの時間枠で見合わない。卒論 第 3 軸 (Apple Silicon 固有最適化) のセクションに「TBD: 試行せず、必要要件を記録」として残す。

ユーザー判断 (2026-05-23)

A.1 は investigation doc で close、実装はしない。

なぜ scope 大か

現状の SSIM は通常の compute kernel (splat/shaders/loss/ssim.metal、164 行):

  • mean / variance / covariance を per-pixel に compute kernel で計算
  • 7x7 window で gaussian blur (separable conv) を 2 段
  • compute pipeline state、threadgroup memory に依存

これを TBDR imageblock_data で書き直すには:

  1. render pipeline state への移行: compute shader → fragment shader, color attachment 配置, tile rendering pass 構築
  2. imageblock_data ピクセル間共有: Apple Silicon GPU の TBDR (Tile-Based Deferred Rendering) で、各 tile (32x32 px 程度) 内のフラグメントが local memory を共有できる仕組み
  3. 入出力 buffer/texture の re-binding: 既存 trainer は MTLBuffer ベース、TBDR pass は MTLTexture ベースで attachment 配置必要
  4. 既存テスト 23 件への影響: SSIM forward/backward の数値一致テストが render pipeline でも保てるか再検証

期待効果と risk

  • 期待効果: SSIM kernel wallclock -50% (Apple 公式 sample で +2-3x speedup を主張)、Phase 5 trainer 全体 -3〜5% (現状 SSIM は ~10% of iter time)
  • risk: render pipeline は forward しか書きやすくない (backward の adjoint を fragment shader で書くのは tricky)
  • render pass 内で gradient buffer に書き戻すには texture_load_atomic 系 API、Apple Silicon でしかサポートされない
  • PSNR drift が出る可能性 (TBDR は accumulate 順序が compute と異なる、A.10 で見た GPU 非決定性問題と類似)

実装するなら必要な手順

  1. splat-metal/src/kernels/ssim.rs を別 trait に切り出し (compute backend, tbdr backend を select 可能に)
  2. splat/shaders/loss/ssim_tbdr.metal を新規作成、fragment + imageblock_data
  3. MTLRenderPipelineState の構築 (現状ない)、color attachment / depth-stencil の用意
  4. backward pass の TBDR 化 (adjoint computation を fragment shader で再現)、または compute 維持の hybrid 路線
  5. cargo test (cpu reference との数値一致)、smoke run (PSNR drift < 0.05 dB)
  6. 30k bench + (期待 -3-5% wallclock vs M-3.x baseline 23m13s)

卒論への含意

第 3 軸 (Apple Silicon 固有最適化) で、当初 #5.34 として候補に挙げていたが、scope 過大で defer。卒論には「Apple Silicon の TBDR は固有機構として PSNR-neutral な速度向上の余地があるが、本研究の trainer は compute pipeline 構成 (M-3.x baseline) で動作しているため、render pipeline への移行が前提条件。今後の研究課題」と書く。

Stretch goal

卒研後の修論 / 追研究フェーズで再着手候補。

関連

  • A.10 Kahan finding (compiler 最適化問題): a-10-kahan-negative.md
  • A.5 final ablation 表 第 3 軸 row "A.1 SSIM タイルシェーダ": final-ablation-table.md
  • Apple 公式 TBDR sample: https://developer.apple.com/documentation/metal/customizing_render_pass_setup
03

関連 finding

© 2026 大竹律輝 — 松田研究室