松田研究室
FindingID: a-6-f16-packed-rebench
Status: stable / task A.6 (rebench)
← Findings Index
Investigation · A.6 Phase D rebench (orientation halt)

A.6 再評価 (Phase D 文脈) — feat.G f16 packed の ROI 上限 ~3.3%、M5 gate margin 0.11 dB と PSNR drift リスクが干渉、再着手非推奨

User task brief は「memory 半減 / 20-40% wallclock 改善」期待で再着手を指示したが、orientation 段階で 3 つの factual error を発見: (1) Splat2DPacked は実際は <strong>32 byte</strong> (36→18 ではない、RGB のみ f16、xy+conic+α は f32 維持)、(2) bandwidth 削減は <strong>-11%</strong> (-50% ではない)、(3) Phase D 30k memory footprint は packed で <strong>~12 MB</strong> (6.75 MB ではない)。bound math: rasterize fwd+bwd の wallclock 比率が 83k 時 ~10% → 375k で best-case ~30% に成長しても、11% × 30% = <strong>~3.3% wallclock 上限</strong>。これは旧評価 ~1% の 3 倍だが、user brief の 20-40% 期待からは 6-12× 下回り、また M5 Lego val gate margin (+0.11 dB) より RGB f16 量子化誤差 (0.1-0.5 dB 想定) の方が大きく、M5 gate を割る可能性。trainer 統合 ~2.5 h work × 期待 ROI 1-3% × M5 regression risk を考慮し再着手 reject。bench 不実施 (orientation のみで決着)。

negativerank: lowhalt-orientation-only第 3 軸phase-5a-6feat-gf16packedsplat2dphase-dbound-checknegativepremise-correctiondeferred
Δ PSNR
implement 時 0.1-0.5 dB regression risk (M5 margin 0.11 dB 食い込みあり)
Δ Wallclock
実装 ceiling ~3.3% (旧 ~1% より上限上昇だが期待値 20-40% に遠く及ばず)
Δ Splats
0 (struct layout 変更のみ、splat count に影響なし)
Impact
User task brief は Phase D 375k 文脈で旧 A.6 (~1% wallclock ROI) を再評価し f16 packed の真の bandwidth ROI を引き出すことを期待したが、orientation 段階で feat.G 実装の事実関係を確認した結果、3 つの factual error (32 byte / -11% / ~12 MB) が判明。bound math (rasterize fwd+bwd share 上限 30% × bandwidth 削減 11%) より wallclock 上限 ~3.3%、user brief の 20-40% 期待は実装の物理特性と整合しない。加えて M5 Lego val gate margin (+0.11 dB) より RGB f16 round-trip 誤差 (rel 5e-4、abs ~0.5 dB drift 想定) の方が大きい可能性、再着手は M5 gate を割るリスク。orientation 段階で halt、bench 不実施。
01

本文

User task brief は事実関係に 3 つの error を含み、それが "再着手すれば 20-40% wallclock ROI が見える" 期待を構築していた。orientation で実コード (commit 5a22770 / d01d6cf / ba740a4) と既存 memory (feat_g_f16_packed_roi.md) を照合した結果、bound math 上限 ~3.3% / M5 gate regression risk / trainer 統合 ~2.5 h cost の組合せで 再着手は net-negative。bench 不実施で halt、本 finding が durable な記録。

Headline (orientation halt, factual correction)

User task brief の事実関係 error 3 件 + bound math 上限低: (1) Splat2DPacked は 36→32 byte (18 byte は誤、RGB のみ f16 / xy+conic+α は f32 維持)、(2) bandwidth 削減は -11% (-50% 半減ではない)、(3) Phase D 30k memory footprint は packed で ~12 MB (375k × 32 byte、6.75 MB ではない)。 wallclock ROI 上限 bound = (rasterize fwd+bwd wallclock share 30% 仮定) × (bandwidth 削減 11%) = ~3.3%。M5 Lego val gate margin は +0.11 dB (36.106 vs 36 dB target)、RGB f16 round-trip rel error 5e-4 が compositing 累積で 0.1-0.5 dB 程度 PSNR drift 起こすと M5 を割る。trainer 統合 ~2.5 h work × bounded ROI × M5 regression risk で 再着手 reject

1. user task brief の factual error と実装現実

