[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"run:refine-nondrain-smoke-1000-gpu-snapshot":3,"run-findings:refine-nondrain-smoke-1000-gpu-snapshot":138},{"run":4,"config":16,"metrics":96,"curve":102,"assets":137},{"id":5,"title":5,"subtitle":6,"eyebrow":7,"date":8,"workspace":9,"commit":10,"tags":11,"verdict":15},"refine-nondrain-smoke-1000-gpu-snapshot","C2 施策 #4 smoke: refine_gpu_snapshot=true、crash なし + BackendConfig line 確認 (wallclock 判定はしない — 1k regime では refine tick 数・splat 数が gate 規模に遠く及ばない)","Run summary · p3-refine-nondrain (C2 施策 #4)","2026-08-16","splat","e5631e0",[12,13,14],"p3-refine-nondrain","c2","smoke","partial",[17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,74,77,79,82,85,87,90,93],{"key":18,"value":19},"dataset","\u002FUsers\u002Fotkrickey\u002Fdev\u002F3dgs-workspace\u002Fdatasets\u002Fnerf_synthetic\u002Flego",{"key":21,"value":22},"gt_convention","Premultiplied",{"key":24,"value":25},"iterations","1,000",{"key":27,"value":28},"seed","42",{"key":30,"value":31},"capacity","1,000,000 splats",{"key":33,"value":34},"sh_degree","3",{"key":36,"value":37},"loss","L1Ssim",{"key":39,"value":40},"lambda","0.200",{"key":42,"value":43},"ssim","window=7 sigma=1",{"key":45,"value":46},"backend.backward","Simd",{"key":48,"value":49},"backend.loss_path","Gpu",{"key":51,"value":52},"backend.emit_pairs","Original",{"key":54,"value":55},"backend.forward","F32",{"key":57,"value":58},"backend.dispatch","PerStage",{"key":60,"value":61},"backend.radix_scan","GpuHierarchical",{"key":63,"value":64},"backend.radix_scatter","SimdBallot",{"key":66,"value":67},"backend.binning","Resident",{"key":69,"value":70},"backend.tile_sort","GlobalRadix",{"key":72,"value":73},"backend.submission","Chained",{"key":75,"value":76},"backend.target_cache","true",{"key":78,"value":76},"backend.shader_fast_math",{"key":80,"value":81},"os_build","26.6.2 (25G83)",{"key":83,"value":84},"backend.ssim_clear","HostMemset",{"key":86,"value":84},"backend.raster_grad_clear",{"key":88,"value":89},"backend.backward_uniform","HostBuffer",{"key":91,"value":92},"backend.lazy_c3_scratch","false",{"key":94,"value":95},"backend.ssim_walk","PerChannel",{"psnr":97,"wallclock":98,"wallclock_regress":99,"splats":100,"final_loss":101},19.55087661743164,"3.77s",false,6816,"6.655917e-2",{"loss":103,"splats":128},{"iters":104,"values":116},[105,106,107,108,109,110,111,112,113,114,115],1,100,200,300,400,500,600,700,800,900,1000,[117,118,119,120,121,122,123,124,125,126,127],0.5938452482223511,0.228887140750885,0.11686450242996216,0.10670807957649231,0.10142672061920166,0.09737974405288696,0.08760173618793488,0.08005280792713165,0.07429113984107971,0.07034961134195328,0.06655916571617126,{"iters":129,"values":130},[105,106,107,108,109,110,111,112,113,114,115],[131,131,131,131,131,132,133,134,135,136,100],5207,599,960,1598,2702,4341,{"has_renders":99,"has_splat":99},[139],{"id":12,"title":140,"date":141,"status":142,"polarity":143,"category":144,"axes":145,"tags":147,"task_code":155,"related_runs":156,"delta_psnr":166,"delta_wallclock":167,"rank":168,"verdict":169,"impact_summary":170,"detail_path":171},"C2 施策 #4 — refine tick drain の non-draining 化。drain は構造的に必須、snapshot read の GPU blit 化 (`refine_gpu_snapshot`) は 12.5k n=3 gate で棄却","2026-08-30","stable","negative","experiment",[105,146],3,[12,13,148,149,150,151,152,153,154],"refine","gpu-snapshot","drain","non-draining","in-flight-invariant","lego","gate-rejected","C2 施策 #4: refine tick drain の non-draining 化",[5,157,158,159,160,161,162,163,164,165],"refine-nondrain-smoke-1000-off","rnd-12500-off-r1","rnd-12500-on-r1","rnd-12500-off-r2","rnd-12500-on-r2","rnd-12500-off-r3","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",1790227325094]