[{"data":1,"prerenderedAt":704},["ShallowReactive",2],{"finding:p2-s3-iteration-pipelining":3,"finding-runs:p2-s3-iteration-pipelining":499,"finding-related:p2-s3-iteration-pipelining":573},{"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":27,"commit":28,"branch":29,"config_paths":30,"related_runs":41,"related_findings":52},"p2-s3-iteration-pipelining","S3 iteration pipelining depth 2 — 12.5k -18.1% \u002F busy 78 → 91% (default flip)","S2 が forward を 1 CB に畳んだ後も残っていた sync-tax は「CB 完了まで host が次 iteration を組めない」実行形状そのものだった。iteration N の loss\u002Fbackward CB を commit した直後に \u003Cstrong>wait せず\u003C\u002Fstrong> iteration N+1 の forward CB を組んで commit し、in-flight command buffer を常に 2 本以下に保つ depth-2 pipelining を入れた。host の重い仕事 (grad 14.7 MB readback \u002F \u003Ccode>RefineState::accumulate\u003C\u002Fcode> \u002F SSIM の host 総和) はすべて F\u003Csub>N+1\u003C\u002Fsub> の GPU 実行の影に入る。12.5k Lego の\u003Cstrong>同一 session 交互 A\u002FB n=3 で 185.21 → 151.70s = -18.1%\u003C\u002Fstrong> (process wallclock 188.33 → 154.0s = -18.2%)、機構は Layer 1 が直接示す — \u003Cstrong>GPU busy 77.5 → 91.3%、sync-tax 3.244 → 1.136 ms\u002Fiter (-65%)、\u003Ccode>ts_fwd_chain_commit_wait\u003C\u002Fcode> 5.195 → 2.636 ms\u002Fiter\u003C\u002Fstrong>。PSNR は n=3 mean 36.202 dB (off 36.185、guard 内)。\u003Cstrong>msplat 同日等価 gap は 1.105× → 0.907×\u003C\u002Fstrong>。","1× 工程表 v2 · S3 · iteration pipelining (並列性能軸)","2026-08-17","stable","experiment","positive",[14,15],1,3,[17,18,19,20,21,22,23,24,25,26],"1x-roadmap-v2","s3","iteration-pipelining","command-buffer","gpu-busy","sync-tax","double-buffering","scratch-generation","lego","unified-memory","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2' (S3 gate)","726c78524fe5","main",[31,32,33,34,35,36,37,38,39,40],"splat\u002Fconfigs\u002F2026-08-16-s3-smoke-1000-off.toml","splat\u002Fconfigs\u002F2026-08-16-s3-smoke-1000-depth2.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-off-prof.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-depth2-prof.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-off-r1.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-off-r2.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-off-r3.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-depth2-r1.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-depth2-r2.toml","splat\u002Fconfigs\u002F2026-08-16-s3-12500-depth2-r3.toml",[42,43,44,45,46,47,48,49,50,51],"s3-smoke-1000-off","s3-smoke-1000-depth2","s3-12500-off-prof","s3-12500-depth2-prof","s3-12500-off-r1","s3-12500-off-r2","s3-12500-off-r3","s3-12500-depth2-r1","s3-12500-depth2-r2","s3-12500-depth2-r3",[53,54,55,56,57,58],"p2-s2-forward-chained","p2-counter-session","p2-w2-chained-submission","p2-flag-revisit-sweep","p2-bench-harness-calibration","p2-msplat-parity-lego",{"summary":60,"rank":61,"verdict":62,"delta_psnr":63,"delta_wallclock":64},"1× 工程表 v2 が「S2 後の単独本命」に指定していた S3 を gate し、採用した。S2 までの施策が \u003Cstrong>CB の数\u003C\u002Fstrong>を減らすものだったのに対し、S3 は \u003Cstrong>CB の並び方\u003C\u002Fstrong>を変える — iteration N の loss\u002Fbackward CB (B\u003Csub>N\u003C\u002Fsub>) を commit したら wait せずに iteration N+1 の forward CB (F\u003Csub>N+1\u003C\u002Fsub>) を組んで commit し、\u003Ccode>wait(B\u003Csub>N\u003C\u002Fsub>)\u003C\u002Fcode> の後の host readback \u002F \u003Ccode>accumulate\u003C\u002Fcode> を F\u003Csub>N+1\u003C\u002Fsub> の GPU 実行の影に置く。\u003Cstrong>12.5k 同一 session 交互 A\u002FB n=3 で 185.21 → 151.70s = -18.1%\u003C\u002Fstrong> (閾値 max(2σ,1%) = 6.7% の 2.7 倍)。\u003Cstrong>GPU busy 77.5 → 91.3% \u002F sync-tax 3.244 → 1.136 ms\u002Fiter (-65%)\u003C\u002Fstrong> で counter session が置いた「busy 100% = 理論上限」への距離は 22.5 pt → 8.7 pt に縮んだ。\u003Cstrong>1k smoke では busy 65.8 → 72.0% にしか上がらず判定不能だった\u003C\u002Fstrong> — smoke の splat 数 6.8k では forward の GPU 影 (1.06 ms\u002Fiter) が image size 固定の host 仕事 (~1.7 ms\u002Fiter) を隠しきれないためで、これは \u003Cstrong>「pipelining の gate は smoke では代替できない」という harness 上の教訓\u003C\u002Fstrong>として残す。残 bubble の内訳も確定した: \u003Cstrong>refine tick の drain 6.04s (43%) &gt; encode(B) 4.66s (33%) &gt; 残差 3.28s (23%)\u003C\u002Fstrong> — 次の一手が roadmap の「即効ペア (refine capacity スコープバグ修正)」であることが実測で決まった。msplat 同日等価 gap \u003Cstrong>1.105× → 0.907×\u003C\u002Fstrong>、Phase 0 からの累計 766.07 → 154.0s = \u003Cstrong>-79.9%\u003C\u002Fstrong> (全て数学的同値の施策のみ)。","high","s3-adopted-default-flip-pipelining-depth2","12.5k **同一 session 交互 A\u002FB** n=3 mean: depth2 **36.202 dB** (36.195 \u002F 36.179 \u002F 36.231) vs off **36.185 dB** (36.178 \u002F 36.192 \u002F 36.186) = **+0.016 dB** (guard 36.167 ± 0.1 の内側、n=3 mean 判定 — n=1 判定なし)。final splats は depth2 406,439 \u002F off 408,874 で **depth2 のほうが 0.6% 少ない** (前段の profile pair では逆に +0.6% で、方向が一致しない = 既存 atomic 非決定性の chaos 増幅の範囲)","12.5k full run **同一 session 交互 A\u002FB n=3 mean: 185.21 → 151.70s = -18.1%** (train elapsed)。process wallclock では **188.33 → 154.00s = -18.2%**。σ は off 3.33% \u002F depth2 1.18% なので有意閾値 max(2σ,1%) = 6.7%、実測 Δ は**その 2.7 倍**。同一 session の off arm は S2 gate 当日の S2 arm (train 184.61s \u002F process 187.65s) を **+0.3% で再現**しており、session の健全性が確認できている。参考: profile=true の 1 対 1 比較では 180.49 → 162.72s = -9.85% (計装自体が host 側 critical path に乗るため S3 の効果を過小評価する)",[66,69,72,99,101,121,153,158,160,194,198,200,283,287,290,292,330,333,392,395,397,424,427,429,432,446,448,483,486,489,491],{"type":67,"text":68},"lead","counter session (p2-counter-session) と S2 gate (p2-s2-forward-chained) は「残る sync-tax 2.86 ms\u002Fiter は \u003Cstrong>command buffer が完了するまで host が次 iteration を組めない\u003C\u002Fstrong>という実行形状そのもので、CB をこれ以上畳んでも消えない」と結論していた。S3 はその結論を実装したもの — iteration N の loss\u002Fbackward CB を commit したら \u003Cstrong>wait せず\u003C\u002Fstrong>に iteration N+1 の forward CB を組んで commit し、in-flight command buffer を常に 2 本以下に保つ。host の重い仕事 (grad 14.7 MB readback \u002F \u003Ccode>RefineState::accumulate\u003C\u002Fcode> \u002F SSIM の host 総和 1.9M 要素) はすべて F\u003Csub>N+1\u003C\u002Fsub> の GPU 実行の影に入る。\u003Cstrong>param \u002F adam state の double buffering は不要\u003C\u002Fstrong> — command queue が 1 本の in-order queue なので \u003Ccode>B\u003Csub>N-1\u003C\u002Fsub> ≺ F\u003Csub>N\u003C\u002Fsub> ≺ B\u003Csub>N\u003C\u002Fsub> ≺ F\u003Csub>N+1\u003C\u002Fsub>\u003C\u002Fcode> が保証され、B\u003Csub>N\u003C\u002Fsub> の adam write は F\u003Csub>N+1\u003C\u002Fsub> の project read より必ず前に起きる。二重化が要るのは \u003Cstrong>scratch だけ\u003C\u002Fstrong> (cross-CB の write-after-read を buffer の同一性ごと消す)。",{"type":70,"text":71},"heading","0. 計測環境 — CPU 汚染で round 1 を全 6 run 破棄している (先に宣言する)",{"type":73,"items":74},"kv",[75,78,81,84,87,90,93,96],{"key":76,"value":77},"電源 \u002F 機体","AC 接続、M4 Max (36 GB)、macOS 26.5.2 (25F84)。**GPU は本 session が専有**",{"key":79,"value":80},"CPU 側の汚染","同一機体で別プロジェクト (diver_v4) の TypeScript typecheck (`tsc --noEmit` が 385% + 287%)、Gradle daemon (JVM 198〜427%)、wrangler deploy、Xcode `swift-frontend`、Spotlight 再インデックスが**断続的に**走った。session 中の 1 分 load average は **2.0 → 26.7** まで変動",{"key":82,"value":83},"なぜ致命的か (S2 のときより深刻)","S3 の機構は「**host 仕事を GPU 実行の影に隠す**」ことそのもの。CPU が競合すると host 仕事が影からはみ出し、**depth2 arm を選択的に遅くする** (実測: depth2-r2 は load 平均 7.95 で 165.67s、load 平均 2.14 で 152.70s = **+8.5%**)。つまり汚染は S3 に**不利**な方向に効く",{"key":85,"value":86},"**採用した規律**","① 各 run の開始前に 1 分 load が閾値未満になるまで待つ (driver `splat\u002Fscripts\u002Fs3-gate-abbaab.sh` の quiesce)、② 各 run の前後で load を記録、③ 10s 間隔の独立 sampler で **run 窓内の load 平均 \u002F 最大**を事後計算、④ 汚染 run は破棄して再測",{"key":88,"value":89},"round 1 の破棄 (全 6 run)","23:27〜23:45 の ABBAAB は load 2 → 23 の上昇に直撃され、off σ 4.71% \u002F depth2 σ 2.61% と **arm 間で σ が非対称**になった (汚染の典型的な署名)。Δ は -12.4%。**全 6 run を破棄**し、log は `runs-logs\u002Fs3-12500-abbaab-round1-CONTAMINATED-*.log` として残した",{"key":91,"value":92},"round 2 (採用) の run 窓内 load","off: 8.03 \u002F 3.10 \u002F 3.62 (最大 13.28 \u002F 4.04 \u002F 4.34)、depth2: 3.57 \u002F 2.14 \u002F 4.96 (最大 4.22 \u002F 2.58 \u002F 6.94)。**off-r1 だけ平均 8.03 と高い**が、その off-r1 が 3 本中**最速** (179.87s) だったので、残せば off arm を有利に見せる = **S3 に不利な側に倒す**。よって破棄せず採用した",{"key":94,"value":95},"A\u002FB 設計","12.5k は **同一 session 内で交互** (実行順 A B B[破棄] A B A B)。S2 gate と同じ方針で、cross-session の「当日 baseline」は使わない。前段の profile=true 1 対 1 比較 (Layer 1 取得用) は 23:20〜23:26 の**汚染前**に取れている",{"key":97,"value":98},"default flip の副作用 (記録)","`pipelining` default が Depth2 になったため、① 敗者 variant を pin した **train config 12 本**に `pipelining = \"off\"` を明示追記した (`batched_tail` 4 \u002F `per_kernel` 2 \u002F `loss_path=host` 3 \u002F `forward_submission=per_stage` 系 3)。flip 後に **`splat check` で全 247 config を sweep し、train config 187 本すべて load 成功 \u002F pipelining 起因の validate failure 0** を確認 (残る 60 本は bench\u002Fparity config で `splat check` の schema 対象外、うち 1 本 `2026-05-01-0606-smoke-1000iter-stp.toml` は S3 以前からの schema 不整合)。② `splat bench` 側は **raw TOML に `pipelining` を書いていない config を `Off` に落とす** demote を入れた (下の callout)",{"type":70,"text":100},"1. 等価性 — 「同一実装を共有する」ことの構造的保証 + test 5 本",{"type":73,"items":102},[103,106,109,112,115,118],{"key":104,"value":105},"変わらないもの","kernel、dispatch 列、bind 順、数値。loss\u002Fbackward chain の encode は `pipeline::encode_loss_backward_chain` の **同一実装**を Off \u002F Depth2 が共有する",{"key":107,"value":108},"変わるもの (3 点だけ)","(a) CB の commit と wait の位置、(b) forward scratch の世代 (2 世代 ping-pong)、(c) host が消費しない forward readback の省略 (`splats2d` \u002F `tile_offsets` \u002F `final_t`)",{"key":110,"value":111},"順序保証 (a)","**単一 in-order queue**。`Device` は command queue を 1 本しか持たず commit 順に実行されるので `B_{N-1} ≺ F_N ≺ B_N ≺ F_{N+1}`。これが「param \u002F adam state の double buffering 不要」の根拠 — B_N の adam write は F_{N+1} の project read より必ず前",{"key":113,"value":114},"順序保証 (b)","**forward scratch の 2 世代化**。F_{N+1} を encode する時点で B_N はまだ GPU 実行中で `splats2d` \u002F `sorted_idx` \u002F `tile_offsets` \u002F `rendered` \u002F `final_t` \u002F `last_contrib` を読んでいる。世代を分けて write-after-read を buffer の同一性ごと消す。世代の取り違えは `finish_forward_chained` の `debug_assert_eq!` が pin する (**debug build でのみ有効なので test は debug で走らせる規約**)",{"key":116,"value":117},"順序保証 (c)","**backward scratch の 2 世代化**。1 世代でも「loop body の 2 文の順序」を人間が守れば足りるが、readback を encode の下に動かしても panic せず loss と grad が静かに壊れる。2 世代化でこの規約が**世代 index の不一致という構造**に変わる",{"key":119,"value":120},"grad buffer は 1 世代のまま","書き手も読み手も B_k CB の内側に閉じている (blit zero → project_backwards の accumulate → adam が同一 CB の encoder 列)。host が grad を触る唯一の経路 (scale_reg \u002F MCMC L1 の RMW) は先行 encode を skip する iteration",{"type":122,"columns":123,"align":127,"rows":129},"table",[124,125,126],"test","何を pin するか","結果",[128,128,128],"left",[130,134,137,140,143,146,149],[131,132,133],"`pipelining_depth2_matches_off_byte_exact_1iter`","1 iteration の全 param が Off と byte 一致","**PASS**",[135,136,133],"`pipelining_depth2_matches_off_byte_exact_2iter`","2 iteration (= 世代 ping-pong が 1 周) で byte 一致",[138,139,133],"`pipelining_depth2_matches_off_across_refine_ticks`","refine tick (= 逐次点) を跨いでも byte 一致",[141,142,133],"`pipelining_depth2_grad_rmw_order_preserved_scale_reg`","grad への CPU RMW がある iteration で Off と同じ逐次順序",[144,145,133],"`pipelining_off_never_leaves_scratch_generation_zero`","`pipelining = off` は slot 0 固定 (S2 と bit-exact)",[147,148,133],"`pipeline::tests` 8 本","逐次点 cadence (refine \u002F relocation \u002F opacity reset \u002F checkpoint \u002F grad RMW \u002F MCMC noise) と in-flight limiter",[150,151,152],"workspace 全体","debug (`-p splat-train-v1` 70 本、`debug_assert` 有効) + release 全 crate","**PASS \u002F warning 0**",{"type":154,"label":155,"variant":156,"text":157},"callout","「bit-exact」の射程 — kernel は同一だが end-to-end は既存の非決定性を継承する","warning","S3 は\u003Cstrong>新しい計算を 1 つも足していない\u003C\u002Fstrong>ので、test 5 本が示すとおり同一 seed・同一 iteration での結果は Off と byte 一致する。しかし \u003Cstrong>end-to-end の 12.5k run が run 間で bit-exact になるわけではない\u003C\u002Fstrong> — rasterize backward の \u003Ccode>atomic&lt;float&gt;\u003C\u002Fcode> 加算順序に由来する既存の非決定性を S3 も\u003Cstrong>そのまま継承する\u003C\u002Fstrong> (p2-s2-forward-chained と同じ)。実際 1k smoke の final loss は off 6.582768e-2 \u002F depth2 6.568347e-2 と一致せず、12.5k の final splats も off 408,874 \u002F depth2 406,439 とズレる。\u003Cstrong>だから PSNR guard (n=3 mean ±0.1) は実質的な検査として機能している\u003C\u002Fstrong>。",{"type":70,"text":159},"2. 1k smoke は判定に使えなかった — 「pipelining の gate は smoke で代替できない」",{"type":122,"columns":161,"align":166,"rows":168},[162,163,164,165],"指標 (1k smoke、profile=true、最終 6,826 splats)","off","depth2","読み方",[128,167,167,128],"right",[169,174,179,184,189],[170,171,172,173],"GPU busy%","65.8%","72.0%","**期待した 95% 圏に遠く届かない**",[175,176,177,178],"sync-tax (ms\u002Fiter)","1.573","1.270","-19% しか減らない",[180,181,182,183],"wallclock (s)","4.601","4.545","**-1.2% = 判定不能**",[185,186,187,188],"`ts_fwd_chain_commit_wait` (ms\u002Fiter)","1.252","0.176","**-86% — 機構自体は完全に効いている**",[190,191,192,193],"`ts_chain_commit_wait` (ms\u002Fiter)","2.135","2.411","+13% (forward 待ちが loss chain 待ちへ移動しただけ)",{"type":154,"label":195,"variant":196,"text":197},"原因は splat 数 — 「隠す先の影」が短すぎた","info","1k smoke の最終 splat 数は \u003Cstrong>6,826\u003C\u002Fstrong> (12.5k run は 407k)。forward の GPU 実行時間はおよそ \u003Cstrong>1.06 ms\u002Fiter\u003C\u002Fstrong> しかなく、これが「host 仕事を隠す影」の全長になる。一方 host 側で隠したい仕事のうち \u003Cstrong>SSIM の host 総和 (1.9M 要素) は image size にしか依存せず splat 数で縮まない\u003C\u002Fstrong> (~1.7 ms\u002Fiter)。したがって smoke では\u003Cstrong>影より仕事のほうが長く\u003C\u002Fstrong>、原理的に隠しきれない。12.5k (407k splats) では forward の影が 4〜5 ms\u002Fiter に伸びるので全部入る。\u003Cstrong>この構造から「iteration pipelining は smoke で gate できない」という harness 上の一般則が出る\u003C\u002Fstrong> — S3 は 12.5k を 2 本 (profile=true の 1 対 1) 追加で走らせて判定に進んだ。",{"type":70,"text":199},"3. 12.5k の実測 — 同一 session 交互 A\u002FB n=3 (round 2、採用)",{"type":122,"columns":201,"align":209,"rows":210},[202,203,204,205,206,207,208],"実行順","arm","train elapsed (s)","process wallclock (s)","PSNR (dB)","final splats","run 窓内 load1 平均 \u002F 最大",[128,128,167,167,167,167,167],[211,219,227,235,242,249,256,262,270,277],[212,213,214,215,216,217,218],"1","off (A)","179.87","183","36.178","406,400","8.03 \u002F 13.28",[220,221,222,223,224,225,226],"2","depth2 (B)","149.63","152","36.195","405,084","3.57 \u002F 4.22",[228,229,230,231,232,233,234],"—","depth2 (破棄)","(165.67)","(169)","(36.280)","(407,650)","**7.95 \u002F 15.16**",[236,213,237,238,239,240,241],"3","191.95","195","36.192","409,011","3.10 \u002F 4.04",[243,221,244,245,246,247,248],"4","152.70","155","36.179","407,677","2.14 \u002F 2.58",[250,213,251,252,253,254,255],"5","183.80","187","36.186","411,211","3.62 \u002F 4.34",[257,221,258,245,259,260,261],"6","152.77","36.231","406,555","4.96 \u002F 6.94",[263,264,265,266,267,268,269],"**mean**","**off**","**185.21** (σ 3.33%)","**188.33**","**36.185**","408,874","4.92",[263,271,272,273,274,275,276],"**depth2**","**151.70** (σ 1.18%)","**154.00**","**36.202**","406,439","3.56",[278,228,279,280,281,282,228],"**Δ**","**-18.09%**","**-18.23%**","**+0.016**","-0.6%",{"type":154,"label":284,"variant":285,"text":286},"有意性 — 閾値 max(2σ, 1%) を 2.7 倍超過。σ の非対称そのものが機構の証拠","success","σ は off \u003Cstrong>3.33%\u003C\u002Fstrong> \u002F depth2 \u003Cstrong>1.18%\u003C\u002Fstrong>、したがって有意閾値は \u003Cstrong>max(2σ, 1%) = 6.7%\u003C\u002Fstrong>。実測 Δ -18.1% は\u003Cstrong>その 2.7 倍\u003C\u002Fstrong>。加えて \u003Cstrong>σ の非対称自体が S3 の機構を裏づける\u003C\u002Fstrong> — depth2 は GPU busy 91.3% でほぼ GPU 律速なので host 側 jitter に鈍く、off は host 往復が critical path に乗っているので jitter をそのまま拾う。同一 session の off arm (train 185.21s \u002F process 188.33s) は S2 gate 当日の S2 arm (184.61 \u002F 187.65) を \u003Cstrong>+0.3% で再現\u003C\u002Fstrong>しており、session の健全性も別途確認できている。期待帯 (roadmap v2 再見積り: \u003Cstrong>busy 96% 圏 \u002F ms\u002Fiter -13〜16%\u003C\u002Fstrong>) に対しては \u003Cstrong>busy は下振れ (91.3%) \u002F wallclock は上振れ (-18.1%)\u003C\u002Fstrong> で着弾した。",{"type":154,"label":288,"variant":156,"text":289},"破棄した round 1 (全 6 run) — 数値を残して監査可能にする","23:27〜23:45 の ABBAAB は off \u003Cstrong>182.32 \u002F 188.90 \u002F 200.06s\u003C\u002Fstrong> (mean 190.43、σ 4.71%)、depth2 \u003Cstrong>166.74 \u002F 162.49 \u002F 171.19s\u003C\u002Fstrong> (mean 166.81、σ 2.61%)、Δ \u003Cstrong>-12.4%\u003C\u002Fstrong>。この間に別プロジェクトの tsc \u002F Gradle \u002F wrangler が立ち上がり 1 分 load が 2 → 23 まで上がった。\u003Cstrong>破棄の理由は Δ の大小ではなく arm 間で σ が非対称になったこと\u003C\u002Fstrong>で、S3 のように「host 仕事を影に隠す」施策では CPU 競合が depth2 側を選択的に殴るため、汚染下の Δ (-12.4%) は\u003Cstrong>真値より小さく出る\u003C\u002Fstrong>。実際 clean 条件で取り直すと -18.1% に伸びた。同じ現象は単一 run 単位でも観測できる — \u003Ccode>depth2-r2\u003C\u002Fcode> は load 平均 7.95 で 165.67s、load 平均 2.14 で 152.70s (\u003Cstrong>+8.5%\u003C\u002Fstrong>)。",{"type":70,"text":291},"4. 機構の帰属 — Layer 1 (GPU busy \u002F sync-tax) が直接示す",{"type":122,"columns":293,"align":296,"rows":297},[294,163,164,295],"指標 (12.5k、profile=true、汚染前に取得)","Δ",[128,167,167,167],[298,303,308,313,317,321,325],[299,300,301,302],"**GPU busy%**","77.5%","**91.3%**","**+13.8 pt**",[304,305,306,307],"**GPU busy (s)**","139.854","148.436","+6.1%",[309,310,311,312],"**sync-tax (s \u002F ms per iter)**","40.556 \u002F 3.244","**14.206 \u002F 1.136**","**-65.0%**",[204,314,315,316],"180.49","162.72","-9.85%",[318,228,319,320],"`[pipelining]` 計器","`peak_in_flight=2` \u002F `sync_iters=121 \u002F 12500` (99.0% で先行 encode)","in-flight CB が仕様どおり 2 本以下",[207,322,323,324],"407,489","410,011","+0.6%",[326,327,328,329],"self-eval PSNR (dB)","36.127","36.247","+0.120",{"type":154,"label":331,"variant":285,"text":332},"`sync_iters = 121 \u002F 12500` が逐次点の設計どおりであることの検算","先行 encode を止める iteration 数は \u003Cstrong>121\u003C\u002Fstrong>。refine tick は \u003Ccode>start_iter=500 \u002F every=100 \u002F stop_iter=12500\u003C\u002Fcode> なので \u003Cstrong>(12500 − 500) \u002F 100 + 1 = 121\u003C\u002Fstrong> で完全一致する。1k smoke でも \u003Ccode>sync_iters = 6\u003C\u002Fcode> = \u003Ccode>(1000 − 500) \u002F 100 + 1\u003C\u002Fcode> で一致。\u003Cstrong>\u003Ccode>param_mutated_after_step\u003C\u002Fcode> が refine tick でだけ発火し、それ以外の想定外の drain が 1 度も起きていない\u003C\u002Fstrong>ことの直接証拠になる (本 config は MCMC noise \u002F relocation \u002F opacity reset \u002F checkpoint をすべて無効にしているので、期待される逐次点は refine tick のみ)。",{"type":122,"columns":334,"align":336,"rows":337},[335,163,164,165],"label (µs\u002Fcall、12.5k profile=true)",[128,167,167,128],[338,343,348,353,358,363,368,373,378,382,387],[339,340,341,342],"**`ts_fwd_chain_commit_wait`** (forward CB の wait)","**5,195.0**","**2,636.0**","**-49.3%** — S3 の機構そのもの。forward の待ちが B_{N-1} の実行と重なって消える",[344,345,346,347],"`ts_forward` (forward 全体)","5,509.0","2,640.0","-52.1% (上の wait が支配的)",[349,350,351,352],"**`ts_chain_commit_wait`** (loss\u002Fbackward CB の wait)","**6,684.0**","**7,109.0**","**+6.4%** — forward 待ちが減ったぶん GPU 律速がここに集まる (期待どおり)",[354,355,356,357],"`ts_refine_accumulate`","323.4","493.2","+52.5% だが **gpu_ms 0 → 1,871.9** = F_{N+1} の影で走っていることの計器上の証拠",[359,360,361,362],"`ts_ssim_fwd_grad` (encode)","83.3","127.1","+52.6%",[364,365,366,367],"`ts_backward_raster` (encode)","72.8","115.1","+58.2%",[369,370,371,372],"`ts_raster_bwd_alloc`","56.6","88.9","+57.1%",[374,375,376,377],"`ts_zero_grads`","8.6","18.6","+115.7%",[379,375,380,381],"`ts_raster_bwd_upload`","13.9","+60.9%",[383,384,385,386],"`ts_adam` (encode)","2.4","3.5","+49.7%",[388,389,390,391],"`ts_refine` (µs \u002F tick)","43,066","49,888","+15.8% (121 tick)",{"type":154,"label":393,"variant":156,"text":394},"S3 が持ち出す代金 — encode コストが systematic に +50〜115% 上がる","depth2 では \u003Cstrong>すべての encode scope が 1.5〜2.2 倍に膨らむ\u003C\u002Fstrong> (1k smoke でも同じ比率で観測できたので splat 数に依らない構造的なコスト)。原因は「\u003Cstrong>GPU が別の CB を実行している最中に host が encode している\u003C\u002Fstrong>」ことで、driver 側の lock 競合と unified memory の帯域競合の両方が効いていると考えられる。総額は encode(B) 合計で \u003Cstrong>0.236 → 0.373 ms\u002Fiter (+0.137)\u003C\u002Fstrong>。module doc が置いていた「残る bubble は encode(B) のみ ~0.3 ms\u002Fiter」という見積りは\u003Cstrong>この膨張を織り込んでいなかった\u003C\u002Fstrong>ので、実測値 0.373 に訂正する。同様に \u003Cstrong>GPU busy 時間そのものが +6.1% (139.85 → 148.44s)\u003C\u002Fstrong> 増えている — splat 数の差 (+0.6%) では説明できず、① 2 世代化した scratch (+275 MB) の ping-pong による SLC\u002FL2 局所性の悪化、② CB を隙間なく詰めたことで \u003Ccode>GPUStartTime\u003C\u002Fcode>\u002F\u003Ccode>GPUEndTime\u003C\u002Fcode> の union に scheduling latency が算入されるようになった計測上の artifact、の 2 つが候補。\u003Cstrong>どちらであっても回収額 (sync-tax -26.35s) が代金 (+8.58s) を 3 倍以上上回る\u003C\u002Fstrong>ので判定は変わらないが、切り分けは Xcode capture の残件に積む。",{"type":70,"text":396},"5. 残 bubble の内訳 — 次の一手が実測で決まった",{"type":122,"columns":398,"align":404,"rows":405},[399,400,401,402,403],"残 sync-tax の内訳 (depth2、12.5k、profile=true、合計 14.206s)","s","ms\u002Fiter","share","解消手段",[128,167,167,167,128],[406,412,418],[407,408,409,410,411],"**refine tick の drain** (`ts_refine` + `ts_opacity_decay`、121 tick)","**6.26**","0.501","**44%**","roadmap の**即効ペア** (`refine()` capacity スコープバグ修正 ~2.1GB\u002Ftick → ~0.85GB)。tick 中は先行 encode を止めるので GPU が完全に空く",[413,414,415,416,417],"**encode(B)** (zero_grads → ssim → l1 → backward → project_back → adam)","**4.66**","0.373","**33%**","構造上ここは埋まらない (depth 3 以上か encode の並列化が必要)。ただし上の「encode 膨張」を抑えられれば 0.236 相当まで下がる余地",[419,420,421,422,423],"残差 (影に収まりきらない readback \u002F driver overhead)","3.28","0.263","23%","Xcode capture で CB 内 occupancy を見る残件",{"type":154,"label":425,"variant":196,"text":426},"理論上限の更新 — 「busy 100% = 148.17s」は書き換えが必要","counter session は「busy 100% なら 216.12 → \u003Cstrong>148.17s\u003C\u002Fstrong>」という上限を置いていたが、これは \u003Cstrong>S2 時点の busy ms\u002Fiter\u003C\u002Fstrong> を固定した計算だった。S3 は busy 時間自体を +6.1% 押し上げているので上限も動く。本 gate の実測 (profile=true で busy 91.3%) をそのまま profile=false の 151.70s に当てると \u003Cstrong>残 bubble 8.7% = 約 13.2s、busy 100% の床は ~138.5s\u003C\u002Fstrong>。ただし profile=true \u002F false で busy 時間が同じという保証は無い (計装は host 側にも GPU 側にも乗る) ため、\u003Cstrong>これは推定であって実測ではない\u003C\u002Fstrong>。確定させるには profile=false 相当の busy を別経路で取る必要があり、Xcode capture の残件と同じ袋に入れる。",{"type":70,"text":428},"6. harness \u002F 規約への影響",{"type":154,"label":430,"variant":156,"text":431},"`splat bench` は S3 を測れない — hard error + demote の 2 段構え","\u003Ccode>splat bench\u003C\u002Fcode> は \u003Ccode>train_step\u003C\u002Fcode> を直接叩く replay harness で、\u003Cstrong>iteration 境界を持たない\u003C\u002Fstrong>。したがって pipelining は\u003Cstrong>原理的に測れない\u003C\u002Fstrong> (黙って Off 相当で走ると「S3 の replay 差分が 0」という誤った測定になる)。そこで \u003Ccode>build_trainer\u003C\u002Fcode> が \u003Ccode>pipelining != off\u003C\u002Fcode> を hard error にしてある。一方で本 gate の default flip 後は、\u003Ccode>pipelining\u003C\u002Fcode> を書いていない既存 bench config 47 本 + parity candidate 11 本が\u003Cstrong>全部この hard error に落ちる\u003C\u002Fstrong>ため、\u003Cstrong>raw TOML に \u003Ccode>pipelining\u003C\u002Fcode> キーが無い config は \u003Ccode>Off\u003C\u002Fcode> に落とす demote\u003C\u002Fstrong> を \u003Ccode>BenchTomlConfig::from_path\u003C\u002Fcode> と \u003Ccode>run_parity\u003C\u002Fcode> の両方に入れた (\u003Ccode>validate()\u003C\u002Fcode> より\u003Cstrong>前\u003C\u002Fstrong>に走らせる必要がある — 敗者 variant を pin した config は validate 側で先に落ちるため)。\u003Cstrong>明示的に \u003Ccode>depth2\u003C\u002Fcode> と書いた場合だけ\u003C\u002Fstrong> hard error に到達する。",{"type":73,"items":433},[434,437,440,443],{"key":435,"value":436},"gate 手順への追加 (規約)","**iteration pipelining 系の施策は 1k smoke で gate できない**。smoke は「配線が生きているか」(`peak_in_flight` \u002F `sync_iters` の計器) と「loss 曲線が壊れていないか」の確認に限定し、**性能判定は必ず本番 scale で行う**",{"key":438,"value":439},"gate driver","`splat\u002Fscripts\u002Fs3-gate-abbaab.sh` を追加 (quiesce 待ち + run 前後 load 記録 + arm 引数)。以後の full run gate はこれを土台にする",{"key":441,"value":442},"**σ の再測が必要**","`p2-bench-harness-calibration` の σ 0.83% は replay harness の値で、**full run の σ ではない**。本 gate で観測した full run の σ は off 3.33% \u002F depth2 1.18% (n=3)。今後 full run で判定するときはこちらを使う",{"key":444,"value":445},"profile=true は S3 を過小評価する","同一条件の 1 対 1 比較で profile=true は -9.85%、profile=false は -18.1%。計装 (timer \u002F completedHandler \u002F CB timestamp 読み) 自体が host 側 critical path に乗るため。**Layer 1 の busy% は profile=true でしか取れないが、wallclock 判定は profile=false で行う**という使い分けを維持する",{"type":70,"text":447},"7. 位置づけ — msplat 等価 gap と累計",{"type":122,"columns":449,"align":454,"rows":455},[450,451,452,453],"段階","Lego 12.5k (s)","msplat 169.77s 比","備考",[128,167,167,128],[456,460,464,469,474,479],[457,458,459,228],"Phase 0","766.07","4.51×",[461,462,463,228],"S1","261.55","1.54×",[465,466,467,468],"W1","241.41","1.42×","warp sparse skip",[470,471,472,473],"W2","219.51","1.29×","chained submission (loss chain 1 CB)",[475,476,477,478],"S2","187.65","1.105×","forward 1 CB + hierarchical scan",[480,273,481,482],"**S3**","**0.907×**","**iteration pipelining depth 2**",{"type":154,"label":484,"variant":156,"text":485},"「msplat に勝った」とは書かない — 断面が揃っていない","process wallclock 154.00s は msplat 同日実測 169.77s の \u003Cstrong>0.907×\u003C\u002Fstrong> で、数字の上では初めて 1.0× を割った。しかし\u003Cstrong>これは matched 断面ではない\u003C\u002Fstrong> — 本実装 Lego 12.5k の PSNR は 36.202 dB、msplat 30K の native val は 36.539 dB で \u003Cstrong>0.34 dB 低い\u003C\u002Fstrong>。roadmap v2 も最終段に「**msplat 等価比較の再実施 (matched 断面込み)**」を残しており、そこを通すまでは「等価 gap 0.907×」という\u003Cstrong>指標値として\u003C\u002Fstrong>のみ扱う。卒論本文に「速い」と書けるのは matched 断面を取った後。",{"type":154,"label":487,"variant":196,"text":488},"メモリ代価 — scratch 2 世代化で +275 MB (36 GB の 0.8%)","内訳は \u003Ccode>BinArena\u003C\u002Fcode> 172 MB (うち radix keys\u002Fidx が 156 MB)、SSIM work 56 MB、projector 16 MB、rasterize forward 15 MB、splats_grad 15 MB。\u003Cstrong>P2 調査時の見積り「~81 MB」は radix の keys\u002Fidx を数え落としていた\u003C\u002Fstrong>ので 3 倍以上の乖離がある。実効的には \u003Ccode>pair capacity = num_splats × 16\u003C\u002Fcode> の係数がそのままメモリ代価に効くので、将来 capacity hint を下げれば同じ割合で減る。Lego 12.5k で実際に peak RSS が問題になった場面は無い。",{"type":70,"text":490},"8. 次の一手 (本 gate で優先度が確定したもの)",{"type":492,"items":493},"list",[494,495,496,497,498],"**即効ペア (refine capacity スコープバグ修正 + zero_grads GPU blit 化) が単独の本命に格上げ** — 残 sync-tax 14.206s のうち **6.26s (44%) が refine tick の drain**。tick あたり 49.9 ms、121 tick。roadmap では -1〜2% 見込みだったが、S3 後の内訳では**それ以上の射程**がある","**encode(B) の膨張 (+58%) を抑える施策** — depth2 では encode が GPU 実行と競合して 1.5〜2.2 倍に膨らむ。setBytes 化の徹底 \u002F encoder 再利用 \u002F pre-encode した CB の使い回しが候補。総額 4.66s (33%)","**W3a\u002FW3b\u002FW4\u002FW5 の旨みがさらに増した** — busy 91.3% になったので、busy 側 (11.9 ms\u002Fiter) を削る施策がほぼそのまま wallclock に落ちる。S3 後の breakdown を取り直して優先度を確定する","**S2 follow-up (radix reduce の histogram fold) は defer 継続** — dispatch overhead の全額が +0.20 ms\u002Fiter 未満と実測済みで、S3 後もその判断は変わらない","**残件**: Xcode capture (CB 内 occupancy、busy +6.1% の切り分け) \u002F msplat 側 busy% 実測 \u002F matched 断面での msplat 再比較",[500,511,518,525,531,538,545,552,559,566],{"id":45,"title":45,"subtitle":501,"date":502,"workspace":503,"tags":504,"verdict":506,"psnr":507,"psnr_unit":-1,"wallclock":508,"splats":509,"summary_url":510,"detail_path":510},"S3 gate arm B (pipelining = depth2): Lego 12.5k full run (profile=true、Layer 1 busy% \u002F sync-tax 取得用)","2026-08-16","splat",[5,18,505,25],"gpu-gate","partial",36.247047424316406,"2m 42s",410011,"\u002Fruns\u002Fs3-12500-depth2-prof\u002F",{"id":49,"title":49,"subtitle":512,"date":502,"workspace":503,"tags":513,"verdict":506,"psnr":514,"psnr_unit":-1,"wallclock":515,"splats":516,"summary_url":517,"detail_path":517},"S3 gate arm B (pipelining = depth2): Lego 12.5k full run repeat 1",[5,18,505,25],36.19548416137695,"2m 29s",405084,"\u002Fruns\u002Fs3-12500-depth2-r1\u002F",{"id":50,"title":50,"subtitle":519,"date":502,"workspace":503,"tags":520,"verdict":506,"psnr":521,"psnr_unit":-1,"wallclock":522,"splats":523,"summary_url":524,"detail_path":524},"S3 gate arm B (pipelining = depth2): Lego 12.5k full run repeat 2",[5,18,505,25],36.17876434326172,"2m 32s",407677,"\u002Fruns\u002Fs3-12500-depth2-r2\u002F",{"id":51,"title":51,"subtitle":526,"date":502,"workspace":503,"tags":527,"verdict":506,"psnr":528,"psnr_unit":-1,"wallclock":522,"splats":529,"summary_url":530,"detail_path":530},"S3 gate arm B (pipelining = depth2): Lego 12.5k full run repeat 3",[5,18,505,25],36.230525970458984,406555,"\u002Fruns\u002Fs3-12500-depth2-r3\u002F",{"id":44,"title":44,"subtitle":532,"date":502,"workspace":503,"tags":533,"verdict":506,"psnr":534,"psnr_unit":-1,"wallclock":535,"splats":536,"summary_url":537,"detail_path":537},"S3 gate arm A (pipelining = off): Lego 12.5k full run (profile=true、Layer 1 busy% \u002F sync-tax 取得用)",[5,18,505,25],36.12682342529297,"3m 0s",407489,"\u002Fruns\u002Fs3-12500-off-prof\u002F",{"id":46,"title":46,"subtitle":539,"date":502,"workspace":503,"tags":540,"verdict":506,"psnr":541,"psnr_unit":-1,"wallclock":542,"splats":543,"summary_url":544,"detail_path":544},"S3 gate arm A (pipelining = off): Lego 12.5k full run repeat 1",[5,18,505,25],36.17844009399414,"2m 59s",406400,"\u002Fruns\u002Fs3-12500-off-r1\u002F",{"id":47,"title":47,"subtitle":546,"date":502,"workspace":503,"tags":547,"verdict":506,"psnr":548,"psnr_unit":-1,"wallclock":549,"splats":550,"summary_url":551,"detail_path":551},"S3 gate arm A (pipelining = off): Lego 12.5k full run repeat 2",[5,18,505,25],36.19233322143555,"3m 11s",409011,"\u002Fruns\u002Fs3-12500-off-r2\u002F",{"id":48,"title":48,"subtitle":553,"date":502,"workspace":503,"tags":554,"verdict":506,"psnr":555,"psnr_unit":-1,"wallclock":556,"splats":557,"summary_url":558,"detail_path":558},"S3 gate arm A (pipelining = off): Lego 12.5k full run repeat 3",[5,18,505,25],36.186100006103516,"3m 3s",411211,"\u002Fruns\u002Fs3-12500-off-r3\u002F",{"id":43,"title":43,"subtitle":560,"date":502,"workspace":503,"tags":561,"verdict":506,"psnr":562,"psnr_unit":-1,"wallclock":563,"splats":564,"summary_url":565,"detail_path":565},"S3 smoke arm B (pipelining = depth2): Lego 1k、profile=true で busy% \u002F sync-tax を取る",[5,18,505,25],19.597320556640625,"4.62s",6826,"\u002Fruns\u002Fs3-smoke-1000-depth2\u002F",{"id":42,"title":42,"subtitle":567,"date":502,"workspace":503,"tags":568,"verdict":506,"psnr":569,"psnr_unit":-1,"wallclock":570,"splats":571,"summary_url":572,"detail_path":572},"S3 smoke arm A (pipelining = off): Lego 1k、profile=true で busy% \u002F sync-tax を取る",[5,18,505,25],19.5869140625,"4.69s",6797,"\u002Fruns\u002Fs3-smoke-1000-off\u002F",[574,593,618,642,663,686],{"id":57,"title":575,"date":502,"status":10,"polarity":12,"category":576,"axes":577,"tags":578,"task_code":586,"related_runs":587,"delta_psnr":-1,"delta_wallclock":589,"rank":61,"verdict":590,"impact_summary":591,"detail_path":592},"splat bench harness 実装 + calibration — σ_replay 0.83%、full run 比 ~6x ノイズ削減","tooling",[14,15],[579,580,581,582,583,584,585,25],"bench-harness","calibration","variance","reproducibility","c7","fixed-workload","gate-infra","splat bench harness (2026-08-16 GPU 専有タスク)",[588],"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":54,"title":594,"date":502,"status":10,"polarity":595,"category":11,"axes":596,"tags":597,"task_code":608,"related_runs":609,"delta_psnr":613,"delta_wallclock":614,"rank":61,"verdict":615,"impact_summary":616,"detail_path":617},"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],[598,21,599,600,601,602,603,604,605,606,607],"counter-session","ioreport","power","energy","dvfs","p-state","msplat","m4-max","thesis-ready","negative","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #1",[610,611,612],"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":56,"title":619,"date":502,"status":10,"polarity":12,"category":620,"axes":621,"tags":622,"task_code":631,"related_runs":632,"delta_psnr":-1,"delta_wallclock":639,"rank":61,"verdict":590,"impact_summary":640,"detail_path":641},"保持 flag 全数再 gate sweep — 8 維持 \u002F 1 flip (loss_path -26.5%) + bench validate 抜けを発見","performance",[14,15],[623,624,625,626,627,628,25,629,630],"flag-revisit","gate-sweep","loss-path","backend-config","validate","regression-guard","stop-the-pop","default-flip","保持 flag 全数再 gate sweep (2026-08-16 GPU 専有タスク)",[633,634,635,636,637,638],"revisit-losspath-host-12500-r1","revisit-losspath-host-12500-r2","revisit-losspath-host-12500-r3","revisit-losspath-gpu-12500-r1","revisit-losspath-gpu-12500-r2","revisit-losspath-gpu-12500-r3","loss_path flip: replay -26.5% (final) \u002F -29.6% (iter5000)、12.5k gate -35.3% — ただし公式 config は既に gpu 明示のため公表値は不変 (hygiene flip)","\u003Ccode>BackendConfig\u003C\u002Fcode> 全 16 field を機械走査し、default 以外の variant を全数再判定。実測 9 件のうち \u003Cstrong>8 件は verdict 維持\u003C\u002Fstrong>、\u003Cstrong>1 件 (\u003Ccode>loss_path\u003C\u002Fcode>) が flip\u003C\u002Fstrong>。\u003Ccode>loss_path = \"gpu\"\u003C\u002Fcode> は replay final regime \u003Cstrong>21.210 → 15.591 ms\u002Fiter (-26.5%)\u003C\u002Fstrong> \u002F iter5000 \u003Cstrong>-29.6%\u003C\u002Fstrong>、12.5k full gate (同一 session 交互 A\u002FB、n=3) で \u003Cstrong>283.00 → 183.00s (-35.3%)\u003C\u002Fstrong>・PSNR \u003Cstrong>36.142 → 36.188 dB (+0.047、guard ±0.1 内)\u003C\u002Fstrong>。ただし \u003Cstrong>この flip は公式数値を 1 つも動かさない hygiene\u003C\u002Fstrong> — 全 237 config が \u003Ccode>loss_path\u003C\u002Fcode> を明示指定済みで 12.5k gate 系は例外なく \u003Ccode>\"gpu\"\u003C\u002Fcode>、enum default だけが 2026-04-30 以来実運用から取り残されていた。残り 7 件は validate hard error による構造的非互換 (5) \u002F 禁忌リスト (2) \u002F harness 非対応 (1) \u002F 非 perf variant (3) として理由付きで判定不能を記録。副産物として \u003Ccode>splat bench\u003C\u002Fcode> の \u003Ccode>validate()\u003C\u002Fcode> 抜け (無効組合せが exit 0 で silent 別経路実行) を発見・修正した。","\u002Ffindings\u002Fp2-flag-revisit-sweep\u002F",{"id":58,"title":643,"date":502,"status":10,"polarity":595,"category":11,"axes":644,"tags":646,"task_code":654,"related_runs":655,"delta_psnr":658,"delta_wallclock":659,"rank":61,"verdict":660,"impact_summary":661,"detail_path":662},"P2 msplat parity — 同日等価比較で msplat 30K = 167.7s \u002F 36.5 dB、gap は 12.5k で 2.10× (matched-wallclock 7.5k は 1.08× で brush +0.94 dB)",[14,645],2,[647,648,604,649,650,651,652,653,25,605,606],"gap-sweep","phase-3","parity","baseline","cross-eval","eval-convention","thermal-interleave","2026-08 msplat gap sweep Phase 3 (parity 再計測)",[656,657],"lego-parity-noprof-12500","lego-parity-noprof-7500","brush convention (同一 evaluator): 本実装 12.5k +1.79 dB \u002F 7.5k +0.94 dB (vs msplat 30K q8 34.47)。white-bg convention: msplat +1.09 dB (36.28 vs 本実装 12.5k 35.19)","msplat 30K 167.7s vs 本実装 12.5k 352.3s = **2.10×** (両者 profile なし・同日実測)。matched-wallclock: 7.5k 181.4s = 1.08×。従来の 1.53× (spike 値 220s 基準) は撤回","parity-established-gap-2.10x-convention-coupled-psnr","gap sweep の公式 gap 数値を \u003Cstrong>同日・同一条件の実測で確定\u003C\u002Fstrong>: Lego 12.5k vs msplat 30K の wallclock gap は \u003Cstrong>2.10×\u003C\u002Fstrong> (352.3s vs 167.7s、両者 profiling なし) — Phase 2 の 1.53× は spike の古い msplat 値 (219.8s) 起因の過小評価だった。一方 \u003Cstrong>matched-wallclock 断面 (本実装 7.5k = 181.4s、msplat の 1.08×)\u003C\u002Fstrong> では brush convention の同一 evaluator cross-eval で本実装が \u003Cstrong>+0.94 dB\u003C\u002Fstrong> (35.41 vs 34.47)。PSNR 比較は eval convention に強く依存し (white-bg では msplat +1.09 dB)、p1-a-3 の「訓練\u002F評価 convention coupling」を第三者実装との比較で再実証した。msplat の native 品質が spike 比 +1.05 dB 向上した主因は今回の対称条件 (同一 culled init.ply 5207 pts・train 100 view 全量・常時フル解像度) にあり、msplat 側の条件を今回初めて本実装と揃えた結果。卒論 §5 の direct comparison 表はこの数値で置き換える。","\u002Ffindings\u002Fp2-msplat-parity-lego\u002F",{"id":53,"title":664,"date":502,"status":10,"polarity":12,"category":11,"axes":665,"tags":666,"task_code":673,"related_runs":674,"delta_psnr":681,"delta_wallclock":682,"rank":61,"verdict":683,"impact_summary":684,"detail_path":685},"S2 forward 1 CB 化 — replay -12〜13% \u002F busy 69 → 80% (default flip)",[14,15],[17,667,668,20,669,670,671,21,22,672,25,26],"s2","forward-chained","hierarchical-scan","indirect-dispatch","radix-sort","bit-exact","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2 (S2 gate)",[675,676,677,678,679,680],"s2-12500-noprof-r1","s2-12500-noprof-r2","s2-12500-noprof-r3","s2gate-base-12500-r1","s2gate-base-12500-r2","s2gate-base-12500-r3","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%","s2-adopted-default-flip-chained-forward-and-hierarchical-scan","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>。","\u002Ffindings\u002Fp2-s2-forward-chained\u002F",{"id":55,"title":687,"date":502,"status":10,"polarity":12,"category":11,"axes":688,"tags":689,"task_code":694,"related_runs":695,"delta_psnr":699,"delta_wallclock":700,"rank":61,"verdict":701,"impact_summary":702,"detail_path":703},"W2 encoder\u002FCB 統合 — replay -13.7% \u002F 12.5k -9.1% (bit-exact、default flip)",[14,15],[17,690,691,20,692,693,672,25,26],"w2","chained-submission","encoder","set-bytes","2026-08 1× 工程表 v2 W2",[696,697,698],"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",1790227327641]