[{"data":1,"prerenderedAt":535},["ShallowReactive",2],{"finding:p3-final-stack":3,"finding-runs:p3-final-stack":348,"finding-related:p3-final-stack":387},{"meta":4,"impact":48,"sections":54},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":16,"task_code":26,"commit":27,"branch":28,"config_paths":29,"related_runs":35,"related_findings":41},"p3-final-stack","M7 最終スタック確定 — 12.5k 124.39s (独立 n=3)、msplat 等価 gap 0.927×→0.755×、throughput 1.135×負け→0.926× (msplat 側 avg splats 借用値 ±8% 未満なら逆転)","M2 Tier1 (不採用) を除く採用施策 (M4: radix scatter simd_ballot、A7: refine 3-pass 削減) が両方 default ON の最終スタックを、単一 gate の副産物ではない独立 n=3 (+診断用 1 本) で 12.5k Lego 再計測した。\u003Cstrong>train elapsed 124.393s (σ 0.756%、r2\u002Fr3\u002Fr4)\u003C\u002Fstrong> — A7 gate on-arm mean (124.807s) を -0.33% で独立再現。msplat 等価比較 (p2-msplat-parity-final の手順を最終値で再計算): \u003Cstrong>wallclock gap 0.927× → 0.755×\u003C\u002Fstrong>、\u003Cstrong>per-splat·iter throughput は 1.135× 負け (msplat が速い) → 0.926× 勝ち (本実装が速い) に逆転\u003C\u002Fstrong>。PSNR (brush +2.01dB \u002F white -1.11dB) は M4\u002FA7 が PSNR trajectory に理論上影響しない施策のため旧値からほぼ不変。累計 ablation は Phase 0 (766.07s) から \u003Cstrong>-83.8%\u003C\u002Fstrong>。per-kernel share の v2 (M4\u002FA7 後) 再計測は同日 \u003Ccode>p3-kernel-share-post-s3.toml\u003C\u002Fcode> §6 に追記、Pareto v3 は \u003Ccode>docs\u002Ffigures\u002Fpareto-v3-msplat-lego-final-stack.png\u003C\u002Fcode>。","2026-09 第 5 回ゼミ milestones · M7 · 最終スタック確定 + msplat 等価再比較 + Pareto v3","2026-08-30","stable","experiment","positive",[14,15],1,3,[17,18,19,20,21,22,23,24,25],"m7","seminar05-milestones","final-stack","msplat-parity","pareto-v3","throughput-parity","lego","gpu-gate","independent-remeasurement","2026-09-seminar05-milestones M7 (最終スタック確定 + msplat 等価再比較 + Pareto v3)","a446f2cacb5a8a85b21bcbf29a5973fbbde5513c","main",[30,31,32,33,34],"splat\u002Fconfigs\u002F2026-08-30-final-12500-r1.toml","splat\u002Fconfigs\u002F2026-08-30-final-12500-r2.toml","splat\u002Fconfigs\u002F2026-08-30-final-12500-r3.toml","splat\u002Fconfigs\u002F2026-08-30-final-12500-r4.toml","splat\u002Fconfigs\u002F2026-08-30-c1v2-12500-off-prof.toml",[36,37,38,39,40],"final-12500-r1","final-12500-r2","final-12500-r3","final-12500-r4","c1v2-12500-off-prof",[42,43,44,45,46,47],"p2-s3-iteration-pipelining","p3-radix-ballot","p3-refine-3pass","p3-kernel-share-post-s3","p2-msplat-parity-final","p2-msplat-parity-lego",{"summary":49,"rank":50,"verdict":51,"delta_psnr":52,"delta_wallclock":53},"2026-09-seminar05-milestones M7 を実施した。(1) **12.5k full run 独立 n=3**: `2026-08-30-final-12500-r{1,2,3}.toml` を単純 3 repeat (off arm なし、全 [backend] flag は default 任せ = M4 radix_scatter=SimdBallot + A7 refine_scratch_persist\u002Frefine_direct_write=true 込み) で実行。r1 (131.84s) が r2\u002Fr3\u002Fr4 (123.34\u002F124.69\u002F125.15s) から外れて見えたため、advisor レビューを経て診断用の r4 を追加実行した結果、**r1 は script 再起動時に load sampler window ログが truncate され窓内記録が皆無**という house 規約 (p2-msplat-parity-final §7「事前 gate だけでは不十分、窓内記録が必須」) 上の欠陥を抱えていたことが判明し、r2\u002Fr3\u002Fr4 (全 run とも window 記録あり、load 正常) を正式な n=3 として採用した。**mean 124.393s (σ 0.756%)** — A7 gate on-arm mean 124.807s を -0.33% で独立再現しており、この近さ自体が両 session の健全性証拠になる。r1 込みの参考値 (n=3 リテラル\u002Fn=4 全部) も §1 に残す。(2) **per-kernel share v2**: `2026-08-30-c1v2-12500-off-prof.toml` (submission=per_kernel\u002Fforward_submission=per_stage\u002Fpipelining=off、M4\u002FA7 default 込み) を 1 run。leaf gpu_ms 合計 114.508s は busy union と exact 一致。radix share 26.40%→12.01% (絶対 -63.25%、M4 gate の per_stage 補助計測 -63.7% と独立一致)、backward_raster が単独最大ブロックとしてさらに優位 (33.86%→40.07%)。詳細は `p3-kernel-share-post-s3.toml` §6 に追記。(3) **累計 ablation**: p2 の 8 段 (Phase0 766.07s → S3 151.70s) に M4 (127.53s、-14.9%) \u002F A7 (124.81s、-2.15%) \u002F M7 独立再計測 (124.39s、-0.33%、ほぼ noise level) を継ぎ足し、Phase 0 比 **-83.76%**。(4) **msplat 等価再比較**: p2-msplat-parity-final の計算手順を最終値で再計算。gap 分母は継続性のため block1 n=2 mean (164.69s) を維持 (msplat 側は再実行していない)。**wallclock gap 0.927×→0.755×**。throughput は avg splats を新 4 run の trapezoid 積分から自前算出 (321,637、旧値 322k とほぼ一致し手法の妥当性を裏づける) して **1.135×負け→0.926×勝ち** (ただし msplat 側 avg splats ~165k は p2 からの借用値で本 session では再導出できておらず、逆転が成立するのはこの借用値の誤差が +8.0% 未満の場合に限る、§4 callout 参照)。brush\u002Fwhite PSNR は既存 final.ply に対し `splat eval` を回して再計測し (新規 GPU 学習 run は不要)、両 convention とも旧値からほぼ不変 (brush +2.01dB \u002F white -1.11dB) — M4\u002FA7 は PSNR trajectory に理論上影響しない施策なので想定どおり。matched-iteration (30K vs 30K) \u002F matched-wallclock (旧 13.3k 点) \u002F matched-PSNR(brush) の旧 6.0k 点 \u002F energy は**新規 GPU run が必要なため本 session では再計測せず**、旧スタック値を明示ラベルで carry forward するに留めた (外挿スケーリングによる偽の精度を避ける、advisor レビュー指摘)。(5) **Pareto v3**: `make_msplat_pareto.py` の入力を msplat 等価比較 4 点 Pareto curve (p2-msplat-parity-final §10 の未実施項目) に更新し `docs\u002Ffigures\u002Fpareto-v3-msplat-lego-final-stack.png` を生成。12.5k 点のみ最終スタック値、他 3 点 (6.0k\u002F13.3k\u002F30k) と msplat は旧スタック値のまま明示ラベル。","high","final-stack-confirmed-msplat-gap-0.755x-throughput-parity-crossed-pending-msplat-avg-splats-recheck","12.5k self-eval (r2-r4 n=3 mean): **36.219 dB** (σ 0.046%)、baseline guard 36.202±0.1dB 内。brush cross-eval q8 (r2-r4 mean): **36.249 dB** (msplat 30K 保守値 34.243 比 **+2.006dB**、旧 +1.97dB とほぼ不変)。white cross-eval (r2-r4 mean): **35.147 dB** (msplat 30K cross-eval 最小 36.252 比 **-1.105dB**、旧 -1.10dB とほぼ不変)","12.5k train elapsed 独立 n=3 (r2\u002Fr3\u002Fr4、clean set): **124.393s (σ 0.756%)**。A7 gate on-arm mean (124.807s) を **-0.33%** で再現。msplat 等価 gap (block1 n=2 分母 164.69s): **0.755×** (旧 0.927×)。per-splat·iter throughput: 本実装 **30.94ns** vs msplat 33.4ns = **0.926×** (旧 1.135×負けから逆転)",[55,58,61,82,84,153,158,162,164,167,169,251,254,256,264,314,318,321,324,326,340,342],{"type":56,"text":57},"lead","milestones.md「現在地」表は A7 gate の on-arm mean (124.81s) を「単一 gate の副産物」として暫定的に採用しており、独立再計測が必要だった。本 finding はその独立再計測 (12.5k n=3) と、それを土台にした msplat 等価再比較・Pareto v3・累計 ablation 更新をまとめる。GPU run は 12.5k full run ×4 (診断用 1 本込み) + per-kernel profile run ×1 の計 5 本のみで、msplat 側・energy 側は本 session では再実行していない。",{"type":59,"text":60},"heading","0. 計測環境 — AC 電源 \u002F GPU 専有 \u002F pgrep 空確認",{"type":62,"items":63},"kv",[64,67,70,73,76,79],{"key":65,"value":66},"電源 \u002F 機体","AC 接続 (`pmset -g batt` で series 開始前・完了後とも `AC Power` を確認)、M4 Max。GPU 権は main から付与済み、他 agent の GPU 使用は無し",{"key":68,"value":69},"binary \u002F rev","release binary sha256 `f2bca7637a2738258c6d92943e6d12cf3f7d507ac9f4384a33664048077721d7`、series 前後 (final-12500-n3 series の pre\u002Fpost) で一致確認。git rev `a446f2cacb5a8a85b21bcbf29a5973fbbde5513c` で series 全体を通じて不変 (`cargo build --release` は確認のみで再ビルド無し)",{"key":71,"value":72},"実行方式","`gate-ab-n.sh` (A\u002FB 用) は使わず、専用の単純 3-repeat driver `splat\u002Fscripts\u002Ffinal-stack-n3.sh` を新設 (off arm 無し、`\u003Cconfig_prefix>-r{1..N}.toml` を順に実行し `\u003Crun_prefix>-gate.DONE` sentinel で完了通知)。nohup + disown で detach、foreground `until [ -f *.DONE ]; do sleep 20; done` で能動的に待機 (Monitor 系ツールは使っていない)",{"key":74,"value":75},"**driver スクリプトの自己バグ (記録)**","初回実行で `wait_quiet()` 関数内のループ変数 `i` が呼び出し元 (run-loop) の `$i` と同名衝突し (POSIX sh に `local` が無い)、quiesce 待ちが `$i` を 5 まで進めてしまった結果 run-loop が r1 のみで早期終了する事故が発生した (`r1` 自体の config\u002Frun_name は break 前に変数が確定していたため正しく実行されたが、ログの `EXIT r$i` 表示が誤って `r5` になった)。`wait_quiet` 内部変数を `qi` に rename して修正、r2\u002Fr3 を `\u003Crun_prefix> 2 3` の start\u002Fend 引数で再実行し完遂した (r1 は再実行していない — 正しい config で実行済みのため無駄になる)",{"key":77,"value":78},"run 後 pgrep \u002F load 確認","全 5 run 完了後 `pgrep -fl \"target\u002Frelease\u002Fsplat\"` は空、`uptime` load average は 1.5〜2.5 の通常範囲、`pmset -g batt` は AC Power を維持",{"key":80,"value":81},"各 run の pre\u002Fpost load1 (uptime 3 値)","r1: pre 1.46\u002F2.85\u002F2.77 → post 4.76\u002F4.21\u002F3.35 (script 再起動でこの run だけ独立 sampler の window 記録が無い、§1 参照)。r2: pre 2.32\u002F3.40\u002F3.13 → post 1.18\u002F2.74\u002F2.92 (10s sampler window: 2.32→1.19、単調減少)。r3: pre 0.84\u002F2.40\u002F2.78 → post 1.27\u002F1.94\u002F2.53 (window: 0.93→1.27)。r4: pre 3.80\u002F2.35\u002F2.44 → post 1.27\u002F1.94\u002F2.34 (window: 3.46→1.00、単調減少)。r2〜r4 とも load1 は 5 未満に収まり、p2-s3 が破棄基準にした「load 2→23 上昇」型の汚染は見られない",{"type":59,"text":83},"1. 12.5k full run 独立再計測 — 実測 (n=3 主値 + n=4 参考)",{"type":85,"columns":86,"align":95,"rows":98},"table",[87,88,89,90,91,92,93,94],"run","config","train elapsed (s)","self-eval PSNR (dB)","brush cross-eval q8 (dB)","white cross-eval (dB)","final splats","採否",[96,96,97,97,97,97,97,96],"left","right",[99,107,115,122,130,138,146],[100,36,101,102,103,104,105,106],"r1","131.84","36.129","36.159","34.990","407,754","診断用参考値 (window 記録欠落)",[108,37,109,110,111,112,113,114],"r2","123.34","36.201","36.235","35.136","405,333","**採用**",[116,38,117,118,119,120,121,114],"r3","124.69","36.234","36.264","35.153","408,756",[123,39,124,125,126,127,128,129],"r4","125.15","36.222","36.248","35.154","406,994","**採用 (診断用に追加)**",[131,132,133,134,135,136,137,132],"**mean (r2-r4, n=3, 主値)**","—","**124.393** (σ 0.756%)","**36.219** (σ0.046%)","**36.249**","**35.147**","407,028",[139,132,140,141,142,143,144,145],"**mean (r1-r3, config 文字どおりの n=3)**","126.623 (σ 3.607%)","36.188","36.219","35.093","407,281","参考",[147,132,148,149,150,151,152,145],"**mean (r1-r4, n=4)**","126.255 (σ 3.011%)","36.197","36.227","35.108","407,209",{"type":154,"label":155,"variant":156,"text":157},"callout","なぜ r2-r4 を主値に採用するか — r1 の ms\u002Fiter trace に iter 6000-9000 の局所的な hump が直接見える","warning","r1 は最初の driver 実行 (§0 の自己バグにより r1 のみで停止した回) で完走した run で、r1 の run 窓に対応する独立 10s load sampler ログは、後続の r2\u002Fr3 再実行で `final-stack-n3.sh` を再起動した際に \u003Ccode>: >\"$SAMPLE_LOG\"\u003C\u002Fcode> で truncate されており\u003Cstrong>窓内 load 記録が 0 サンプル\u003C\u002Fstrong>である。当初はこの記録欠落 (`p2-msplat-parity-final` §7「事前 gate だけでは不十分、窓内記録が必須」への抵触) だけを根拠に r1 を格下げしていたが、advisor レビュー指摘を受けて\u003Cstrong>ログ自身の ms\u002Fiter trace\u003C\u002Fstrong> (p3-refine-3pass §7 が汚染 run の判別に使ったのと同じ discriminator) を直接調べたところ、より積極的な証拠が見つかった: r2\u002Fr3\u002Fr4 は iter 6000〜12500 の間 ms\u002Fiter が 11.0〜12.1 でほぼ平坦に対し、\u003Cstrong>r1 だけ iter 6000 (11.1ms) → 7000 (15.5ms) → 8000 (14.0ms) → 9000 (12.4ms) と局所的に跳ね上がり、iter 10000 以降 (11.8〜12.0ms) は他 run と合流する\u003C\u002Fstrong>。iter 1000〜5000 の値は 4 run とも ±0.3ms 以内で一致しており (例: iter3000 は r1=8.6\u002Fr2=8.4\u002Fr3=8.5\u002Fr4=8.2)、r1 が一貫して重い cold-start ではなく\u003Cstrong>iter 6000-9000 に限定された transient\u003C\u002Fstrong> であることを trace 自体が示している。この 3000 iter 区間の超過 (r1 vs r2-r4 平均、およそ +3〜4ms\u002Fiter × 3000iter ≈ 数秒〜7秒) が r1 の全体超過 (r2-r4 平均比 +6.9s) の大半を説明する。訂正: 当初 r1 の pre\u002Fpost uptime を「他 run より高い側」と書いたが、正しくは\u003Cstrong>post のみ\u003C\u002Fstrong> (4.76) が最高で、pre (1.46) は r4 の pre (3.80) より低い — 判断根拠は uptime ではなく上記 ms\u002Fiter trace に置く。\u003Cstrong>結論: r2\u002Fr3\u002Fr4 (trace 平坦、window 記録あり、A7 gate on-arm mean 124.807s を -0.33% で再現) を正式な n=3 として採用し、r1 は iter 6000-9000 の transient 汚染が trace 上で直接確認できる診断用参考値とする\u003C\u002Fstrong>。r1 を含めた場合でも期日目標 (≤135s) は変わらず達成 (126.62s \u002F 126.26s とも 135s 未満)。",{"type":154,"label":159,"variant":160,"text":161},"avg splats の算出方法 — trapezoid 積分で自前算出、旧値 322k と一致","info","throughput (ns\u002Fsplat·iter) の計算に必要な「iteration 平均 splat 数」は、各 run のログが 1000 iter ごとに出力する splat 数を台形則で積分して算出した (advisor レビュー指摘: 旧 finding の 322k という値をそのまま借用せず、自前の log から再計算する)。r2\u002Fr3\u002Fr4 の平均は \u003Cstrong>321,636.5\u003C\u002Fstrong> で、p2-msplat-parity-final が報告した 322k と 0.1% 差で一致し、この算出法の妥当性を裏づける。",{"type":59,"text":163},"2. per-kernel share v2 (M4\u002FA7 後) — 別 finding に追記",{"type":154,"label":165,"variant":160,"text":166},"詳細は p3-kernel-share-post-s3.toml §6\u002F§7 参照","milestones.md M7 手順 2 (`2026-08-30-c1v2-12500-off-prof.toml`) は、milestone 本文が指定した「同じ finding に v2 節を追記」という指示どおり、\u003Cstrong>新規 finding を作らず p3-kernel-share-post-s3.toml に §6 (v2 節) \u002F §7 を追記した\u003C\u002Fstrong>。要点のみ引用する: leaf gpu_ms 合計は v1 141.716s → v2 114.508s (-19.20%)、いずれも busy union と exact 一致。\u003Cstrong>radix share 26.40%→12.01% (絶対 -63.25%、M4 gate の forward_submission=per_stage 補助計測 -63.7% と独立一致、cross-validation)\u003C\u002Fstrong>。backward_raster share は 33.86%→40.07% に\u003Cstrong>上昇\u003C\u002Fstrong>しているが、これは分母 (radix の劇的縮小) が原因で、backward_raster 自体の絶対 gpu_ms はむしろ -4.40% と縮んでいる (「share 上昇 ≠ 遅くなった」の注記を finding 本文に明記済み)。",{"type":59,"text":168},"3. 累計 ablation 表 — Phase 0 (766.07s) から M7 (124.39s) まで、-83.76%",{"type":85,"columns":170,"align":177,"rows":178,"caption":250},[171,172,173,174,175,176],"段階","施策","Lego 12.5k train elapsed (s)","PSNR (dB)","Δ (対前段)","msplat 比較値 (旧166s系\u002F新165s系)",[96,96,97,97,97,97],[179,185,191,197,204,210,217,224,231,237,243],[180,181,182,183,132,184],"Phase 0","baseline (規約 v2 適用後)","766.07","36.216","4.51×",[186,187,188,189,190,132],"+ C0","resident binning arena + radix pass skip 16→11","395.59","36.183","-48.4%",[192,193,194,195,196,132],"+ LC","backward last_contributor range","336.33","36.191","-15.0%",[198,199,200,201,202,203],"+ S1","pipeline 全域 resident 化 (Tier A\u002FB\u002FC)","261.55","36.148","-22.2%","1.56×",[205,206,207,110,208,209],"+ W1","warp sparse skip","241.41","-7.7%","1.44×",[211,212,213,214,215,216],"+ W2","chained submission (adam+loss chain 統合)","219.51","36.170","-9.1%","1.31×",[218,219,220,221,222,223],"+ S2","forward 1 CB 化 + hierarchical GPU scan","187.65","36.167","-9.9%","1.105×",[225,226,227,228,229,230],"+ S3","iteration pipelining depth 2","151.70","36.202","-18.1%","0.907× (process wallclock 154.00s 基準、train elapsed 列とは分子が異なる点に注意)",[232,233,234,235,236,132],"**+ radix simd_ballot (M4)**","radix scatter simdgroup ballot 2 段化","127.53","36.143","**-14.9%**",[238,239,240,241,242,132],"**+ refine 3-pass 削減 (A7)**","refine scratch 永続化 + compact 直書き","124.81","36.241","**-2.15%**",[244,245,246,247,248,249],"**+ 最終スタック独立再計測 (M7)**","M4+A7 済みスタックの独立 n=3 gate","**124.39**","**36.219**","**-0.33%** (ほぼ noise)","**0.755× (新 gap 公式値)**","Phase 0〜S3 の 8 段は `docs\u002Fstrategy\u002F2026-08-1x-roadmap-v2.md` 冒頭の累計注記および各段の finding (`p2-c0-resident-binning` \u002F `p2-last-contributor` \u002F `p2-s1-pipeline-resident` \u002F `p2-w1-warp-sparse-skip` \u002F `p2-w2-chained-submission` \u002F `p2-s2-forward-chained` \u002F `p2-s3-iteration-pipelining`) から引用。M4\u002FA7\u002FM7 の 3 段は本 finding + `p3-radix-ballot` + `p3-refine-3pass` の値。**累計 Δ (Phase 0 → M7 主値 124.39s) = -83.76%**。M4→A7→M7 の 3 段は -14.9% \u002F -2.15% \u002F -0.33% と単調に減衰しており、A7→M7 の -0.33% は A7 gate (独立 session、on-arm 124.807s) と M7 (本 session、124.393s) の再現性ノイズの範囲内 (両者とも n=3、σ はそれぞれ 0.256% \u002F 0.756%) であって新規の改善ではない。",{"type":154,"label":252,"variant":160,"text":253},"msplat 比較値の列について — 断面が完全には揃っていない","「msplat 比較値」列は各段階の finding が同時期に引用した msplat 実測値 (166〜220s 系、複数の異なる session・protocol) に対する比であり、\u003Cstrong>互いに厳密には同じ msplat 断面ではない\u003C\u002Fstrong> (roadmap v2 冒頭の累計注記も同じ注意書きを付けている)。S3 行までの値は各 finding からの引用をそのまま転記した。M4\u002FA7 の 2 段は当時 msplat 側の等価比較を行っていない (gate は wallclock\u002FPSNR の A\u002FB のみ) ため空欄、M7 で改めて msplat 側 (block1 n=2 mean 164.69s) と揃えて **0.755×** を算出した (§4)。",{"type":59,"text":255},"4. msplat 等価再比較 — p2-msplat-parity-final の手順を最終値で再計算",{"type":62,"items":257},[258,261],{"key":259,"value":260},"msplat 側は再実行していない","milestone 本文の指示どおり、msplat 側の実測 (30K n=4 mean 165.42s \u002F block1 n=2 mean 164.69s \u002F native PSNR 36.563dB \u002F brush cross-eval q8 33.038〜34.243dB \u002F white cross-eval 36.252〜36.294dB) は `p2-msplat-parity-final` (2026-08-17) の値をそのまま使う",{"key":262,"value":263},"gap 分母の選択","継続性のため p2-msplat-parity-final が公式値として使った **block1 n=2 mean 164.69s** を主分母に維持する。参考として msplat 全 4 run の n=4 mean **165.42s** でも算出する",{"type":85,"columns":265,"align":270,"rows":271},[266,267,268,269],"断面","旧値 (2026-08-17、S3 のみ)","新値 (2026-08-30、M4+A7 込み)","再計測の有無",[96,97,97,96],[272,277,282,287,292,297,302,306,310],[273,274,275,276],"**wallclock gap (12.5k \u002F msplat 30K、block1 n=2 分母)**","0.927×","**0.755×**","**新規実測** (本実装側のみ、r2-r4 mean 124.393s)",[278,279,280,281],"同上、msplat n=4 mean (165.42s) 分母","0.923×","**0.752×**","同上",[283,284,285,286],"**per-splat·iter throughput (本実装 \u002F msplat)**","1.135× (msplat が速い、13.5% 負け)","**0.926× (本実装が速い、7.4% 優位)**","**新規実測** — avg splats を新 4 run の trapezoid 積分で自前算出 (321,637)",[288,289,290,291],"brush convention PSNR Δ (msplat 保守値 34.243dB 比)","+1.97dB","**+2.01dB**","**新規実測** (`splat eval --convention brush --quantize-8bit` を既存 final.ply に再実行、新規学習 run は無し)",[293,294,295,296],"white convention PSNR Δ (msplat cross-eval 最小 36.252dB 比)","-1.10dB","**-1.11dB**","同上 (`white_eval.py` を既存 final.ply に再実行)",[298,299,300,301],"matched-wallclock 断面 (13,300 iter)","165.85s \u002F brush+1.94dB (1.007×)","**未再計測**","carry forward。M7 スタックでの ~164.7s 到達点は概算 ~16,000〜16,500 iter 圏 (未検証・線形外挿、次 session 課題)",[303,304,300,305],"matched-PSNR (brush) 断面 (6,000 iter)","51.60s (0.313×)","carry forward。iter 数自体は PSNR trajectory 不変のため 6,000 のままのはずだが、対応 wallclock の実測が必要",[307,308,300,309],"matched-iteration (30K vs 30K)","479.91s (2.888×)","carry forward。30k full run が必要 (~8 分、本 session の GPU 予算外)",[311,312,300,313],"GPU energy \u002F package energy","0.906× \u002F 0.896×","carry forward。`splat power-sample` 併走 run が必要",{"type":154,"label":315,"variant":316,"text":317},"throughput 逆転が本 finding の headline — kernel\u002F実行形状レベルで msplat を上回った","success","2026-08-17 時点 (S3 のみ) の per-splat·iter throughput は msplat 1.135× (本実装が 13.5% 遅い) で、p2-msplat-parity-final は「near-parity まで詰めたが、まだ 13.5% 負け」と結論していた。\u003Cstrong>M4 (radix simd_ballot) + A7 (refine 3-pass) の 2 施策で本実装は 37.9ns → 30.94ns\u002Fsplat·iter に縮み、msplat 33.4ns を下回った\u003C\u002Fstrong> (比 0.926×、本実装が 7.4% 優位)。\u003Cstrong>本実装側の avg splats (321,637) は新規 4 run の trapezoid 積分による自前算出\u003C\u002Fstrong> (旧 322k と 0.1% 差で一致 — 算出法の相互検証も兼ねる) だが、\u003Cstrong>msplat 側の avg splats (~165,000) は p2-msplat-parity-final からの借用値であり、本 session では msplat を再実行していないため再導出できていない\u003C\u002Fstrong>。逆転の主張が成立する境界を逆算すると、msplat 側 avg splats が \u003Cstrong>~178,200 (借用値比 +8.0%)\u003C\u002Fstrong> を超えると throughput は再び msplat 優位に戻る — msplat 30K の final splats (191,209〜196,404、n=4) から avg\u002Ffinal 比が本実装並み (0.79) なら avg ≈ 151k で安全側に収まるが、early-stopping 型の densification で avg\u002Ffinal 比が高め (0.92 程度) なら境界に近づく。\u003Cstrong>「本実装が優位」の結論は、この ±8% 未満の借用値誤差の範囲内でのみ成立する\u003C\u002Fstrong> — 確定させるには msplat 側の avg splats を同じ trapezoid 法で再導出する追加作業 (msplat 側ログの再解析、GPU run 不要) が次 session の課題として残る。roadmap v2 が「単位仕事あたりでは 2.6 倍遅い (2026-08-16)」→「near-parity、まだ 13.5% 負け (2026-08-17)」と書いてきた脚注は、本 finding で\u003Cstrong>「本実装が優位 (ただし msplat 側 avg splats の借用値誤差 ±8% 未満という条件つき)」に書き換える\u003C\u002Fstrong>。",{"type":154,"label":319,"variant":160,"text":320},"PSNR は M4\u002FA7 の理論上不変を実測で確認 — 旧値からの差は run-to-run ノイズ帯","M4 (radix scatter の rank 計算方式変更、sort parity は bit-exact) と A7 (refine の allocation\u002Fcopy 経路変更、書き込みロジック自体は不変) はいずれも「計算結果を変えない」ことを parity test で pin した施策であり、PSNR trajectory が理論上動く理由が無い。実測でも brush +1.97dB→+2.01dB (Δ+0.04dB)、white -1.10dB→-1.11dB (Δ-0.01dB) と\u003Cstrong>両方向とも run-to-run ノイズ帯 (n=3 の σ が 0.01〜0.09dB オーダー) に収まる差\u003C\u002Fstrong>で、この予想を裏づけている。",{"type":154,"label":322,"variant":156,"text":323},"matched 断面を外挿でスケールしなかった理由 (advisor レビュー指摘)","12.5k の速度比 (124.393\u002F151.70 ≈ 0.820×) を旧 matched 断面 (6.0k\u002F13.3k\u002F30k) の wallclock にそのまま掛けて『新値』を捏造することは\u003Cstrong>しなかった\u003C\u002Fstrong>。M4 (radix) のコストは pair 数 (≈ splat 数に比例) に、A7 (refine) のコストは tick あたりの scratch サイズ (同じく splat 数に依存) に、それぞれ non-uniform に依存する — p2-msplat-parity-final §5 自身が「30k 断面では 36.5ns\u002Fsplat·iter、12.5k は 37.9ns と splat 数で per-splat 効率が変わる」と記録しており、単一の乗数で全 iter 数に外挿するのは過剰な精度を偽装することになる。matched-wallclock の到達 iter 数についてのみ、\u003Cstrong>参考の概算 (線形外挿、未検証)\u003C\u002Fstrong> として ~16,000〜16,500 iter 圏という方向感を §4 表の備考に残したが、これは\u003Cstrong>公表値ではなく次 session への申し送り\u003C\u002Fstrong>である。",{"type":59,"text":325},"5. Pareto v3",{"type":62,"items":327},[328,331,334,337],{"key":329,"value":330},"生成スクリプト","`docs\u002Fstrategy\u002Fmake_msplat_pareto.py` の入力を更新。p2-msplat-parity-final §10 item 6 の未実施 TODO (「本 finding の 4 点 [6.0k\u002F12.5k\u002F13.3k\u002F30k] + msplat n=4 mean に更新する」) を実施したもの。12.5k 点だけを本 finding の値 (124.393s \u002F brush cross-eval 36.249dB) に更新し、他 3 点 (6.0k\u002F13.3k\u002F30k) と msplat は 2026-08-17 の旧スタック値のまま明示ラベルつきで残した (本 session では未再測)",{"key":332,"value":333},"convention の統一","本実装 4 点・msplat 主系列とも brush convention cross-eval q8 (同一 evaluator) で揃えた。msplat native (white-bg) は convention が異なるため、参考の灰色マーカーとして分離しラベルした (advisor レビュー指摘: convention を混ぜて 1 軸に載せると比較が壊れる、p2-msplat-parity-final §8 と同じ注意)",{"key":335,"value":336},"出力","`docs\u002Ffigures\u002Fpareto-v3-msplat-lego-final-stack.png` (既存 `docs\u002Ffigures\u002Fpareto-v2-bicycle-before-after.png` の命名規則 `pareto-v{n}-\u003Ctopic>.png` に倣う)",{"key":338,"value":339},"旧 Pareto (Phase I 8-scene) の扱い","`make_msplat_pareto.py` は元々 Phase I 8-scene + msplat + external baseline を描く別内容のスクリプトだったが、`docs\u002Fstrategy\u002F2026-08-next-phase-tasklist.md` C5 と `docs\u002Fstrategy\u002F2026-08-1x-roadmap-v2.md` の「残: Pareto plot v3 の再生成 (make_msplat_pareto.py の入力を本 finding の 4 点に更新)」という既存の to-do が、まさに本スクリプトを msplat 等価比較 4 点 curve に転用する計画だったため、その通りに書き換えた。旧 Phase I 8-scene 版が生成していた静的成果物 `docs\u002Fstrategy\u002Fmsplat-vs-otake-pareto.png` (`p1-msplat-baseline-spike` \u002F `three-impls-arch.md` が参照する killer figure) は**本 session で一切変更していない** — 生成元スクリプトの内容が変わっただけで、既存 png ファイルは無傷",{"type":59,"text":341},"6. milestones.md への反映",{"type":343,"items":344},"list",[345,346,347],"「現在地」表: Lego 12.5k train elapsed を A7 gate 単独値 (124.81s) から本 finding の独立 n=3 (**124.39s**) に更新。msplat 等価 gap を **0.927× → 0.755×** に更新。per-kernel share は v2 (M4\u002FA7 後) の値に更新し出典を追加。GPU busy\u002Fsync-tax は **本 session で production regime (profile=false) の再計測をしていない**ため既存値のまま (「A7 後は未再計測」の注記を維持、c1v2 run の 65.6% は非 production regime の値なので使わない)","期日までの数値目標 (12.5k ≤135s \u002F msplat 比 ≤0.83×) は **達成** (124.39s、0.755×) — r1 込みの保守的な値 (126.62s、0.769×) でも達成","進捗ログに M7 完了の 1 行を追記",[349,359,366,373,380],{"id":40,"title":40,"subtitle":350,"date":9,"workspace":351,"tags":352,"verdict":354,"psnr":355,"psnr_unit":-1,"wallclock":356,"splats":357,"summary_url":358,"detail_path":358},"M7: per-kernel gpu_ms 再々計測 v2 (submission=per_kernel \u002F forward_submission=per_stage \u002F pipelining=off、M4 radix simd_ballot + A7 refine 3-pass 後の kernel)","splat",[45,17,24,23,353],"v2","partial",36.20126724243164,"2m 54s",404652,"\u002Fruns\u002Fc1v2-12500-off-prof\u002F",{"id":36,"title":36,"subtitle":360,"date":9,"workspace":351,"tags":361,"verdict":354,"psnr":362,"psnr_unit":-1,"wallclock":363,"splats":364,"summary_url":365,"detail_path":365},"M7 最終スタック独立再計測 (全採用施策 default ON): Lego 12.5k full run repeat 1\u002F3",[5,17,24,23,19],36.129024505615234,"2m 11s",407754,"\u002Fruns\u002Ffinal-12500-r1\u002F",{"id":37,"title":37,"subtitle":367,"date":9,"workspace":351,"tags":368,"verdict":354,"psnr":369,"psnr_unit":-1,"wallclock":370,"splats":371,"summary_url":372,"detail_path":372},"M7 最終スタック独立再計測 (全採用施策 default ON): Lego 12.5k full run repeat 2\u002F3",[5,17,24,23,19],36.20119094848633,"2m 3s",405333,"\u002Fruns\u002Ffinal-12500-r2\u002F",{"id":38,"title":38,"subtitle":374,"date":9,"workspace":351,"tags":375,"verdict":354,"psnr":376,"psnr_unit":-1,"wallclock":377,"splats":378,"summary_url":379,"detail_path":379},"M7 最終スタック独立再計測 (全採用施策 default ON): Lego 12.5k full run repeat 3\u002F3",[5,17,24,23,19],36.233558654785156,"2m 4s",408756,"\u002Fruns\u002Ffinal-12500-r3\u002F",{"id":39,"title":39,"subtitle":381,"date":9,"workspace":351,"tags":382,"verdict":354,"psnr":383,"psnr_unit":-1,"wallclock":384,"splats":385,"summary_url":386,"detail_path":386},"M7 最終スタック独立再計測 (全採用施策 default ON): Lego 12.5k full run repeat 4 (discriminator, r1 の sampler window 欠測を切り分けるための追加 run)",[5,17,24,23,19],36.22246170043945,"2m 5s",406994,"\u002Fruns\u002Ffinal-12500-r4\u002F",[388,411,436,457,490,519],{"id":45,"title":389,"date":9,"status":10,"polarity":390,"category":391,"axes":392,"tags":393,"task_code":403,"related_runs":404,"delta_psnr":406,"delta_wallclock":407,"rank":50,"verdict":408,"impact_summary":409,"detail_path":410},"M1\u002Fv2 — post-S2\u002FS3 per-kernel share 再計測: backward_raster 33.9%→40.1% (M4\u002FA7 後)、radix 26.4%→12.0% (M4 の絶対削減を反映) → M3 GO 判定は不変。C2 残差 4.54s は driver latency \u002F CB gap に分解不能 (計装欠如、file:line 提案のみ)","mixed","measurement",[14,15],[394,17,18,395,396,397,398,399,400,23,401,353,402],"m1","kernel-share","per-kernel-gpu-ms","backward-raster","m3-go-gate","residual-bubble","gputime","post-s2-s3","post-m4-a7","2026-09-seminar05-milestones M1 (C1 per-kernel 再計測 + C2 残差 bubble 帰属)",[405,40],"c1-12500-off-prof","n=1: 36.087 dB (self-eval val mean, 100 views)。p2-s3 の off\u002Fdepth2 n=3 mean (36.185 \u002F 36.202 dB) の guard 内。本 run は submission=per_kernel\u002Fforward_submission=per_stage という別 regime なので PSNR の直接比較は非対象 (kernel は bit-exact のため理論上は同水準になるはず、というだけの参考値)","train elapsed 205.78s (n=1)。**production baseline (depth2 default, 151.70s) や S3 off baseline (185.21s) と直接比較しない** — per_kernel\u002Fper_stage submission は CB 数が既定の 15〜27\u002Fiter → 15 CB\u002Fiter 超 (最終 15,001 cb from iter1 window 相当) に増え、busy% が 68.9% まで下がる**測定専用 regime**であり、本 run の wallclock 自体に意味はない。意味があるのは kernel 単体の gpu_ms とその share のみ","m3-go-backward-raster-33.9pct \u002F c2-instrumentation-gap-proposal-only","M3 (per-splat backward, brush PR #401 型) の GO\u002FNO-GO 閾値「backward_raster share ≥ 25%」を判定した。post-S2\u002FS3 kernel (hierarchical radix scan \u002F resident binning) を submission=per_kernel\u002Fforward_submission=per_stage\u002Fpipelining=off (per-kernel breakdown が測れる唯一の regime) で 1 run 実測した結果 \u003Cstrong>backward_raster (+project_back 統合) share 33.86%\u003C\u002Fstrong> で \u003Cstrong>閾値を大きく超過 → M3 は GO\u003C\u002Fstrong>。\u003Cstrong>share × 0.25 (brush の -25% 主張をそのまま適用したナイーブな期待値) = 8.47%\u003C\u002Fstrong>。ただしこれは本 run の GPU busy (68.9%、production の 91.3% とは別 regime) に対する share であり、production (depth2 default) の wallclock に対する期待 Δ は \u003Cstrong>33.86% × 91.3% × 0.25 ≈ 7.7%\u003C\u002Fstrong> とみるほうが妥当 (kernel 自体の gpu_ms は submission wrapping にほぼ不変という counter-session の事後検証はあるが、n=1 点推定であることと合わせて上限値として扱う)。\u003Cstrong>pre-S2\u002FS3 (counter-session) との比較では share 構成はほぼ不変\u003C\u002Fstrong> (backward_raster 33.6%→33.86%、radix 26.3%→26.40%、rasterize 11.9%→11.64%、adam 13.8%→12.68%、ssim 10.0%→10.95%) — S2 のhierarchical scan は「radix の CB\u002Fwait 数」を畳んだだけで kernel 自体の GPU 時間配分は変えていない、という roadmap の当初の想定を実測で裏づけた。C2 は M0 の並行会計訂正 (encode(B) 4.66→3.41s、残差 3.28→4.54s、nested label 二重計上の是正) を踏まえ、\u003Cstrong>残差 4.54s (depth2 sync-tax の 32%) を driver 投入 latency と CB 間 gap に分解しようとしたが、既存計装 (`gputime.rs`) は `kernelStartTime`\u002F`kernelEndTime` を objc bind しているのみで収集しておらず、per-CB の生 interval 列も外部に露出していない\u003C\u002Fstrong> ため\u003Cstrong>分解不能\u003C\u002Fstrong>と判明した。file:line 付きの追加案を §C2 に残す (実装はしていない、GPU run はこれ以上起動していない)。","\u002Ffindings\u002Fp3-kernel-share-post-s3\u002F",{"id":43,"title":412,"date":9,"status":10,"polarity":12,"category":11,"axes":413,"tags":414,"task_code":423,"related_runs":424,"delta_psnr":431,"delta_wallclock":432,"rank":50,"verdict":433,"impact_summary":434,"detail_path":435},"M4\u002FA5 radix_scatter simd_ballot 2段化 — 12.5k gate 採用、-14.9%、default flip",[14,15],[415,416,417,418,419,420,23,24,421,422],"m4","a5","radix-scatter","simd-ballot","tile-bin","sort-parity","adopted","default-flip","2026-09-seminar05-milestones — M4 (A5 radix scatter simd_ballot)",[425,426,427,428,429,430],"m4-12500-off-r1","m4-12500-on-r1","m4-12500-off-r2","m4-12500-on-r2","m4-12500-off-r3","m4-12500-on-r3","12.5k 同一 session 交互 A\u002FB n=3: on **36.143 dB** (36.15227 \u002F 36.05730 \u002F 36.21933) vs off **36.121 dB** (36.19775 \u002F 36.01755 \u002F 36.14695) = **+0.022 dB**。task 指定 guard (on mean ≥ off mean − 0.05 dB) に **pass** (+0.022 > -0.05)。config header の絶対 guard (36.202 ± 0.1 dB、帯 [36.102, 36.302]) にも on\u002Foff とも **pass**。final splats は on 408,084 (408,408 \u002F 409,074 \u002F 406,770) \u002F off 409,363 (408,928 \u002F 411,049 \u002F 408,113) で on が -0.31% 少ない (既存 atomic 非決定性 chaos の範囲内、方向は一貫していない)。sort parity は `tile_offsets` で byte-exact だが、同じ parity report は `sorted_idx` の 0.217% (2105\u002F969838) に既知の tie-order 非決定性を記録しており、これが rasterize 順序ひいては atomic 加算順序に伝播するため end-to-end の PSNR は parity だけでは pin されない — したがって観測された小さい非方向性の PSNR 散らばりは想定内であり、M2 Tier1 gate (p3-tier1-bit-exact) が観測したような系統的分離は見られない","12.5k full run 同一 session 交互 A\u002FB n=3: **off 149.883s (σ 0.591%) → on 127.530s (σ 0.794%) = -14.914%**。3 pair 個別 Δ は -14.72% (r1) \u002F -15.15% (r2) \u002F -14.87% (r3) とレンジ 0.43 pt の高い一貫性。有意閾値 max(2σ_off,1%) = 1.182%、実測 Δ は**その 12.6 倍**。σ 非対称比 1.34× (off\u003Con) は汚染の典型署名とされる 3× を大きく下回り、on 側が GPU 律速でむしろ host jitter に鈍いという機構と整合する。replay bench (p3-radix-ballot 旧版、production default stack、n=3、GPU 専有未確認) の -12.9%〜-13.3% という directional 参考値とも整合し (12.5k full run のほうがやや大きい -14.9%、407k 固定 checkpoint 断面と 12.5k 平均 pair 数分布の違いで説明可能)、forward_submission=per_stage での radix 単独 gpu_ms -63.7% とも方向・大きさの両方で整合する","adopted-default-flip-radix-scatter-simd-ballot","tasklist A5 (radix は帯域 36% の latency 律速と算術証明済み) の実装検証。既存 O(lid) 逐次 threadgroup memory scan を simdgroup ballot 2 段化に置換し、BackendConfig `radix_scatter` の enum variant `simd_ballot` として追加、**2026-08-30 M4 GPU gate で default に採用**。sort parity は unit test 3 本 (境界サイズ 0\u002F1\u002F255\u002F256\u002F257\u002F1234\u002F100000、ties 多発 n=5000、3 種の radix_scan 実装すべて) と本番規模 (407,267 splats) `splat bench --parity` の両方で bit exact PASS。**12.5k Lego 同一 session 交互 A\u002FB n=3 (off-r1→on-r1→off-r2→on-r2→off-r3→on-r3、独立 10s load sampler で汚染監視、binary sha256 は series 前後で不変) で train elapsed 149.883 → 127.530s = -14.9%**、3 pair 個別 (-14.72% \u002F -15.15% \u002F -14.87%) が高い一貫性を示し、有意閾値 max(2σ_off,1%)=1.18% の **12.6 倍**という大差で通過。σ は off 0.59% \u002F on 0.79% (非対称比 1.34×、汚染の署名である 3× を大きく下回る)。**PSNR guard も pass** (on mean 36.143 dB ≥ off mean 36.121 dB − 0.05 dB、Δ +0.022 dB、両 arm とも config header の絶対 guard 36.202±0.1 dB にも収まる)。final splats は on 408,084 \u002F off 409,363 で -0.31% (既存 atomic 非決定性 chaos の範囲内)。session 開始時の ambient load 18.86〜22.8 (Spotlight `mediaanalysisd`\u002F`mds_stores` 再インデックス、reboot 後) という p2-s3 が破棄基準にした汚染クラスの中で実施したが、同一 session 交互設計と 3 pair の高い一貫性 (レンジ 0.43 pt) がこれを吸収したことを §0 で示す。**結論: 採用。`RadixScatterKind::default()` を `SimdBallot` に flip、`cargo test --workspace --release` 全 pass**。","\u002Ffindings\u002Fp3-radix-ballot\u002F",{"id":44,"title":437,"date":9,"status":10,"polarity":12,"category":11,"axes":438,"tags":439,"task_code":448,"related_runs":449,"delta_psnr":452,"delta_wallclock":453,"rank":454,"verdict":421,"impact_summary":455,"detail_path":456},"A7 refine 3-pass 削減 — 採用確定 (2026-08-30 gate)",[14,15],[44,440,441,442,443,444,445,23,446,422,447],"a7","refine","scratch-persist","direct-write","alloc-churn","in-flight-invariant","gate-adopted","contaminated-series","docs\u002Fstrategy\u002F2026-08-next-phase-tasklist.md Tier2 A7 (refine の 3-pass 削減)",[450,451],"splat\u002Fruns-logs\u002Fa7-12500-*.log (1回目 series、棄却・保存)","splat\u002Fruns-logs\u002Fa7v2-12500-*.log (2回目 series、採用根拠)","+0.0197 dB (12.5k n=3、guard 内。書き込みロジック自体は不変なので理論上の期待通りノイズレベル)","**-2.149%** (12.5k n=3、閾値 max(2σ_off,1%)=1.612%、3\u002F3 pair 一貫)。tasklist 期待帯 -1.3〜-2.6% にちょうど収まる","mid","A7 (refine の 3-pass 削減) を実装・gate した。(a) \u003Ccode>refine_scratch_persist\u003C\u002Fcode>: compact pass の scratch \u003Ccode>Vec\u003C\u002Fcode> 30 本を \u003Ccode>RefineState\u003C\u002Fcode> (新設 \u003Ccode>RefineScratch\u003C\u002Fcode>) に永続化し \u003Ccode>std::mem::take\u003C\u002Fcode> で借り出し・tick 末尾で書き戻す。allocation の出所が変わるだけで計算は 1 つも変えない。(b) \u003Ccode>refine_direct_write\u003C\u002Fcode>: compact 書き込み先の抽象 \u003Ccode>Dst\u003C\u002Fcode> (\u003Ccode>Vec\u003C\u002Fcode> か Metal buffer 生ポインタ) を導入し、\u003Ccode>direct_write = true\u003C\u002Fcode> のとき新規 \u003Ccode>Vec\u003C\u002Fcode> を一切作らず compact loop が \u003Ccode>param.*\u003C\u002Fcode>\u002F\u003Ccode>adam_state.*\u003C\u002Fcode> に直接書く。実装中に見つけた subtle な罠: Clone の複製先 \u002F Respawn \u002F Split の子スロットは旧実装では「新規 0 埋め \u003Ccode>Vec\u003C\u002Fcode>」から無料で Adam m\u002Fv = 0 を得ていたが、direct 経路は \u003Cstrong>stale データが残っている可能性のある live buffer\u003C\u002Fstrong> に書くため、この暗黙の 0 を前提にできない — \u003Ccode>zero_adam_at\u003C\u002Fcode> ヘルパーで明示的に 0 を書くよう修正した (無修正だと A7(b) 単体で MCMC 論文の「新規 slot は Adam fresh start」不変条件が壊れていた)。不変条件 I (\u003Ccode>[num_splats, capacity)\u003C\u002Fcode> は常に 0) は direct 経路でも \u003Ccode>zero_tail\u003C\u002Fcode> による \u003Ccode>[n_new, n_write)\u003C\u002Fcode> の明示 0 埋めで維持する。\u003Cstrong>gate: 12.5k n=3 交互 A\u002FB (2回目 series、a7v2-12500) で Δ -2.149% (閾値 max(2σ_off,1%)=1.612%)、PSNR +0.0197dB (guard 内)、3\u002F3 pair 一貫 (on&lt;off)。1回目 series は load 汚染 (6 run 中 3 run に load1 スパイク) で棄却\u003C\u002Fstrong>。default flip 実施: \u003Ccode>BackendConfig::default()\u003C\u002Fcode> の両 flag を \u003Ccode>true\u003C\u002Fcode> に変更。field 単独の \u003Ccode>#[serde(default)]\u003C\u002Fcode> は付けない (bool 型に付けると \u003Ccode>bool::default()\u003C\u002Fcode>=false に固定され struct 側の true を上書きするため — \u003Ccode>target_cache\u003C\u002Fcode>\u002F\u003Ccode>shader_fast_math\u003C\u002Fcode> と同じ規約)、これは 1 iter smoke で config 省略時に \u003Ccode>refine_scratch_persist: true, refine_direct_write: true\u003C\u002Fcode> が実際に解決されることを確認済み。\u003Ccode>cargo test --workspace --release\u003C\u002Fcode> 全 pass (0 failed)。","\u002Ffindings\u002Fp3-refine-3pass\u002F",{"id":46,"title":458,"date":459,"status":10,"polarity":390,"category":11,"axes":460,"tags":462,"task_code":474,"related_runs":475,"delta_psnr":485,"delta_wallclock":486,"rank":50,"verdict":487,"impact_summary":488,"detail_path":489},"最終スタック msplat 等価比較 — wallclock 0.927× \u002F throughput 1.135× \u002F energy 0.906×、matched 断面は convention で割れる","2026-08-17",[14,461,15],2,[463,464,465,466,467,468,469,470,471,23,472,473],"1x-roadmap-v2","msplat","parity","baseline","cross-eval","eval-convention","thermal-interleave","energy","throughput","m4-max","thesis-ready","2026-08 1× 工程表 v2 — 最終段 (msplat 等価比較 matched 断面込み)",[476,477,478,479,480,481,482,483,484],"final-parity-12500-r1","final-parity-12500-r2","final-parity-12500-r3","final-parity-12500-r4","final-parity-12500-r5","final-parity-13300","final-parity-6000","final-parity-30000","final-parity-30000-r2","brush convention (同一 evaluator q8、msplat 30K best 34.243 dB 基準): 本実装 12.5k **+1.97 dB** \u002F 13.3k (matched-wallclock) **+1.94 dB** \u002F 6.0k **+0.67 dB** \u002F 30k **+2.26 dB**。white convention (msplat 30K 最小 36.252 dB 基準): 12.5k **-1.10 dB** \u002F 13.3k **-1.17 dB** \u002F 30k **-0.81 dB** — **matched 点は 30k まで延ばしても存在しない**","12.5k 152.68s vs msplat 30K 164.69s = **0.927×** (train elapsed、**block 1 interleave の n=2 mean 同士**)。msplat の characterization 値は n=4 mean **165.42s** だが、gap の分母には interleave pair である block 1 n=2 (164.69s) を使う (n=4 を分母にすると 0.923×)。process wallclock では 155s vs 168.5s = **0.920×**。matched-wallclock は 13,300 iter = 165.85s (msplat block1 mean 164.69s の **1.007×**)。matched-PSNR (brush) は 6,000 iter = 51.60s = **0.313×**。matched-iteration (30K vs 30K、co-located anchor) は 479.91s vs 166.15s = **2.888×**。前回 (2026-08-16) の 2.10× から反転","wallclock-and-energy-won-psnr-convention-split","1× 工程表 v2 の最終段を通し、卒論 §5 の direct comparison を確定させた。\u003Cstrong>本実装 Lego 12.5k = 152.68s \u002F msplat 30K = 164.69s (block 1 interleave pair の n=2 mean 同士) で wallclock gap 0.927×\u003C\u002Fstrong> — 2026-08-16 の同一 protocol 実測 2.10× から \u003Cstrong>2.27 倍の改善\u003C\u002Fstrong>で、初めて convention 非依存の軸で msplat を下回った。\u003Cstrong>per-splat·iter throughput も 2.62× → 1.135×\u003C\u002Fstrong> と near-parity まで詰まっており、「本実装は workload 形状 (少 iter × 多 splats) で勝っているだけで kernel は遅い」という 2026-08-16 時点の解釈は\u003Cstrong>もはや成立しない\u003C\u002Fstrong>。エネルギーも \u003Cstrong>GPU 0.906× \u002F package 0.896×\u003C\u002Fstrong> と反転したが、機構は counter session (低 W × 長時間) から \u003Cstrong>同 W × 短時間\u003C\u002Fstrong>へ完全に入れ替わっている (W 比 0.704× → 0.978×) — S3 が GPU busy を 77.5 → 91.3% に上げた以上、低 W は原理的に維持できない。\u003Cstrong>一方 PSNR の matched 断面は convention 依存のまま\u003C\u002Fstrong>: brush では 6.0k (0.313×) で msplat 30K を上回り、white では 30k (2.888×) でも -0.81 dB。roadmap v2 が「msplat native 比 -0.34 dB」と留保していた差は、\u003Cstrong>30k まで延ばしても self-eval が 36.455 dB で天井\u003C\u002Fstrong>になることから \u003Cstrong>iter 予算の不足ではなく評価 convention の差\u003C\u002Fstrong>と確定した (Phase H の 36.384 dB 天井とも整合)。よって当該留保は「解消」ではなく\u003Cstrong>撤回\u003C\u002Fstrong>し、convention 別の 2 断面に置き換える。","\u002Ffindings\u002Fp2-msplat-parity-final\u002F",{"id":42,"title":491,"date":459,"status":10,"polarity":12,"category":11,"axes":492,"tags":493,"task_code":502,"related_runs":503,"delta_psnr":514,"delta_wallclock":515,"rank":50,"verdict":516,"impact_summary":517,"detail_path":518},"S3 iteration pipelining depth 2 — 12.5k -18.1% \u002F busy 78 → 91% (default flip)",[14,15],[463,494,495,496,497,498,499,500,23,501],"s3","iteration-pipelining","command-buffer","gpu-busy","sync-tax","double-buffering","scratch-generation","unified-memory","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2' (S3 gate)",[504,505,506,507,508,509,510,511,512,513],"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","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 の効果を過小評価する)","s3-adopted-default-flip-pipelining-depth2","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> (全て数学的同値の施策のみ)。","\u002Ffindings\u002Fp2-s3-iteration-pipelining\u002F",{"id":47,"title":520,"date":521,"status":10,"polarity":390,"category":11,"axes":522,"tags":523,"task_code":526,"related_runs":527,"delta_psnr":530,"delta_wallclock":531,"rank":50,"verdict":532,"impact_summary":533,"detail_path":534},"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)","2026-08-16",[14,461],[524,525,464,465,466,467,468,469,23,472,473],"gap-sweep","phase-3","2026-08 msplat gap sweep Phase 3 (parity 再計測)",[528,529],"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",1790227327654]