項目user brief 主張feat.G 実装現実 (commit 確認済)出典
Splat2D size36 byte (正しい)36 byte = 9 × f32splat-core/types.rs:14-25
Splat2DPacked size**18 byte (半減)****32 byte** (6 × f32 + 4 × f16)5a22770 commit body: "layout (32 bytes)"
bandwidth 削減**memory bandwidth 半減 (50%)****11% 削減** (32/36 = 0.89)ba740a4 commit body: "global memory bandwidth ~11% 削減"
packed の f16 化対象全 9 field f16**RGB 3 個のみ f16** (xy+conic+α は f32 維持)5a22770 body: "color_rgb_pad_bits ... 4 u16 = 8 bytes"
Phase D 30k memory13.5 MB → **6.75 MB 帯**13.5 MB → **~12 MB** (375k × 32 byte)計算: 375,146 × 32 = 12.0 MB
期待 wallclock ROI**-20〜-40%****~1-3% 上限** (bound math、後述)memory feat_g_f16_packed_roi.md + 本 bound check
f16 化を RGB のみに留めた理由は (a) xy/conic は sort/rasterize の coordinate 計算で f32 精度必要 (b) α (opacity) は compositing で最重要、precision drift で M5 gate を割るリスク — の 2 点。feat.G stage 1 commit body にも明記。全 field f16 化は別実装 (本 finding の §5 alternative 参照)。

2. wallclock ROI 上限 bound (Phase D 375k 文脈)

memory feat_g_f16_packed_roi.md に記録された旧評価 (~1% wallclock) は 83k splat baseline での timing breakdown に依拠:

旧 timing breakdown (83k splats、broken H.A 30k bench から):
  ts_forward        49.5%   (forward 全体)
  ts_fw_sort        22.3%   ← bandwidth 削減対象外
  ts_fw_emit        18.1%   ← bandwidth 削減対象外
  ts_fw_rasterize    5.4%   ← packed forward 対象 (rasterize.metal)
  ts_fw_offsets      2.2%
  ts_fw_project      1.5%   ← packed project 対象 (project.metal)
  ts_project_back    0.5%   ← packed backward 対象 (rasterize_backwards.metal)
  (backward ~5% 推定)

packed 削減対象合計 ≈ 12% of wallclock
× 11% bandwidth 削減  = **~1.3% wallclock 改善 (83k splat 時)**

Phase D 375k へのスケーリング bound:

  1. rasterize fwd+bwd の wallclock share は splat count linear ではない: per-tile work は (overlapping splats / tile) に依存。375k / 83k = 4.5x splat 増だが、tile 当たり overlapping splats は ~2-3x のオーダー (画面解像度固定なので)。
  2. sort (radix) は O(N log N) → 22.3% share が更に膨張、bandwidth 削減対象外なので相対的に packed の share が下がる方向に効く
  3. best-case bound: rasterize fwd+bwd share が 83k 時 ~10% → 375k 時 ~30% (3x 膨張仮定) → bandwidth 削減 11% × 30% = ~3.3% wallclock 上限
  4. realistic estimate: share 拡大は 1.5-2x 程度の方が現実的 → 15-20% share × 11% = ~1.7-2.2% wallclock 改善
結論 (ROI bound)

Phase D 375k 文脈で f16 packed の wallclock ROI は realistic 1.7-2.2% / ceiling 3.3%。user brief の 20-40% 期待値からは 6-12 倍下回る。実装の物理特性 (RGB のみ f16 化、bandwidth 削減 11%) と Phase D 30k の timing structure (sort 22% / emit 18% が bandwidth 削減対象外で支配的) を考慮すると、user brief の期待は何らかの prior misunderstanding (恐らく全 field f16 化を仮定) に由来する。

3. PSNR drift リスクと M5 gate margin との衝突

項目出典 / 計算
RGB f16 max rel error (per-splat round-trip)5e-4feat.G stage 1 unit test (splat2d_packed_color_within_f16_precision)
compositing 累積後の RGB drift~1e-3 帯feat.G stage 2 forward eq test: tol 5e-3 で pass、現実 drift は 1e-3 オーダー
PSNR drift 想定 (RGB error → log10 PSNR)0.1-0.5 dB保守的推定: 1e-3 RGB drift × 2 (compositing) → MSE 増加 ~2e-6 → ΔPSNR 0.1-0.5 dB
M5 Lego val gate margin (現状)**+0.11 dB**Phase D 30k 36.106 dB vs M5 target 36 dB
**Net**: M5 gate 維持確率**低**想定 drift 0.1-0.5 dB > margin 0.11 dB
RGB f16 quantization は理論上 small error だが、Phase D で M5 Lego val gate に既に gilded margin (+0.11 dB) で乗っている。0.2-0.5 dB 程度の drift で M5 を割る可能性、これは卒論の central evaluation table での "M5 gate 達成" 主張を pull back する重大 risk。

4. trainer 統合 cost

