[{"data":1,"prerenderedAt":660},["ShallowReactive",2],{"finding:p2-msplat-parity-final":3,"finding-runs:p2-msplat-parity-final":460,"finding-related:p2-msplat-parity-final":526},{"meta":4,"impact":60,"sections":66},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":17,"task_code":30,"commit":31,"branch":32,"config_paths":33,"related_runs":43,"related_findings":53},"p2-msplat-parity-final","最終スタック msplat 等価比較 — wallclock 0.927× \u002F throughput 1.135× \u002F energy 0.906×、matched 断面は convention で割れる","1× 工程表 v2 完了 (S1→W1→W2→S2→S3) 後の最終スタックを msplat wheel v1.1.3 と \u003Cstrong>同日・同一 M4 Max・同一 init 点群・同一 evaluator\u003C\u002Fstrong> で interleave 比較した。\u003Cstrong>msplat 30K n=4 = 165.42s \u002F native val 36.563 dB\u003C\u002Fstrong>、本実装 Lego 12.5k n=2 = \u003Cstrong>152.68s (train elapsed) \u002F 155s (process)\u003C\u002Fstrong> — \u003Cstrong>wallclock gap は 2026-08-16 の 2.10× から 0.927× へ反転\u003C\u002Fstrong> (gap の分母は interleave pair である block 1 の msplat n=2 mean \u003Cstrong>164.69s\u003C\u002Fstrong>。msplat 全 4 run の n=4 mean 165.42s を分母にすると 0.923×)し、\u003Cstrong>per-splat·iter throughput の劣位も 2.62× → 1.135× (ほぼ parity)\u003C\u002Fstrong> に縮んだ。\u003Cstrong>GPU energy 0.906× \u002F package energy 0.896×\u003C\u002Fstrong> で、counter session が「package では 1.062× で負け」と記録したエネルギー断面も反転した (ただし機構は入れ替わっており、W 比は 0.704× → \u003Cstrong>0.978×\u003C\u002Fstrong> = ほぼ同電力で短時間、が新しい説明)。PSNR の matched 断面は前回同様 convention で割れる: \u003Cstrong>brush convention では 6,000 iter (51.60s = 0.313×) で msplat 30K の best (34.243 dB) を +0.67 dB 上回る\u003C\u002Fstrong>一方、\u003Cstrong>white convention では 30,000 iter (479.91s = 2.888×) まで延ばしても -0.81 dB で matched 点が存在しない\u003C\u002Fstrong>。roadmap v2 が留保していた「12.5k で native 比 -0.34 dB」は \u003Cstrong>iter 不足ではなく convention 差\u003C\u002Fstrong>であることが 30k の天井 (self 36.455 dB) で確定した。","1× 工程表 v2 · 最終段 · msplat 等価比較 (matched 断面)","2026-08-17","stable","experiment","mixed",[14,15,16],1,2,3,[18,19,20,21,22,23,24,25,26,27,28,29],"1x-roadmap-v2","msplat","parity","baseline","cross-eval","eval-convention","thermal-interleave","energy","throughput","lego","m4-max","thesis-ready","2026-08 1× 工程表 v2 — 最終段 (msplat 等価比較 matched 断面込み)","726c78524fe5","main",[34,35,36,37,38,39,40,41,42],"splat\u002Fconfigs\u002F2026-08-17-final-parity-12500-r1.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-12500-r2.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-12500-r3.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-12500-r4.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-12500-r5.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-13300.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-6000.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-30000.toml","splat\u002Fconfigs\u002F2026-08-17-final-parity-30000-r2.toml",[44,45,46,47,48,49,50,51,52],"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",[54,55,56,57,58,59],"p2-msplat-parity-lego","p2-s3-iteration-pipelining","p2-s2-forward-chained","p2-counter-session","p1-axis1-phase-h-lego-pareto-sweep","p1-a-3-cross-eval-reproducer",{"summary":61,"rank":62,"verdict":63,"delta_psnr":64,"delta_wallclock":65},"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 断面に置き換える。","high","wallclock-and-energy-won-psnr-convention-split","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× から反転",[67,70,75,78,210,212,270,272,336,338,342,360,362,369,371,422,425,427,434,436,442,444,448,450],{"type":68,"text":69},"lead","2026-08-16 の parity finding (p2-msplat-parity-lego) と\u003Cstrong>同一 protocol\u003C\u002Fstrong> — 同日・同一 M4 Max・同一 dataset・同一 culled init.ply (5207 点)・train 100 view 全量・同一 evaluator・interleave 直列実行 — を、\u003Cstrong>1× 工程表 v2 完了後の最終スタック\u003C\u002Fstrong>で再実施した。最終スタック = default 全採用 (\u003Ccode>binning=resident\u003C\u002Fcode> \u002F \u003Ccode>raster_backward_range=last_contributor\u003C\u002Fcode> \u002F \u003Ccode>loss_path=gpu\u003C\u002Fcode> \u002F \u003Ccode>forward_submission=chained\u003C\u002Fcode> \u002F \u003Ccode>radix_scan=gpu_hierarchical\u003C\u002Fcode> \u002F \u003Ccode>pipelining=depth2\u003C\u002Fcode>、\u003Ccode>profile=false\u003C\u002Fcode>) で、backend block は p2-s3-iteration-pipelining の depth2 arm と完全一致。\u003Cstrong>全 run を同一 config family (refine.stop_iter = max_steps) で回し\u003C\u002Fstrong>、6.0k \u002F 12.5k \u002F 13.3k \u002F 30k が単一の Pareto curve として読めるようにしてある。",{"type":71,"label":72,"variant":73,"text":74},"callout","Headline — 「勝った」と言える断面と言えない断面","success","\u003Cstrong>convention 非依存で勝った\u003C\u002Fstrong>: wallclock (12.5k で 0.927×)、matched-wallclock 断面 (13.3k で 1.007× \u002F brush +1.94 dB)、GPU energy (0.906×) \u002F package energy (0.896×)。\u003Cstrong>near-parity まで詰めた\u003C\u002Fstrong>: per-splat·iter throughput (msplat 1.135× — 2026-08-16 の 2.62× から)。\u003Cstrong>勝ったと言えない\u003C\u002Fstrong>: white convention の PSNR (12.5k -1.10 dB、30k まで延ばしても -0.81 dB で matched 点なし)、matched-iteration 断面 (30K vs 30K で 2.888× 遅い)、per-splat·iter throughput (まだ 13.5% 負け)。\u003Cstrong>撤回する主張\u003C\u002Fstrong>: 「12.5k の 36.202 dB は msplat native 36.539 dB に 0.34 dB 足りない」— これは premultiplied self-eval と white native の\u003Cstrong>異 convention 比較\u003C\u002Fstrong>であり、30k の天井 (36.455 dB) がその差を iter 予算で埋められないことを示している。",{"type":76,"text":77},"heading","1. 実測サマリ (M4 Max、同日、wallclock は train loop のみ)",{"type":79,"columns":80,"align":91,"rows":94,"caption":209},"table",[81,82,83,84,85,86,87,88,89,90],"run (実行順)","block","iter","train elapsed","process","final splats","自己 eval","brush cross-eval q8","white cross-eval","窓内 load1 avg\u002Fmax",[92,92,93,93,93,93,93,93,93,93],"left","right",[95,106,116,124,132,142,152,160,167,175,183,193,202],[96,97,98,99,100,101,102,103,104,105],"msplat r1","1","30,000","165.65s","169s","194,370","36.554 (white, native)","33.857","36.271","3.60 \u002F 4.07",[107,97,108,109,110,111,112,113,114,115],"splat 12.5k r1","12,500","153.03s","155s","407,501","36.215 (brush, trainer)","36.252","35.154","3.82 \u002F 5.28",[117,97,98,118,119,120,121,122,113,123],"msplat r2","163.73s","168s","191,209","36.559 (white, native)","33.038","3.09 \u002F 4.42",[125,97,108,126,110,127,128,129,130,131],"splat 12.5k r2","152.33s","408,111","36.138 (brush, trainer)","36.174","—","2.67 \u002F 3.13",[133,134,135,136,119,137,138,139,140,141],"splat 13.3k (matched-wall)","2","13,300","165.85s","414,205","36.154","36.182","35.082","3.22 \u002F 3.94",[143,134,144,145,146,147,148,149,150,151],"splat 6.0k (matched-PSNR brush)","6,000","51.60s","54s","319,452","34.890","34.913","33.756","2.63 \u002F 2.98",[153,134,98,154,155,156,157,158,130,159],"splat 30k (**破棄**: 窓内汚染)","(498.27s)","(502s)","468,527","36.440","36.501","**5.61 \u002F 8.81**",[161,134,108,162,119,163,164,165,130,166],"splat 12.5k r3 (bracket)","164.94s","411,192","36.190","36.219","3.33 \u002F 3.77",[168,134,108,169,170,171,172,173,130,174],"splat 12.5k r4 (bracket)","168.05s","171s","408,521","36.215","36.255","~4.5",[176,134,108,177,178,179,180,181,130,182],"splat 12.5k r5 (bracket、厳格 quiesce)","162.78s","165s","405,173","36.127","36.158","2.67 (gate 値)",[184,185,98,186,187,188,189,190,191,192],"msplat r3 (co-located anchor)","3","166.33s","170s","195,984","36.565 (white, native)","34.118","36.294","3.22 (gate 値)",[194,185,98,195,196,197,198,199,200,201],"splat 30k r2 (**採用**)","479.91s","483s","467,752","36.455","36.498","35.440","2.40 (gate 値)",[203,185,98,204,187,205,206,207,130,208],"msplat r4 (co-located anchor)","165.97s","196,404","36.575 (white, native)","34.243","2.77 (gate 値)","実行順そのまま。\u003Cstrong>block 1\u003C\u002Fstrong> = 公式 interleave (msplat → splat → msplat → splat)、\u003Cstrong>block 2\u003C\u002Fstrong> = matched 断面 + Pareto 天井、\u003Cstrong>block 3\u003C\u002Fstrong> = 30k の clean 再測を msplat anchor で挟んだ co-located 比較。「自己 eval」= 各実装が学習と同じ convention で測る値。「brush cross-eval q8」= 両 PLY を \u003Ccode>splat eval --convention brush --quantize-8bit\u003C\u002Fcode> (val 100 view) に通した同一 evaluator 値。「white cross-eval」= 本実装 renderer で描画 → α 合成 → white GT (前回と同一の妥協点)。本実装の brush no-quant 値は trainer 自己 eval と \u003Cstrong>4 桁一致\u003C\u002Fstrong> (例 36.2147 vs 36.215) で evaluator 整合性を確認済み。",{"type":76,"text":211},"2. 公式 gap 断面 (5 断面 + throughput + energy)",{"type":79,"columns":213,"align":219,"rows":220,"caption":269},[214,215,216,217,218],"断面","比較内容","比 (指標は行ごと)","PSNR (同一 evaluator)","判定",[92,92,93,92,92],[221,227,233,239,245,251,257,263],[222,223,224,225,226],"**公式 12.5k**","splat 12.5k (152.68s、n=2 mean) vs msplat 30K (164.69s、block 1 n=2 mean)","**0.927×**","brush **+1.97 dB** (36.21 vs 34.24) \u002F white **-1.10 dB** (35.15 vs 36.25)","**勝ち (wallclock)** \u002F PSNR は convention 依存",[228,229,230,231,232],"**matched-wallclock**","splat 13,300 iter = 165.85s ≒ msplat 164.69s","**1.007×** (+0.70%)","brush **+1.94 dB** (36.18 vs 34.24) \u002F white **-1.17 dB** (35.08 vs 36.25)","同時間・brush では勝ち \u002F white では負け",[234,235,236,237,238],"**matched-PSNR (brush)**","splat 6,000 iter (34.913 dB) > msplat 30K best (34.243 dB)","**0.313×** (51.60s vs 164.69s)","**+0.67 dB**","**勝ち — 3.2 倍速で同等以上**",[240,241,242,243,244],"**matched-PSNR (white)**","msplat 30K 最小 36.252 dB に届く本実装 Pareto 点","**存在しない**","30k (479.91s) でも 35.440 = **-0.81 dB**","**負け — 断面が取れない**",[246,247,248,249,250],"**matched-iteration (30K vs 30K)**","splat 30k (479.91s) vs msplat 30K (166.15s、block 3 co-located anchor)","**2.888×**","brush **+2.26 dB** \u002F white **-0.81 dB**","**負け (wallclock)**",[252,253,254,255,256],"per-splat·iter throughput","ms\u002Fiter ÷ iteration 平均 splats (splat 322k \u002F msplat 165k)","**[throughput 比]** msplat **1.135×** 高速","37.9 vs 33.4 ns\u002Fsplat·iter","near-parity、まだ 13.5% 負け",[258,259,260,261,262],"GPU energy (参考)","steady GPU W × train elapsed","**[energy 比]** **0.906×**","29.38 W × 152.68s = 4,486 J vs 30.05 W × 164.69s = 4,949 J","**勝ち**",[264,265,266,267,268],"package energy (参考)","同上 (CPU 込み、SoC-wide のため参考値)","**[energy 比]** **0.896×**","4,748 J vs 5,298 J","**勝ち** (counter session の 1.062× から反転)","\u003Cstrong>wallclock の公式値は 0.927× (12.5k)\u003C\u002Fstrong>。matched-PSNR は convention で完全に割れており、\u003Cstrong>brush なら 0.313×、white なら断面自体が存在しない\u003C\u002Fstrong>。matched-iteration (30K vs 30K) は本実装が 2.888× 遅く、これは\u003Cstrong>本実装の operating point が 12.5k であって 30k ではない\u003C\u002Fstrong>ことの裏返し (Phase H で確定した Lego の Pareto sweet spot)。energy の CPU 列は IOReport が SoC-wide なので package 行は参考値扱い (counter session の注記を踏襲)。",{"type":76,"text":271},"3. 2026-08-16 parity finding からの差分表",{"type":79,"columns":273,"align":278,"rows":279,"caption":335},[274,275,276,277],"指標","2026-08-16 (Phase 2 default スタック)","2026-08-17 (最終スタック)","差",[92,93,93,93],[280,285,290,295,300,305,310,315,320,325,330],[281,282,283,284],"**wallclock gap @ 12.5k**","2.10× (352.3s vs 167.7s)","**0.927×** (152.68s vs 164.69s)","**2.27 倍改善 \u002F 1.0× を跨いだ**",[286,287,288,289],"本実装 12.5k train elapsed","352.27s","**152.68s** (n=2 mean)","**-56.7%**",[291,292,293,294],"**per-splat·iter throughput**","msplat 2.62× (88.9 vs 33.9 ns)","msplat **1.135×** (37.9 vs 33.4 ns)","**劣位 2.62× → 1.135×**",[296,297,298,299],"matched-wallclock 点","7,500 iter (181.4s = 1.08×)","**13,300 iter (165.85s = 1.007×)**","同時間で回せる iter が **1.77 倍**",[301,302,303,304],"matched-PSNR (brush) 点","7,500 iter = 1.08×","**6,000 iter = 0.313×**","**3.4 倍速い断面へ**",[306,307,308,309],"matched-PSNR (white) 点","存在しない (12.5k で -1.09 dB)","存在しない (**30k で -0.81 dB**)","30k まで検証して不在を確定",[311,312,313,314],"msplat 30K wallclock","167.7s (n=2)","165.42s (n=4)","-1.4% (日内再現、同一 wheel)",[316,317,318,319],"msplat 30K native PSNR","36.53 dB (n=2)","36.563 dB (n=4)","+0.03 dB (再現)",[321,322,323,324],"GPU 平均 W (splat \u002F msplat)","18.95 \u002F 26.92 = 0.704× (counter session)","29.38 \u002F 30.05 = **0.978×**","**低 W の優位は消滅** (busy 77.5→91.3% の帰結)",[326,327,328,329],"GPU energy 比","0.897× (counter session)","**0.906×**","ほぼ同値だが**機構が入れ替わった**",[331,332,333,334],"package energy 比","1.062× (**負け**)","**0.896×** (勝ち)","**反転**","wallclock gap の 2.10× → 0.927× は S1 (-22.2%) → W1 (-7.7%) → W2 (-9.1%) → S2 (-9.9%) → S3 (-18.1%) の積み上げ (1× 工程表 v2)。\u003Cstrong>energy の 0.897× → 0.906× は「変わっていない」ように見えるが説明が完全に入れ替わっている\u003C\u002Fstrong>: counter session では「低 W (0.704×) × 長時間 (1.273×)」で辛うじて 0.9 だったのが、今は「ほぼ同 W (0.978×) × 短時間 (0.927×)」で 0.9 になっている。S3 が bubble を潰した以上、低 W は原理的に維持できない — \u003Cstrong>エネルギー優位の根拠は『GPU を遊ばせているから省電力』ではなく『早く終わるから』に書き換える必要がある\u003C\u002Fstrong>。",{"type":76,"text":337},"4. roadmap v2 の留保「-0.34 dB」の決着 — iter 予算ではなく convention 差",{"type":71,"label":339,"variant":340,"text":341},"結論: 当該留保は「解消」ではなく撤回する","warning","p2-s3-iteration-pipelining と roadmap v2 は「等価 gap 0.907× は matched 断面ではない — 本実装 12.5k の 36.202 dB に対し msplat 30K native は 36.539 dB で 0.34 dB 低い」と留保していた。本 finding はこれを 2 方向から潰した。\u003Cstrong>(a) その 0.34 dB は異 convention 比較である\u003C\u002Fstrong> — 36.202 は premultiplied (brush) 学習\u002F評価、36.539 は white-bg 学習\u002F評価であり、同一 evaluator に揃えると \u003Cstrong>brush では本実装 +1.97 dB、white では -1.10 dB\u003C\u002Fstrong> と符号が反転する。\u003Cstrong>(b) iter 予算では埋まらない\u003C\u002Fstrong> — 同一 config family で 30,000 iter まで延ばした本実装の self-eval は \u003Cstrong>36.455 dB で天井\u003C\u002Fstrong> (Phase H の 36.384 dB と整合)、white cross-eval でも 35.440 dB にしか届かず msplat の 36.252 dB に \u003Cstrong>-0.81 dB\u003C\u002Fstrong> 残る。12.5k → 30k は \u003Cstrong>wallclock 3.14 倍 (152.68 → 479.91s) を払って white で +0.29 dB\u003C\u002Fstrong> しか買えないので、外挿しても matched 点には到達しない。よって roadmap v2 の caveat box は \u003Cstrong>convention 別の 2 断面 (brush: 0.313× で勝ち \u002F white: 断面不在)\u003C\u002Fstrong> に置き換える。",{"type":79,"columns":343,"align":346,"rows":347,"caption":359},[83,84,344,88,89,345],"self-eval (brush)","white で msplat 36.252 との差",[93,93,93,93,93,93],[348,350,355,357],[144,145,148,149,150,349],"-2.50 dB",[108,351,352,353,114,354],"152.68s (n=2 mean)","36.177 (n=2 mean)","36.213 (n=2 mean)","-1.10 dB",[135,136,138,139,140,356],"-1.17 dB",[98,195,198,199,200,358],"**-0.81 dB**","本実装の Pareto curve (全て同一 config family、\u003Ccode>refine.stop_iter = max_steps\u003C\u002Fcode>)。\u003Cstrong>brush 側は 12.5k 以降ほぼ飽和\u003C\u002Fstrong> (12.5k → 30k で +0.28 dB に対し wallclock 3.14 倍)、\u003Cstrong>white 側も 30k で -0.81 dB 残る\u003C\u002Fstrong>。13.3k が 12.5k をわずかに下回るのは run 間分散の範囲 (12.5k は 5 run で 36.127〜36.215)。",{"type":76,"text":361},"5. throughput の劣位が near-parity まで縮んだ",{"type":363,"items":364},"list",[365,366,367,368],"\u003Cstrong>ns\u002Fsplat·iter は 88.9 → 37.9\u003C\u002Fstrong> (msplat 33.4)。2026-08-16 時点の \u003Cstrong>2.62× 劣位が 1.135× に\u003C\u002Fstrong>。当時の解釈「本実装は少 iter × 多 splats という workload 形状で勝っているだけで、単位仕事あたりでは 2.6 倍遅い」は\u003Cstrong>もはや成立しない\u003C\u002Fstrong> — kernel\u002F実行形状レベルでも実質 parity 帯に入った。","\u003Cstrong>workload 形状の非対称は残る\u003C\u002Fstrong>: 本実装は 12,500 iter × iteration 平均 322k splats、msplat は 30,000 iter × 平均 165k splats。iter 数も splat 数も全断面で非対称であり、この非対称そのものは refine スケジュールの設計差 (本実装は早期に密に grow して早く止める) に由来する。","\u003Cstrong>30k 断面では 36.5 ns\u003C\u002Fstrong> (splat 30k r2) と 12.5k (37.9 ns) よりむしろ良い — splat 数が増えるほど per-splat 効率は上がる (fixed cost の償却)。裏を返すと \u003Cstrong>msplat の 33.4 ns との残差 ~9% は fixed cost ではなく kernel 効率の差\u003C\u002Fstrong>である可能性が高く、1× 工程表 v2 の残工程 (W3\u002FW4\u002FW5) の期待値と整合する。","参考: 別途取得した Activity Monitor GPU history の digitize (\u003Ccode>docs\u002Ffindings\u002Fdata\u002Fgpu-util-histogram-20260817\u002F\u003C\u002Fcode>) では、\u003Cstrong>msplat 側に深い dip が 8 本 (block 幅の 40.5%)、本実装側は 3 本 (2.8%)\u003C\u002Fstrong> と出ており、本実装のほうが GPU を連続的に埋めていることを定性的に裏づける。ただしこれは screenshot の pixel 解析なので\u003Cstrong>数値としては引用せず、傾向の傍証に留める\u003C\u002Fstrong>。",{"type":76,"text":370},"6. エネルギー — 勝ったが、機構が入れ替わっている",{"type":79,"columns":372,"align":381,"rows":382,"caption":421},[373,374,375,376,377,84,378,379,380],"run","steady GPU W","±sd","steady CPU W (参考)","package W (参考)","GPU J","package J","P15 residency",[92,93,93,93,93,93,93,93,93],[383,391,399,407,415],[96,384,385,386,387,99,388,389,390],"30.42","2.78","2.06","32.48","5,040","5,381","74.0%",[107,392,393,394,395,109,396,397,398],"28.67","1.73","1.86","30.53","4,388","4,672","94.6%",[117,400,401,402,403,118,404,405,406],"29.68","2.03","2.18","31.87","4,859","5,218","65.7%",[125,408,409,410,411,126,412,413,414],"30.09","2.05","1.58","31.67","4,583","4,824","94.4%",[416,417,130,418,419,224,328,420,130],"**mean 比 (splat\u002Fmsplat)**","**0.978×**","0.811×","0.967×","**0.896×**","\u003Ccode>splat power-sample --interval 5\u003C\u002Fcode> を workload と併走させ (sampler duration = splat 135s \u002F msplat 150s)、\u003Cstrong>GPU W が peak の 50% を超えた最初のサンプル以降\u003C\u002Fstrong>を steady 区間として時間加重平均 (counter session と同一の判定)。\u003Cstrong>測定の限界 (要開示)\u003C\u002Fstrong>: sampler は run の\u003Cstrong>先頭側\u003C\u002Fstrong>しか覆っておらず coverage は \u003Cstrong>splat 88.4% \u002F msplat 91.1%\u003C\u002Fstrong> と非対称、J は steady W を train elapsed 全長に外挿して算出している (n=2)。両実装とも W は run 後半で上昇する (末尾 3 サンプル: splat 29.5\u002F32.5 W、msplat 30.8\u002F31.5 W) ため\u003Cstrong>この外挿は両者の W を過小評価\u003C\u002Fstrong>し、coverage の非対称ぶんだけ splat 側を余計に過小評価する = \u003Cstrong>比を良く見せる向きのバイアス\u003C\u002Fstrong>。末尾 3 サンプルで未覆区間を補正し直すと \u003Cstrong>GPU energy 0.909×\u003C\u002Fstrong> (補正前 0.906×) で、結論は動かない。なお prologue 側の懸念 (Python import で msplat の W が下がる) は該当せず — 両者とも第 1 サンプルから 20〜28 W に乗っており、むしろ最も低い第 1 サンプル (20.72 W) は splat 側にある。idle 床は GPU 0.03〜0.04 W で clean。\u003Cstrong>CPU \u002F package 列は IOReport が SoC-wide なので参考値\u003C\u002Fstrong>。P-state residency は本実装が P15 に 94.4〜94.6% 居座り、msplat は 65.7〜74.0% (残りは P14 = 電力上限による降格) — counter session の H3 判定 (DVFS で損をしているのは msplat 側) は最終スタックでも維持。",{"type":71,"label":423,"variant":340,"text":424},"エネルギー主張の書き換え (counter session からの申し送りの更新)","counter session は「W 比 0.704× でも wallclock が 1.273× 長いので GPU energy 0.897× \u002F package energy 1.062× に留まり、\u003Cstrong>卒論 §5 で電力効率を主張軸にはできない\u003C\u002Fstrong>」と結論していた。最終スタックでは \u003Cstrong>W 比が 0.978× (ほぼ同電力) に上がった代わりに wallclock が 0.927× になり、GPU energy 0.906× \u002F package energy 0.896×\u003C\u002Fstrong> と\u003Cstrong>両方とも勝ちに転じた\u003C\u002Fstrong>。数値だけ見ると GPU energy は 0.897× → 0.906× でほぼ動いていないが、\u003Cstrong>成立機構は「GPU を遊ばせているぶん低電力」から「同じ電力で早く終わる」へ完全に入れ替わっている\u003C\u002Fstrong>。S3 が busy を 77.5 → 91.3% に上げた以上、低 W 側の説明は今後も復活しない。卒論では \u003Cstrong>「W が低いから省エネ」ではなく「同電力枠で早く終わるから省エネ」\u003C\u002Fstrong>と書く。なお energy は n=2 の参考値であり、gate 値ではない。",{"type":76,"text":426},"7. 計測 protocol — 何が clean で何を破棄したか",{"type":363,"items":428},[429,430,431,432,433],"\u003Cstrong>block 1 (公式断面) は完全に clean\u003C\u002Fstrong>: 4 run すべて窓内 load1 avg 2.67〜3.82 \u002F max ≤5.28。かつ 12.5k n=2 mean 152.68s は\u003Cstrong>前 session (S3 gate) の depth2 n=3 mean 151.70s を +0.65% で再現\u003C\u002Fstrong>しており、session を跨いだ健全性が確認できている。","\u003Cstrong>破棄 1 件\u003C\u002Fstrong>: block 2 の 30,000 iter r1 (498.27s) は窓内 load1 avg 5.61 \u002F max 8.81 で汚染。block 3 で厳格 quiesce (LOAD_LIMIT=3.4) 下に再測し \u003Cstrong>479.91s (-3.7%)\u003C\u002Fstrong> を採用。PSNR は 36.440 → 36.455 とほぼ不変で、\u003Cstrong>load 汚染は wallclock のみを殴る\u003C\u002Fstrong>ことが確認できた。","\u003Cstrong>session 後半の drift を検出\u003C\u002Fstrong>: block 2 末尾以降の 12.5k bracket は 164.94 \u002F 168.05 \u002F 162.78s と block 1 の 152.68s より \u003Cstrong>+6.6〜10.1%\u003C\u002Fstrong> 遅い。原因は (a) 途中で背景に Discord 通話が乗り (Discord Helper 32% CPU + WindowServer 24% + coreaudiod 14%)、(b) 8 分連続 GPU 稼働 (30k run) 後の thermal。\u003Cstrong>厳格 quiesce 下の r5 でも +6.6% 残った\u003C\u002Fstrong>ので thermal 寄与が主。","\u003Cstrong>drift は msplat をほとんど殴らない\u003C\u002Fstrong>: msplat は 165.65 \u002F 163.73 \u002F 166.33 \u002F 165.97s と全 session で σ 0.6% に収まる。本実装は P15 に 94% 居座る (= thermal headroom を使い切っている) のに対し、msplat は既に電力上限で P14 に落ちているぶん thermal に鈍い。\u003Cstrong>後半 thermal 帯での gap は 162.78 \u002F 166.15 = 0.979×\u003C\u002Fstrong> — 0.927× は cold-ish start 条件の値であり、\u003Cstrong>連続稼働下では優位が ~5 pt 縮む\u003C\u002Fstrong>。卒論では 0.927× を公式値としつつこの脚注を付ける。","\u003Cstrong>protocol 教訓\u003C\u002Fstrong>: LOAD_LIMIT=4.5 の事前 gate は今回の汚染を通してしまった (汚染が gate 通過\u003Cstrong>後\u003C\u002Fstrong>に始まったため)。捕まえたのは \u003Cstrong>run 窓内 load1 の連続記録\u003C\u002Fstrong>のほうで、S3 gate round 1 の破棄と同じ形。\u003Cstrong>事前 gate だけでは不十分、窓内記録が必須\u003C\u002Fstrong>という規約を維持する。",{"type":76,"text":435},"8. eval convention coupling — 前回の結論は最終スタックでも不変",{"type":363,"items":437},[438,439,440,441],"\u003Cstrong>各実装は自分の学習 convention で勝つ\u003C\u002Fstrong>: msplat native (white) 36.563 → brush cross-eval q8 33.04〜34.24 で \u003Cstrong>-2.3〜-3.5 dB\u003C\u002Fstrong>。本実装 brush 36.18 → white cross-eval 35.15 で \u003Cstrong>-1.03 dB\u003C\u002Fstrong>。同一 evaluator・同一 renderer でもこの符号反転は消えない (p1-a-3 の再実証)。","\u003Cstrong>msplat の brush 値は q8 (clamp 込み) が公式\u003C\u002Fstrong>: no-quant では raw float の overshoot で 21.2〜21.6 dB まで崩壊する (前回と同様)。本実装は overshoot がほぼなく q8 差 +0.03 dB。","\u003Cstrong>msplat の brush cross-eval は run 間分散が大きい\u003C\u002Fstrong>: n=4 で 33.038 \u002F 33.857 \u002F 34.118 \u002F 34.243 (幅 1.21 dB)。native では 36.554〜36.575 (幅 0.02 dB) なので、\u003Cstrong>convention mismatch 下の cross-eval が分散を増幅する\u003C\u002Fstrong>という前回の観察が n=4 で確認された。matched-PSNR (brush) の判定は\u003Cstrong>保守側に倒して max (34.243) を基準\u003C\u002Fstrong>にしてある。","\u003Cstrong>white cross-eval の測定条件\u003C\u002Fstrong>: 本実装 renderer で両 PLY を描画し 8-bit RGBA PNG 経由で α 合成 → white GT と比較。msplat native (msplat renderer、float) 36.563 に対し同 PLY で 36.272 — renderer 差 + 8-bit 量子化で -0.29 dB。この penalty は両実装の PLY に同じ経路を通すことで対称化されている。",{"type":76,"text":443},"9. 再現手順",{"type":445,"lang":446,"text":447},"code","bash","# msplat 環境 (wheel v1.1.3、torch 不要)\nuv venv msplat-venv --python 3.12\nuv pip install --python msplat-venv\u002Fbin\u002Fpython \"msplat==1.1.3\" numpy pillow\n\n# dataset 変換 (blender lego → nerfstudio 形式、white-bg composite + culled init.ply 5207 点)\nLEGO=\u002FUsers\u002Fotkrickey\u002Fdev\u002F3dgs-workspace\u002Fdatasets\u002Fnerf_synthetic\u002Flego\npython docs\u002Fstrategy\u002Fmsplat_parity_lego.py convert --lego $LEGO --out \u002Ftmp\u002Flego-ns\n\n# block 1: interleave ABAB (各 run の前に load quiesce、窓内 load1 を 5s 間隔で記録)\npython docs\u002Fstrategy\u002Fmsplat_parity_lego.py train --dataset \u002Ftmp\u002Flego-ns --lego $LEGO \\\n  --iters 30000 --out-ply msplat-30k-r1.ply            # → 165.65s \u002F 36.554 dB\n( cd splat && .\u002Ftarget\u002Frelease\u002Fsplat train \\\n  --config configs\u002F2026-08-17-final-parity-12500-r1.toml )   # → 153.03s \u002F 36.215 dB\n# (msplat r2, splat 12500-r2 を同様に)\n\n# block 2\u002F3: matched 断面 (13300 \u002F 6000) と Pareto 天井 (30000-r2、厳格 quiesce)\n# 電力は workload と併走: .\u002Ftarget\u002Frelease\u002Fsplat power-sample --duration 135 --interval 5 --output pw.toml\n\n# cross-eval (同一 evaluator)\npython docs\u002Fstrategy\u002Fmsplat_parity_lego.py convert-ply --inp msplat-30k-r1.ply --out msplat-30k-r1-brush.ply\nsplat\u002Ftarget\u002Frelease\u002Fsplat eval --ply msplat-30k-r1-brush.ply --dataset $LEGO \\\n  --split val --convention brush --quantize-8bit\nsplat\u002Ftarget\u002Frelease\u002Fsplat eval --ply splat\u002Fruns\u002Ffinal-parity-12500-r1\u002Ffinal.ply \\\n  --dataset $LEGO --split val --convention brush\n# white-bg cross-eval は 3dgs-workspace\u002Fmsplat-parity-20260817\u002Fwhite_eval.py\n",{"type":76,"text":449},"10. 卒論への反映と申し送り",{"type":363,"ordered":451,"items":452},true,[453,454,455,456,457,458,459],"\u003Cstrong>§5 direct comparison 表を本 finding の数値で確定\u003C\u002Fstrong>: msplat Lego 30K = 165.42s \u002F native 36.563 dB (n=4)、本実装 Lego 12.5k = 152.68s \u002F brush 36.177 dB (n=2)。gap 0.927×。2026-08-16 の 2.10× と 2026-06 spike の 219.8s は「実行条件が異なる過去値」として脚注化。","\u003Cstrong>「速い」と書けるようになった\u003C\u002Fstrong>: wallclock は convention 非依存の指標であり、matched-wallclock 断面 (13.3k = 1.007×) も取れているので、\u003Cstrong>『同一 wallclock 予算で brush convention の PSNR が +1.94 dB 高い』\u003C\u002Fstrong>という書き方が可能。ただし matched-iteration (30K vs 30K で 2.888× 遅い) を隠さず併記すること — 本実装の主張は「同じ iter を速く回す」ではなく「少ない iter で同じ品質に届く Pareto 点を持つ」である。","\u003Cstrong>品質軸の主張は据え置き\u003C\u002Fstrong>: PSNR の単純優位は依然 convention 依存 (brush +1.97 \u002F white -1.10) なので主張軸にしない。品質側の contribution は materials robustness (msplat 8.80 dB 破綻 vs 本実装 29.97 dB、convention 非依存) と convention 明示性のままとする。","\u003Cstrong>エネルギー節を書き換える\u003C\u002Fstrong>: counter session の「主張軸にできない」は最終スタックで覆った (GPU 0.906× \u002F package 0.896×) が、\u003Cstrong>機構は『低 W』から『短時間』へ入れ替わっている\u003C\u002Fstrong>。この入れ替わり自体が「bubble を潰すと W は上がるが energy は下がる」という Apple Silicon 固有の設計トレードオフの実測例として §5 に書ける。","\u003Cstrong>throughput の脚注を更新\u003C\u002Fstrong>: 「per-splat·iter で 2.6 倍遅い」は撤回し、\u003Cstrong>1.135× (near-parity)\u003C\u002Fstrong> に差し替える。残る ~13.5% は 1× 工程表 v2 の未着手工程 (W3\u002FW4\u002FW5) の余地。","\u003Cstrong>Pareto plot v3 の再生成\u003C\u002Fstrong>: \u003Ccode>docs\u002Fstrategy\u002Fmake_msplat_pareto.py\u003C\u002Fcode> の入力を本 finding の 4 点 (6.0k \u002F 12.5k \u002F 13.3k \u002F 30k) + msplat n=4 mean に更新する (未実施)。","\u003Cstrong>thermal 脚注\u003C\u002Fstrong>: 0.927× は interleave 直後 (相対的に cool) の値で、連続稼働帯では 0.979× まで縮む。卒論に載せる際はこの帯域を脚注に置く。",[461,473,479,485,491,497,505,513,519],{"id":44,"title":44,"subtitle":462,"date":9,"workspace":463,"tags":464,"verdict":468,"psnr":469,"psnr_unit":-1,"wallclock":470,"splats":471,"summary_url":472,"detail_path":472},"msplat parity (最終スタック) — Lego 12500 iter、profile=false","splat",[5,465,466,467],"msplat-parity","final-stack","lego-12500","partial",36.21466064453125,"2m 33s",407501,"\u002Fruns\u002Ffinal-parity-12500-r1\u002F",{"id":45,"title":45,"subtitle":462,"date":9,"workspace":463,"tags":474,"verdict":468,"psnr":475,"psnr_unit":-1,"wallclock":476,"splats":477,"summary_url":478,"detail_path":478},[5,465,466,467],36.138099670410156,"2m 32s",408111,"\u002Fruns\u002Ffinal-parity-12500-r2\u002F",{"id":46,"title":46,"subtitle":462,"date":9,"workspace":463,"tags":480,"verdict":468,"psnr":481,"psnr_unit":-1,"wallclock":482,"splats":483,"summary_url":484,"detail_path":484},[5,465,466,467],36.18965530395508,"2m 44s",411192,"\u002Fruns\u002Ffinal-parity-12500-r3\u002F",{"id":47,"title":47,"subtitle":462,"date":9,"workspace":463,"tags":486,"verdict":468,"psnr":487,"psnr_unit":-1,"wallclock":488,"splats":489,"summary_url":490,"detail_path":490},[5,465,466,467],36.214622497558594,"2m 48s",408521,"\u002Fruns\u002Ffinal-parity-12500-r4\u002F",{"id":48,"title":48,"subtitle":462,"date":9,"workspace":463,"tags":492,"verdict":468,"psnr":493,"psnr_unit":-1,"wallclock":494,"splats":495,"summary_url":496,"detail_path":496},[5,465,466,467],36.12696075439453,"2m 42s",405173,"\u002Fruns\u002Ffinal-parity-12500-r5\u002F",{"id":49,"title":49,"subtitle":498,"date":9,"workspace":463,"tags":499,"verdict":468,"psnr":501,"psnr_unit":-1,"wallclock":502,"splats":503,"summary_url":504,"detail_path":504},"msplat parity (最終スタック) — Lego 13300 iter、profile=false",[5,465,466,500],"lego-13300",36.15409851074219,"2m 45s",414205,"\u002Fruns\u002Ffinal-parity-13300\u002F",{"id":51,"title":51,"subtitle":506,"date":9,"workspace":463,"tags":507,"verdict":468,"psnr":509,"psnr_unit":-1,"wallclock":510,"splats":511,"summary_url":512,"detail_path":512},"msplat parity (最終スタック) — Lego 30000 iter、profile=false",[5,465,466,508],"lego-30000",36.44008255004883,"8m 18s",468527,"\u002Fruns\u002Ffinal-parity-30000\u002F",{"id":52,"title":52,"subtitle":506,"date":9,"workspace":463,"tags":514,"verdict":468,"psnr":515,"psnr_unit":-1,"wallclock":516,"splats":517,"summary_url":518,"detail_path":518},[5,465,466,508],36.45530319213867,"7m 59s",467752,"\u002Fruns\u002Ffinal-parity-30000-r2\u002F",{"id":50,"title":50,"subtitle":520,"date":9,"workspace":463,"tags":521,"verdict":468,"psnr":523,"psnr_unit":-1,"wallclock":145,"splats":524,"summary_url":525,"detail_path":525},"msplat parity (最終スタック) — Lego 6000 iter、profile=false",[5,465,466,522],"lego-6000",34.889984130859375,319452,"\u002Fruns\u002Ffinal-parity-6000\u002F",[527,557,578,593,616,637],{"id":55,"title":528,"date":9,"status":10,"polarity":529,"category":11,"axes":530,"tags":531,"task_code":540,"related_runs":541,"delta_psnr":552,"delta_wallclock":553,"rank":62,"verdict":554,"impact_summary":555,"detail_path":556},"S3 iteration pipelining depth 2 — 12.5k -18.1% \u002F busy 78 → 91% (default flip)","positive",[14,16],[18,532,533,534,535,536,537,538,27,539],"s3","iteration-pipelining","command-buffer","gpu-busy","sync-tax","double-buffering","scratch-generation","unified-memory","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2' (S3 gate)",[542,543,544,545,546,547,548,549,550,551],"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":57,"title":558,"date":559,"status":10,"polarity":12,"category":11,"axes":560,"tags":561,"task_code":568,"related_runs":569,"delta_psnr":573,"delta_wallclock":574,"rank":62,"verdict":575,"impact_summary":576,"detail_path":577},"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×)","2026-08-16",[14,16],[562,535,563,564,25,565,566,19,28,29,567],"counter-session","ioreport","power","dvfs","p-state","negative","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #1",[570,571,572],"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":54,"title":579,"date":559,"status":10,"polarity":12,"category":11,"axes":580,"tags":581,"task_code":584,"related_runs":585,"delta_psnr":588,"delta_wallclock":589,"rank":62,"verdict":590,"impact_summary":591,"detail_path":592},"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,15],[582,583,19,20,21,22,23,24,27,28,29],"gap-sweep","phase-3","2026-08 msplat gap sweep Phase 3 (parity 再計測)",[586,587],"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":56,"title":594,"date":559,"status":10,"polarity":529,"category":11,"axes":595,"tags":596,"task_code":603,"related_runs":604,"delta_psnr":611,"delta_wallclock":612,"rank":62,"verdict":613,"impact_summary":614,"detail_path":615},"S2 forward 1 CB 化 — replay -12〜13% \u002F busy 69 → 80% (default flip)",[14,16],[18,597,598,534,599,600,601,535,536,602,27,539],"s2","forward-chained","hierarchical-scan","indirect-dispatch","radix-sort","bit-exact","2026-08 1× 工程表 v2 — AC 復帰後 計測 queue #2 (S2 gate)",[605,606,607,608,609,610],"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":58,"title":617,"date":618,"status":10,"polarity":12,"category":619,"axes":620,"tags":621,"task_code":630,"related_runs":631,"delta_psnr":632,"delta_wallclock":633,"rank":62,"verdict":634,"impact_summary":635,"detail_path":636},"Phase H Lego Pareto sweep — stop_iter=10000 で brush dominate、12500 で Phase D dominate (Lego)、ただし scene-dependent 確定","2026-05-26","audit",[14],[622,623,624,625,626,627,628,629],"p1-axis1","phase-h","pareto-sweep","stop-iter","sh-progressive","scene-dependent","lego-detail","calibration","P1 Phase H",[],"**Lego stop_iter=12500 = +0.15 dB** vs Phase D 30k、ficus 同 config = **-4.12 dB の fail**","**Lego stop_iter=12500 = -71% wallclock** vs Phase D 30k","scene-dependent-confirmed-future-work-scene-adaptive","Phase G で G.3 alone 30k = universal Pareto improvement (+0.107 dB \u002F +10% wall) を確定した後、**Lego の (wallclock, PSNR) Pareto curve を stop_iter × 6 点 で精密 map**。\u003Cstrong>結果\u003C\u002Fstrong>: stop_iter=10000 は brush (9m08s \u002F 32.04 dB) を完全 Pareto-dominate (8m42s \u002F 35.931 dB = **同時間で +3.89 dB**)、stop_iter=12500 は Phase D 30k (41m54s \u002F 36.106 dB) を Pareto-dominate (11m48s \u002F 36.259 dB = **-71% wallclock + 0.15 dB**)、stop_iter=17500 以降は marginal +0.1 dB のみで diminishing returns 顕著。\u003Cstrong>anomaly\u003C\u002Fstrong>: stop_iter=25000 が 36.092 dB と 20000 (36.359) より -0.27 dB 低い (variance or training instability の可能性)。\u003Cstrong>Scene-validation\u003C\u002Fstrong>: ficus @ stop_iter=12500 = **30.103 dB** (Phase D 34.22 比 -4.12 dB の大幅 fail)、**Lego sweet spot が scene-dependent と確定**。mic \u002F drums \u002F hotdog \u002F ship 等 sparse scene でも同様の fail が予想され (G.1 stacked パターンと整合)、universal config では Phase G.3 alone 30k が依然 best。\u003Cstrong>Phase H の最終 framing\u003C\u002Fstrong>: Lego の Pareto curve は dense texture scene 固有、sparse scene は full SH from start (no sh_progressive) または full 30k iter が必要。\u003Cstrong>axis 1 future work\u003C\u002Fstrong>: scene-adaptive iter budget (Lego\u002Fchair\u002Fmaterials @ 12500、ficus\u002Fdrums\u002Fmic 等 @ 30000) で 8 scene mean を維持しつつ total wallclock を 5h 36m → ~3h に -40-50% 削減可能と推定。","\u002Ffindings\u002Fp1-axis1-phase-h-lego-pareto-sweep\u002F",{"id":59,"title":638,"date":639,"status":10,"polarity":567,"category":11,"axes":640,"tags":641,"task_code":652,"related_runs":653,"delta_psnr":655,"delta_wallclock":656,"rank":62,"verdict":657,"impact_summary":658,"detail_path":659},"P1.A.3 cross-eval reproducer — brush convention で 24.879 → 1.67 dB に崩壊、主仮説 falsify","2026-05-24",[14,15,16],[642,643,644,645,646,647,648,649,650,651],"p1","phase-a","milestone-m1","brush-parity","eval","convention","psnr","premultiplied","reproducer","falsified-hypothesis","P1.A.3 + P1.A.4",[654],"lego-sh3-30k (splat-rs 24.879 dB legacy\u002Fval)","-23.21 dB (brush convention 化で 24.879 → 1.667)","N\u002FA (eval only)","hypothesis-falsified-stronger-finding","splat-rs `final.ply` (24.879 dB legacy\u002Fval baseline) を brush 準拠 convention (premultiplied GT + bg=ZERO 比較 + 8-bit roundtrip) で再評価すると **1.67 dB に崩壊**。audit §6 が予測した +3〜+5 dB 底上げと逆方向に -23 dB。原因は trainer が white-bg target で学習されており、背景領域を opaque-white splat で埋めるよう収束した結果、brush 流の bg=ZERO 比較では背景 pixel 全体で MSE≈1 が systematic に乗る。`view_00.png` 目視確認 (背景は白い不透明領域) で機構を確定。**training と eval の convention は coupling しており、eval pipeline だけ揃える apparent-gap 仮説は不成立**。卒研 P1.M2\u002FM3 に向けては「training loss も brush 化 (RGBA 4ch L1 を α=0 領域で背景に penalty を吹かさない構造)」が必須要件。8-bit quantize 単体の impact はほぼ無視可能 (legacy 24.879 → 24.879、brush 1.605 → 1.667、+0.06 dB)。","\u002Ffindings\u002Fp1-a-3-cross-eval-reproducer\u002F",1790227326540]