[{"data":1,"prerenderedAt":756},["ShallowReactive",2],{"finding:p2-s2-forward-chained":3,"finding-runs:p2-s2-forward-chained":578,"finding-related:p2-s2-forward-chained":626},{"meta":4,"impact":59,"sections":65},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":16,"task_code":29,"commit":30,"branch":31,"config_paths":32,"related_runs":45,"related_findings":52},"p2-s2-forward-chained","S2 forward 1 CB 化 — replay -12〜13% \u002F busy 69 → 80% (default flip)","W2 が loss chain 側を 1 CB に畳んだ後、残っていた forward 側 (project → emit → radix → extract → rasterize) の per-stage commit + wait を \u003Cstrong>1 command buffer \u002F 1 wait\u003C\u002Fstrong> に統合した。radix の per-pass CPU prefix scan は \u003Cstrong>hierarchical GPU scan\u003C\u002Fstrong> (reduce → block sums → downsweep、整数和なので bit-exact) に、pair_count の host readback は \u003Ccode>bin_indirect_args\u003C\u002Fcode> + indirect dispatch に置き換えて host 往復を全廃。replay bench は \u003Cstrong>final 17.833 → 15.637 ms\u002Fiter = -12.3% \u002F iter5000 16.600 → 14.395 = -13.3%\u003C\u002Fstrong> (σ ≤1.5% の clean block のみ採用)。機構は Layer 1 が直接示す: \u003Cstrong>sync-tax 5.21 → 2.86 ms\u002Fiter (-45%)、GPU busy 69.1 → 79.8%\u003C\u002Fstrong> の一方で \u003Cstrong>busy ms\u002Fiter は +0.20 しか増えない\u003C\u002Fstrong> (dispatch 26 → ~60 の overhead + scan の CPU→GPU 移動ぶん)。per-kernel 帰属も一致: \u003Ccode>ts_forward\u003C\u002Fcode> 8573 → 6005 µs (\u003Cstrong>-30.0%\u003C\u002Fstrong>) が total 差 -2.51 ms\u002Fiter をほぼ全額説明し、W2 の \u003Ccode>ts_chain_commit_wait\u003C\u002Fcode> は 7512 → 7549 µs で\u003Cstrong>不変\u003C\u002Fstrong> = S2 と W2 は直交。","1× 工程表 v2 · S2 · forward 1 CB 化 (並列性能軸)","2026-08-16","stable","experiment","positive",[14,15],1,3,[17,18,19,20,21,22,23,24,25,26,27,28],"1x-roadmap-v2","s2","forward-chained","command-buffer","hierarchical-scan","indirect-dispatch","radix-sort","gpu-busy","sync-tax","bit-exact","lego","unified-memory","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2 (S2 gate)","66f7f349751c","main",[33,34,35,36,37,38,39,40,41,42,43,44],"splat\u002Fconfigs\u002F2026-08-16-s2-parity-baseline.toml","splat\u002Fconfigs\u002F2026-08-16-s2-parity-candidate.toml","splat\u002Fconfigs\u002F2026-08-16-s2-bench-final-perstage.toml","splat\u002Fconfigs\u002F2026-08-16-s2-bench-final-chained.toml","splat\u002Fconfigs\u002F2026-08-16-s2-bench-iter5000-perstage.toml","splat\u002Fconfigs\u002F2026-08-16-s2-bench-iter5000-chained.toml","splat\u002Fconfigs\u002F2026-08-16-s2-12500-noprof-r1.toml","splat\u002Fconfigs\u002F2026-08-16-s2-12500-noprof-r2.toml","splat\u002Fconfigs\u002F2026-08-16-s2-12500-noprof-r3.toml","splat\u002Fconfigs\u002F2026-08-16-s2gate-base-12500-r1.toml","splat\u002Fconfigs\u002F2026-08-16-s2gate-base-12500-r2.toml","splat\u002Fconfigs\u002F2026-08-16-s2gate-base-12500-r3.toml",[46,47,48,49,50,51],"s2-12500-noprof-r1","s2-12500-noprof-r2","s2-12500-noprof-r3","s2gate-base-12500-r1","s2gate-base-12500-r2","s2gate-base-12500-r3",[53,54,55,56,57,58],"p2-counter-session","p2-w2-chained-submission","p2-w1-warp-sparse-skip","p2-c0-resident-binning","p2-bench-harness-calibration","p1-axis1-phase-f3-radix-gpu-prefix-falsified",{"summary":60,"rank":61,"verdict":62,"delta_psnr":63,"delta_wallclock":64},"1× 工程表 v2 の並列性能軸で\u003Cstrong>本命に格上げ\u003C\u002Fstrong>されていた S2 を gate し、採用した。W2 が backward\u002Floss chain を 1 CB に畳んだのに対し S2 は forward 側を畳む — radix の per-pass CPU prefix scan を hierarchical GPU scan (bit-exact な整数 prefix sum) に、pair_count の host readback を indirect dispatch に置き換え、forward 全段を \u003Cstrong>1 CB \u002F 1 encoder \u002F 末尾 1 wait\u003C\u002Fstrong> に連結した。replay \u003Cstrong>final -12.3% \u002F iter5000 -13.3%\u003C\u002Fstrong> (閾値 1.0〜1.8% の 8〜13 倍)、12.5k full run は\u003Cstrong>同一 session 交互 A\u002FB (ABBAAB) n=3 で 208.26 → 187.65s = -9.9%\u003C\u002Fstrong>。\u003Cstrong>counter session が積み残した「busy 68.9%」は 79.8% まで回復\u003C\u002Fstrong>し、sync-tax は 5.21 → 2.86 ms\u002Fiter (-45%)。roadmap が注目トレードに挙げた「dispatch 26 → ~60 の overhead」は \u003Cstrong>busy ms\u002Fiter +0.20 = 回収額の 1\u002F11〜1\u002F24\u003C\u002Fstrong> と定量的にケリがつき、follow-up (radix reduce の histogram fold) は\u003Cstrong>総額 -1.1% 未満と判明したため S3 の後ろに defer\u003C\u002Fstrong>。\u003Cstrong>full run の Δ (-9.9%) が replay の Δ (-12.3%) を下回る一方、iteration 別に見ると -24.7% (iter1000) → -10.0% (iter12500) と単調に縮む\u003C\u002Fstrong> — S2 が削るのが\u003Cstrong>splat 数に依らない固定の per-iter host コスト\u003C\u002Fstrong>であることの直接証拠で、W1\u002FW2 (GPU 仕事量に比例する施策) とは pass-through の性質が異なる。msplat 同日等価 gap は \u003Cstrong>1.273× → 1.105×\u003C\u002Fstrong>。累計 (数学的同値の施策のみ) 766.07 → 187.65s = \u003Cstrong>-75.5%\u003C\u002Fstrong>。","high","s2-adopted-default-flip-chained-forward-and-hierarchical-scan","12.5k **同一 session 交互 A\u002FB** n=3 mean: S2 **36.167 dB** (36.154 \u002F 36.192 \u002F 36.155) vs default **36.160 dB** (36.107 \u002F 36.167 \u002F 36.205) = **+0.007 dB** (guard ±0.1 内、n=3 mean 判定 — n=1 判定なし)。S2 は prefix scan 部分こそ bit-exact だが end-to-end では既存の atomic 順序非決定性を継承するため、この guard は実質的な検査として機能している (default arm 自身の run 間振れ幅が ±0.05 dB ある)","replay bench (σ ≤1.5% の clean block、ABBA 交互 2 round): final regime **17.833 → 15.637 ms\u002Fiter = -12.3%**、iter5000 regime **16.600 → 14.395 = -13.3%** (有意閾値 max(2σ,1%) = 1.0〜1.8%)。頑健性確認の min-to-min 推定でも -10.6% \u002F -13.6%。12.5k full run **同一 session 交互 A\u002FB n=3 mean: 208.26 → 187.65s = -9.9%** (training elapsed では 205.10 → 184.61s = -10.0%)。参考値として counter session 当日 baseline 216.12s 比では -13.2%",[66,69,72,96,98,141,146,149,151,277,343,347,349,406,409,413,415,418,421,423,426,496,499,501,542,545,547,575],{"type":67,"text":68},"lead","counter session (p2-counter-session) が「default スタックの GPU busy は 68.9%、sync-tax 5.66 ms\u002Fiter、残る 2 大残差は forward の radix と chain_commit_wait」と確定させたのを受け、1× 工程表 v2 が\u003Cstrong>本命に格上げ\u003C\u002Fstrong>していた S2 を gate した。W2 (encoder\u002FCB 統合) が backward\u002Floss chain 側を 1 CB に畳んだのに対し、S2 は\u003Cstrong>対になる forward 側\u003C\u002Fstrong>を畳む。機構上の障害は 2 つあった — ① radix sort の prefix scan が per-pass で host CPU に降りていた (11 pass × 2 CB = 22 CB \u002F 12 wait)、② rasterize の grid が pair_count に依存し host readback を 1 回強制していた。①は \u003Cstrong>hierarchical GPU scan\u003C\u002Fstrong> (reduce → block sums → downsweep) で、②は \u003Ccode>bin_indirect_args\u003C\u002Fcode> kernel + \u003Ccode>dispatchThreadgroupsWithIndirectBuffer\u003C\u002Fcode> で除去し、forward 全段を \u003Cstrong>1 CB \u002F 1 encoder \u002F 末尾 1 wait\u003C\u002Fstrong> に連結した。",{"type":70,"text":71},"heading","0. 計測環境 — 本 session は CPU 側が clean でない (filter 規則を先に宣言する)",{"type":73,"items":74},"kv",[75,78,81,84,87,90,93],{"key":76,"value":77},"電源 \u002F 機体","AC 接続、M4 Max (36 GB)、macOS 26.5.2 (25F84)。**GPU は本 session が専有**",{"key":79,"value":80},"CPU 側の汚染","同一機体で別プロジェクトの Kotlin\u002FNative build (clang++ 単体で 98% CPU)、Xcode linker (ld 115%)、JVM (97%)、Spotlight の再インデックス (fseventsd 95% \u002F mds_stores 103%) が**断続的に**走った。session 中の load average は 4.0 → 26.1 まで変動",{"key":82,"value":83},"なぜ問題か","S2 の機構は **CPU 往復の除去**そのものなので、CPU 競合は per-stage arm (host wait が多い) と chained arm (少ない) の両方を汚す。加えて CPU が package 電力枠を食うと GPU 側が DVFS で落とされ、**busy ms\u002Fiter が水増しされる** (実際 final-chained-pass3 は 14.89 W \u002F busy 13.797 ms\u002Fiter の throttled block)",{"key":85,"value":86},"**採用した filter 規則**","replay は **1 block = n=3 repeat** とし、harness が出す **`sigma_pct` ≤ 1.5% の block のみ採用**、超過 block は棄却 (全 block を下表に列挙して監査可能にする)。加えて汚染は**上振れ方向にしか効かない**ため、頑健性確認として **min-to-min** 推定も併記した。両推定は -10.6〜-13.6% で一致する",{"key":88,"value":89},"汚染の向き (重要)","時間変動する汚染は round 2 で **chained arm 側**に集中的に当たった (chained pass3\u002Fpass4 が DVFS throttle、同時刻の perstage は 19.9 W \u002F busy 12.27 で無傷)。したがって本 finding の Δ は\u003Cstrong>過小評価側に偏っており、S2 を有利に見せる方向のバイアスは無い\u003C\u002Fstrong>",{"key":91,"value":92},"A\u002FB 設計","replay は **ABBA \u002F BAAB 交互**で 2 round (計 8 block\u002Fregime)。12.5k full run も **同一 session 内で S2 と default を交互 (ABBAAB)** に n=3 ずつ走らせ、日内 drift と機体負荷を arm 効果から直交させた",{"key":94,"value":95},"default flip の副作用 (記録)","本 gate の結果 default が変わったため、`[backend]` を省略している既存 config は**以後 S2 経路を踏む**。① `p2-bench-harness-calibration` の σ 0.83% は **flip 前の経路**の値である (`2026-08-16-bench-calib-regime-*.toml` は `loss_path` しか書いていない)。② 敗者 variant を使う train config 7 本 (batched_tail 4 \u002F F.3 gpu scan 1 \u002F C0 per_iter_alloc 1 \u002F C3 tile_counting 1) は validate の hard error に当たるため、`forward_submission = \"per_stage\"` (+ 当時の `radix_scan`) を**明示追記した**。flip 後に全 173 train config の load を確認済み (validate failure 0)",{"type":70,"text":97},"1. 等価性 — production `bench --parity` (S2 config vs default)",{"type":99,"columns":100,"align":104,"rows":106},"table",[101,102,103],"比較対象","結果","備考",[105,105,105],"left",[107,111,115,118,122,126,130,134,138],[108,109,110],"`tile_offsets`","**PASS — byte 完全一致** (n=2,500)","binning の最終成果物。S2 の hierarchical scan が整数 prefix sum として per-pass CPU scan と完全同値であることの直接証拠",[112,113,114],"`means_grad`","PASS (atol\u002Frtol 1e-4、max_abs_diff **2.811e-5**)","n=1,228,980",[116,117,114],"`log_scales_grad`","PASS (max_abs_diff 5.808e-8)",[119,120,121],"`rot_quats_grad`","PASS (max_abs_diff 2.127e-7)","n=1,638,640",[123,124,125],"`raw_opacities_grad`","PASS (max_abs_diff 9.005e-8)","n=409,660",[127,128,129],"`sh_coeffs_grad`","PASS (max_abs_diff 1.558e-7)","n=19,663,680",[131,132,133],"loss value","baseline 0.004210922 \u002F candidate 0.004210832 (diff **8.99e-8**)","—",[135,136,137],"`sorted_idx`","INFO (gate 対象外) — 2,100\u002F969,279 = **0.217%** 相違","**既知の baseline 水準の非決定性**。depth 量子化 key の tie 内順序が emit_pairs の atomic write-offset 競合に依存するため、同一 config の run 間でも同程度ズレる (p2-bench-harness-calibration)。S2 固有の差ではない",[139,140,133],"**PARITY OVERALL**","**PASS**",{"type":142,"label":143,"variant":144,"text":145},"callout","「bit-exact」の正確な射程 — end-to-end ではなく prefix scan が bit-exact","warning","S2 で新規に入る計算 (hierarchical prefix scan) は\u003Cstrong>整数和なので bit-exact\u003C\u002Fstrong>であり、それは \u003Ccode>tile_offsets\u003C\u002Fcode> の byte 完全一致が実証している。しかし \u003Cstrong>end-to-end の run が bit-exact になるわけではない\u003C\u002Fstrong> — rasterize backward の \u003Ccode>atomic&lt;float&gt;\u003C\u002Fcode> 加算順序に由来する既存の非決定性 (\u003Ccode>sorted_idx\u003C\u002Fcode> 0.217%、grad の 1e-5 級差) を S2 も\u003Cstrong>そのまま継承する\u003C\u002Fstrong>。つまり default (per_stage) 同士を 2 回走らせても同じ程度はズレる。\u003Cstrong>だから PSNR guard (n=3 mean ±0.1) は飾りではなく実質的な検査になっている\u003C\u002Fstrong> — 「bit-exact だから PSNR は見なくてよい」とは書けない。",{"type":142,"label":147,"variant":144,"text":148},"gate harness の落とし穴 — `splat bench` は `BackendConfig::validate()` を呼ばない","S2 の前提条件 (\u003Ccode>radix_scan = gpu_hierarchical\u003C\u002Fcode> \u002F \u003Ccode>binning = resident\u003C\u002Fcode> \u002F \u003Ccode>tile_sort = global_radix\u003C\u002Fcode> \u002F \u003Ccode>dispatch = per_stage\u003C\u002Fcode>) を hard error で強制する \u003Ccode>validate()\u003C\u002Fcode> は \u003Cstrong>train config の load 経路 (splat-cli\u002Fsrc\u002Fconfig.rs) にしか配線されていない\u003C\u002Fstrong>。\u003Ccode>BenchTomlConfig\u003C\u002Fcode> の \u003Ccode>[backend]\u003C\u002Fcode> は \u003Ccode>#[serde(default)]\u003C\u002Fcode> なので、bench config で field を書き忘れると\u003Cstrong>黙って \u003Ccode>BackendConfig::default()\u003C\u002Fcode> で埋まり、意図と違う条件を計測してしまう\u003C\u002Fstrong>。本 gate では両 arm の \u003Ccode>[backend]\u003C\u002Fcode> を\u003Cstrong>全 field 明示\u003C\u002Fstrong>で書き、差分を \u003Ccode>forward_submission\u003C\u002Fcode> \u002F \u003Ccode>radix_scan\u003C\u002Fcode> の 2 つだけに閉じ込めたうえで、bench が stderr に出す \u003Ccode>backend = BackendConfig {...}\u003C\u002Fcode> の echo で実効値を毎 run 目視確認した。\u003Cstrong>これは harness 側の改善余地として記録しておく\u003C\u002Fstrong> (bench でも validate を呼ぶべき)。",{"type":70,"text":150},"2. replay bench A\u002FB — 全 block 一覧 (棄却分も監査できるよう全掲載)",{"type":99,"columns":152,"align":160,"rows":162},[153,154,155,156,157,158,159],"block","σ","採否","ms\u002Fiter (median)","busy ms\u002Fiter","sync-tax ms\u002Fiter","busy%",[105,161,105,161,161,161,161],"right",[163,171,178,185,191,198,206,214,221,228,235,242,250,257,264,271],[164,165,166,167,168,169,170],"final \u002F perstage pass1","0.18%","**採用**","18.147","12.377","5.771","68.2%",[172,173,166,174,175,176,177],"final \u002F perstage pass2","0.76%","17.889","12.282","5.587","68.8%",[179,180,166,181,182,183,184],"final \u002F perstage pass3","0.56%","17.632","12.275","5.357","69.6%",[186,187,166,188,189,190,184],"final \u002F perstage pass4","0.89%","17.664","12.268","5.375",[192,193,166,194,195,196,197],"final \u002F chained pass1","0.10%","**15.637**","12.509","3.153","79.9%",[199,200,201,202,203,204,205],"final \u002F chained pass2","11.15%","棄却","(15.984)","12.526","3.515","78.0%",[207,208,209,210,211,212,213],"final \u002F chained pass3","2.66%","棄却 (DVFS throttle: 14.89 W)","(16.896)","(13.797)","3.191","80.4%",[215,216,201,217,218,219,220],"final \u002F chained pass4","6.85%","(17.341)","12.660","4.681","73.0%",[222,223,201,224,225,226,227],"iter5000 \u002F perstage pass1","4.46%","(17.171)","11.305","5.866","65.8%",[229,230,166,231,232,233,234],"iter5000 \u002F perstage pass2","0.26%","16.473","11.155","5.318","67.7%",[236,237,166,238,239,240,241],"iter5000 \u002F perstage pass3","0.25%","16.727","11.197","5.536","66.9%",[243,244,245,246,247,248,249],"iter5000 \u002F perstage pass4","4.34%","棄却 (host stall: sync-tax 10.9)","(22.546)","11.692","(10.854)","51.9%",[251,252,166,253,254,255,256],"iter5000 \u002F chained pass1","0.79%","**14.395**","11.284","3.112","78.4%",[258,259,201,260,261,262,263],"iter5000 \u002F chained pass2","2.32%","(15.384)","12.240","3.143","79.6%",[265,266,201,267,268,269,270],"iter5000 \u002F chained pass3","2.09%","(14.753)","11.337","3.416","76.8%",[272,208,201,273,274,275,276],"iter5000 \u002F chained pass4","(14.293)","11.354","2.937","79.5%",{"type":99,"columns":278,"align":284,"rows":285},[279,280,281,282,283],"regime","指標","per_stage (default)","chained (S2)","Δ",[105,105,161,161,161],[286,291,297,302,307,312,317,321,327,331,335,339],[287,288,289,194,290],"**final** (409,660 splats)","**total ms\u002Fiter** (clean block)","17.833","**-12.3%**",[292,293,294,295,296],"final","total ms\u002Fiter (min-to-min、頑健性確認)","17.482","15.625","-10.6%",[292,298,299,300,301],"**busy ms\u002Fiter** (min-to-min)","12.265","12.469","**+0.204 (+1.7%)**",[292,303,304,305,306],"**sync-tax ms\u002Fiter** (min-to-min)","5.214","2.863","**-2.351 (-45.1%)**",[292,308,309,310,311],"**GPU busy%** (median \u002F max)","69.1% \u002F 70.2%","**79.8% \u002F 83.1%**","**+10.7 pt**",[292,313,314,315,316],"GPU energy \u002F repeat (median)","72.57 J","68.81 J","-5.2%",[318,288,319,253,320],"**iter5000** (373,933 splats)","16.600","**-13.3%**",[322,323,324,325,326],"iter5000","total ms\u002Fiter (min-to-min)","16.446","14.216","-13.6%",[322,298,328,329,330],"11.154","11.255","**+0.101 (+0.9%)**",[322,303,332,333,334],"5.292","2.881","**-2.411 (-45.6%)**",[322,308,336,337,338],"66.7% \u002F 67.8%","**78.9% \u002F 79.7%**","**+12.2 pt**",[322,313,340,341,342],"63.42 J","62.75 J","-1.1%",{"type":142,"label":344,"variant":345,"text":346},"有意性 — 閾値 max(2σ, 1%) を 8〜13 倍超過","success","採用 block の σ は perstage 0.18〜0.89% \u002F chained 0.10〜0.79%、したがって有意閾値は \u003Cstrong>max(2σ, 1%) = 1.0〜1.8%\u003C\u002Fstrong>。実測 Δ は final -12.3% \u002F iter5000 -13.3% で\u003Cstrong>閾値の 8〜13 倍\u003C\u002Fstrong>。頑健性推定 (min-to-min、-10.6% \u002F -13.6%) でも同じ結論。\u003Cstrong>期待帯 (roadmap v2: ms\u002Fiter -6〜11%) の上限を上回って着弾\u003C\u002Fstrong>した。",{"type":70,"text":348},"3. 機構の帰属 — per-kernel 内訳が「forward だけが動いた」ことを示す",{"type":99,"columns":350,"align":355,"rows":356},[351,352,353,354],"label","per_stage (µs\u002Fcall)","chained (µs\u002Fcall)","読み方",[105,161,161,105],[357,362,366,371,376,381,384,387,391,396,401],[358,359,360,361],"**`ts_forward`** (forward 全体)","**8,573.4**","**6,005.4**","**-2,568 µs = -30.0%**。total の差 -2,510 µs\u002Fiter を\u003Cstrong>ほぼ全額説明\u003C\u002Fstrong>する",[363,133,364,365],"`ts_fwd_chain_commit_wait`","5,609.9","S2 で新設。forward 全段の GPU 実行 + 末尾 1 wait がここに集約",[367,368,369,370],"`ts_fwd_radix_sort`","5,191.1","0.0","chained では独立 CB でなくなり label 消滅 (chain 内へ吸収)",[372,373,374,375],"`ts_fwd_rasterize`","1,567.7","21.8","**encode コストのみ**に (W2 の loss chain と同じ性質)",[377,378,379,380],"`ts_fwd_project`","1,079.5","5.8","同上",[382,383,369,380],"`ts_fwd_emit_pairs`","537.8",[385,386,369,380],"`ts_fwd_extract_off`","141.2",[388,389,369,390],"`ts_project_soa_upload`","21.2","host upload が消滅 (indirect dispatch 化の副産物)",[392,393,394,395],"**`ts_chain_commit_wait`** (W2 の loss chain)","**7,512.4**","**7,549.3**","**+0.5% = 不変** → \u003Cstrong>S2 と W2 は直交\u003C\u002Fstrong>していることの実測証拠",[397,398,399,400],"`ts_refine_accumulate`","432.5","435.7","不変 (host 側 refine、S2 の射程外)",[402,403,404,405],"`ts_backward_raster` \u002F `ts_ssim_fwd_grad`","94.6 \u002F 97.7","99.4 \u002F 99.6","不変 (chained submission 下では encode コストのみ)",{"type":142,"label":407,"variant":345,"text":408},"dispatch overhead (26 → ~60) は犯人ではない — 定量ケリをつける","roadmap v2 が S2 の注目トレードとして挙げていた「\u003Cstrong>dispatch 数 26 → ~60 の overhead vs wait 15 → 1 の削減\u003C\u002Fstrong>」は、Layer 1 の 2 指標で直接判定できる。\u003Cstrong>overhead 側 = busy ms\u002Fiter の増分 +0.204 (final) \u002F +0.101 (iter5000)\u003C\u002Fstrong>、\u003Cstrong>削減側 = sync-tax の減分 -2.351 \u002F -2.411\u003C\u002Fstrong>。すなわち\u003Cstrong>回収額は overhead の 11〜24 倍\u003C\u002Fstrong>で、dispatch 数の増加は完全に飲み込まれている。なお busy ms\u002Fiter の増分は純粋な dispatch overhead だけでなく、\u003Cstrong>prefix scan が CPU から GPU に移った分の実計算\u003C\u002Fstrong>も含む (以前は sync-tax 側に計上されていた仕事) ため、真の dispatch overhead は +0.20 ms\u002Fiter より\u003Cstrong>さらに小さい\u003C\u002Fstrong>。",{"type":142,"label":410,"variant":411,"text":412},"S2 follow-up (`radix_scan_reduce` を histogram に fold) の要否 — **不要 (S3 の後ろに defer)**","info","実装 agent が報告していた follow-up 候補 (radix の \u003Ccode>reduce\u003C\u002Fcode> pass を histogram kernel に畳んで dispatch 数をさらに減らす) は、上記のとおり \u003Cstrong>dispatch overhead の全額が +0.20 ms\u002Fiter 未満\u003C\u002Fstrong>である以上、\u003Cstrong>その一部しか回収できない = 総額 -1.1% 未満の施策\u003C\u002Fstrong>と確定した。有意閾値 max(2σ,1%) の境界そのものであり、単独で gate を通す見込みが薄い。一方 sync-tax は S2 後でも \u003Cstrong>2.86〜2.88 ms\u002Fiter 残っている\u003C\u002Fstrong> (busy 80% の残り 20% ぶん) ので、\u003Cstrong>次に取るべきは S3 (iteration pipelining) であって radix の dispatch 削減ではない\u003C\u002Fstrong>。follow-up は「S3 着弾後に残 overhead を再測してから判断」に降格する。",{"type":70,"text":414},"4. roadmap v2 の期待値との照合 — busy 91-94% と ms\u002Fiter -6〜11% は両立しない目標だった",{"type":142,"label":416,"variant":144,"text":417},"期待帯の内部矛盾を記録する (次の wave が同じ誤りを継承しないように)","roadmap v2 の S2 行は期待を「\u003Cstrong>busy 91-94%、ms\u002Fiter -6〜11%\u003C\u002Fstrong>」と併記していたが、この 2 つは\u003Cstrong>算術的に両立しない\u003C\u002Fstrong>。baseline final は 17.833 = busy 12.27 + sync-tax 5.21 と分解されるので — ① busy 91-94% を満たすには sync-tax を ~0.8-1.2 まで落とす必要があり、その時 total は ~13.3-13.7 = \u003Cstrong>-23〜-25%\u003C\u002Fstrong>、② ms\u002Fiter -6〜11% (total 15.9-16.8) を満たすと sync-tax は 3.6-4.5 残り、busy は \u003Cstrong>73-77%\u003C\u002Fstrong> にしかならない。さらに \u003Cstrong>sync-tax を 0 にしても total は busy 下限の 12.47 = -30.1% 止まり\u003C\u002Fstrong>で、これが S2 単独の理論上限である。実測は \u003Cstrong>total -12.3% \u002F busy 79.8%\u003C\u002Fstrong> — \u003Cstrong>①の ms\u002Fiter 換算 (-23〜-25%) には届かないが、②の ms\u002Fiter 帯 (-6〜11%) は上回り、busy も②の予想 (73-77%) を超えた\u003C\u002Fstrong>。\u003Cstrong>gate 判定は W2 と同じく ms\u002Fiter 帯で行い (= PASS)、busy% は機構の証拠として扱う\u003C\u002Fstrong>。",{"type":142,"label":419,"variant":411,"text":420},"残 sync-tax 2.86 ms\u002Fiter の正体と S3 の射程","S2 後も残る sync-tax 2.86〜2.88 ms\u002Fiter は、① forward chain 末尾の 1 wait、② W2 loss chain 末尾の 1 wait、③ refine \u002F accumulate の host 処理 (\u003Ccode>ts_refine_accumulate\u003C\u002Fcode> 436 µs は S2 で不変) の 3 つ。\u003Cstrong>①②はどちらも「CB が完了するまで host が次 iter を組めない」という構造\u003C\u002Fstrong>で、これは CB をさらに畳んでも消えず、\u003Cstrong>iteration pipelining (S3、depth 2) でしか埋まらない\u003C\u002Fstrong>。counter session が出した理論上限「busy 100% = 148.17s」に対し、S2 後の busy は ~80% なので、\u003Cstrong>S3 が狙える残額は依然として大きい\u003C\u002Fstrong>。",{"type":70,"text":422},"5. 12.5k full gate — 同一 session 交互 A\u002FB (n=3 ずつ、PSNR guard は n=3 mean 判定)",{"type":142,"label":424,"variant":411,"text":425},"なぜ当日 baseline (216.12s) をそのまま使わず取り直したか","counter session の baseline 216.12s は同日夜に取得したものだが、その後\u003Cstrong>機体の CPU 負荷条件が大きく変わった\u003C\u002Fstrong> (§0)。S2 の効果は host 往復の除去なので CPU 競合と交絡しやすく、\u003Cstrong>異なる負荷条件下の cross-session 比較は危険\u003C\u002Fstrong>と判断した。そこで S2 arm と default arm を\u003Cstrong>同一 session 内で ABBAAB 交互\u003C\u002Fstrong>に n=3 ずつ走らせ、機体条件を arm 間で共有させた。counter session の 216.12s は\u003Cstrong>参考値\u003C\u002Fstrong>として併記する。",{"type":99,"columns":427,"align":434,"rows":435},[428,429,430,431,432,433],"run (実行順)","arm","driver wallclock","training elapsed","PSNR (100 views)","final splats",[105,105,161,161,161,161],[436,443,450,456,462,468,474,480,486,492],[437,438,439,440,441,442],"s2 r1 (21:53:50)","**S2**","194.58s","191.47s","36.154 dB","407,751",[444,445,446,447,448,449],"base r1 (21:57:25)","default","211.64s","208.45s","36.107 dB","405,267",[451,445,452,453,454,455],"base r2 (22:01:17)","207.23s","203.95s","36.167 dB","408,123",[457,438,458,459,460,461],"s2 r2 (22:05:05)","184.46s","181.44s","36.192 dB","410,502",[463,438,464,465,466,467],"s2 r3 (22:08:30)","183.91s","180.93s","36.155 dB","409,861",[469,445,470,471,472,473],"base r3 (22:11:54)","205.91s","202.89s","36.205 dB","404,002",[475,133,476,477,478,479],"**S2 n=3 mean**","**187.65s**","**184.61s**","**36.167 dB**","409,371",[481,133,482,483,484,485],"**default n=3 mean**","**208.26s**","**205.10s**","**36.160 dB**","405,797",[487,133,488,489,490,491],"**Δ**","**-9.9%**","**-10.0%**","**+0.007 dB** (guard 内)","**+0.88%** (S2 が多い)",[493,445,494,133,495,133],"(参考) counter session baseline","216.12s","36.174 dB",{"type":142,"label":497,"variant":345,"text":498},"verdict: 採用 — `forward_submission` default を Chained、`radix_scan` default を GpuHierarchical に flip","\u003Cstrong>2 arm の分布は完全に非重複\u003C\u002Fstrong> (S2: 183.91 \u002F 184.46 \u002F 194.58s vs default: 205.91 \u002F 207.23 \u002F 211.64s) で、最遅の S2 run すら最速の default run より 11.3s 速い。さらに \u003Cstrong>S2 arm の方が final splats が +0.88% 多い\u003C\u002Fstrong> — 点数が多い = 仕事量が多いので、wallclock 差が点数差で説明される余地はなく\u003Cstrong>むしろ不利な条件で勝っている\u003C\u002Fstrong>。PSNR は n=3 mean で +0.007 dB (guard ±0.1 内)。なお S2 の最遅 run (r1、194.58s) は\u003Cstrong>最も機体負荷が高い時刻 (load 7.74) に先頭で走ったもの\u003C\u002Fstrong>で、交互設計が意図どおり drift を吸収している。replay・full run・per-kernel 帰属・Layer 1 busy の 4 系統がすべて同じ機構を指すため、\u003Cstrong>採用して 2 つの enum default を flip\u003C\u002Fstrong>した。敗者 variant (PerStage \u002F Cpu \u002F Gpu) は A\u002FB baseline として enum 保持。",{"type":70,"text":500},"5b. regime 依存 — S2 が削るのは「splat 数に依らない固定 per-iter host コスト」",{"type":99,"columns":502,"align":507,"rows":508},[503,504,505,283,506],"iteration","default (n=3 mean elapsed)","S2 (n=3 mean elapsed)","その時点の splat 数 (概算)",[161,161,161,161,161],[509,515,521,527,532,537],[510,511,512,513,514],"1,000","6.66s","5.01s","**-24.7%**","~10 万",[516,517,518,519,520],"3,000","28.16s","23.40s","**-16.9%**","~30 万",[522,523,524,525,526],"5,000","62.27s","53.63s","**-13.9%**","~37 万",[528,529,530,290,531],"8,000","118.55s","103.95s","~40 万",[533,534,535,536,531],"10,000","156.93s","138.83s","**-11.5%**",[538,539,540,489,541],"12,500 (完走)","205.10s","184.61s","~41 万",{"type":142,"label":543,"variant":411,"text":544},"W1\u002FW2 と pass-through の性質が違う — 「replay Δ × 0.67 ≒ full Δ」の経験則は S2 には効かない","W1a (replay -11.2% → full -7.7%) と W2 (replay -13.7% → full -9.1%) はいずれも pass-through 比 ~0.67 だった。S2 も表面上は同じに見える (replay -12.3% → full -9.9%、比 0.80) が、\u003Cstrong>内訳の形がまったく違う\u003C\u002Fstrong>。上表のとおり \u003Cstrong>Δ は iteration が進む (= splat 数が増える) ほど単調に縮む\u003C\u002Fstrong> — iter1000 で -24.7%、完走時点で -10.0%。これは \u003Cstrong>S2 が削るのが splat 数に依存しない固定コスト (per-stage の commit + wait の往復レイテンシ) だから\u003C\u002Fstrong>で、GPU 仕事量が小さい序盤ほど相対的な取り分が大きい。W1\u002FW2 は逆に \u003Cstrong>GPU 仕事量に比例する施策\u003C\u002Fstrong> (backward の演算削減 \u002F GPU chain の実時間) なので、この regime 依存は出ない。\u003Cstrong>含意\u003C\u002Fstrong>: ① replay bench は最終 regime (373k\u002F409k splats) しか見ないので、\u003Cstrong>固定コスト系の施策については構造的に過小評価する\u003C\u002Fstrong> — harness の既知の盲点として記録する。② より大きなシーン (mipnerf 1M splats 級) では S2 の相対効果は\u003Cstrong>さらに小さくなる\u003C\u002Fstrong>と予測でき、逆に小シーン・低 iteration 用途では大きい。卒論では「axis 3 (unified memory \u002F submission 論) の ROI は\u003Cstrong>シーン規模に反比例する\u003C\u002Fstrong>」という形で一般化できる。",{"type":70,"text":546},"6. msplat gap の現在地と次段",{"type":99,"columns":548,"align":552,"rows":553},[549,550,551,103],"時点","Lego 12.5k","msplat 同日実測比 (169.77s)",[105,161,161,105],[554,558,562,566,571],[555,556,557,55],"W1 (warp sparse skip)","241.41s","1.44× (対 167.7s)",[559,560,561,54],"W2 (encoder\u002FCB 統合)","219.51s","1.31× (対 167.7s)",[563,494,564,565],"counter session 当日 baseline","1.273×","p2-counter-session (msplat 同日 n=4 = 169.77s)",[567,568,569,570],"本 gate の default arm (同一 session)","208.26s","1.227×","本 finding。夜間の機体条件下での default 実測",[572,476,573,574],"**+ S2 (forward 1 CB 化)**","**1.105×**","本 finding、-9.9% — 累計 766.07 → 187.65s = **-75.5%、全て数学的同値の施策のみ**",{"type":142,"label":576,"variant":411,"text":577},"次段 — S3 (iteration pipelining) が単独の本命","\u003Cstrong>等価 gap は 1.105× まで縮み、1.0× が射程に入った\u003C\u002Fstrong>。counter session が出した理論上限 (busy 100% = 148.17s) に対し S2 後の busy は ~80% なので、\u003Cstrong>残る伸びしろは依然 20 pt\u003C\u002Fstrong>。次段の優先度は本 gate の実測で明確になった — ① \u003Cstrong>S3 (iteration pipelining depth 2)\u003C\u002Fstrong>: 残 sync-tax 2.86 ms\u002Fiter は「CB 完了まで host が次 iter を組めない」構造で、CB をさらに畳んでも消えず pipelining でしか埋まらない。\u003Cstrong>単独の本命\u003C\u002Fstrong>。② S2 follow-up (radix reduce の histogram fold) は\u003Cstrong>総額 -1.1% 未満と判明したので S3 の後ろに defer\u003C\u002Fstrong>。③ W3a\u002FW3b\u002FW4\u002FW5 は busy 側 (12.5 ms\u002Fiter) を削る施策なので、busy% が上がった今こそ\u003Cstrong>相対的な旨みが増している\u003C\u002Fstrong> — S3 と並行して breakdown を取り直す。④ \u003Cstrong>保持 flag 全数再 gate sweep\u003C\u002Fstrong> はコスト構造が 2 波 (W2・S2) 変わったので必須。なお本 flip で敗者 variant を使う旧 config 7 本 (batched_tail 4 \u002F f3 gpu scan 1 \u002F c0 per_iter_alloc 1 \u002F c3 tile_counting 1) に \u003Ccode>forward_submission = \"per_stage\"\u003C\u002Fcode> を明示追記済み — sweep 時に validate で落ちない。",[579,591,598,604,612,619],{"id":46,"title":46,"subtitle":580,"date":9,"workspace":581,"tags":582,"verdict":586,"psnr":587,"psnr_unit":-1,"wallclock":588,"splats":589,"summary_url":590,"detail_path":590},"S2 gate: forward 1 CB 化 (chained forward + hierarchical GPU scan) の 12.5k full run repeat 1","splat",[5,18,583,584,585],"gpu-gate","no-profile","lego-12500","partial",36.15408706665039,"3m 11s",407751,"\u002Fruns\u002Fs2-12500-noprof-r1\u002F",{"id":47,"title":47,"subtitle":592,"date":9,"workspace":581,"tags":593,"verdict":586,"psnr":594,"psnr_unit":-1,"wallclock":595,"splats":596,"summary_url":597,"detail_path":597},"S2 gate: forward 1 CB 化 (chained forward + hierarchical GPU scan) の 12.5k full run repeat 2",[5,18,583,584,585],36.1916618347168,"3m 1s",410502,"\u002Fruns\u002Fs2-12500-noprof-r2\u002F",{"id":48,"title":48,"subtitle":599,"date":9,"workspace":581,"tags":600,"verdict":586,"psnr":601,"psnr_unit":-1,"wallclock":595,"splats":602,"summary_url":603,"detail_path":603},"S2 gate: forward 1 CB 化 (chained forward + hierarchical GPU scan) の 12.5k full run repeat 3",[5,18,583,584,585],36.15475082397461,409861,"\u002Fruns\u002Fs2-12500-noprof-r3\u002F",{"id":49,"title":49,"subtitle":605,"date":9,"workspace":581,"tags":606,"verdict":586,"psnr":608,"psnr_unit":-1,"wallclock":609,"splats":610,"summary_url":611,"detail_path":611},"S2 gate 同一 session baseline: default スタック 12.5k repeat 1 (S2 arm と交互実行)",[5,18,583,607,584,585],"baseline",36.107147216796875,"3m 28s",405267,"\u002Fruns\u002Fs2gate-base-12500-r1\u002F",{"id":50,"title":50,"subtitle":613,"date":9,"workspace":581,"tags":614,"verdict":586,"psnr":615,"psnr_unit":-1,"wallclock":616,"splats":617,"summary_url":618,"detail_path":618},"S2 gate 同一 session baseline: default スタック 12.5k repeat 2 (S2 arm と交互実行)",[5,18,583,607,584,585],36.167415618896484,"3m 24s",408123,"\u002Fruns\u002Fs2gate-base-12500-r2\u002F",{"id":51,"title":51,"subtitle":620,"date":9,"workspace":581,"tags":621,"verdict":586,"psnr":622,"psnr_unit":-1,"wallclock":623,"splats":624,"summary_url":625,"detail_path":625},"S2 gate 同一 session baseline: default スタック 12.5k repeat 3 (S2 arm と交互実行)",[5,18,583,607,584,585],36.20481491088867,"3m 22s",404002,"\u002Fruns\u002Fs2gate-base-12500-r3\u002F",[627,646,667,692,713,731],{"id":57,"title":628,"date":9,"status":10,"polarity":12,"category":629,"axes":630,"tags":631,"task_code":639,"related_runs":640,"delta_psnr":-1,"delta_wallclock":642,"rank":61,"verdict":643,"impact_summary":644,"detail_path":645},"splat bench harness 実装 + calibration — σ_replay 0.83%、full run 比 ~6x ノイズ削減","tooling",[14,15],[632,633,634,635,636,637,638,27],"bench-harness","calibration","variance","reproducibility","c7","fixed-workload","gate-infra","splat bench harness (2026-08-16 GPU 専有タスク)",[641],"lego-bench-calib-checkpoints","σ_replay 0.83% (n=10, final-scale workload) vs full run 実測 ~10% — 約 6x ノイズ削減","accepted","`splat bench --config bench.toml` を実装し、同一 config n=10 replay で \u003Cstrong>σ_replay = 0.234 ms\u002Fiter (mean 28.339 ms 比 0.83%)\u003C\u002Fstrong> を実測。full training run で観測されていた ~10% 分散に対し \u003Cstrong>約 6x のノイズ削減\u003C\u002Fstrong>。3-regime (iter 1000 \u002F 5000 \u002F final checkpoint、各 n=5) でも σ 1.2-4.6% の範囲に収まり、splat 数が少ない早期 regime ほど相対分散が大きい傾向を確認。有意判定閾値を \u003Ccode>max(2σ, 1%)\u003C\u002Fcode> と規約化し、以後の gate 判定をこの harness の計測に載せ替える。付随して `--parity` (kernel variant 間の勾配 \u002F binning 一致検証) と `[output] save_ply_at` (checkpoint 保存) を実装、parity mode の実測で production-scale シーンの `sorted_idx` tie-order 非決定性 (~0.2%、真の非決定性であって variant 差ではない) を発見し gate から除外した。","\u002Ffindings\u002Fp2-bench-harness-calibration\u002F",{"id":56,"title":647,"date":9,"status":10,"polarity":12,"category":11,"axes":648,"tags":649,"task_code":656,"related_runs":657,"delta_psnr":662,"delta_wallclock":663,"rank":61,"verdict":664,"impact_summary":665,"detail_path":666},"P2 gap sweep Phase 2 — C0 resident arena + C1 pass skip で -48.4% (bit-exact)",[14,15],[650,651,652,653,654,26,28,655,27],"gap-sweep","phase-2","c0-resident-arena","c1-radix-pass-skip","binning","page-fault","2026-08 msplat gap sweep Phase 2 C0\u002FC1",[658,659,660,661],"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":53,"title":668,"date":9,"status":10,"polarity":669,"category":11,"axes":670,"tags":671,"task_code":682,"related_runs":683,"delta_psnr":687,"delta_wallclock":688,"rank":61,"verdict":689,"impact_summary":690,"detail_path":691},"P2 counter session — default スタックの GPU busy% は 68〜69% で確定、H1 (bubble) 単独で W 比 0.70 を説明。H3 (DVFS) は棄却、卒論の「エネルギー 0.7-0.8× で勝つ」は不成立 (GPU energy 0.90×・package energy 1.06×)","mixed",[14,15],[672,24,673,674,675,676,677,678,679,680,681],"counter-session","ioreport","power","energy","dvfs","p-state","msplat","m4-max","thesis-ready","negative","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #1",[684,685,686],"counter-12500-prof","counter-12500-noprof-r1","counter-12500-noprof-r2","本 session の 12.5k n=3 self-eval (premultiplied convention) mean 36.174 dB (36.187 \u002F 36.130 \u002F 36.204)、profile=true 1 本 36.262 dB。msplat 30K native val (white) n=4 mean 36.539 dB。**convention 依存のため直接比較しない** (p2-msplat-parity-lego の cross-eval 表を参照)","12.5k profile=false n=3 mean **216.12s** (219.35 \u002F 222.71 \u002F 206.31) — W2 gate の 219.51s と同水準 (日内 drift 内)。msplat 30K n=4 mean **169.77s** (176.09 \u002F 161.37 \u002F 173.93 \u002F 167.68)。等価 gap = **1.273×**","busy-68to69pct-H1-only-H3-refuted-energy-claim-withdrawn","1× 工程表 v2 が「AC 復帰後 queue #1」に置いていた counter session を実施し、3 問すべてを実測で閉じた。\u003Cstrong>(1) busy% 論争は 68〜69% で決着\u003C\u002Fstrong> — bench (final 68.9% \u002F iter5000 67.5%、n=3、cb_dropped=0・overlap 1.00×) と 12.5k full run の補正値 (148.169s busy ÷ 同日 profile=false wallclock 216.12s = 68.6%) が一致。\u003Cstrong>(2) H1\u002FH2\u002FH3 の verdict は「H1 単独で説明・H2 null・H3 棄却」\u003C\u002Fstrong>。W 比 0.704 ≈ busy 比 0.689 なので activity factor の差 (H2) を持ち出す必要がなく、P-state residency は本実装が P15 に 97.6〜98.0% (bench) 居座る一方、msplat の方が電力上限で P10〜P14 に落ちる — \u003Cstrong>DVFS で損をしているのは msplat であって本実装ではない\u003C\u002Fstrong>。\u003Cstrong>(3) 卒論 positive の撤回\u003C\u002Fstrong>: roadmap v2 が期待した「エネルギー 0.7-0.8× = W\u002FPSNR 効率で勝つ」は\u003Cstrong>不成立\u003C\u002Fstrong>。W が 0.70× でも wallclock が 1.273× 長いので、完走までの GPU energy は \u003Cstrong>0.897×\u003C\u002Fstrong> (10% 得) に留まり、CPU を含む package energy では \u003Cstrong>1.062×\u003C\u002Fstrong> (6% 損) に反転する。energy 0.75× を達成するには W 比 0.573× が必要で、実測 0.704× は energy 等価点 (0.764×) の外側。\u003Cstrong>結論: 卒論 §5 で電力効率を主張軸にはできない。正しい主張は「同じ package 電力枠でより長く回る = 熱設計に優しい」ではなく、単純に『S2\u002FS3 で bubble を潰せば W も energy も改善する余地が 31% 残っている』という engineering debt の定量化。\u003C\u002Fstrong>","\u002Ffindings\u002Fp2-counter-session\u002F",{"id":55,"title":693,"date":9,"status":10,"polarity":12,"category":11,"axes":694,"tags":695,"task_code":703,"related_runs":704,"delta_psnr":708,"delta_wallclock":709,"rank":61,"verdict":710,"impact_summary":711,"detail_path":712},"W1 warp sparse skip + exp-skip — backward -35% \u002F replay -11.2% (bit-exact)",[14],[17,696,697,698,699,700,701,702,26,27],"w1","warp-sparse-skip","exp-skip","backward","forward","simd-any","function-constant","2026-08 1× 工程表 v2 W1",[705,706,707],"lego-w1-warpany-12500","lego-w1-warpany-12500-rep2","lego-w1-warpany-12500-rep3","12.5k gate n=3: 36.209 \u002F 36.201 \u002F 36.193 dB → mean 36.201 dB = 基準 36.148 (S1 n=3 mean) 比 +0.053 dB (guard ±0.1 内、n=3 mean 判定 — S1 の教訓に従い n=1 判定なし)","replay bench final regime: 21.724 → 19.300 ms\u002Fiter = **-11.16%** (閾値 max(2σ,1%)=2.7%)。iter5000 regime: 19.984 → 17.759 = **-11.13%** (閾値 3.1%)。backward_raster: 7.183 → 4.652 ms\u002Fcall (**-35.2%**、GPU 部 5.963 → 3.437 = -42.4%)。12.5k full run n=3: 239.74 \u002F 246.93 \u002F 237.57s → mean **241.41s** (S1 基準 261.55s 比 **-7.7%**)","w1-adopted-default-flip-warp-any","1× 工程表 v2 の第 1 波。msplat \u002F Inria \u002F brush の 3 実装が持ち本実装だけ欠落していた backward の 2 つの skip を、bit-exact の等価性論証つきで移植した。backward_raster は LC (2-BWD) 後の 7.2ms\u002Fcall から 4.65ms\u002Fcall へ -35.2% (kernel share 13.1% に低下)、replay 全体で -11.2%。12.5k full run は 261.55 → 241.41s で msplat 同日等価 gap は 1.56× → 1.44× に縮小。数学的同値の施策のみの累計は 766.07 → 241.41s = -68.5% になった。次の律速は forward (23.6%) \u002F radix (15.0%) で、W2 (encoder\u002FCB 統合) と計測 (counter session) が次段。","\u002Ffindings\u002Fp2-w1-warp-sparse-skip\u002F",{"id":54,"title":714,"date":9,"status":10,"polarity":12,"category":11,"axes":715,"tags":716,"task_code":721,"related_runs":722,"delta_psnr":726,"delta_wallclock":727,"rank":61,"verdict":728,"impact_summary":729,"detail_path":730},"W2 encoder\u002FCB 統合 — replay -13.7% \u002F 12.5k -9.1% (bit-exact、default flip)",[14,15],[17,717,718,20,719,720,26,27,28],"w2","chained-submission","encoder","set-bytes","2026-08 1× 工程表 v2 W2",[723,724,725],"lego-w2-chained-12500","lego-w2-chained-12500-rep2","lego-w2-chained-12500-rep3","12.5k gate n=3: 36.160 \u002F 36.203 \u002F 36.146 dB → mean 36.170 dB = W1 基準 36.201 (n=3 mean) 比 -0.031 dB (guard ±0.1 内、n=3 mean 判定 — n=1 判定なし)","replay bench final regime: 20.869 → 18.005 ms\u002Fiter = **-13.7%** (clean batch 帯 -13.7〜-16.2%、閾値 max(2σ,1%)=1.9%)。iter5000 regime: clean 帯 18.60〜19.76 → 16.56〜16.61 = **-10.7〜-15.9%** (閾値 ≤2.8%)。12.5k full run n=3: 213.42 \u002F 224.83 \u002F 220.27s → mean **219.51s** (W1 基準 241.41s 比 **-9.1%**)","w2-adopted-default-flip-chained","1× 工程表 v2 の第 2 波。HW 4 軸調査 #2 の CB\u002Fwait 監査 (本実装 ~21 CB \u002F ~11 wait vs msplat 1 CB \u002F 0 wait) を受け、submission 戦略を BackendConfig の enum variant として実装・gate した。同一 CB 内の連続 encoder は firmware が CPU 介在なしに back-to-back 実行するため、per-kernel の commit + waitUntilCompleted (0.1〜1 ms 級の full round trip) が丸ごと消える。replay 全体で -13.7% (final)、12.5k full run は 241.41 → 219.51s で msplat 同日等価 gap は 1.44× → 1.31× に縮小。累計 (数学的同値の施策のみ) は 766.07 → 219.51s = -71.3%。expected gate 帯 -5〜15% (F.3 overlap 割引済) のほぼ上限で着弾し、F.3 (radix GPU scan) が単独敗北した『wait 除去』が、chain 全体の統合では大きく勝つことを示した — 部分 wait 除去と全 chain 統合の ROI 差は axis 3 (unified memory \u002F submission 論) の narrative 素材。次の律速は forward 30% (radix 18% 内数) \u002F chain GPU 26%。","\u002Ffindings\u002Fp2-w2-chained-submission\u002F",{"id":58,"title":732,"date":733,"status":10,"polarity":681,"category":734,"axes":735,"tags":736,"task_code":747,"related_runs":748,"delta_psnr":751,"delta_wallclock":752,"rank":61,"verdict":753,"impact_summary":754,"detail_path":755},"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","2026-05-25","audit",[14],[737,738,23,739,740,741,742,743,744,745,746],"p1-axis1","phase-f","gpu-prefix-scan","tier-2","falsified","negative-finding","metal-fences","tbdr","ab-test","lego-5k","P1 Phase F.3",[749,750],"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",1790227327640]