[{"data":1,"prerenderedAt":252},["ShallowReactive",2],{"finding:a-10-variance-baseline":3,"finding-runs:a-10-variance-baseline":161,"finding-related:a-10-variance-baseline":197},{"meta":4,"impact":32,"sections":37},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":15,"task_code":22,"related_runs":23,"related_findings":28},"a-10-variance-baseline","A.10 variance baseline — σ ±0.32 dB \u002F range 0.885 dB を実測","同 seed=42 \u002F 同 binary \u002F 同 config で M-3.x lego sh3 30k を 4 回 run、PSNR の variance σ ±0.32 dB (range 0.885 dB)、wallclock σ ±2.4%。原因は SIMD atomic 順序非決定性、Kahan summation で解決不可。A.10 Negative finding (a-10-kahan-negative) の前提を実証。","Negative finding · GPU non-determinism","2026-05-23","stable","experiment","negative",[14],3,[16,17,18,19,20,21],"phase-5","variance","gpu-non-determinism","kahan","atomic","apple-silicon","A.10",[24,25,26,27],"lego-sh3-30k","lego-variance-trial1-30k","lego-variance-trial2-30k","lego-variance-trial3-30k",[29,30,31],"a-10-kahan-negative","a-7-icb-batching-results","a-7-multi-scene-batched",{"summary":33,"rank":34,"verdict":10,"delta_psnr":35,"delta_wallclock":36},"M-3.x lego sh3 30k の PSNR variance は σ ±0.32 dB \u002F range 0.885 dB (4 run estimate)、wallclock variance は σ ±2.4% \u002F range 5.2%。原因は SIMD backward kernel の atomic_fetch_add 順序非決定性で、A.10 Kahan で消えない (compensator も bit-identical のところ)。卒論 finding として「Apple Silicon の variance band は数値精度の問題でなく GPU scheduler 由来」と確定。","high","σ ±0.32 dB \u002F range 0.885 dB","σ ±2.4% \u002F range 5.2%",[38,41,56,59,109,111,113,116,118,120,122,124,126,128,137,139,144,149,151,153,155],{"type":39,"text":40},"lead","\u003Ca href=\"\u002Ffindings\u002Fa-10-kahan-negative\">A.10 Kahan finding\u003C\u002Fa> で「Kahan は MSL compiler に消える」と分かったが、本来の motivating problem 「\u003Cstrong>M-3.x の variance ±0.6 dB\u003C\u002Fstrong>」が真に GPU 非決定性由来かは未確定だった。本実験で同 seed=42 \u002F 同 binary \u002F 同 config を 4 回 run、PSNR variance を直接測定し \u003Cstrong>σ ±0.32 dB \u002F range 0.885 dB\u003C\u002Fstrong> を確定。",{"type":42,"items":43},"kv",[44,47,50,53],{"key":45,"value":46},"実施日","2026-05-23 Phase C (bench chain Phase C)",{"key":48,"value":49},"config","configs\u002F2026-05-23-1000-lego-variance-trial{1,2,3}-30k.toml + baseline lego-sh3-30k",{"key":51,"value":52},"seed","42 (全 run 固定)",{"key":54,"value":55},"binary","main HEAD (a3cbfce A.9\u002FA.10 changes 適用後)",{"type":57,"text":58},"heading","実測値 (n=4 含 baseline)",{"type":60,"columns":61,"align":67,"rows":70,"caption":108},"table",[62,63,64,65,66],"run","PSNR (dB)","wallclock","Δ vs mean PSNR","Δ vs mean wall",[68,69,69,69,69],"left","right",[71,77,83,89,95,100,104],[72,73,74,75,76],"baseline (lego-sh3-30k)","24.879","23m13s (1393s)","+0.045","+47.5s",[78,79,80,81,82],"trial1 (lego-variance-trial1)","24.858","22m08s (1328s)","+0.024","-17.5s",[84,85,86,87,88],"trial2 (lego-variance-trial2)","24.356","22m01s (1321s)","-0.478","-24.5s",[90,91,92,93,94],"trial3 (lego-variance-trial3)","25.241","22m20s (1340s)","+0.407","-5.5s",[96,97,98,99,99],"**mean**","**24.834**","**22m18s (1345.5s)**","—",[101,102,103,99,99],"**σ**","**±0.315**","**±31.6s (±2.4%)**",[105,106,107,99,99],"**range**","**0.885**","**72s (5.2%)**","PSNR variance σ ±0.32 dB は advisor 助言 (±0.6 dB) と range 整合的。wallclock variance ±2.4% は GPU scheduler \u002F thermal 状態の影響と推測。",{"type":57,"text":110},"原因分析",{"type":57,"level":14,"text":112},"(1) SIMD backward の atomic_fetch_add 順序非決定性",{"type":114,"text":115},"paragraph","\u003Ccode>shaders\u002Fbackward\u002Frasterize_backwards.metal\u003C\u002Fcode> の \u003Ccode>rasterize_backwards_simd\u003C\u002Fcode> kernel は per-pixel × per-splat の gradient を \u003Ccode>atomic_fetch_add\u003C\u002Fcode> で集約。dispatch 順序が GPU scheduler 任せのため、同一 input でも累積順が iter ごとに微妙に変わる。これが iter 累積で gradient drift → refine 判定 → splat 数差 → PSNR drift というフィードバックを生む。",{"type":57,"level":14,"text":117},"(2) refine の grad_threshold が boundary 付近で flip",{"type":114,"text":119},"refine は \u003Ccode>|grad| > grad_threshold (2.0e-7)\u003C\u002Fcode> で split\u002Fclone を決定する。GPU 非決定性で grad が threshold 付近に来た splat が trial ごとに「split される \u002F されない」で flip → final splats 数差 → PSNR drift。",{"type":57,"level":14,"text":121},"(3) Kahan summation が解決にならない理由",{"type":114,"text":123},"A.10 Kahan は \u003Cstrong>forward の per-pixel RGB 累積\u003C\u002Fstrong>を Neumaier 化した。しかし variance の主因は (1) backward の atomic 非決定性 + (2) refine boundary の flip で、forward の数値精度ではない。Kahan が compiler に消されなかったとしても、variance は減らない。",{"type":57,"text":125},"A.7 \u002F A.9 finding 再評価",{"type":114,"text":127},"variance σ ±0.32 dB を「有意性判定の noise floor」とすると:",{"type":129,"items":130},"list",[131,132,133,134,135,136],"\u003Cstrong>A.7 lego -6.16% wall\u003C\u002Fstrong>: wallclock variance ±2.4% を 2.5x 超え、有意","\u003Cstrong>A.7 lego -0.302 dB PSNR\u003C\u002Fstrong>: PSNR variance σ ±0.32 を \u003Cstrong>下回る\u003C\u002Fstrong>、variance band 内 — 独立 effect 断定不可","\u003Cstrong>A.7 hotdog -0.828 dB PSNR\u003C\u002Fstrong>: σ の 2.6x、有意 (高品質シーンで drift が顕在化)","\u003Cstrong>A.7 ficus -1.6% wall\u003C\u002Fstrong>: wallclock variance ±2.4% を下回る、variance 内","\u003Cstrong>A.9 f16 forward -10.0 dB\u003C\u002Fstrong>: σ の 31x、圧倒的有意 (Negative finding 確定)","\u003Cstrong>A.10 Kahan bit-identical\u003C\u002Fstrong>: variance ±0.32 dB の下では「Kahan の効果」も「無効果」も検出不可、ただし compile-time に消えた事実は確定",{"type":57,"text":138},"Solution (defer)",{"type":129,"items":140},[141,142,143],"backward の atomic_fetch_add を non-atomic な reduction (warp shuffle + 後段 atomic 1 回) に書き換える — A.7 part 2 候補、wallclock penalty 可能性 + PSNR drift 解消 trade-off","refine grad_threshold boundary を hysteresis 化 — flip 抑止、ただし refine の design intent と乖離","lr_schedule を seed dependent に確定 — variance を完全排除するには Adam の RNG (gradient noise なし) と全 atomic 削除が必要、scope 大",{"type":145,"label":146,"variant":147,"text":148},"callout","Lesson","warn","GPU 上の \u003Cstrong>floating point + atomic\u003C\u002Fstrong> は同 input でも実行ごとに異なる結果を生む。Variance を抑えたければ atomic 不使用設計か、結果を「mean ± σ」で報告する慣習を採用すべき。本研究では後者を採用 — central table の数字は今後 mean ± σ で記載 (現状 single-run の数字は variance 内とみなす)。",{"type":57,"text":150},"卒論への含意",{"type":114,"text":152},"D.3 Negative findings 章に「数値精度 vs GPU 非決定性」のストーリーを追加。Kahan で variance が消えなかった事実は、本研究の variance 主因が \u003Cstrong>algorithm の数値安定性ではなく実行環境 (GPU scheduler)\u003C\u002Fstrong> にあると示す。これは Apple Silicon に限らず CUDA でも同様 (gsplat の bench でも同様の variance 報告あり)、本研究で得られた generic な finding。",{"type":57,"text":154},"関連",{"type":129,"items":156},[157,158,159,160],"A.10 Kahan Negative finding: \u003Ccode>a-10-kahan-negative\u003C\u002Fcode> — Kahan 試行の経緯","A.7 ICB batched 実装: \u003Ccode>a-7-icb-batching-results\u003C\u002Fcode> — variance を考慮した有意性判定","A.7 × multi-scene 結果: \u003Ccode>a-7-multi-scene-batched\u003C\u002Fcode> — scene 依存性 -1.6% 〜 -18.6%","D.3 Negative findings 章: \u003Ccode>negative-findings-chapter\u003C\u002Fcode>",[162,172,179,186],{"id":25,"title":25,"subtitle":163,"date":9,"workspace":164,"tags":165,"verdict":167,"psnr":168,"psnr_unit":-1,"wallclock":169,"splats":170,"summary_url":171,"detail_path":171},"A.10 variance baseline trial 1\u002F3 (seed=42 固定で GPU 非決定性のみ観測)","splat",[166,25],"auto-bench","partial",24.858051300048828,"22m 7s",84149,"\u002Fruns\u002Flego-variance-trial1-30k\u002F",{"id":26,"title":26,"subtitle":173,"date":9,"workspace":164,"tags":174,"verdict":167,"psnr":175,"psnr_unit":-1,"wallclock":176,"splats":177,"summary_url":178,"detail_path":178},"A.10 variance baseline trial 2\u002F3 (seed=42 固定で GPU 非決定性のみ観測)",[166,26],24.356151580810547,"22m 0s",83079,"\u002Fruns\u002Flego-variance-trial2-30k\u002F",{"id":27,"title":27,"subtitle":180,"date":9,"workspace":164,"tags":181,"verdict":167,"psnr":182,"psnr_unit":-1,"wallclock":183,"splats":184,"summary_url":185,"detail_path":185},"A.10 variance baseline trial 3\u002F3 (seed=42 固定で GPU 非決定性のみ観測)",[166,27],25.241147994995117,"22m 20s",86423,"\u002Fruns\u002Flego-variance-trial3-30k\u002F",{"id":24,"title":24,"subtitle":187,"date":188,"workspace":164,"tags":189,"verdict":167,"psnr":193,"psnr_unit":-1,"wallclock":194,"splats":195,"summary_url":196,"detail_path":196},"A.8 SH degree ablation — sh_degree=3 (DC only, no view-dependence)","2026-05-22",[190,191,192,16],"sh-ablation","lego-30k","sh-3",24.87872886657715,"23m 13s",83734,"\u002Fruns\u002Flego-sh3-30k\u002F",[198,211,230],{"id":29,"title":199,"date":9,"status":10,"polarity":12,"category":11,"axes":200,"tags":201,"task_code":22,"related_runs":204,"delta_psnr":205,"delta_wallclock":206,"rank":207,"verdict":208,"impact_summary":209,"detail_path":210},"A.10 Kahan summation — Metal compiler が compensator を最適化消去",[14],[16,19,202,17,203],"metal-compiler","msl",[24],0,"+0.5% (overhead のみ)","low","rejected","Neumaier compensated summation の compensator term は MSL compiler の algebraic optimization で消去され、loss は bit-identical。Kahan は wallclock overhead だけ残し variance reduction 効果ゼロ。","\u002Ffindings\u002Fa-10-kahan-negative\u002F",{"id":30,"title":212,"date":9,"status":10,"polarity":213,"category":11,"axes":214,"tags":215,"task_code":221,"related_runs":222,"delta_psnr":224,"delta_wallclock":225,"rank":226,"verdict":227,"impact_summary":228,"detail_path":229},"A.7 batched cmd buffer — wallclock -6.2% 改善 + PSNR drift -0.30 dB","positive",[14],[16,216,217,218,219,21,220],"icb","command-buffer","batching","metal","results","A.7",[24,223],"lego-a7-batched-30k","-0.302 dB (24.577 vs 24.879)","-6.16% (1307.26s vs 1393s = -85.74s)","mid","accepted","scope B 限定版 (forward 末尾の extract_offsets + rasterize.forward を 1 cmd buffer、backward chain の rasterize.backward + project_backwards を 1 cmd buffer) を env SPLAT_BATCHED_FORWARD=1 で活性化。30k bench で wallclock -6.2% \u002F PSNR drift -0.30 dB、Mildly positive。期待 -6〜-12% の下限、Apple Silicon の commit overhead が予想より小さい示唆。","\u002Ffindings\u002Fa-7-icb-batching-results\u002F",{"id":31,"title":231,"date":9,"status":10,"polarity":232,"category":11,"axes":233,"tags":234,"task_code":221,"related_runs":239,"delta_psnr":248,"delta_wallclock":249,"rank":34,"verdict":167,"impact_summary":250,"detail_path":251},"A.7 × multi-scene — batching 効果は scene 依存 (-1.6% 〜 -18.6% で 12x の幅)","mixed",[14],[16,235,216,236,237,238,21],"a-7","batched","multi-scene","scene-dependency",[240,241,242,243,244,245,246,247,24,223],"chair-30k","chair-batched-30k","ficus-30k","ficus-batched-30k","drums-30k","drums-batched-30k","hotdog-30k","hotdog-batched-30k","+0.130 dB 〜 -0.828 dB (mean -0.21 dB)","-1.6% 〜 -18.6% (mean -7.0%)","A.7 batched cmd buffer の wallclock 改善は scene 依存で chair -18.6% \u002F hotdog -5.4% \u002F drums -3.4% \u002F ficus -1.6% \u002F lego -6.16% の 5 シーン (12x の幅)。chair の突出は splat 数最大 (~130k) + scene geometry の compute\u002Fcommit ratio が高いことが要因と推測。一方 ficus \u002F drums は variance 範囲内、独立 effect 断定不可。卒論で「A.7 effective ≠ universal、scene 選択 + workload analysis 必須」と honest framing。","\u002Ffindings\u002Fa-7-multi-scene-batched\u002F",1782449788617]