[{"data":1,"prerenderedAt":142},["ShallowReactive",2],{"finding:m4-brush-bench":3,"finding-runs:m4-brush-bench":109,"finding-related:m4-brush-bench":124},{"meta":4,"impact":27,"sections":34},{"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":25},"m4-brush-bench","M4 Max 上 brush (wgpu→Metal) の 30k baseline — wgpu 抽象は自作より速かった","Phase 2d。同じ M4 Max マシンで brush を wgpu→Metal で 30k 学習させ、PSNR 37.40 dB \u002F 9m08s。自作 Metal 直 (M-3 = 26.27 dB \u002F 26m32s) より高速 + 高品質。wgpu 抽象化 = 自動的に遅い、という想定が崩れた。","Phase 2d · M4 brush bench","2026-05-23","stable","experiment","mixed",[14],2,[16,17,18,19,20,21],"phase-2","brush","wgpu","baseline","m4-max","abstraction-cost","A.3",[24],"lego-sh3-30k",[26],"c32-orig3dgs-bench",{"summary":28,"rank":29,"verdict":30,"delta_psnr":31,"delta_wallclock":32,"delta_splats":33},"wgpu 抽象は自作 native より遅いはず、という想定が逆。同一 M4 Max 上で brush (wgpu) が 9m08s \u002F 37.40 dB、自作 (Metal 直) が 26m32s \u002F 26.27 dB。第 2 軸 (抽象コスト定量化) の主張を再 framing する必要が確定。","high","investigative","+11.13 dB (brush 比優位)","−65.6% (brush の方が速い)","282k vs 84k",[35,38,58,61,87,89,92,97,99,106],{"type":36,"text":37},"lead","M4 Max 上で \u003Cstrong>brush (wgpu → Metal backend)\u003C\u002Fstrong> を Lego 30k で完走させ、PSNR \u003Ccode>37.40 dB\u003C\u002Fcode> \u002F wallclock \u003Ccode>9m08s\u003C\u002Fcode> \u002F 282k splats を観測。同じハードで自作 Metal 直の M-3 baseline は \u003Ccode>26.27 dB \u002F 26m32s \u002F 84k splats\u003C\u002Fcode> なので、wgpu 抽象は \u003Cem>自作より速く + 高品質\u003C\u002Fem>。",{"type":39,"items":40},"kv",[41,43,46,49,52,55],{"key":42,"value":9},"実行日",{"key":44,"value":45},"machine","M4 Max 36GB unified memory",{"key":47,"value":48},"brush version","git rev (M4 Max ローカル checkout)",{"key":50,"value":51},"dataset","Lego (NeRF Synthetic)",{"key":53,"value":54},"iter","30,000",{"key":56,"value":57},"seed","42",{"type":59,"text":60},"heading","結果サマリ",{"type":62,"columns":63,"align":68,"rows":71},"table",[64,65,66,67],"impl","PSNR (dB)","wallclock","final splats",[69,70,70,70],"left","right",[72,77,82],[73,74,75,76],"brush (wgpu→Metal)","37.40","9m08s","282,103",[78,79,80,81],"自作 (Metal 直 M-3)","26.27","26m32s","83,734",[83,84,85,86],"差分","+11.13","-65.6%","+3.4×",{"type":59,"text":88},"従来想定と finding の方向",{"type":90,"text":91},"paragraph","Phase 1A での brush bench (PSNR 37.38 \u002F 6m24s) は M4 Max 同条件で参考値として確立されていた。第 2 軸 (wgpu 抽象コスト定量化) は「自作 Metal 直 \u003C\u003C wgpu \u003C\u003C CUDA」という階層を仮定していたが、Phase 2d で wgpu \u003C 自作 Metal 直 (両方向) という想定逆転が確定した。",{"type":93,"label":94,"variant":95,"text":96},"callout","Re-framing 候補","warn","第 2 軸の主張を「wgpu の overhead を Metal 直で削減できる」から「自作 native の \u003Cem>欠落要素\u003C\u002Fem> (例: tile binning、bind group caching、shader cache の細かさ) を解明できる定量分析」に再 framing する必要あり。\u003Ccode>m4-brush-bench\u003C\u002Fcode> + \u003Ccode>c32-orig3dgs-bench\u003C\u002Fcode> + \u003Ccode>m4-self-bench\u003C\u002Fcode> の三層対比表で正面から扱う。",{"type":59,"text":98},"想定原因 (短評)",{"type":100,"items":101},"list",[102,103,104,105],"\u003Cstrong>tile binning\u003C\u002Fstrong>: brush は per-tile sort + culling を独自最適化、自作は naive prefix sum","\u003Cstrong>shader cache\u003C\u002Fstrong>: wgpu は内部で MTLLibrary を再利用、自作は毎 dispatch で encoder 再生成 (M-3 で軽減したが残存)","\u003Cstrong>refine schedule\u003C\u002Fstrong>: brush の densify (clone\u002Fsplit) は per-iter で動く軽量実装、自作は eval batch 単位","\u003Cstrong>SH eval\u003C\u002Fstrong>: brush は SIMD intrinsics + uniform buffer、自作は per-vertex shader (M-2 で SIMD 集約済みだが SH 専用 path 未対応)",{"type":93,"label":107,"text":108},"Next steps","(1) brush の MSL コードを逆アセンブル + per-kernel timing で同様の rasterize_backwards にあたる kernel を特定。(2) 自作 M-3 と benchmark 同一条件で再走 (M-3.x 損失計算 GPU 化後の差分も計測)。(3) 第 2 軸の論述を「優位性」ではなく「比較分析」に re-frame。",[110],{"id":24,"title":24,"subtitle":111,"date":112,"workspace":113,"tags":114,"verdict":119,"psnr":120,"psnr_unit":-1,"wallclock":121,"splats":122,"summary_url":123,"detail_path":123},"A.8 SH degree ablation — sh_degree=3 (DC only, no view-dependence)","2026-05-22","splat",[115,116,117,118],"sh-ablation","lego-30k","sh-3","phase-5","partial",24.87872886657715,"23m 13s",83734,"\u002Fruns\u002Flego-sh3-30k\u002F",[125],{"id":26,"title":126,"date":9,"status":10,"polarity":12,"category":11,"axes":127,"tags":128,"task_code":22,"related_runs":135,"delta_psnr":138,"delta_wallclock":139,"rank":29,"verdict":30,"impact_summary":140,"detail_path":141},"c32 V100 原著 3DGS 30k bench — A.5 三層対比表の最終 row & eval convention 乖離 finding",[14],[16,129,130,131,132,133,134,21],"original-3dgs","v100","c32","cuda","bench","eval-convention",[136,137],"orig3dgs-lego-1k-smoke","orig3dgs-lego-30k",28.384,"10m37s","原著 3DGS を V100 で 30k 学習 (PSNR 28.38 dB \u002F 10m37s \u002F 237k splats)。同 V100・同 30k で brush (wgpu→Vulkan) 8m24s \u002F 37.46 dB を上回れず、抽象コスト ≪ 実装最適化レベル を CUDA 機でも再確認。さらに codebase eval と paper-standard eval で 12 dB 乖離 (28.4 vs 14.6) を発見、A.5 表は eval convention 注記必須。","\u002Ffindings\u002Fc32-orig3dgs-bench\u002F",1782449788628]