[{"data":1,"prerenderedAt":185},["ShallowReactive",2],{"run:rnd-12500-off-r3":3,"run-findings:rnd-12500-off-r3":153},{"run":4,"config":18,"metrics":98,"curve":104,"assets":152},{"id":5,"title":5,"subtitle":6,"eyebrow":7,"date":8,"workspace":9,"commit":10,"tags":11,"verdict":17},"rnd-12500-off-r3","C2 policy 4 (refine_gpu_snapshot) gate arm A (baseline, refine_gpu_snapshot = false): Lego 12.5k full run repeat 3\u002F3","Run summary · p3-refine-nondrain (C2 policy 4)","2026-08-30","splat","2cb044b",[12,13,14,15,16],"p3-refine-nondrain","c2","refine-gpu-snapshot","gpu-gate","lego","partial",[19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,81,84,87,89,92,95],{"key":20,"value":21},"dataset","\u002FUsers\u002Fotkrickey\u002Fdev\u002F3dgs-workspace\u002Fdatasets\u002Fnerf_synthetic\u002Flego",{"key":23,"value":24},"gt_convention","Premultiplied",{"key":26,"value":27},"iterations","12,500",{"key":29,"value":30},"seed","42",{"key":32,"value":33},"capacity","1,000,000 splats",{"key":35,"value":36},"sh_degree","3",{"key":38,"value":39},"loss","L1Ssim",{"key":41,"value":42},"lambda","0.200",{"key":44,"value":45},"ssim","window=7 sigma=1",{"key":47,"value":48},"backend.backward","Simd",{"key":50,"value":51},"backend.loss_path","Gpu",{"key":53,"value":54},"backend.emit_pairs","Original",{"key":56,"value":57},"backend.forward","F32",{"key":59,"value":60},"backend.dispatch","PerStage",{"key":62,"value":63},"backend.radix_scan","GpuHierarchical",{"key":65,"value":66},"backend.radix_scatter","SimdBallot",{"key":68,"value":69},"backend.binning","Resident",{"key":71,"value":72},"backend.tile_sort","GlobalRadix",{"key":74,"value":75},"backend.submission","Chained",{"key":77,"value":78},"backend.target_cache","true",{"key":80,"value":78},"backend.shader_fast_math",{"key":82,"value":83},"os_build","26.6.2 (25G83)",{"key":85,"value":86},"backend.ssim_clear","HostMemset",{"key":88,"value":86},"backend.raster_grad_clear",{"key":90,"value":91},"backend.backward_uniform","HostBuffer",{"key":93,"value":94},"backend.lazy_c3_scratch","false",{"key":96,"value":97},"backend.ssim_walk","PerChannel",{"psnr":99,"wallclock":100,"wallclock_regress":101,"splats":102,"final_loss":103},36.11488723754883,"2m 2s",false,407562,"5.536768e-3",{"loss":105,"splats":136},{"iters":106,"values":121},[107,108,109,110,111,112,113,114,115,116,117,118,119,120],1,1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,11000,12000,12500,[122,123,124,125,126,127,128,129,130,131,132,133,134,135],0.5938423275947571,0.054428957402706146,0.014149004593491554,0.008435825817286968,0.007379896938800812,0.006570164114236832,0.006175515241920948,0.005981337279081345,0.005789866670966148,0.005673224106431007,0.005676661152392626,0.005585983395576477,0.005526554770767689,0.005536767654120922,{"iters":137,"values":138},[107,108,109,110,111,112,113,114,115,116,117,118,119,120],[139,140,141,142,143,144,145,146,147,148,149,150,151,102],5207,8222,181874,297290,349226,375170,389582,397231,401440,403649,404734,405665,406850,{"has_renders":101,"has_splat":101},[154],{"id":12,"title":155,"date":8,"status":156,"polarity":157,"category":158,"axes":159,"tags":161,"task_code":168,"related_runs":169,"delta_psnr":179,"delta_wallclock":180,"rank":181,"verdict":182,"impact_summary":183,"detail_path":184},"C2 施策 #4 — refine tick drain の non-draining 化。drain は構造的に必須、snapshot read の GPU blit 化 (`refine_gpu_snapshot`) は 12.5k n=3 gate で棄却","stable","negative","experiment",[107,160],3,[12,13,162,163,164,165,166,16,167],"refine","gpu-snapshot","drain","non-draining","in-flight-invariant","gate-rejected","C2 施策 #4: refine tick drain の non-draining 化",[170,171,172,173,174,175,5,176,177,178],"refine-nondrain-smoke-1000-gpu-snapshot","refine-nondrain-smoke-1000-off","rnd-12500-off-r1","rnd-12500-on-r1","rnd-12500-off-r2","rnd-12500-on-r2","rnd-12500-on-r3","rnd-12500-prof-off (instrumentation-only, n=1, not in gate stats)","rnd-12500-prof-on (instrumentation-only, n=1, not in gate stats)","12.5k n=3 gate: on mean 36.1937dB (36.179\u002F36.203\u002F36.199) vs off mean 36.1383dB (36.113\u002F36.187\u002F36.115) = **+0.0553dB**、guard (-0.05dB 以内) は pass。gradient 非変更の bit-exact 設計のため理論上は差が出ないはずで、この +0.055dB は backward atomic の run-to-run noise とみなすのが妥当 (`p3-s4b-ssim-reduce` と同型の解釈)","12.5k n=3 gate (2026-08-30, off→on×3): train elapsed off mean **122.6467s** (σ 0.330%) → on mean **122.3567s** (σ 0.301%) = Δ **-0.2365%**。有意閾値 max(2σ_off,1%)=1.000% の 24% にしか届かず不通過。advisor 試算 (-1.2〜-1.9%) を大きく下回る null 結果、pair 一貫性も 2\u002F3 に留まる (§7 参照)","low","structural-drain-necessity-confirmed \u002F snapshot-read-gpu-blit-implemented \u002F gate-rejected-null-effect","`p3-c2-bubble-attribution` §6 施策 #4 (refine tick drain の non-draining 化、期待 -1.5〜-2.5%) を検討・実装した。\u003Cstrong>advisor との構造分析で「drain 自体は構造的に必須、縮められるのは中身」と reframe\u003C\u002Fstrong>: `Depth2Pipeline::step` の `B_it` 統合 CB は Adam encoder で param\u002Fadam 全 15 buffer を書き換えるため、`refine()` の snapshot read はこの書き込み完了 (`wait(B_it)`) を待たないと race になる。task が提示した候補 (a) tick を `B_it` commit 直後に前倒し、(b) 候補選定だけ先に走らせる 2 段化、(c) 再充填コスト削減 は、いずれも「`B_it` の GPU 実行中に host が snapshot を読む\u002F書く」という同じ race を踏むか、staleness (1 tick 分古い grad\u002Fparam を使う意味論変更) を受け入れる必要があり、後者は `p3-refine-every-200` (densify 予算副作用で PSNR guard 8.4 倍超過、棄却) と同種のリスクを持つ。一方、advisor が提案した第 4 の道 (host memcpy を GPU blit に置き換えて `B_it` CB 自体を延長する) は staleness を一切受け入れずに host の逐次コピーコストを消せる — \u003Cstrong>これを `[backend] refine_gpu_snapshot` として実装した\u003C\u002Fstrong>。snapshot 対象 15 buffer のうち `raw_opacities` (opacity decay が blit 後に書き換える) を除く 14 buffer を、Adam encoder 直後に追加した 1 blit command encoder (14 `copy_from_buffer`) で GPU 側 mirror buffer にコピーし、`refine()` はその mirror を読む。安全性は 2 層: (1) encode 時点で `pipeline::refine_tick_wants_gpu_snapshot` が「Adam が同一 CB 内で完了するか (`!grad_rmw_pending`)」「`wait(B_it)` 後に MCMC noise\u002Frelocation がこれらの buffer を触らないか」を判定し、条件を満たさない tick では blit を encode しない、(2) `refine()` 側は `gpu_snapshot_ready_for.take() == Some(it)` のときだけ消費し、iteration が食い違えば (万一 (1) の判定が pipeline とズレても) 無条件に host snapshot へフォールバックする — 誤った iteration の値を使うバグが構造的に起きない設計。`cargo test --workspace --release` 全 pass (0 failed、新規 5 test 込み)。1000 iter smoke (Lego) で crash なし、`refine_gpu_snapshot: true` が実際に解決され `ts_refine_snapshot_blit` が refine tick 数 (6 回) と一致する回数だけ発火することを確認。\u003Cstrong>2026-08-30、main 上で 12.5k n=3 交互 A\u002FB gate (off→on×3) を実施\u003C\u002Fstrong>: train elapsed (internal timer) off mean 122.6467s (σ 0.330%) → on mean 122.3567s (σ 0.301%) = Δ **-0.2365%**。有意閾値 max(2σ_off,1%)=1.000% の **24%** にしか届かず、pair 一貫性も 3 組中 2 組 (r1: -0.788%, r2: -0.082%) が on 優位、r3 (+0.163%) は逆方向という系統性の無い結果。事前の advisor 試算 (-1.2〜-1.9%) が明記した「pessimistic ケースでは不通過もあり得る」を超え、実測は pessimistic ケースの想定 (max(2σ,1%) 近傍での僅差) よりもさらに小さい、実質ノイズ水準の null 結果だった。PSNR は +0.0553dB で guard (-0.05dB 以内) を pass するが、wallclock が閾値に遠く及ばないため\u003Cstrong>棄却確定、`refine_gpu_snapshot` の default は false のまま維持、code は変更しない\u003C\u002Fstrong>。汚染判定 (`p3-tier1-bit-exact.toml` §5 の事前登録条件、load spike AND 3σ超 の AND) は off-r1 の load1 window mean が他 run よりやや高い (2.41 vs 0.80-1.38) ものの偏差 1.07σ (\u003C3σ) で条件不成立、かつ off-r1 を除外しても Δ は -0.060% とさらに小さくなるだけで結論は変わらないため retry は実施しなかった。","\u002Ffindings\u002Fp3-refine-nondrain\u002F",1790227325607]