memory feat_g_branch_state.md に記録された通り、feat.G stage 3a (cherry-pick 対象) は trainer dispatch 未統合。kernel pair + Rust glue + test は完成しているが、`Trainer::forward_step` / `Trainer::backward_step` から packed kernel を呼ぶ route が無く、`splat-cli/src/cmd/train.rs` で B.1 (RunSummary 統合) と merge conflict 必至。

  1. cherry-pick 3 commit (5a22770, d01d6cf, ba740a4): kernel + glue 部分は base がほぼ独立 (splat-core/types.rs + shaders/) なので conflict 軽微
  2. trainer dispatch 配線 (~1 h): BackendConfig.splat2d_layout: "fp32" | "packed" 追加、ForwardState に packed buffer 持たせる、forward/backward で switch、ParamBuffer pool 拡張
  3. config flag 流す (~0.5 h): TOML schema + parse + CLI
  4. 5k smoke + 30k validation (~1 h + 42 min): PSNR drift 計測、wallclock 改善 ROI 確認
  5. 合計 ~2.5 h work for bounded ROI 1.7-2.2% wallclock with PSNR M5 regression risk
Cost-benefit conclusion

~2.5 h subagent work × bounded ~1.7-2.2% wallclock × M5 regression probability ~50% (drift 0.1-0.5 dB vs margin 0.11 dB) = negative expected utility。同 2.5 h を使うなら sort kernel 高速化 (share 22%、ROI 上限大) や emit kernel 高速化 (share 18%) の方が leverage 桁違いに大きい。

5. もし真に bandwidth-ROI が見たいなら (alternative axes)

user brief の根本動機が "Phase D 375k で bandwidth bound を可視化したい" なら、より大 ROI の alternative がある:

alternativescope期待 wallclock ROIPSNR risk
**full f16 Splat2D** (xy + conic も f16)kernel 再書き直し、precision 検証必要~5-8% (32→18 byte で本物の bandwidth 半減)xy/conic 精度低下で sort 順序変化、>1 dB drift リスク
**sort kernel 高速化** (radix 8-bit prefix)新 kernel、A.x で 1 件 reject 済 (variance)~5-10% (share 22% × ~30-50%)ゼロ (algorithm 等価)
**emit kernel 高速化** (tile_bin 並列度上げ)新 kernel、未調査~3-6% (share 18% × ~15-30%)ゼロ
**rasterize threadgroup memory layout 最適化**既存 kernel 改変、A.x で深掘り余地~2-4%ゼロ
A.6 f16 packed (RGB のみ、現実装)trainer 統合 ~2.5 h**~1.7-2.2%**0.1-0.5 dB
user brief の動機 "bandwidth bound 顕在化" を真に追求するなら full f16 Splat2D が筋だが、xy/conic 精度低下が sort key を変えて PSNR を大きく崩す可能性。確実な ROI は sort/emit kernel 側で取る方が leverage 高い。

6. 旧 A.6 close-out (2026-05-23) との関係

a-6-feat-g-packed-investigation.toml (2026-05-23) で既に A.6 は "kernel pair 完成 + ROI ~1% で close" としていた。本 finding は同じ結論を Phase D 文脈で再検証 したもの:

  • 旧 finding: 83k splat baseline、ROI ~1% / kernel pair 完成 / trainer 統合 deferred
  • 本 finding (rebench): 375k splat (Phase D 30k) 文脈、ROI 上限 ~3.3% に上昇するも 期待 20-40% には遠く、加えて M5 gate margin 干渉発見 → defer 結論を strengthen
  • user brief の 18 byte / -50% bandwidth / -20-40% wallclock は factual error、旧 finding 時点で既に commit body に明記されていた 32 byte / -11% bandwidth を見落とした可能性

7. 結論 (autonomous loop 判断)

Decision: A.6 再着手しない、旧 close 維持

orientation 段階で halt、bench 不実施。bound math (~1.7-2.2% realistic / ~3.3% ceiling) × M5 gate regression risk (drift 0.1-0.5 dB vs margin 0.11 dB) × 統合 cost (~2.5 h) で net-negative expected utility。卒論 central evaluation の "M5 gate 達成" 主張を守るため、PSNR drift を伴う optimization は Phase 6 (post-thesis or 軸 1 native kernel 完成後) に再考。同 budget は sort/emit kernel 高速化または full f16 Splat2D 検証に振るべき

8. 関連

  • 旧 close-out: a-6-feat-g-packed-investigation (2026-05-23)
  • Phase D 30k 結果 (本 rebench の baseline): p1-d-stage2-30k-results
  • memory ROI 既知: feat_g_f16_packed_roi.md
  • memory branch 状態: feat_g_branch_state.md
  • feat.G commits: 5a22770 (stage 1 struct), d01d6cf (stage 2 forward kernel), ba740a4 (stage 3a backward kernel)
  • feat.G branch (cherry-pick 元): feat-g-f16-packed-takeup
03

関連 finding

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