[{"data":1,"prerenderedAt":287},["ShallowReactive",2],{"finding:p2-last-contributor":3,"finding-runs:p2-last-contributor":184,"finding-related:p2-last-contributor":222},{"meta":4,"impact":42,"sections":48},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":15,"task_code":24,"commit":25,"branch":26,"config_paths":27,"related_runs":32,"related_findings":37},"p2-last-contributor","P2 gap sweep Phase 2 — 2-BWD last_contributor で -15.0% (数学的同値)、STP 再判定は棄却","forward が per-pixel の replay 打ち切り位置 (\u003Ccode>last_contributor\u003C\u002Fcode>) を保存し、backward replay を \u003Ccode>[range.x, last_contributor)\u003C\u002Fcode> に制限 (msplat \u002F Inria 原典方式)。打ち切り区間は forward で T early-out 済み = 勾配厳密ゼロなので\u003Cstrong>数学的同値\u003C\u002Fstrong> (single-pixel fixture の byte equality で証明)。Lego 12.5k gate で \u003Cstrong>wallclock 395.59 → 336.33s = -14.98%\u003C\u002Fstrong>、backward_raster 12.83 → 7.66ms\u002Fcall (\u003Cstrong>-40.3%\u003C\u002Fstrong>)、PSNR +0.008 dB で guard 通過 → default flip。STP 再判定は C0 後 baseline で -2.51% (gate -3% 未達)、LC スタック上では +2.2% の逆効果 — Phase 1a の -7.45% は C0 の page fault 削減と重複していたことを実証し、default Original 維持を確定。msplat gap は 3.2× → \u003Cstrong>1.53×\u003C\u002Fstrong>。","P2 gap sweep · Phase 2 · 2-BWD + STP 再判定","2026-08-16","stable","experiment","positive",[14],1,[16,17,18,19,20,21,22,23],"gap-sweep","phase-2","2-bwd-last-contributor","backward","stop-the-pop","re-eval","function-constant","lego","2026-08 msplat gap sweep Phase 2 2-BWD \u002F STP 再判定","510101288c52","main",[28,29,30,31],"splat\u002Fconfigs\u002F2026-08-16-lego-lc-smoke-1k.toml","splat\u002Fconfigs\u002F2026-08-16-lego-p2lc-12500.toml","splat\u002Fconfigs\u002F2026-08-16-lego-stp-c0-12500.toml","splat\u002Fconfigs\u002F2026-08-16-lego-stack-lc-stp-12500.toml",[33,34,35,36],"lego-lc-smoke-1k","lego-p2lc-12500","lego-stp-c0-12500","lego-stack-lc-stp-12500",[38,39,40,41],"p2-c0-resident-binning","p2-gap-sweep-baseline","p1-msplat-baseline-spike","feat-bundle-musing-mendeleev-inventory",{"summary":43,"rank":44,"verdict":45,"delta_psnr":46,"delta_wallclock":47},"C0 (-48.4%) に続く Phase 2 第 2 弾で、backward 31.4% の新 bottleneck を kernel 側から -40.3% 削減。\u003Cstrong>Lego 12.5k = 336.33s で msplat 30K (220s) 比 1.53× まで縮小\u003C\u002Fstrong>し、gap sweep の目標 (≤2.0×) を達成した。実装は「forward が既に知っている打ち切り位置を backward に伝えるだけ」で数学的同値 — 品質を 1 bit も動かさずに backward の replay 計算量を ~40% 削った。STP 再判定は負の結果だが価値が高い: Phase 1a の -7.45% の正体が C0 と同じ page fault 削減だったことを分離実証し、「効果の重複を疑って再 bench する」protocol の正しさを裏付けた。次の bottleneck は forward rasterize 9.8% \u002F radix 13.5% \u002F SSIM 7.5% でいずれも trigger 25% 未達 — Phase 2 はここで完了、Phase 3 (再計測 + Pareto v3) へ。","high","lc-adopted-minus-15-percent-stp-rejected-final","LC 12.5k gate: 36.183 → 36.191 dB = +0.008 dB (数学的同値実装、atomic 非決定性 guard ±0.1 内)","LC 12.5k gate: 395.59 → 336.33s = **-14.98%** (backward_raster -40.3%)。STP: -2.51% (gate 未達)、LC+STP スタック: 343.63s (LC 単独より +2.2%)",[49,52,55,75,80,82,121,124,126,153,157,159,180],{"type":50,"text":51},"lead","C0 後 baseline (395.59s) で backward_raster が 31.4% と trigger を初超過したため、msplat \u002F Inria 3DGS 原典が持つ \u003Cstrong>per-pixel last_contributor\u003C\u002Fstrong> を実装。forward の per-pixel loop は T early-out (next_T ≤ 1e-4) した瞬間に break し、それ以降の splat は一切合成されない — backward は同一式で alpha 列を再計算するので同じ位置で break し、それ以降の splat への atomic emit は厳密にゼロ。よって forward が early-out 位置を保存すれば backward の replay loop は\u003Cstrong>「決して実行されない iteration の静的削除」だけで打ち切れる\u003C\u002Fstrong> (数学的同値)。",{"type":53,"text":54},"heading","1. 実装 (`raster_backward_range = last_contributor`)",{"type":56,"columns":57,"align":60,"rows":62},"table",[58,59],"項目","内容",[61,61],"left",[63,66,69,72],[64,65],"forward (rasterize.metal)","`render_splats_f32` \u002F `f16` に buffer(7) `last_contrib_out` を追加、per-pixel の replay exclusive end (early-out した splat の絶対 index、なければ range.y) を常時書き込み。コストは tracking + u32 store 1 回\u002Fpixel のみで variant gate せず、out \u002F final_T は bit 不変",[67,68],"backward (rasterize_backwards.metal)","3 variant とも replay loop を `[range.x, end)` に制限。Original は per-pixel bound、Simd は `simd_max` (reduction lockstep 維持)、Tg は threadgroup atomic max。bound と自分の stop の間は既存 done flag で寄与 0 (full-range 時と同一動作)。同値性の論証を file 冒頭に明記",[70,71],"variant 解決","Metal 第 3 条準拠: function constant `USE_LAST_CONTRIBUTOR_FC` (index 0) で PSO specialize (3 kernel × 2 = 6 PSO)、kernel 内 runtime 分岐なし。`Device::pso_with_constants` \u002F `pso_min256_with_constants` を追加",[73,74],"config 配線","`BackendConfig.raster_backward_range = { full_range, last_contributor }`、apply_backend_config の exhaustive destructuring に配線。ForwardState が `last_contrib_buf` (GPU buffer のまま、host readback なし) を保持し per-stage \u002F batched_tail 両経路で backward に渡す",{"type":76,"label":77,"variant":78,"text":79},"callout","parity — atomic の影響を受けない byte equality まで証明","success","(1) 3 variant × FullRange vs LastContributor の勾配 tolerance 一致 (abs\u002Frel 1e-4、既存 C7 体系)。(2) T early-out を確実に踏む synthetic fixture (opacity 0.88 × 24 splat 重ね、境界値 1e-4 を避けた設計) で last_contributor の意味論を直接検証。(3) \u003Cstrong>dldr を 1 pixel だけ非ゼロにした fixture では各 splat への非ゼロ寄与が高々 1 回になり atomic 順序の非決定性が消える — この条件で FullRange と LastContributor の勾配が bit 一致\u003C\u002Fstrong> (`backward_last_contributor_byte_equality_single_pixel`)。打ち切りが「実行されない iteration の静的削除」であることの直接証明。",{"type":53,"text":81},"2. LC 12.5k gate run (baseline 395.59s \u002F 36.183 dB との比較)",{"type":56,"columns":83,"align":88,"rows":90},[84,85,86,87],"metric","baseline (C0, 0abdaa2)","last_contributor (510101288c52)","Δ",[61,89,89,89],"right",[91,96,101,106,111,116],[92,93,94,95],"**wallclock (training)**","395.59s","336.33s","**-14.98%**",[97,98,99,100],"PSNR (100 views)","36.183 dB","36.191 dB","+0.008 dB (guard ±0.1 内)",[102,103,104,105],"final splats","407,901","408,752","+0.21% (atomic 非決定性圏内)",[107,108,109,110],"ts_backward_raster","160.4s (12.83ms\u002Fcall, 31.4%)","95.8s (7.66ms\u002Fcall, 21.0%)","**-40.3%**",[112,113,114,115],"ts_fwd_rasterize","41.2s (3.30ms\u002Fcall)","44.9s (3.59ms\u002Fcall)","+8.9% (last_contrib store + run 間変動)",[117,118,119,120],"ts_fwd_radix_sort","59.8s (4.79ms\u002Fcall)","61.5s (4.92ms\u002Fcall)","+2.8% (変動圏)",{"type":76,"label":122,"variant":78,"text":123},"verdict: 採用 — `raster_backward_range` default を LastContributor に flip","flip 条件 (-5% & guard) を 3 倍超過。backward -40.3% は期待帯 (-30〜50%) のど真ん中。forward 側の last_contrib 常時書き込みコスト (store 1 回\u002Fpixel + 2.56MB\u002Fiter buffer) は net -15.0% に織り込み済みで問題にならない。FullRange は敗者 variant として enum に保持 (A\u002FB baseline 用)。",{"type":53,"text":125},"3. STP 再判定 (C0 後 baseline での取り直し)",{"type":56,"columns":127,"align":133,"rows":134},[128,129,130,131,132],"構成","wallclock","vs baseline","PSNR","判定",[61,89,89,89,61],[135,138,143,147],[136,93,137,98,137],"baseline (resident + original + full_range)","—",[139,140,141,98,142],"STP 単独 (emit_pairs = stop_the_pop)","385.65s","**-2.51%**","gate -3% **未達**",[144,94,145,99,146],"LC 単独 (last_contributor)","-14.98%","採用 (上記)",[148,149,150,151,152],"スタック (LC + STP)","343.63s","-13.13% (LC 単独比 **+2.2%**)","36.138 dB","STP は LC 上で**逆効果**",{"type":76,"label":154,"variant":155,"text":156},"verdict: STP 棄却 — default Original 維持を確定","warning","Phase 1a の -7.45% (766→709s) の大半は、emit の \u003Cstrong>page fault 削減という C0 と同じ寄与源\u003C\u002Fstrong>だったことが分離実証された (C0 で emit share 38.2% → 1.2% に消滅した後の STP 残余効果は -2.51%)。さらに backward が LC で短縮された後は、contribution test の追加コスト > range 削減の利得となり LC スタック上で +2.2% の逆効果。「実証済み -10.2%」から始まった feat.F は、\u003Cstrong>2 段階の baseline 変化 (C0 → LC) を経て効果が消滅する良い事例\u003C\u002Fstrong> — 逐次スタック + 再 bench protocol の必要性を裏付けた。enum は flag として保持 (大 splat regime \u002F 他 scene での再評価余地はある)。",{"type":53,"text":158},"4. msplat gap の現在地と Phase 2 完了判定",{"type":56,"columns":160,"align":165,"rows":166},[161,162,163,164],"時点","Lego 12.5k","msplat Lego 30K 比 (220s)","備考",[61,89,89,61],[167,171,175],[168,169,170,39],"Phase 0 baseline (規約適用後)","766.07s","3.48×",[172,93,173,174],"C0 + C1 (resident arena)","1.80×","p2-c0-resident-binning、-48.4%",[176,177,178,179],"**+ 2-BWD last_contributor**","**336.33s**","**1.53×**","本 finding、-15.0% — **目標 ≤2.0× 達成**",{"type":76,"label":181,"variant":182,"text":183},"Phase 2 完了 — 残 bottleneck はすべて trigger 未達","info","新 breakdown の上位は forward rasterize 9.8% \u002F radix sort 13.5% \u002F SSIM 7.5% \u002F Adam 6.1% で、いずれも単独 trigger (25%) に遠い。backward_raster も 21.0% に低下し trigger を下回った。profiling が指す dominant がなくなったため \u003Cstrong>Phase 2 はここで完了\u003C\u002Fstrong>し、Phase 3 (Lego + materials + 8 scene 再計測、Pareto v3、卒論 §5 への反映) に移行する。累計: 766.07 → 336.33s = \u003Cstrong>-56.1%\u003C\u002Fstrong> を数学的同値 (bit-exact C0\u002FC1 + 同値 LC) の施策のみで達成。",[185,197,206,215],{"id":33,"title":33,"subtitle":186,"date":9,"workspace":187,"tags":188,"verdict":192,"psnr":193,"psnr_unit":-1,"wallclock":194,"splats":195,"summary_url":196,"detail_path":196},"2026-08 gap sweep Phase 2 2-BWD — raster_backward_range = last_contributor の 1k smoke","splat",[189,18,190,191],"p2-gap-sweep","smoke","lego-1k","partial",19.572189331054688,"9.94s",6869,"\u002Fruns\u002Flego-lc-smoke-1k\u002F",{"id":34,"title":34,"subtitle":198,"date":9,"workspace":187,"tags":199,"verdict":192,"psnr":202,"psnr_unit":-1,"wallclock":203,"splats":204,"summary_url":205,"detail_path":205},"2026-08 gap sweep Phase 2 2-BWD gate — raster_backward_range = last_contributor 単独 (vs 395.59s baseline)",[189,18,200,201],"gate-run","lego-12500",36.1908073425293,"5m 36s",408752,"\u002Fruns\u002Flego-p2lc-12500\u002F",{"id":36,"title":36,"subtitle":207,"date":9,"workspace":187,"tags":208,"verdict":192,"psnr":211,"psnr_unit":-1,"wallclock":212,"splats":213,"summary_url":214,"detail_path":214},"2026-08 gap sweep Phase 2 最終スタック — resident + last_contributor + stop_the_pop (vs 395.59s)",[189,18,209,210,201],"feat-f-stop-the-pop","stack",36.13783645629883,"5m 43s",409141,"\u002Fruns\u002Flego-stack-lc-stp-12500\u002F",{"id":35,"title":35,"subtitle":216,"date":9,"workspace":187,"tags":217,"verdict":192,"psnr":218,"psnr_unit":-1,"wallclock":219,"splats":220,"summary_url":221,"detail_path":221},"2026-08 gap sweep Phase 2 STP 再判定 — C0 後 baseline で emit_pairs = stop_the_pop 単独 (vs 395.59s)",[189,209,21,200,201],36.183380126953125,"6m 25s",408072,"\u002Fruns\u002Flego-stp-c0-12500\u002F",[223,245,266],{"id":38,"title":224,"date":9,"status":10,"polarity":12,"category":11,"axes":225,"tags":227,"task_code":234,"related_runs":235,"delta_psnr":240,"delta_wallclock":241,"rank":44,"verdict":242,"impact_summary":243,"detail_path":244},"P2 gap sweep Phase 2 — C0 resident arena + C1 pass skip で -48.4% (bit-exact)",[14,226],3,[16,17,228,229,230,231,232,233,23],"c0-resident-arena","c1-radix-pass-skip","binning","bit-exact","unified-memory","page-fault","2026-08 msplat gap sweep Phase 2 C0\u002FC1",[236,237,238,239],"lego-c0-day0-attrib-1k","lego-c0-ab-periter-1k","lego-c0-ab-resident-1k","lego-c0-resident-12500","12.5k gate: 36.216 → 36.183 dB = -0.033 dB (bit-exact 実装、atomic 非決定性 guard ±0.1 内で通過)","12.5k gate: 766.07 → 395.59s = **-48.4%** (emit -98% \u002F radix -53% \u002F extract -81%)","c0-c1-adopted-default-flip-minus-48-percent","\u003Cstrong>単発 -48.4% は本 project 最大の 1 施策改善\u003C\u002Fstrong>で、msplat 実測 gap (11m48s vs 3m40s ≈ 3.2×、Lego 30k) を大幅に詰める lever が確定。766.07 → 395.59s は kernel を 1 行も触らず host 側 buffer 管理だけで達成 (bit-exact)。emit_pairs は 38.2% → 1.2% に消滅し、新 bottleneck は backward_raster 31.4% (→ 2-BWD last_contributor の trigger 25% を初超過) と radix_sort 11.7% (GPU compute 本体)。STP (feat.F) は emit の alloc 成分が消えた今、相対効果の再 bench が必要 (Phase 1a の -7.45% は大半が同じ page fault の削減で C0 と重複していた可能性が高い)。教訓: unified memory 環境の profiling では「GPU 時間」に host メモリ管理コストが化ける — per-kernel wallclock だけでなく buffer lifecycle を疑うこと。","\u002Ffindings\u002Fp2-c0-resident-binning\u002F",{"id":39,"title":246,"date":9,"status":10,"polarity":12,"category":11,"axes":247,"tags":248,"task_code":253,"related_runs":254,"delta_psnr":261,"delta_wallclock":262,"rank":44,"verdict":263,"impact_summary":264,"detail_path":265},"P2 gap sweep Phase 0\u002F1a — binning 55% 実測 + C0 発見 + StopThePop -7.45%",[14],[16,249,250,251,252,20,230,228,23],"phase-0","phase-1a","profiling","per-kernel-breakdown","2026-08 msplat gap sweep Phase 0 + 1a",[255,256,257,258,259,260],"lego-gap-baseline-12500","lego-stp-12500","lego-stp-ab-original-5k-r1","lego-stp-ab-original-5k-r2","lego-stp-ab-stp-5k-r1","lego-stp-ab-stp-5k-r2","STP 12.5k: 36.216 → 36.193 dB = -0.023 dB (guard -0.05 内で通過)","STP 12.5k: 766.07 → 708.96s = **-7.45%** (emit -10.5% \u002F radix -8% \u002F backward -6%)","binning-55-percent-c0-discovered-stp-marginal-go","\u003Cstrong>Phase 2 の主戦場が確定\u003C\u002Fstrong>: strategy doc の trigger 3 候補 (separable SSIM \u002F last_contributor \u002F SH-Adam fusion) は全て閾値不発、代わりに \u003Cstrong>binning 経路 55% の主犯 = per-iter ~1.25GB alloc + Vec 三重往復 (C0)\u003C\u002Fstrong> が最大 lever。C0 (persistent buffer arena、bit-exact、3-4 日) の期待は \u003Cstrong>wallclock -30〜39% (766→~470s) で単独 gap ≤2.0× 到達圏\u003C\u002Fstrong>。C1 (radix 定数桁 pass skip 16→11、bit-exact、0.5-1 日) が +4-5%。StopThePop は -7.45% で adoption gate (-8%) に僅差未達、default 維持のまま C0 後再判定。5 連敗の教訓「profiling が指す順」が機能した初の事例 — 事前決め打ちなら SSIM (5.2%) に突撃していた。","\u002Ffindings\u002Fp2-gap-sweep-baseline\u002F",{"id":40,"title":267,"date":268,"status":10,"polarity":269,"category":11,"axes":270,"tags":272,"task_code":280,"related_runs":281,"delta_psnr":282,"delta_wallclock":283,"rank":44,"verdict":284,"impact_summary":285,"detail_path":286},"msplat v1.1.3 baseline spike — M4 Max 実測、Lego 30K で 3m40s \u002F 35.48 dB、materials で densify 破綻","2026-06-26","mixed",[14,271,226],2,[273,274,275,276,277,278,279],"msplat","baseline","apple-silicon","m4-max","nerf-synthetic","direct-comparison","thesis-ready","P1 msplat spike (critical path)",[],"Lego: 本実装 +0.78 dB (Phase H 12500 vs msplat 30K)、materials: 本実装 +21.17 dB (Phase I 12500 vs msplat 7K broken)","Lego: msplat -3.2× (msplat 3m40s vs Phase H 11m48s)、chair 7K のみ msplat -63× (msplat 17.58s vs Phase I 18m35s)","critical-path-complete-A-confirmed","\u003Cstrong>msplat (rayanht) v1.1.3 を M4 Max で実測完了\u003C\u002Fstrong>。Lego 30K で 219.8s (3m40s) \u002F 35.48 dB \u002F 208k splats、chair 7K で 17.58s \u002F 33.81 dB を確認。\u003Cstrong>本実装 Phase H lego (11m48s \u002F 36.26 dB) に対し msplat は wallclock 3.2× 高速、ただし PSNR は -0.78 dB\u003C\u002Fstrong>。materials 7K では PSNR 8.80 \u002F splats 367 と densification が壊れた — msplat の scene robustness 弱点が判明し、本実装の \u003Cstrong>universal な density 動作\u003C\u002Fstrong>が明確な差別化軸として確定。\u003Cstrong>本実装 Phase I 8 scene のうち 5 scene が msplat lego 30K の 35.48 dB を上回る\u003C\u002Fstrong> (Lego 36.26 \u002F chair 35.88 \u002F hotdog 37.37 \u002F mic 36.62 \u002F drums は 27 のみ)。Pareto plot で msplat は左上 (速い + 中品質)、本実装は右側 (遅い + 高品質 + 全 scene robust) と vector が直交。本 spike により \u003Cstrong>A (Reframing narrative) の killer figure が確定\u003C\u002Fstrong>、\u003Cstrong>B (G.2 backport) は引き続き NO-GO\u003C\u002Fstrong> (msplat が既に kernel fusion + pre-allocated bins まで実装済、本実装が追いつく工数は大)、\u003Cstrong>E (msplat 著者接触) の materials bug 報告は良い PR ネタ\u003C\u002Fstrong>。","\u002Ffindings\u002Fp1-msplat-baseline-spike\u002F",1790227326540]