[{"data":1,"prerenderedAt":117},["ShallowReactive",2],{"finding:a-6-feat-g-packed-investigation":3,"finding-runs:a-6-feat-g-packed-investigation":115,"finding-related:a-6-feat-g-packed-investigation":116},{"meta":4,"impact":27,"sections":33},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":15,"task_code":24,"related_runs":25,"related_findings":26},"a-6-feat-g-packed-investigation","A.6 #feat.G f16 packed Splat ROI 再評価 — kernel pair は完成、trainer integration は未着手で close","Splat2DPacked kernel pair (project \u002F rasterize forward + backward) と Rust glue は cherry-pick で main 取り込み可能な状態にしたが trainer の forward path で packed kernel を活性化する route が未実装。ROI ~1% 既知で integration 余地ナシ、close。","Investigation · feat.G f16 packed","2026-05-23","stable","spec","negative",[14],3,[16,17,18,19,20,21,22,23],"phase-5","feat-g","f16","packed","splat2d","investigation","deferred","metal","A.6",[],[],{"summary":28,"rank":29,"verdict":30,"delta_wallclock":31,"delta_memory":32},"Splat2DPacked kernel pair は完成 (cargo test 73\u002F73 pass) だが、trainer forward path は fp32 path のみで packed kernel を呼ぶ route がない。理論上 -39% memory traffic \u002F splat だが kernel pair 単独 bench で wallclock 効果 ~1% と既知。close。","low","investigative","~1% (既知、bench 不実施)","-39% per-splat (理論)",[34,37,46,49,52,63,65,67,69,75,77,79,81,83,89,91,93,95,100,102,108,110],{"type":35,"text":36},"lead","feat.G branch (\u003Ccode>claude\u002Fmusing-mendeleev-579d41\u003C\u002Fcode>) から Splat2DPacked kernel pair (project \u002F rasterize forward + backward) と Rust glue を cherry-pick で main 取り込み可能な状態にしたが、\u003Cstrong>trainer の forward path で packed kernel を活性化する route が実装されていない\u003C\u002Fstrong>。30k bench 不可、ROI ~1% (memory より既知) で時間 budget 内では integration 余地ナシ、close。",{"type":38,"items":39},"kv",[40,43],{"key":41,"value":42},"実装日","2026-05-23 (subagent worktree feat-g-f16-packed-takeup、commit 416a2b9 まで)",{"key":44,"value":45},"ユーザー判断","A.6 は documented investigation で close、bench は実施せず (2026-05-23)",{"type":47,"text":48},"heading","取り込み済みの内容",{"type":50,"text":51},"paragraph","subagent worktree \u003Ccode>agent-ad177df468acfb25a\u003C\u002Fcode> (branch \u003Ccode>feat-g-f16-packed-takeup\u003C\u002Fcode>、cargo test 73\u002F73 pass):",{"type":53,"ordered":54,"items":55},"list",true,[56,57,58,59,60,61,62],"\u003Ccode>splat-core\u002Ftypes.rs::Splat2DPacked\u003C\u002Fcode> (struct + round-trip helpers、\u003Ccode>half = \"2.4\"\u003C\u002Fcode> 依存追加)","\u003Ccode>shaders\u002Fforward\u002Fproject.metal\u003C\u002Fcode> の Splat2DPacked emit path","\u003Ccode>shaders\u002Fforward\u002Frasterize.metal\u003C\u002Fcode> の Splat2DPacked forward kernel","\u003Ccode>shaders\u002Fbackward\u002Frasterize_backwards.metal\u003C\u002Fcode> の Splat2DPacked backward kernel","\u003Ccode>splat-metal\u002Fkernels\u002Fproject.rs\u003C\u002Fcode> の packed entry method","\u003Ccode>splat-metal\u002Fkernels\u002Frasterize.rs\u003C\u002Fcode> の \u003Ccode>forward_packed\u003C\u002Fcode> + \u003Ccode>backward_buf_packed\u003C\u002Fcode> (テスト用 entry、trainer から呼ばれない)","test: \u003Ccode>forward_packed_matches_forward_fp32\u003C\u002Fcode>, \u003Ccode>backward_packed_matches_backward_simd_fp32\u003C\u002Fcode>",{"type":47,"text":64},"なぜ bench 不可",{"type":50,"text":66},"\u003Ccode>splat-train-v1\u002Fsrc\u002Ftrainer.rs\u003C\u002Fcode> の \u003Ccode>forward_with_state\u003C\u002Fcode> \u002F \u003Ccode>backward_rasterize_buf\u003C\u002Fcode> は \u003Cstrong>fp32 Splat2D path のみ\u003C\u002Fstrong> を呼ぶ。packed kernel は test 経由でのみ実行され、env \u002F config \u002F build flag で switch する route が無い。",{"type":50,"text":68},"実 trainer に packed path を組み込むには:",{"type":53,"ordered":54,"items":70},[71,72,73,74],"\u003Ccode>Param\u003C\u002Fcode> に packed buffer pool を追加 (現状 \u003Ccode>splat3d_buf\u003C\u002Fcode> \u002F \u003Ccode>splat2d_buf\u003C\u002Fcode> は fp32)","\u003Ccode>Trainer::forward_with_state\u003C\u002Fcode> を switch 化 (config flag で fp32 \u002F packed select)","backward chain (\u003Ccode>project_backwards\u003C\u002Fcode>) も packed entry を呼ぶよう改修","adam の SH coeffs update が fp16 を経由する場合の精度確保",{"type":50,"text":76},"これは feat.G の Phase 4 integration に相当し、feat.G branch にも未実装 (stage 1-3a までしか cherry-pick されていない)。",{"type":47,"text":78},"ROI ~1% 既知 — bench する価値が低い",{"type":50,"text":80},"memory \u003Ccode>[[feat_g_f16_packed_roi]]\u003C\u002Fcode> より、kernel pair 単独 bench で trainer 統合相当の wallclock 効果は ~1% と既知 (feat.G branch 内の独自 bench から)。",{"type":50,"text":82},"期待効果 (theoretic):",{"type":53,"items":84},[85,86,87,88],"Splat2D = 9 floats × 4 bytes = 36 bytes","Splat2DPacked = (xy: 2 f32) + (conic: 3 f16) + (rgba: 4 f16) ≈ 8 + 6 + 8 = 22 bytes → \u003Cstrong>-39% memory traffic per splat\u003C\u002Fstrong>","ただし rasterize は per-tile に 256 splat を threadgroup memory に load して再利用、bandwidth が律速かは疑問","bench 実測 ~1% は「bandwidth bound でなかった」を示唆",{"type":47,"text":90},"卒論への含意",{"type":50,"text":92},"第 3 軸 (Apple Silicon 固有最適化) の \u003Cstrong>Negative finding (微改善)\u003C\u002Fstrong>: f16 packed 表現は理論上 -39% memory traffic だが、実際の wallclock 効果は ~1% に留まる。Lego (~80k splats) で memory bound でなく compute bound (Shading + alpha 合成)。bandwidth 削減は \u003Cstrong>より大規模シーン (200k+ splats) で効果出る可能性\u003C\u002Fstrong>、卒研範囲外。",{"type":47,"text":94},"A.7 \u002F A.9 との関係",{"type":53,"items":96},[97,98,99],"\u003Cstrong>A.7 simpler batching\u003C\u002Fstrong>: commit overhead 削減、scope 別 (今 30k bench 中)","\u003Cstrong>A.9 f16 forward\u003C\u002Fstrong>: accumulator のみ f16 化、storage は f32 のまま、scope 別 (今 30k bench 中)","A.6 は \u003Cstrong>storage 全体を f16 化\u003C\u002Fstrong> する path、kernel pair は完成しているが trainer 統合に手間がかかる",{"type":47,"text":101},"残作業 (defer, 卒研後)",{"type":53,"ordered":54,"items":103},[104,105,106,107],"\u003Ccode>Param\u003C\u002Fcode> packed buffer pool 追加","trainer dispatch switch (config flag \u003Ccode>[backend] dtype = \"fp32\" | \"packed\"\u003C\u002Fcode>)","30k bench で wallclock \u002F PSNR drift 計測 → ROI 再確認","memory bandwidth profiling (Instruments Metal Trace) で「実際に bandwidth bound だったか」を確認",{"type":47,"text":109},"関連",{"type":53,"items":111},[112,113,114],"memory: \u003Ccode>[[feat_g_f16_packed_roi]]\u003C\u002Fcode> (ROI ~1% の元情報), \u003Ccode>[[feat_g_branch_state]]\u003C\u002Fcode> (branch 状態)","A.9 f16 forward (accumulator only): bench 進行中","A.5 final ablation 表 第 3 軸: \u003Ccode>final-ablation-table.md\u003C\u002Fcode>",[],[],1782449788619]