[{"data":1,"prerenderedAt":340},["ShallowReactive",2],{"finding:p1-axis1-phase-g2-brush-dispatch-architecture":3,"finding-runs:p1-axis1-phase-g2-brush-dispatch-architecture":216,"finding-related:p1-axis1-phase-g2-brush-dispatch-architecture":217},{"meta":4,"impact":34,"sections":40},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":16,"task_code":25,"related_runs":26,"related_findings":27},"p1-axis1-phase-g2-brush-dispatch-architecture","Phase G.2 brush 4.7× per-iter 速度差の真因 — command buffer batching、Phase F 全 kernel-level 改善試行への統一的構造説明","Explore subagent (very thorough) で brush (Burn\u002FCubeCL) と splat-rs (Metal 直) の dispatch architecture を実装まで降りて比較。\u003Cstrong>4.7× 速度差は architectural (command buffer batching) で kernel-level ではない\u003C\u002Fstrong> と 95% confidence で判明。brush は \u003Ccode>launch_unchecked()\u003C\u002Fcode> + Burn 内部 batching で per-iter 5-7 awaits → ~5 actual GPU flushes、splat-rs は per kernel 毎に \u003Ccode>wait_until_completed()\u003C\u002Fcode> で 10-50 flushes。84ms \u002F 18ms = 4.67× は計算と一致 (17ms GPU compute + ~25ms wait overhead = ~2.5ms × 10 wait)。\u003Cstrong>これは Phase F 5 連続 falsification (emit SIMD \u002F f16 \u002F radix GPU prefix \u002F refine GPU \u002F target cache) への統一的説明\u003C\u002Fstrong>: kernel-level optimization が効かなかったのは bottleneck がそこではなかったから。Top 3 hypotheses (batching 50% \u002F async readback 15% \u002F kernel fusion 5-10%)、最 ROI 高い backport は async readback (1-2 週、+3-5% wallclock) だが、F.3 falsification calibration 踏まえ実装前 skeptical 評価必須。","P1 axis 1 · Phase G.2 · structural finding · 4.7× gap explained","2026-05-25","stable","design","mixed",[14,15],1,2,[17,18,19,20,21,22,23,24],"p1-axis1","phase-g","brush-comparison","dispatch-architecture","command-buffer-batching","structural-finding","burn-cubecl","metal-direct","P1 axis 1 Phase G.2",[],[28,29,30,31,32,33],"m4-brush-bench","p1-axis1-phase-f1-emit-simd-falsified","p1-axis1-phase-f3-radix-gpu-prefix-falsified","p1-e-refine-gpu-smoke","p1-axis1-target-cache","p1-axis1-metal-opt-audit",{"summary":35,"rank":36,"verdict":37,"delta_psnr":38,"delta_wallclock":39},"Explore subagent (Sonnet very thorough) で brush 18ms\u002Fiter vs splat-rs 84ms\u002Fiter (4.67×) の真因を architectural 差で構造特定。\u003Cstrong>brush は Burn\u002FCubeCL backend の \u003Ccode>launch_unchecked()\u003C\u002Fcode> async dispatch + 内部 command buffer batching\u003C\u002Fstrong> で per-iter 5-7 explicit awaits → ~5 actual GPU flushes。一方 \u003Cstrong>splat-rs は per kernel 毎に \u003Ccode>cmd.wait_until_completed()\u003C\u002Fcode> で 10-50 GPU flushes\u003C\u002Fstrong>。計算: 17ms GPU compute + ~25ms wait overhead (~2.5ms\u002Fwait × ~10) = ~42ms、実測 84ms とは ~2× ずれあるが (subagent quantification の不確実性)、order-of-magnitude は一致。\u003Cstrong>これは Phase F 5 連続 falsification への統一的構造説明\u003C\u002Fstrong>: kernel-level micro-opt (SIMD reduction \u002F f16 accumulator \u002F radix GPU prefix \u002F TBDR imageblock 等) が効かなかったのは bottleneck が \u003Cstrong>per-kernel compute ではなく dispatch synchronization architecture\u003C\u002Fstrong> だったから。**主仮説 ranking** (subagent assessment): (1) command buffer batching (50% of gap、移植 VERY HIGH cost 6-10 週)、(2) async readback (15%、MEDIUM cost 1-2 週、+3-5% expected)、(3) kernel fusion (5-10%、EXTREME cost)。**ただし subagent quantification は overestimate 傾向あり** (Phase F.3 で「removed wait was overlapping with CPU work, not idle」発覚と矛盾、wait は free な場合もある)。卒論 narrative としては \u003Cstrong>structural explanation\u003C\u002Fstrong> として極めて価値高い、§5.4 negative findings 章で「Phase F 全 kernel-level 改善試行は architectural mismatch だった」統一的 paragraph 候補。","high","structural-explanation","N\u002FA (audit)","0% (audit) \u002F estimated +3-5% if async readback backport (要 prototype 検証)",[41,44,49,52,61,63,113,115,150,152,183,185,192,194,201,203,208,210],{"type":42,"text":43},"lead","brush per-iter 18ms vs splat-rs per-iter 84ms (4.67×) の真因を Explore subagent (very thorough) で audit。\u003Cstrong>真因は kernel-level ではなく architectural\u003C\u002Fstrong>: brush は Burn\u002FCubeCL backend の async dispatch + internal command buffer batching で per-iter ~5 actual GPU flushes、splat-rs は per kernel 毎に \u003Ccode>cmd.wait_until_completed()\u003C\u002Fcode> で 10-50 flushes。これは \u003Cstrong>Phase F 5 連続 falsification への統一的構造説明\u003C\u002Fstrong>: kernel-level 改善が効かなかったのは bottleneck が dispatch sync architecture だったから。",{"type":45,"label":46,"variant":47,"text":48},"callout","Headline (structural explanation for Phase F)","warning","\u003Cstrong>4.7× per-iter 差は kernel-level ではなく architectural\u003C\u002Fstrong>。brush は \u003Ccode>launch_unchecked()\u003C\u002Fcode> + Burn 内部 batching で per-iter 5-7 explicit awaits → ~5 actual GPU flushes、splat-rs は per kernel 毎の \u003Ccode>wait_until_completed()\u003C\u002Fcode> で 10-50 flushes。これは \u003Cstrong>Phase E refine GPU 化 \u002F target_upload cache \u002F F.1 emit_simd \u002F F.2 f16 \u002F F.3 radix GPU prefix の 5 連続 falsification に対する統一的説明\u003C\u002Fstrong>: 全部 kernel-level optimization で、architectural mismatch (per-kernel sync vs batched async) を fix できなかった。卒論 §5.4 narrative の核心: 「\u003Cstrong>Apple Silicon native Metal 直叩き = kernel-level 最適化の自由度はあるが、dispatch architecture の trade-off (per-kernel sync vs batched async) で wgpu→Burn\u002FCubeCL backend に劣後\u003C\u002Fstrong>」、第 2 軸 (wgpu 抽象コスト) は再 framing 必須 — \u003Cstrong>wgpu 自体は遅くないが Burn 経由の dispatch batching が圧倒的に効く\u003C\u002Fstrong>。",{"type":50,"text":51},"heading","1. brush dispatch architecture (Burn\u002FCubeCL backend、render.rs\u002Ftrain.rs 読解)",{"type":53,"ordered":54,"items":55},"list",true,[56,57,58,59,60],"\u003Cstrong>Forward pass\u003C\u002Fstrong>: \u003Ccode>project_forward_kernel\u003C\u002Fcode> \u002F \u003Ccode>project_visible_kernel\u003C\u002Fcode> \u002F \u003Ccode>map_gaussians_kernel\u003C\u002Fcode> \u002F \u003Ccode>rasterize_kernel\u003C\u002Fcode> 全て \u003Ccode>launch_unchecked()\u003C\u002Fcode> (async Task 返却、即座に next dispatch chain)。explicit await は \u003Ccode>TransactionOps::tr_execute()\u003C\u002Fcode> 1 回 (multiple buffer atomic read、render.rs:150-168)","\u003Cstrong>Backward\u003C\u002Fstrong>: CubeCL async Burn ops、autodiff 境界で defer sync。explicit awaits ~1-2","\u003Cstrong>Optimizer (train.rs:286-303)\u003C\u002Fstrong>: \u003Ccode>optimizer.step()\u003C\u002Fcode> ×3 (transforms \u002F sh \u002F opacity)、Burn AdamScaled 実装で内部 fused (推定 ~3 → ~1 actual flushes)","\u003Cstrong>Total per-iteration\u003C\u002Fstrong>: ~5-7 explicit awaits、Burn batching で ~5 actual GPU flushes","\u003Cstrong>Key pattern\u003C\u002Fstrong>: \u003Ccode>launch_unchecked()\u003C\u002Fcode> 即返却 + 依存先 kernel が \u003Ccode>.into_data_async().await\u003C\u002Fcode> で待つ pipeline parallelism",{"type":50,"text":62},"2. splat-rs dispatch architecture (Metal 直、trainer.rs 読解)",{"type":64,"columns":65,"align":70,"rows":73,"caption":112},"table",[66,67,68,69],"step","dispatch","wait_until_completed","code location",[71,72,72,71],"left","right",[74,79,82,87,92,95,98,101,104,107],[75,76,77,78],"project_soa","1 cmd buf","1","project.rs:148-207 [WAIT 1]",[80,76,77,81],"emit_pairs","tile_bin.rs:199-221 [WAIT 2]",[83,84,85,86],"radix_sort (GPU prefix、F.3 default)","GPU scan in 1 cmd","1 final","tile_bin.rs:336-396 [WAIT 3]",[88,89,90,91],"radix_sort (legacy CPU scan)","16 cmd buf","16","tile_bin.rs:398-481 [WAITS 4-19]",[93,76,77,94],"extract_offsets","tile_bin.rs:544-557 [WAIT]",[96,76,77,97],"rasterize forward","rasterize.rs:153-169 [WAIT]",[99,76,77,100],"loss eval","loss.rs",[102,76,77,103],"rasterize backward","rasterize.rs:277-368",[105,76,77,106],"project_backwards","project.rs:238-285",[108,109,110,111],"Adam (5 components)","5 cmd buf","5","adam.rs:124-200","**Total per-iteration**: GPU prefix scan path (F.3) で ~10 explicit waits、legacy CPU scan path で ~40+ waits。\u003Cstrong>brush の ~5 flushes と比較で 2-8× の sync overhead\u003C\u002Fstrong>。各 wait の固定 overhead ~2.5ms (subagent assessment、ただし F.3 calibration では partial overlap で実 cost ~1-2ms と推定) × 10 waits = ~10-25ms overhead = 4.7× gap の 50%+ を説明。",{"type":50,"text":114},"3. 真因仮説 ranking (subagent assessment、Phase F calibration で hedge)",{"type":64,"columns":116,"align":124,"rows":126,"caption":149},[117,118,119,120,121,122,123],"#","仮説","subagent confidence","gap 寄与","移植 cost","PSNR risk","F.3 calibration 補正",[72,71,125,72,125,125,71],"center",[127,134,142],[77,128,129,130,131,132,133],"**Command buffer batching (Burn\u002FCubeCL)**","**95%**","~50% (2.35×)","VERY HIGH (6-10 週)","MED","**confidence 維持** — F.3 で「wait は完全 idle ではない」発覚も、batching 自体は別の structural pattern",[135,136,137,138,139,140,141],"2","Deferred async readback","MED-HIGH 78%","~15% (0.7×)","MED (1-2 週)","LOW","**partial overestimate**: F.3 が「removed wait was overlapping with CPU work」を直接実証、async readback の純 gain は 1-2% 圏かもしれず",[143,144,145,146,147,132,148],"3","Kernel fusion (Burn compile)","MED 65%","~5-10% (0.2-0.5×)","EXTREME (8-12 週)","現実的不可能 (CubeCL port 必須)、卒論 narrative のみ","**hypothesis #1 (batching) が dominant**: brush の 4.7× 速度優位の半分以上を説明。但し移植 cost extreme (Burn 採用 = L1 独立性放棄)。**hypothesis #2 (async readback) は prototype 検証必須**: subagent +3-5% 予測だが F.3 calibration data (wait overlap CPU work) を踏まえ +1-3% に hedge、prototype 1-2 日で確認可能。",{"type":50,"text":151},"4. backport candidate (cost × benefit × risk)",{"type":64,"columns":153,"align":158,"rows":159,"caption":182},[154,155,156,122,157],"candidate","expected wallclock","cost","F.3 calibration 補正後 ROI",[71,72,125,125,71],[160,166,171,176],[161,162,163,164,165],"**GPU Prefix Scan (Phase F.3)**","実現済 -0% (regression)","DONE","NONE","**falsified** (Metal hazard tracker fence overhead 発覚)",[167,168,169,140,170],"**Async readback chains**","+3-5% (subagent) \u002F +1-3% (hedged)","MEDIUM 1-2 週","**prototype gate**: 1-2 日 PoC で実 gain 計測、不明確なら drop",[172,173,174,132,175],"**Manual cmd buffer batching**","+10-15% (subagent) \u002F +3-8% (hedged)","HIGH 2-4 週","**high uncertainty**: kernel 間依存 graph 解析必須、F.3 fence trap 再発 risk",[177,178,179,180,181],"**CubeCL\u002FBurn port**","+50-70% (subagent)","EXTREME 6-10 週","MED-HIGH","**実行不可**: L1 独立性 (research-plan.md 2026-04-24 pivot) を放棄、卒論 narrative 大改変","Phase F.3 calibration data 踏まえると、subagent assessment の +3-5% \u002F +10-15% は overestimate 傾向。\u003Cstrong>最 actionable は async readback prototype\u003C\u002Fstrong> (1-2 日 PoC、+1-3% 実 gain か検証)、不明確なら drop して thesis narrative に focus。",{"type":50,"text":184},"5. 卒論 §5.4 narrative 価値 (structural finding)",{"type":53,"items":186},[187,188,189,190,191],"\u003Cstrong>Phase F 5 連続 falsification への統一的構造説明\u003C\u002Fstrong>: kernel-level optimization が効かなかったのは bottleneck が dispatch sync architecture だったから (per-kernel \u003Ccode>wait_until_completed\u003C\u002Fcode> vs batched async)","\u003Cstrong>axis 2 narrative 再 framing\u003C\u002Fstrong>: 「wgpu 抽象は遅い」予想は false (m4-brush-bench で確定済)、\u003Cstrong>Burn\u002FCubeCL の dispatch batching が圧倒的に効く\u003C\u002Fstrong>。「Metal 直 = 最速」の常識を覆す","\u003Cstrong>axis 1 native impl の honest reporting\u003C\u002Fstrong>: 我々の splat-rs Metal 直は kernel-level 自由度はあるが、dispatch architecture の trade-off で brush に -77% wallclock 劣後。\u003Cstrong>PSNR は M5 で +0.63 dB 上回り、quality-speed Pareto 上の異なる point\u003C\u002Fstrong>","\u003Cstrong>§6 future work\u003C\u002Fstrong>: 「Metal 直 + async readback \u002F cmd buffer batching」を non-Burn path として明示、また「Burn 採用 (P2 fork) を pragmatic 後継路線として認める」future work","\u003Cstrong>方法論 paragraph\u003C\u002Fstrong>: 「kernel-level audit (p1-axis1-metal-opt-audit) → 5 連続 falsification → architectural audit (Phase G.2) で根本特定」の honest iteration、bottoms-up vs top-down audit の対比",{"type":50,"text":193},"6. 次のアクション",{"type":53,"ordered":54,"items":195},[196,197,198,199,200],"\u003Cstrong>G.1 (early stop) 完了待ち\u003C\u002Fstrong>: 既進行中 Lego stop_iter=15000 結果、PSNR ≥ 35 dB なら 7 scene chain で 50% wallclock 節約 (高確度)","\u003Cstrong>G.3 (SH progressive) 着手\u003C\u002Fstrong>: 既 plan、deterministic compute 削減で kernel-level だが SH coeff 数 3→48 の単純算術。Phase F とは違う mechanism family、advisor 評 -8-12% wallclock","\u003Cstrong>G.6 (option) async readback prototype\u003C\u002Fstrong>: 1-2 日 PoC、emit_pairs \u002F radix の readback を completion handler 化、ts_fwd_emit_pairs 単体で gain 計測。+1-3% なら採用、ROI 不明確なら drop","\u003Cstrong>G.7 (option) Burn 採用 (P2 fork) 検討\u003C\u002Fstrong>: 卒論 axis 2 narrative の 大改変、6-10 週 cost。\u003Cstrong>本 G.2 finding は P2 への argument を強化\u003C\u002Fstrong>するが、即時実行は recommend しない","\u003Cstrong>卒論 §5.4 統合\u003C\u002Fstrong>: G.2 finding を 「structural explanation」として §5.4 negative findings 章に追加、Phase F 5 連続 falsification + G.2 architectural audit の組み合わせで強い narrative",{"type":50,"text":202},"7. instrumentation 推奨 (subagent 追加 suggestion)",{"type":53,"items":204},[205,206,207],"\u003Cstrong>per-dispatch timing instrumentation\u003C\u002Fstrong>: \u003Ccode>cmd_creation\u003C\u002Fcode> \u002F \u003Ccode>encoding\u003C\u002Fcode> \u002F \u003Ccode>commit\u003C\u002Fcode> \u002F \u003Ccode>wait\u003C\u002Fcode> を分けて計測、wait が dominant か確認 (subagent 仮説検証)","\u003Cstrong>Xcode Instruments Metal System Trace\u003C\u002Fstrong>: brush vs splat-rs 同時計測で \u003Cstrong>GPU Utilization\u003C\u002Fstrong> (brush 60-70% \u002F splat 30-40% 予想) と \u003Cstrong>Command Buffer Submission Frequency\u003C\u002Fstrong> (brush 2-3\u002Fiter \u002F splat 12-15\u002Fiter 予想) の実測値","\u003Cstrong>kernel launch latency\u003C\u002Fstrong>: cmd.commit() から first GPU thread wakeup までの時間 (brush 0.5-1ms 予想、splat 2-3ms 予想)、これが repeated flushes で蓄積するか確認",{"type":50,"text":209},"8. 関連",{"type":53,"items":211},[212,213,214,215],"audit baseline: \u003Ccode>m4-brush-bench\u003C\u002Fcode> (brush 9m08s \u002F splat 26m32s の M4 直接比較)、\u003Ccode>p1-d-stage2-30k-results\u003C\u002Fcode> (Phase D 41m54s 確定)","Phase F 5 連続 falsification: \u003Ccode>p1-e-refine-gpu-smoke\u003C\u002Fcode> (refine GPU 化)、\u003Ccode>p1-axis1-target-cache\u003C\u002Fcode> (cache async overlap)、\u003Ccode>p1-axis1-phase-f1-emit-simd-falsified\u003C\u002Fcode> (emit SIMD + f16)、\u003Ccode>p1-axis1-phase-f3-radix-gpu-prefix-falsified\u003C\u002Fcode> (radix GPU prefix)","axis 1 audit (本 G.2 で structural explanation 付与): \u003Ccode>p1-axis1-metal-opt-audit\u003C\u002Fcode> (5 候補 + Tier 分類)","卒論統合候補: \u003Ccode>chapter-5-4-negative-findings\u003C\u002Fcode> (axis 1 audit predictions section + G.2 structural explanation)",[],[218,237,262,279,300,321],{"id":33,"title":219,"date":9,"status":10,"polarity":220,"category":11,"axes":221,"tags":222,"task_code":231,"related_runs":232,"delta_psnr":38,"delta_wallclock":233,"rank":36,"verdict":234,"impact_summary":235,"detail_path":236},"P1 axis 1 Metal 最適化候補 audit — 5 候補 + 既実装 gate flip 機会、Tier 1 -1.0% wallclock 即時 actionable","positive",[14],[223,224,225,226,227,228,229,230],"p1-profile","axis-1","metal-optimization","kernel-audit","tbdr","simd-reduction","apple-silicon","gate-flip","P1 axis 1 Metal kernel audit",[],"estimated -1.5 〜 -2.5% (Tier 1+2)","design-complete-actionable","5 kernel (clean baseline share 合計 55.1%) を Explore subagent で構造的 audit、Apple Silicon 特化最適化候補を kernel 単位で 2-4 個ずつ抽出。\u003Cstrong>最大の発見\u003C\u002Fstrong>: **emit_pairs_simd PSO は既に実装済**、\u003Ccode>use_simd_emit: Cell::new(false)\u003C\u002Fcode> で gate off、comment に「30k validation 後 default true 化予定」(tile_bin.rs:86-87)、**Phase D 30k 完遂で即 flip 可能** (-0.7-1.0% wallclock 即時、zero risk)。同様の即 actionable 機会: f16 forward kernel \u003Ccode>render_splats_f16\u003C\u002Fcode> は env \u003Ccode>SPLAT_F16_FORWARD=1\u003C\u002Fcode> gate (現在 disabled、A\u002FB test 必須 PSNR risk MED-HIGH)。\u003Cstrong>Tier 2 (Phase E scope)\u003C\u002Fstrong>: radix_sort GPU prefix sum (-0.54-0.82% wallclock、CPU-GPU 16-pass sync 除去)、backward_raster imageblock+TBDR (-0.67-1.07% wallclock、tile-local 累積で atomic 大幅削減)。\u003Cstrong>累計 -1.5-2.5% wallclock 改善余地確定、卒論 §6 future work 候補と pilot 実装目標\u003C\u002Fstrong>。backward SIMD reduction は既に default 有効 (rasterize.rs:642、2.43× win 享受中で確認済)、SSIM は eval-only で training 直接寄与なしのため Tier 3。","\u002Ffindings\u002Fp1-axis1-metal-opt-audit\u002F",{"id":29,"title":238,"date":9,"status":10,"polarity":239,"category":240,"axes":241,"tags":242,"task_code":251,"related_runs":252,"delta_psnr":256,"delta_wallclock":257,"rank":258,"verdict":259,"impact_summary":260,"detail_path":261},"Phase F.1 emit_pairs_simd + f16 forward gate flip — audit Tier 1 仮説 falsified、現規模で net regression \u002F no improvement","negative","audit",[14],[17,243,244,245,246,247,248,249,250],"phase-f","emit-simd","f16-forward","tier-1","falsified","negative-finding","ab-test","lego-5k","P1 Phase F.1 \u002F F.2",[253,254,255],"lego-phase-f1-emit-simd-5k","lego-phase-f1-baseline-5k","lego-phase-f2-f16-fwd-5k","±0.13 dB (両者とも許容範囲、atomic\u002Ffp 順序由来)","+4.7% (emit_simd net regression) \u002F +2.5% (f16 fwd noise 圏内)","medium","audit-falsified-tier-1","audit (p1-axis1-metal-opt-audit) で Tier 1「即 actionable gate flip、-0.7-1.0% wallclock、zero risk」と分類した 2 候補を Lego 5k smoke A\u002FB で実証検証。\u003Cstrong>emit_pairs_simd は total wallclock +4.7% の net regression\u003C\u002Fstrong> (112.11s → 117.38s、~10 kernel 平均なので noise floor 小、real regression 確定)、ただし per-kernel emit_pairs 単体は +8.5% で baseline 2 sample 変動 (4.814 \u002F 5.129、6.5%) と近い hedge 必要。\u003Cstrong>f16 forward は ~+2.5% wallclock\u003C\u002Fstrong> (114.97s)、run-to-run variance 圏内で improvement \u002F regression いずれも明確に検出できず。\u003Cstrong>PSNR は両者で許容範囲\u003C\u002Fstrong> (emit_simd -0.132 dB、f16 +0.075 dB、atomic order \u002F fp 順序由来想定)。**audit の予測 calibration data**: Tier 1 SIMD-reduction 系の効果は theory より小さく overhead が打ち消し、Tier 2 別 mechanism (CPU-GPU sync 除去) は別途検証必要、Tier 2 同 family (backward TBDR) は falsification 拡大適用で skip 判断強化。卒論 narrative 価値: 「audit theoretical predictions vs empirical measurements」の方法論 paragraph を §5.4 negative findings 章 (chapter-5-4-negative-findings.md) に追加候補。","\u002Ffindings\u002Fp1-axis1-phase-f1-emit-simd-falsified\u002F",{"id":30,"title":263,"date":9,"status":10,"polarity":239,"category":240,"axes":264,"tags":265,"task_code":270,"related_runs":271,"delta_psnr":274,"delta_wallclock":275,"rank":36,"verdict":276,"impact_summary":277,"detail_path":278},"Phase F.3 radix GPU prefix scan — bit-exact 実装完成だが Metal implicit fences で +7.4% wallclock \u002F +35-41% per-call regression、audit Tier 2 仮説 falsified",[14],[17,243,266,267,268,247,248,269,227,249,250],"radix-sort","gpu-prefix-scan","tier-2","metal-fences","P1 Phase F.3",[272,273],"lego-phase-f3-baseline-5k","lego-phase-f3-gpu-scan-5k","+0.03 dB (parity、bit-exact 経路、session noise 内)","+7.4% (+8.58s @ 5k iter、sanity rerun +4.8% でも regression 確定)","audit-falsified-tier-2","audit (p1-axis1-metal-opt-audit) で Tier 2 「radix_sort GPU prefix sum、-0.5-0.8% wallclock、LOW PSNR risk」と分類した候補を empirical 検証。\u003Cstrong>bit-exact 実装は完成\u003C\u002Fstrong> (16-thread single-threadgroup kernel、Apple SIMD prefix exclusive sum + per-digit serial scan、100k random \u002F 500k packed keys \u002F edge cases 6 種で CPU stable sort と byte-for-byte 一致)、しかし 5k Lego smoke で \u003Cstrong>wallclock 115.83s → 124.41s (+7.4%)、ts_fwd_radix_sort 4.768 → 6.733 ms\u002Fcall (+41%)\u003C\u002Fstrong> の net regression。sanity re-run (118.73s \u002F 6.402ms) で再現確認、run-to-run 変動の上。\u003Cstrong>PSNR は parity\u003C\u002Fstrong> (31.604 → 31.635 dB、bit-exact 経路で 0 drift 期待、観測 +0.03 dB は session noise)。\u003Cstrong>Likely mechanism\u003C\u002Fstrong>: StorageModeShared buffer での back-to-back compute encoder 間で Metal が implicit fence を挿入 (hist→scan の buf_hist、scan→scatter の buf_offsets で read-after-write hazard)、TBDR pipeline stall。旧 CPU 経路は buf_hist→buf_offsets 変換を host で実行するため GPU 内 memory dependency が無く、\u003Cstrong>「除去した wait_until_completed」は実は CPU prefix scan と overlap していた active work\u003C\u002Fstrong> だった。教訓: 「CPU 介在を on-GPU に置換」族の audit 予測は overlap の存在を見落とすため systematically overestimate、Tier 2 同 family (backward TBDR、tile-local accumulator) の skip 判断強化。kernel + tests は env \u003Ccode>SPLAT_RADIX_GPU_SCAN=1\u003C\u002Fcode> で opt-in (future workload hedge)。","\u002Ffindings\u002Fp1-axis1-phase-f3-radix-gpu-prefix-falsified\u002F",{"id":32,"title":280,"date":9,"status":10,"polarity":281,"category":282,"axes":283,"tags":284,"task_code":291,"related_runs":292,"delta_psnr":294,"delta_wallclock":295,"rank":296,"verdict":297,"impact_summary":298,"detail_path":299},"P1 axis 1 target_upload cache — kernel 除去は成功、wallclock ROI は host\u002FGPU overlap で予想の 1\u002F25","neutral","optimization",[14],[285,224,286,287,288,289,290,250],"p1","target-cache","kernel-removal","host-gpu-overlap","low-roi","apples-to-apples-ab","P1 axis 1 target upload cache",[293],"lego-target-cache-5k","+0.14 dB (seed同一、RNG drift、許容範囲)","-0.23% (apples-to-apples A\u002FB、env toggle 同一 binary)","low","accepted-cleanup-keep-merged","Per-iter target upload kernel を完全除去 (5000 calls → 0)、構造的には kernel 一つ消えた成果。 だが wallclock ROI は **予想 -5.5% に対し実測 -0.23%** (-1\u002F25)、profile baseline の \"5.6% share\" は GPU contention 3x 環境での host stall 値で、平常 contention では host upload は既に GPU 計算と overlap していた。 PSNR は seed 同一でも +0.14 dB drift (Metal driver の buffer 配置順序差 → atomic ordering 差 → refine.split RNG 経由)、5k smoke の noise floor 内。 実装は trivial (train_loop entry で `Vec\u003CBuffer>` 構築、train_step に `Option\u003C&Buffer>` 追加)、commit 残しておく価値はあるが、roadmap 上の位置付けは \"deprioritize \u002F cleanup level\" に修正。 **真の優先順位は radix_sort 改善 (27% share) と A.7 ICB batching tail に集中すべき**。","\u002Ffindings\u002Fp1-axis1-target-cache\u002F",{"id":31,"title":301,"date":9,"status":10,"polarity":239,"category":302,"axes":303,"tags":304,"task_code":311,"related_runs":312,"delta_psnr":316,"delta_wallclock":317,"rank":36,"verdict":318,"impact_summary":319,"detail_path":320},"P1.E refine GPU 化 hypothesis を SPLAT_TIMING profile で falsified — refine 寄与は \u003C1%、真の bottleneck は forward 60% + loss 28%","experiment",[14],[285,305,306,248,307,308,309,310,250],"phase-e","refine-gpu","kernel-profile","axis-1-limit","opacity-decay-gpu","kernel-plumbing","P1.E refine GPU 化 (axis 1 core contribution)",[313,314,315],"p1-e-profile-1k","p1-e-profile-5k","p1-e-gpu-decay-5k","-0.21 dB (CPU 31.92 → GPU 31.71、5k smoke、bit-close 内 RNG cascade)","+1.4% (CPU 144.32s → GPU 146.32s、5k smoke、opacity_decay は 0.005% で誤差)","accepted-negative-redirect-phase-f","Phase D 30k 実測 wallclock 41m54s vs brush 9m08s = -4.6x gap の原因について、task は `splat process CPU 63.4% = 1 core only` → 「refine の host RMW loop が CPU 1-thread bound」と仮説立てた。本 Phase E ではこの仮説を SPLAT_TIMING profile で実測。5k smoke (84k splats、p1-e-profile-5k.toml) の kernel breakdown: **ts_forward 60.1% (123s) \u002F ts_loss_gpu 28.0% (57s) \u002F ts_adam 4.8% (9.9s) \u002F ts_target_upload 3.9% (8.1s) \u002F ts_project_back 2.3% (4.75s) \u002F ts_refine_compact 0.6% (1.14s, 103ms\u002Fcall × 11) \u002F ts_refine_accumulate 0.3% (605ms) \u002F ts_opacity_decay 0.0046% (957µs)**。**refine 全体で \u003C1%** = refine を完璧に GPU 化しても全体 wallclock は -1% も短縮されない。代わりに demo kernel として `refine_opacity_decay.metal` を実装し、kernel + Rust pipeline + `refine.gpu_path` flag plumbing pattern を validate (CPU vs GPU max diff 1.5e-5、5k full PSNR delta -0.21 dB = 許容内)。Phase F の真の target は (a) forward subdivision で判明した tile-binning chain (`ts_fwd_sort 15.5% + ts_fwd_emit 12.8%`)、(b) Adam の 5x sequential `cmd.wait_until_completed` (1 cmd buffer 化で ~5% 削減期待)、(c) target_upload preload (~4% 削減期待) の 3 つ。","\u002Ffindings\u002Fp1-e-refine-gpu-smoke\u002F",{"id":28,"title":322,"date":323,"status":10,"polarity":12,"category":302,"axes":324,"tags":325,"task_code":332,"related_runs":333,"delta_psnr":335,"delta_wallclock":336,"rank":36,"verdict":337,"impact_summary":338,"detail_path":339},"M4 Max 上 brush (wgpu→Metal) の 30k baseline — wgpu 抽象は自作より速かった","2026-05-23",[15],[326,327,328,329,330,331],"phase-2","brush","wgpu","baseline","m4-max","abstraction-cost","A.3",[334],"lego-sh3-30k","+11.13 dB (brush 比優位)","−65.6% (brush の方が速い)","investigative","wgpu 抽象は自作 native より遅いはず、という想定が逆。同一 M4 Max 上で brush (wgpu) が 9m08s \u002F 37.40 dB、自作 (Metal 直) が 26m32s \u002F 26.27 dB。第 2 軸 (抽象コスト定量化) の主張を再 framing する必要が確定。","\u002Ffindings\u002Fm4-brush-bench\u002F",1782449788632]