松田研究室
FindingID: a-10-kahan-negative
Status: stable / task A.10
← Findings Index
Negative finding · MSL compiler

A.10 Kahan summation — Metal compiler が compensator を最適化消去

per-pixel RGB 累積に Neumaier 形式を入れたが、MSL compiler に compensator term が消されて loss / PSNR が baseline と bit-identical に。Kahan は wallclock overhead だけ残り variance reduction 効果ゼロ。

negativerank: lowrejected第 3 軸phase-5kahanmetal-compilervariancemsl
Δ PSNR
0
Δ Wallclock
+0.5% (overhead のみ)
Δ Loss
bit-identical
Impact
Neumaier compensated summation の compensator term は MSL compiler の algebraic optimization で消去され、loss は bit-identical。Kahan は wallclock overhead だけ残し variance reduction 効果ゼロ。
01

本文

forward/rasterize.metal の per-pixel RGB 累積に Neumaier compensated summation を入れたが、Metal Shading Language compiler の algebraic optimization で compensator term (s - pix_out) - y が完全に消去され、loss / PSNR が baseline と bit-identical になった。Kahan は wallclock overhead だけ残し、variance reduction 効果ゼロ。

実装日
2026-05-23
前提 baseline
lego-sh3-30k 24.879 dB / 23m13s / 83,734 splats, seed=42

実験プロトコル

  1. render_splats_f32 (Phase 4 training forward) の per-pixel 累積を Neumaier 形式に書き換え
  2. 同じ config (configs/2026-05-23-0510-kahan-500smoke.toml、500 iter, seed=42, sh=3, lego, capacity=1M) を Kahan ON と OFF で別 binary 実行: ON = pix_out を Neumaier 累積、OFF = 元の pix_out += term
  3. log_every=50 で iter 1/50/100/.../500 の loss を比較、val PSNR も比較
float3 y = term - pix_out_c;
float3 s = pix_out + y;
pix_out_c = (s - pix_out) - y;
pix_out = s;

結果

iterKahan ON lossKahan OFF lossΔ
10.345340.345340
500.117880.117880
1000.098890.098890
5000.026830.026830
全 iter で完全一致 — Neumaier の compensator が compile 時に消えていることを示す

原因仮説

Metal Shading Language の compiler (Apple LLVM ベース) は浮動小数算術の結合則を仮定して subexpression を簡約する。Neumaier 補正項 (s - pix_out) - y は数学的には 0 ではないが、algebraic 変形では 0 と等価扱いされ、最適化で完全に消去された可能性が高い。-fno-fast-math 相当の pragma があれば抑止できるが、Metal にはこの粒度の制御がない。

Lesson

GPU compiler は数値安定化目的の compensator を保護しない。compile-after の MSL を逆アセンブルして消されていないか確認する手順を、今後の variance 抑制施策では必須にする。

02

関連する run

この finding が観測された / 言及している実験 run。

© 2026 大竹律輝 — 松田研究室