Phase G compute reduction family の試行。**3 layer の結果検証** で headline が変化: (1) Lego 5k smoke で -13.9% wallclock + cascading splat -22% を観測したが (2) Lego 30k full では wallclock -2%、splats **+30%**、PSNR **+0.28 dB** — 5k smoke の cascading 効果は refine.stop_iter=1500 による artifact、30k では sh unlock (iter 3000) 後 refine が iter 15000 まで継続 → splats baseline より多く grow。(3) **G.1 + G.3 stacked (max_steps=15000 + sh_progressive)** で Lego 16m13s / 36.254 dB / 428k splats = Phase D 比 **-61% wallclock + 0.15 dB 改善** で **Pareto sweet spot**。**Key mechanism reframe**: sh_progressive は「speed win」ではなく「**quality improvement at no speed cost**」、stacked variant で early stop の speed と SH warmup の quality gain を統合。Phase F 5 連続 falsification + G.3 5k smoke artifact = audit overestimate 6 例目という calibration data。
[trainer.sh_progressive] section (default disabled、全 backward compat)、CameraGpu struct を sh_degree (buffer layout) と active_sh_degree (per-iter eval) に分離。Calibration data point: Phase F 5 連続 falsification + G.3 5k smoke artifact = audit / smoke overestimate 6 例目、「smoke は production scale を representative しない」が新教訓。8 scene chain validation pending。卒論 narrative: Phase F (kernel-level fail) → G.2 (architectural insight) → G.3 (algorithmic reframe: speed → quality + stacked Pareto) の 3 family 比較で「Apple Silicon native 最適化は algorithmic compute reduction + early stop の組み合わせが Pareto-optimal」という構造的 calibration。Phase G compute reduction family の G.3 (SH-progressive growth) を 3 layer で検証: (1) 5k smoke で -13.9% wallclock + cascading splat -22% を観測、(2) 30k full では wallclock -2% / splats +30% / PSNR +0.28 dB に変化 (5k smoke の cascading は refine.stop_iter=1500 artifact)、(3) G.1 (15k early stop) + G.3 stacked で Lego 16m13s / 36.254 dB / Pareto sweet spot (Phase D 比 -61% wallclock + 0.15 dB)。Phase F + G の audit/smoke 6 連続 overestimate calibration を踏まえ「production scale でも valid な Pareto improvement は **stacked variant**」と確定。
G.1 (early stop @ 15k) + G.3 (sh_progressive) stacked で Lego 16m13s / 36.254 dB / 428k splats、Phase D 30k (41m54s / 36.106 dB / 375k splats) 比 **-61% wallclock + 0.15 dB PSNR 改善** の Pareto sweet spot。機構: sh_progressive warmup (iter 0-3000、active SH 0→2) で early refine が低周波 表現に focus → better-conditioned splat base、その上で iter 3000-15000 = full SH + refine 並列 → final 428k splats が Phase D 30k の 375k splats より quality-conditioned。G.1 alone (35.690 dB) より +0.56 dB、Phase D alone (36.106) より +0.15 dB、両方上回り。5k smoke の -13.9% は misleading artifact: refine.stop_iter=1500 で splat 動態が production scale と全く違うため、cascading splat reduction が過大評価された。30k full では wallclock -2% / splats +30% / PSNR +0.28 dB と全く違う profile。cherry-pick 済 (main commit 5267464 + b4fb0e6)、default disabled (opt-in only)、bit-exact 11 unit tests pass で zero regression risk。8 scene chain validation pending。
| config | wallclock | PSNR | splats | vs Phase D |
|---|---|---|---|---|
| **brush (reference)** | 9m08s | 32.04 dB | 282k | -65% wall / -4.07 dB |
| **Phase D 30k baseline** | 41m54s | 36.106 dB | 375k | baseline |
| G.1 alone (15k, no sh) | 14m31s | 35.690 dB | 335k | -65% wall / -0.42 dB |
| G.3 alone (30k, sh_progressive) | 41m07s | 36.384 dB | 487k | -2% wall / **+0.28 dB** |
| **G.1+G.3 stacked (15k + sh_prog)** | **16m13s** | **36.254 dB** | 428k | **-61% wall / +0.15 dB ✨** |
| metric | baseline (F.1) | sh-progressive (G.3) | Δ | 解釈 |
|---|---|---|---|---|
| **total wallclock** | **112.28s** | **96.70s** | **-13.9%** | **Phase F 5 falsify 後、初の clean win** |
| TOTAL kernel sum | 168.523s | 141.800s | -15.9% | 全 kernel cascading speedup の集約 |
| ts_forward (全体) | 61.562s | 50.512s | -17.9% | SH eval skip + splats 削減 |
| ts_fwd_emit_pairs/call | 4.706 ms | 3.337 ms | **-29%** | splats -22% で sort key 生成 work 削減 (二次効果) |
| ts_backward_raster/call | 4.516 ms | 3.691 ms | **-18.3%** | splats -22% で per-pixel atomic 削減 |
| ts_fwd_radix_sort/call | 4.744 ms | 4.204 ms | -11.4% | pair 数 -22% で sort work 削減 |
| ts_fwd_rasterize/call | 1.994 ms | 1.802 ms | -9.6% | SH eval skip + splats -22% |
| ts_ssim_fwd_grad/call | 2.678 ms | 2.723 ms | +1.7% (noise) | SSIM は splat 数非依存、noise 圏 |
| **PSNR** (100 view mean) | **31.629** | **31.509** | **-0.12 dB** | **許容範囲** (5k smoke variance ±0.1 dB 程度) |
| **final splats** | 82,338 | **64,330** | **-22%** | **cascading 効果の root**: 早期表現力制限で refine grow 抑制 |
| metric | 5k smoke | 30k full | stacked 15k | interpretation |
|---|---|---|---|---|
| wallclock | -13.9% | -1.9% | **-61%** (G.1 効果が dominant) | 5k は cascading で過大評価、30k で reality |
| splats | -22% | **+30%** | +14% (G.3 quality + G.1 stop の中間) | 5k は refine.stop_iter=1500 で grow 抑制、30k は full SH iter 3000+ で grow 加速 |
| PSNR | -0.12 dB | **+0.28 dB** | +0.15 dB | 5k は表現力不足で drift、30k はちょうど quality 改善、stacked は中間 |
| headline framing | speed win | **quality win** | **Pareto sweet spot** | production scale で G.3 は speed ではなく quality 改善 |
splat-train-v1/src/config.rs): [trainer.sh_progressive] section、init: u32 (default 0) / max: u32 (default 0) / unlock_interval: u32 (default 0 = disabled)。enabled()=unlock_interval > 0、active_for_iter(iter)=min(init + (iter-1)/interval, max)splat-core/src/types.rs): sh_degree (buffer layout = param.sh_degree) と active_sh_degree (per-iter eval) の 2 field、96 → 100 bytessplat-metal/src/kernels/project.rs): GpuProjector::project_soa / project_soa_buf / ProjectBackwards::dispatch / dispatch_from_buf に _active suffix override、legacy API 保持splat-train-v1/src/trainer.rs + train_loop.rs): train_step に active_sh_degree arg、train_loop で schedule disabled → param.sh_degree 固定、enabled → cfg.sh_progressive.active_for_iter(it)p1-axis1-metal-opt-audit (G.3 = P1.G re-attack)、p1-d-multi-scene-rechain (Phase D baseline)p1-axis1-phase-f1-emit-simd-falsified、p1-axis1-phase-f3-radix-gpu-prefix-falsified、p1-e-refine-gpu-smoke、p1-axis1-target-cachep1-axis1-phase-g2-brush-dispatch-architecturechapter-5-4-negative-findings (Phase F + G の Apple Silicon native 最適化 ROI 階層化 paragraph)この finding が観測された / 言及している実験 run。