[{"data":1,"prerenderedAt":566},["ShallowReactive",2],{"finding:phase5-step31-x-gpu-loss":3,"finding-runs:phase5-step31-x-gpu-loss":483,"finding-related:phase5-step31-x-gpu-loss":497},{"meta":4,"impact":32,"sections":38},{"id":5,"title":6,"subtitle":7,"eyebrow":8,"date":9,"status":10,"category":11,"polarity":12,"axes":13,"tags":15,"task_code":24,"related_runs":25,"related_findings":27},"phase5-step31-x-gpu-loss","Phase 5 #5.31.x — GPU loss kernel + no-readback pipeline (wallclock -26.9% + variance 解明)","host pump pipeline (= wgpu 抽象典型) を排除し forward → loss → backward を GPU buffer で連結。2k iter wallclock -26.9%、30k で -14〜-19% を 4 sample で再現。当初の PSNR -0.65 dB regression 主張は variance band 内と判明し撤回。第 3 軸 (Apple unified memory) narrative の核。","Phase 5 · M-3.x","2026-04-30","stable","speed","positive",[14],3,[16,17,18,19,20,21,22,23],"phase-5","m3x","gpu-loss","unified-memory","host-pump","variance","no-readback","metal","#5.31.x",[26],"lego-sh3-30k",[28,29,30,31],"phase5-step30-profile","phase5-step30b-timing","phase5-step31-encoding-profile","phase-c-migration-gate",{"summary":33,"rank":34,"verdict":35,"delta_psnr":36,"delta_wallclock":37},"host pump pipeline を排除し forward\u002Floss\u002Fbackward を GPU buffer で連結。2k iter wallclock -26.9% (42.5 → 31.07 ms\u002Fiter)、30k では n=4 variance test で wallclock -14〜-19% を再現。当初の PSNR -0.65 dB regression 主張は撤回 (band 25.0 ± 0.6 dB 内)。第 3 軸 (unified memory) narrative の核。","high","accepted","variance 内 (band 25.0 ± 0.6 dB)","-26.9% (2k) \u002F -14〜-19% (30k, n=4)",[39,42,65,68,75,77,79,83,85,87,89,112,114,116,148,150,201,203,236,241,243,248,252,254,257,284,286,288,290,292,298,300,302,304,339,344,346,348,350,352,354,377,379,381,383,385,388,390,392,398,400,405,407,411,413,415,421,423,446,448,455,457,459,481],{"type":40,"text":41},"lead","host pump pipeline (= wgpu 抽象典型) を排除し \u003Ccode>forward → loss → backward\u003C\u002Fcode> を GPU buffer で連結。2k iter で wallclock \u003Cstrong>-26.9%\u003C\u002Fstrong> (42.5 → 31.07 ms\u002Fiter)、30k では 4 sample variance test で wallclock \u003Cstrong>-14〜-19%\u003C\u002Fstrong> が再現。第 3 軸 (Apple unified memory) narrative の核となる成果。",{"type":43,"items":44},"kv",[45,47,50,53,56,59,62],{"key":46,"value":9},"実施",{"key":48,"value":49},"Hardware","M4 Max (36 GB unified memory)",{"key":51,"value":52},"設定","F config + L1+SSIM (λ=0.20, K=7) 2000 iter、iter 50 reset、iter 50-2000 集計",{"key":54,"value":55},"profile script","\u003Ccode>3dgs-rs\u002Fscripts\u002Fphase5\u002Frun_step31_x_gpu_loss_profile.sh\u003C\u002Fcode>",{"key":57,"value":58},"30k validation script","\u003Ccode>3dgs-rs\u002Fscripts\u002Fphase5\u002Frun_step31_x_gpu_loss_30k.sh\u003C\u002Fcode>",{"key":60,"value":61},"variance test script","\u003Ccode>3dgs-rs\u002Fscripts\u002Fphase5\u002Frun_step31_x_future_variance.sh\u003C\u002Fcode>",{"key":63,"value":64},"Logs","\u003Ccode>3dgs-rs\u002Fruns\u002Fphase5-step31-x*\u002F\u003C\u002Fcode> (gitignored)",{"type":66,"text":67},"heading","TL;DR (4 sample variance 解明後)",{"type":69,"ordered":70,"items":71},"list",true,[72,73,74],"\u003Cstrong>wallclock -26.9%\u003C\u002Fstrong> (42.5 → 31.07 ms\u002Fiter @ 2k iter)、30k で wallclock -14〜-19% (4 sample 計測)","\u003Cstrong>第 3 軸 (Apple unified memory) narrative の核\u003C\u002Fstrong> — host pump pipeline (= wgpu 抽象典型) を排除し、\u003Ccode>forward → loss → backward\u003C\u002Fcode> を GPU buffer で連結","当初の \"PSNR -0.65 dB regression\" 主張は撤回 — \u003Ccode>#5.31.x.future\u003C\u002Fcode> 4 sample variance test で n=1 の sample noise と判明、systematic regression ではない",{"type":66,"text":76},"設計 (advisor 5 点全反映)",{"type":66,"level":14,"text":78},"構造",{"type":80,"lang":81,"text":82},"code","text","forward_with_state ──→ ForwardState {\n                         rendered_buf: Some(Buffer),  \u002F\u002F 新フィールド\n                         rendered: Vec\u003Cf32>,           \u002F\u002F legacy 互換、L2 経路で使用\n                         ...\n                       }\n\niter 入口 (train_step):\n  target_buf = upload(target)              \u002F\u002F 1 回 \u002F iter\n  rendered_buf ─┐\n                ├─→ ssim.forward_and_grad_buf(rendered_buf, target_buf)\n                │       ├─→ work_grad: Buffer (Ref で返却)\n                │       └─→ mean_ssim: f32 (CPU sum、1.28 ms 残置)\n  target_buf ───┘\n                            │\n  rendered_buf ─┐           ▼\n                ├─→ loss_eval.compute_l1_combine_ssim(\n  target_buf ───┤              rendered_buf, target_buf, ssim_grad_buf, λ\n  ssim_grad_buf─┘            ) → (l1_loss: f32, dldr_buf: Ref\u003CBuffer>)\n                                              │\n  total_loss = (1-λ)·l1 + λ·(1-mean_ssim)    │\n                                              ▼\n  splats_grad: Vec = backward_rasterize_buf(fs, dldr_buf)\n                                              │\n                       (refine 用に readback、ここは将来 GPU 化)\n                                              ▼\n                                     project_backwards \u002F Adam\n",{"type":66,"level":14,"text":84},"2 つの新 kernel (advisor 推奨で branch flag 回避)",{"type":80,"lang":23,"text":86},"\u002F\u002F loss.metal\nkernel void loss_l1_only(\n    const device float* rendered, target,\n    constant LossUniforms& u,\n    device atomic\u003Cfloat>* loss_sum,\n    device float* dldr,\n    ...) {\n    \u002F\u002F dldr = sign(r-t)\u002FN\n    \u002F\u002F L1 reduction: simd_sum + warp atomic\n}\n\nkernel void loss_l1_combine_ssim(\n    const device float* rendered, target, ssim_grad,\n    constant LossUniforms& u,  \u002F\u002F λ included\n    device atomic\u003Cfloat>* loss_sum,\n    device float* dldr,\n    ...) {\n    \u002F\u002F dldr = (1-λ)·sign(r-t)\u002FN - λ·ssim_grad\n    \u002F\u002F L1 reduction 同様\n}\n",{"type":66,"level":14,"text":88},"advisor 5 点の対応",{"type":90,"columns":91,"align":94,"rows":96},"table",[92,93],"advisor 指摘","対応",[95,95],"left",[97,100,103,106,109],[98,99],"1. correctness checkpoint after L1 path","\u003Ccode>gpu_loss::tests::l1_only_matches_host\u003C\u002Fcode> (rel &lt;1e-3、per-element 一致 rate &lt;1e-4)、500 iter smoke で loss curve 一致確認",[101,102],"2. loss_sum_buf persist","\u003Ccode>LossEvaluator\u003C\u002Fcode> field に 4 bytes 1 回 alloc、毎 dispatch でゼロクリア",[104,105],"3. 2 kernel 分離","\u003Ccode>loss_l1_only\u003C\u002Fcode> と \u003Ccode>loss_l1_combine_ssim\u003C\u002Fcode> 別実装、warp divergence 排除",[107,108],"4. queue reuse 30k validation","M-2 25.79 dB → \u003Cstrong>26.27 dB (+0.48)\u003C\u002Fstrong> M-3 候補確定 (\u003Ccode>#5.31.0b\u003C\u002Fcode>)",[110,111],"5. L2 path","host fallback 残置 (本研究 production で未使用)、L2 GPU 化は future work",{"type":66,"text":113},"計測結果 (2000 iter F config @ Lego)",{"type":66,"level":14,"text":115},"Wallclock 比較",{"type":90,"columns":117,"align":124,"rows":126},[118,119,120,121,122,123],"指標","step 30b 初期","#5.31.0a (instr 追加)","#5.31.0b (queue reuse)","#5.31.x (GPU loss)","累積 delta",[95,125,125,125,125,125],"right",[127,134,141],[128,129,130,131,132,133],"wallclock 2000 iter","132.4 s","95.9 s","82.8 s","62.14 s","-53.1% vs step 30b",[135,136,137,138,139,140],"ms\u002Fiter","67.9 ms","49.2 ms","42.5 ms","31.07 ms","-54.2%",[142,143,144,145,146,147],"主要 wins","(baseline)","(no opt)","-13.7% queue reuse","-26.9% GPU loss","(累積)",{"type":66,"level":14,"text":149},"kernel 別 timing (新 path、抜粋)",{"type":90,"columns":151,"align":157,"rows":158},[152,153,154,155,156],"kernel","calls\u002Fiter","ms\u002Fcall","per-iter ms","旧比較",[95,125,125,125,95],[159,164,168,172,176,180,184,188,192,196],[160,161,162,162,163],"ts_forward (bucket)","1","16.08","-8% (17.52 → 16.08)",[165,161,166,166,167],"ts_loss_gpu (bucket)","11.91","-42% (旧 ts_loss_host 9.13 + ts_backward 11.62 = 20.75 を置換)",[169,161,170,170,171],"↳ ssim_fwd_bwd_buf","1.47","-48% (旧 ssim_fwd_bwd 2.84)",[173,161,174,174,175],"↳ ssim_cpu_mean_buf","1.01","-21% (旧 1.28、kernel 不要部分)",[177,161,178,178,179],"↳ loss_l1_combine","0.23","NEW (旧 host iterate 4.5 ms 置換)",[181,161,182,182,183],"↳ rasterize_backwards_simd_buf","8.51","-10% (旧 9.47、上流 readback なし → cache 圧縮)",[185,161,186,186,187],"ts_target_upload (NEW)","0.62","(NEW、target 共有のため必要)",[189,161,190,190,191],"ts_adam (bucket)","0.91","-4%",[193,161,194,194,195],"ts_project_back (bucket)","0.42","-23%",[197,198,198,199,200],"(encoder _enc 合計)","-","~0.18","(旧 0.34、queue reuse 効果)",{"type":66,"level":14,"text":202},"削減源の内訳",{"type":90,"columns":204,"align":207,"rows":208},[205,155,206],"削減項目","wallclock %",[95,125,125],[209,213,217,221,224,228,232],[210,211,212],"host loss + grad iterate (l1_loss + l1_loss_grad + grad combine)","-4.5 ms","-10.6%",[214,215,216],"ssim grad readback (host 経由)","-0.52 ms","-1.2%",[218,219,220],"ssim rendered\u002Ftarget re-upload (forward_and_grad 内部)","-0.7 ms","-1.6%",[222,223,216],"dldr buffer upload (host Vec → GPU)","-0.5 ms",[225,226,227],"target upload (centralized 1 回)","+0.62 ms","+1.5% (cost)",[229,230,231],"その他 (cache pressure 緩和、autoreleasepool)","-3.7 ms","-8.7%",[233,234,235],"net","-11.4 ms","-26.9%",{"type":237,"label":238,"variant":239,"text":240},"callout","推定 (その他 -3.7 ms)","info","\"その他\" の 3.7 ms 削減は推定: host iterate を排除すると CPU L2\u002FL3 cache が解放され、Metal driver の事前準備や autorelease pool churn も軽くなる。step 30b → step 31.0b で見られた「naive 1.14 ms → 実測 6.7 ms (autoreleasepool 圧縮)」と同根。",{"type":66,"text":242},"Gate 判定 (pre-commit)",{"type":69,"items":244},[245,246,247],"pre-commit gate: \u003Cstrong>wallclock ≥ 3% 改善\u003C\u002Fstrong> (= ≤41.2 ms\u002Fiter)","結果: \u003Cstrong>31.07 ms\u002Fiter、-26.9% wallclock = gate 9 倍\u003C\u002Fstrong>","PASS、本実装を採用",{"type":237,"label":249,"variant":250,"text":251},"Honest accept","success","advisor 注意通り: gate culture (F\u002FG で 4 連続 \u002F 3 連続失敗) を維持しつつ、想定値 (-16〜19%) を上振れる結果を出せた。これは F\u002FG の honest reject と対称な「honest accept」事例。",{"type":66,"text":253},"30k validation 結果 (初回 n=1)",{"type":255,"text":256},"paragraph","\u003Cstrong>初期 30k validation\u003C\u002Fstrong> (2026-04-30、commit \u003Ccode>22411d2\u003C\u002Fcode> binary):",{"type":90,"columns":258,"align":262,"rows":263},[118,259,260,261],"値","M-2 比","M-3 (#5.31.0b queue reuse) 比",[95,125,125,125],[264,269,274,279],[265,266,267,268],"val PSNR","25.140 dB","-0.65 dB","-1.13 dB",[270,271,272,273],"val SSIM","0.9022","-0.0067","-0.0084",[275,276,277,278],"学習時間","1297 s = 21m37s","-28% (vs 30m M-2)","-18.5% (vs 26m32s M-3)",[280,281,282,283],"final splats","79,654","-967","-5,699",{"type":255,"text":285},"当初は「PSNR -0.65 dB regression」と判定、speed\u002Fquality tradeoff として記録した。\u003Cstrong>しかしこれは n=1 sample で短絡した結論\u003C\u002Fstrong>。\u003Ccode>#5.31.x.future\u003C\u002Fcode> で 4 sample variance test を行い、\u003Cstrong>この regression 主張は撤回された\u003C\u002Fstrong> (次節)。",{"type":66,"text":287},"30k variance test (#5.31.x.future で regression 主張を撤回)",{"type":66,"level":14,"text":289},"動機",{"type":255,"text":291},"advisor 推奨で deep numerical analysis を実施。\u003Ccode>#5.31.x.future\u003C\u002Fcode> の最初の hypothesis は「f32 reduction order が training trajectory を狂わせている」だったが、diagnostic で:",{"type":69,"ordered":70,"items":293},[294,295,296,297],"\u003Cstrong>iter 1 dldr per-element\u003C\u002Fstrong>: GPU vs HOST で \u003Cstrong>bit-exact match\u003C\u002Fstrong> (2,560,000 elements 全て一致)","\u003Cstrong>iter 1 ssim_grad per-element\u003C\u002Fstrong>: 同じく \u003Cstrong>bit-exact match\u003C\u002Fstrong>","\u003Cstrong>logged loss scalar\u003C\u002Fstrong>: GPU 3.4371e-1 vs HOST 3.4327e-1 (+0.128% systematic offset) — simd_sum + warp atomic_fetch_add vs sequential left-fold の f32 reduction order 差、ただし表示用で訓練には影響なし","\u003Cstrong>同 GPU path 2 回実行\u003C\u002Fstrong>: iter 1-700 完全一致、\u003Cstrong>iter 800 から refine 結果 divergence\u003C\u002Fstrong> — rasterize_backwards_simd の atomic_fetch_add は warp 順序非決定、refine state accumulator が iter 500-1500 の間に微小差を蓄積、iter 800 の refine 判定で異なる split\u002Fclone を選択 → 軌道分岐",{"type":255,"text":299},"→ \u003Cstrong>dldr に GPU\u002FHOST 差はない、後段の atomic 非決定性が refine 累積を介して divergence を生む\u003C\u002Fstrong>。これは GPU\u002FHOST 両 path 共通の挙動、\u003Ccode>#5.31.x\u003C\u002Fcode> 固有の問題ではない仮説。",{"type":66,"level":14,"text":301},"4 sample variance 計測",{"type":255,"text":303},"\u003Ccode>--force-host-loss\u003C\u002Fcode> flag を追加 (commit \u003Ccode>330c48a\u003C\u002Fcode>)、同 binary で GPU\u002FHOST 切替 A\u002FB が可能に。4 つの 30k validation を実施 (全て同 seed 42、同 F config):",{"type":90,"columns":305,"align":311,"rows":312},[306,307,308,265,309,310,275],"#","binary","path","SSIM","splats",[125,95,95,125,125,125,125],[313,320,325,332],[161,314,315,316,317,318,319],"e2611df (queue reuse only)","host","26.268 dB","0.9106","85,353","26m32s",[321,322,323,266,271,281,324],"2","22411d2 (GPU loss 追加)","gpu","21m37s",[326,327,315,328,329,330,331],"3","330c48a (--force-host-loss)","24.855 dB","0.9005","82,185","25m48s",[333,334,323,335,336,337,338],"4","330c48a (default)","25.467 dB","0.9053","81,326","22m51s",{"type":69,"items":340},[341,342,343],"\u003Cstrong>range\u003C\u002Fstrong>: 26.27 - 24.86 = \u003Cstrong>1.41 dB\u003C\u002Fstrong>","\u003Cstrong>mean\u003C\u002Fstrong>: 25.43 dB","\u003Cstrong>stddev\u003C\u002Fstrong>: ~0.61 dB",{"type":66,"level":14,"text":345},"重要な観察",{"type":255,"text":347},"\u003Cstrong>観察 1: 同 binary \u003Ccode>330c48a\u003C\u002Fcode> 内で GPU &gt; HOST\u003C\u002Fstrong> (sample #4 vs #3) — HOST: 24.855 dB \u002F GPU: 25.467 dB (+0.612 dB) → \u003Cstrong>当初の「GPU が host より劣る」という命題は反証\u003C\u002Fstrong>された。",{"type":255,"text":349},"\u003Cstrong>観察 2: 同 path (host) 別 binary で 1.41 dB 差\u003C\u002Fstrong> (sample #1 vs #3) — \u003Ccode>e2611df\u003C\u002Fcode> host: 26.27 dB \u002F \u003Ccode>330c48a\u003C\u002Fcode> host: 24.86 dB → \u003Cstrong>同じコード経路でも binary 違いで 1.41 dB のばらつき\u003C\u002Fstrong>、atomic 非決定性が compile\u002Fscheduling を介して影響。",{"type":255,"text":351},"\u003Cstrong>観察 3: GPU path の wallclock は consistently 速い\u003C\u002Fstrong> — queue-reuse host (#1): 1592s (baseline) \u002F GPU r1 (#2): 1297s (-19%) \u002F HOST r1 (#3): 1548s (-3%、queue reuse 改善のみ) \u002F GPU r2 (#4): 1371s (-14%) → \u003Cstrong>GPU path は HOST path より 14-19% wallclock 短縮\u003C\u002Fstrong> (4 sample で再現)。",{"type":66,"level":14,"text":353},"結論 (撤回 + 修正)",{"type":90,"columns":355,"align":359,"rows":360},[356,357,358],"項目","当初の主張","修正後 (4 sample 検証後)",[95,95,95],[361,365,369,373],[362,363,364],"GPU loss path PSNR","「-0.65 dB regression」","\u003Cstrong>n=1 sample variance 内、systematic regression ではない\u003C\u002Fstrong> 撤回",[366,367,368],"M-3 26.27 (queue reuse)","「lucky outlier の可能性」","n=1 で断定不能、\u003Cstrong>1.41 dB variance band の上端 sample\u003C\u002Fstrong> (これも撤回)",[370,371,372],"GPU vs HOST 同 binary","「GPU が劣る」","\u003Cstrong>GPU が +0.61 dB 高い\u003C\u002Fstrong> (sample #3 vs #4)",[374,375,376],"wallclock 改善","-28% (2k iter)","\u003Cstrong>-14〜-19% (30k 実測)\u003C\u002Fstrong> で確実",{"type":66,"level":14,"text":378},"M-3 採用判断",{"type":255,"text":380},"\u003Ccode>#5.31.0b\u003C\u002Fcode> queue reuse は \u003Cstrong>M-3 確定\u003C\u002Fstrong>: 30k で 26.27 dB を出した sample (#1) は variance band の上端だが、同 path 別 binary でも 24.86 dB (#3) なので、\u003Cstrong>期待 PSNR は ~25.4 dB ± 0.6 dB\u003C\u002Fstrong>。queue reuse 自体の \u003Cstrong>wallclock -13.7%\u003C\u002Fstrong> は本質的、コード変更は健在。",{"type":255,"text":382},"\u003Ccode>#5.31.x\u003C\u002Fcode> GPU loss path は \u003Cstrong>M-3 候補に再昇格\u003C\u002Fstrong> (mixed 撤回): PSNR は HOST path と同等 (variance 内、むしろ +0.61 dB 高い sample もある)、wallclock -14〜-19% (4 sample で再現)。ただし single sample の絶対 PSNR を milestone と呼ぶのは fragile、\u003Ccode>mean ± std\u003C\u002Fcode> での記述に切替。→ \u003Cstrong>M-3.x として記録、stat-based wallclock 改善を主張\u003C\u002Fstrong>。",{"type":66,"level":14,"text":384},"卒論記述案 (honest version)",{"type":237,"label":386,"variant":239,"text":387},"卒論記述案","30k val PSNR は 25.0 ± 0.6 dB の variance を持ち、これは \u003Ccode>rasterize_backwards_simd\u003C\u002Fcode> の \u003Ccode>atomic_fetch_add\u003C\u002Fcode> warp 順序非決定性が refine state accumulator (iter 500-1500) に compound することに起因する。同 binary \u003Ccode>330c48a\u003C\u002Fcode> での GPU loss path (n=1, 25.47) と HOST fallback (n=1, 24.86) の差は variance 内であり、speed\u002Fquality tradeoff は観測されなかった。wallclock 改善 (-14〜-19% over HOST、4 sample) は consistently 観測される、これが \u003Ccode>#5.31.x\u003C\u002Fcode> の主要寄与。",{"type":66,"text":389},"narrative 価値 (卒論章)",{"type":66,"level":14,"text":391},"第 3 軸 (Apple unified memory) — 直撃の貢献",{"type":69,"items":393},[394,395,396,397],"\u003Cstrong>brush (wgpu 経由)\u003C\u002Fstrong>: forward output → host Vec → upload to ssim → host Vec → upload to backward (=4 回 host pump)","\u003Cstrong>本実装 (Metal 直接 + StorageModeShared)\u003C\u002Fstrong>: forward → rendered_buf → ssim → ssim_grad_buf + loss → dldr_buf → backward (= 0 回 host pump)","\u003Cstrong>定量\u003C\u002Fstrong>: -11.4 ms\u002Fiter、wallclock -26.9%、Lego F config 2000 iter","\u003Cstrong>narrative\u003C\u002Fstrong>: 「unified memory が概念ではなく、実装の具体的な書き方で wallclock 性能に反映される」",{"type":66,"level":14,"text":399},"第 2 軸 (wgpu 抽象 vs 直接 Metal) — 補強",{"type":69,"items":401},[402,403,404],"wgpu の制約 (host vec 経由前提) なしで、Metal の \u003Ccode>MTLBuffer\u003C\u002Fcode> を直接設計に組み込んだ","ArgBuffer 単独 (\u003Ccode>#5.31\u003C\u002Fcode> original) では 0.5% 上限だったところ、no-readback で 26.9%","→ 「抽象コスト」は API 命令の overhead より、\u003Cstrong>API が前提とするデータフローパターン\u003C\u002Fstrong>にある",{"type":66,"level":14,"text":406},"第 1 軸 (native 実装) — 完成度補強",{"type":69,"items":408},[409,410],"M-1 (Phase 4 後続 25.59 dB) と並ぶ性能成果","\u003Ccode>kernel level\u003C\u002Fcode> (M-2 SIMD reduction 2.43×) と \u003Ccode>pipeline level\u003C\u002Fcode> (M-3 GPU loss -26.9%) の両方を分離して評価できる",{"type":66,"text":412},"卒論への活用",{"type":255,"text":414},"本 step は \u003Cstrong>mixed result\u003C\u002Fstrong> で、卒論には \u003Cstrong>「速度の big win + PSNR regression という二面性」\u003C\u002Fstrong> の事例として収録 (※ 後の 4 sample variance test で PSNR 主張は撤回):",{"type":69,"items":416},[417,418,419,420],"\u003Cstrong>2k iter wallclock -26.9%\u003C\u002Fstrong> (gate 9 倍): pipeline-level 最適化の有効性証明","\u003Cstrong>30k PSNR -0.65 dB\u003C\u002Fstrong>: f32 numerical drift が optimization trajectory に compound する事例 (※撤回済み)","第 3 軸 (unified memory) narrative の \u003Cstrong>設計的価値\u003C\u002Fstrong>は維持 (host pump 排除は実装上正しい)","「速度の改善が必ずしも PSNR を保つわけではない、特に学習系では数値再現性が重要」という卒論主張",{"type":255,"text":422},"F (scale_reg 失敗) \u002F G (MCMC 失敗) \u002F \u003Ccode>#5.31\u003C\u002Fcode> (ArgBuffer reject) の negative findings と、\u003Ccode>#5.31.0b\u003C\u002Fcode> (queue reuse +0.48 dB の純 win) の対比で「\u003Cstrong>測定して進める研究の typology\u003C\u002Fstrong>」が立つ:",{"type":90,"columns":424,"align":428,"rows":429},[425,426,427],"typology","例","卒論章",[95,95,95],[430,434,438,442],[431,432,433],"純 win (PSNR ≥ baseline + speed up)","#5.33 M-2 (SIMD 2.43×、PSNR +0.20)、#5.31.0b M-3 (queue reuse、PSNR +0.48)","主要成果",[435,436,437],"純 reject (gate 不通過)","#5.31 ArgBuffer (0.5% 上限)、#5.31.5 dispatch fusion、#5.33.b\u002Fc","negative findings",[439,440,441],"設計欠陥 reject","F (scale_reg formulation 3 失敗)、G (MCMC 4 失敗)","future work",[443,444,445],"mixed result (speed vs quality tradeoff)","#5.31.x GPU loss (-22.8% wallclock、PSNR -0.65) ※後に撤回","方法論章 (本 step)",{"type":255,"text":447},"#5.31 ArgBuffer の reject (0.5% 上限) と、#5.31.x の partial win (-22.8% wallclock、PSNR -0.65) を併せて「\u003Cstrong>ベンチマーク前提の自己検証 → bottleneck 同定 → 想定外の上振れ → 30k validation で PSNR 副作用検出\u003C\u002Fstrong>」 という方法論が立つ:",{"type":69,"ordered":70,"items":449},[450,451,452,453,454],"step 30 推定: ~30% が CPU encoding","step 31.0a 計測: encoder 部分は 1.4%、ArgBuffer reject","step 31.0b queue reuse: 13.7% wallclock (encoding ではなく queue 生成 + autoreleasepool)","step 31.0c 内訳計測: 真の bottleneck = host loss + readback (~10 ms)","step 31.x GPU loss + no-readback: -26.9% wallclock",{"type":255,"text":456},"= \u003Cstrong>「測ってから最適化し、何度も前提を更新した」5 段階の実証\u003C\u002Fstrong>",{"type":66,"text":458},"未着手 (#5.31.x.後続 \u002F future work)",{"type":90,"columns":460,"align":463,"rows":464},[356,461,462],"期待効果","工数",[95,95,95],[465,469,473,477],[466,467,468],"\u003Ccode>rendered.to_vec()\u003C\u002Fcode> skip in forward_with_state (L2 path 修正と引き換え)","-0.82 ms (-2%)","1-2 hr (L2 GPU kernel 化込み)",[470,471,472],"\u003Ccode>ssim_cpu_mean\u003C\u002Fcode> の GPU 化 (W·H·3 reduce kernel)","-1.0 ms (-2.5%)","1-2 hr",[474,475,476],"\u003Ccode>splats_grad\u003C\u002Fcode> readback の GPU refine 化","-0.05 ms (~0%)","refine の大規模 refactor",[478,479,480],"\u003Ccode>final_t\u003C\u002Fcode> \u002F \u003Ccode>splats2d\u003C\u002Fcode> \u002F \u003Ccode>sorted_idx\u003C\u002Fcode> \u002F \u003Ccode>tile_offsets\u003C\u002Fcode> の GPU 連結 (forward → backward)","~3-5 ms (推定)","2-4 hr (forward の戻り値 大幅変更)",{"type":255,"text":482},"合計潜在: 残り ~5 ms\u002Fiter、追加 -10〜15% wallclock 余地あり。本研究では \u003Ccode>#5.31.x\u003C\u002Fcode> の単独 win を採用、上記は future work 化。",[484],{"id":26,"title":26,"subtitle":485,"date":486,"workspace":487,"tags":488,"verdict":492,"psnr":493,"psnr_unit":-1,"wallclock":494,"splats":495,"summary_url":496,"detail_path":496},"A.8 SH degree ablation — sh_degree=3 (DC only, no view-dependence)","2026-05-22","splat",[489,490,491,16],"sh-ablation","lego-30k","sh-3","partial",24.87872886657715,"23m 13s",83734,"\u002Fruns\u002Flego-sh3-30k\u002F",[498,520,537,551],{"id":31,"title":499,"date":9,"status":10,"polarity":500,"category":501,"axes":502,"tags":505,"task_code":512,"related_runs":513,"delta_psnr":516,"delta_wallclock":517,"rank":34,"verdict":492,"impact_summary":518,"detail_path":519},"Phase C migration gate — splat workspace で M-3.x を再現する 30k 単発比較","mixed","validation",[503,504,14],1,2,[506,507,508,509,510,511],"phase-c","migration-gate","m4-max","splat-workspace","variance-band","30k","Phase C",[514,515],"m3x-30k-migration-gate","phase5-step31-x-30k","-0.16 dB (band 内)","+9.6% (23m40s vs 21m37s)","新 splat workspace は M-3.x の training quality (PSNR 24.842 dB) を variance band 内で再現、全 7 kernel + refine + Adam + eval + PLY save が動作。wallclock は +9.6% の軽微 regression (steady-state では +4%) で許容内。","\u002Ffindings\u002Fphase-c-migration-gate\u002F",{"id":28,"title":521,"date":9,"status":10,"polarity":500,"category":11,"axes":522,"tags":523,"task_code":529,"related_runs":530,"delta_psnr":-1,"delta_wallclock":532,"rank":533,"verdict":534,"impact_summary":535,"detail_path":536},"Phase 5 step 30 — Instruments \u002F Metal System Trace 分析結果",[14],[16,524,525,526,508,527,528],"step-30","instruments","metal-system-trace","profiling","fusion-reject","#5.30",[531],"phase5-step30","B-mini: -1% (noise floor)","mid","investigative","30s Metal System Trace で 14,909 encoder \u002F iter 40 encoder を観測。当初の「STIME 70% = sync overhead」解釈は B-mini プロト (scatter wait 削除、\u003C 1% 改善) で撤回。真の breakdown は GPU compute ~70% \u002F CPU encoding ~30%、dispatch fusion ROI は小さく Phase 4 後続 (C\u002FD\u002FF) 進行に戻る判断。","\u002Ffindings\u002Fphase5-step30-profile\u002F",{"id":29,"title":538,"date":9,"status":10,"polarity":12,"category":11,"axes":539,"tags":540,"task_code":546,"related_runs":547,"delta_psnr":-1,"delta_wallclock":-1,"rank":34,"verdict":35,"impact_summary":549,"detail_path":550},"Phase 5 step 30b — kernel-by-kernel timing 計測結果",[14],[16,541,542,543,544,508,545],"step-30b","kernel-timing","rasterize-backwards","atomic-bottleneck","hotspot","#5.30b",[548],"phase5-step30b","kernel-level GPU timer で rasterize_backwards が 24.1 ms\u002Fcall \u002F 52.1% total と確定 dominant。atomic float add が律速と判定し、step 33 SIMD prefix sum reduction prototype の最有力ターゲットを確定。期待 ROI は 50% 削減で iter -13%、80% 削減で -21%。","\u002Ffindings\u002Fphase5-step30b-timing\u002F",{"id":30,"title":552,"date":9,"status":10,"polarity":500,"category":11,"axes":553,"tags":554,"task_code":560,"related_runs":561,"delta_psnr":-1,"delta_wallclock":563,"rank":34,"verdict":492,"impact_summary":564,"detail_path":565},"Phase 5 #5.31 — CPU side profile + queue reuse 効果 + 真の bottleneck 同定",[504,14],[16,555,556,557,558,19,559,508],"step-31","arg-buffer","queue-reuse","readback","encoding-profile","#5.31",[562],"phase5-step31-profile","queue reuse: -13.7% \u002F ArgBuffer: 0.5% (reject)","ArgBuffer は CPU encoding 寄与 0.5% で 3% gate 不通過 → reject。queue reuse refactor 単独で -13.7% wallclock (1.14 ms\u002Fiter 削減が autorelease pool 圧縮を伴って効果増幅)。真の bottleneck は host-side loss compute + readback ~10.5 ms\u002Fiter (= 24-26% wallclock potential)、第 3 軸 narrative 最強の #5.31.x GPU loss kernel + no-readback を次着手に再定義。","\u002Ffindings\u002Fphase5-step31-encoding-profile\u002F",1782449788857]