松田研究室
FindingID: p3-kernel-share-drums
Status: stable / task 次フェーズ タスクリスト — 多 scene 検証 (drums per-kernel share)
← Findings Index
次フェーズ タスクリスト · 多 scene per-kernel share 検証 (drums)

drums (998k splats @30k, in-window 749k @12.5k) per-kernel share 実測 — share 構造は Lego とほぼ不変 (backward_raster 40.09% vs 40.07%)、絶対 ms/iter 差は binary vintage (S4b+C2) で汚染

`splat/configs/2026-08-31-c1-drums-12500-off-prof.toml` (submission=per_kernel/forward_submission=per_stage/pipelining=off、[backend] は c1v2 Lego config を移植) で drums 12.5k を 1 run。leaf 9 label の gpu_ms 合計 170.414242s は末尾 `[gpu] busy 170.414s` と<strong>誤差 0.24ms で一致</strong> (leaf 判定は union との一致で検算、p3-kernel-share-post-s3 と同じ規約)。<strong>backward_raster(+project_back) 40.09%</strong> > rasterize 14.94% > adam 15.52% > ssim 12.75% > radix 11.37% — Lego v2 (40.07/14.13/15.28/13.12/12.01%) と<strong>share は ±1.5pt 以内でほぼ一致</strong>。ただし in-window (12.5k 時点) の splat 数は drums 748,708 / Lego 404,652 で比 1.850倍 (30k 収束時の 998k/400k≈2.5倍とは別の数字)。ms/iter は全 kernel が drums で 1.17〜1.93倍に増加しており、splat-count に無関係なはずの ssim_fwd_grad も 1.446倍増 (1.202→1.738 ms/iter) — comparison 対象の binary vintage 差 (Lego v2 は a446f2c、drums は HEAD 3db33a8、間に S4b ssim_reduce=gpu default flip と C2 計装追加が入っている) による系統的な底上げが疑われ、絶対値比較は汚染されている。

mixedrank: mediumshare-structure-invariant-under-1.85x-splat-scale / absolute-ms-comparison-contaminated-by-binary-vintage第 1 軸第 3 軸p3-kernel-share-drumsmulti-scenedrumsper-kernel-gpu-mskernel-sharegpu-gatebinary-vintage-caveat
Δ PSNR
n/a (drums self-eval mean val PSNR 24.518 dB @12.5k — non-converged 途中経過、多 scene 退行チェックの正式値ではない。参照: multiscene-drums-30k baseline は 30k 収束時 27.217 dB)
Δ Wallclock
drums: train elapsed 249.77s (n=1) / Lego v2: 174.57s (n=1)。**両方とも production baseline とは比較しない** — submission=per_kernel/forward_submission=per_stage/pipelining=off の 3 重に非 production な測定専用 regime (busy% drums 68.3%、Lego v2 65.6%)。意味があるのは kernel 単体の gpu_ms とその share のみ
Impact
Lego で判断された今日の最適化候補が drums (998k splats @30k、Lego の 2.5倍) でも同じ share 構造で有効かを判定した。drums 12.5k を Lego v2 と同一 regime (submission=per_kernel/forward_submission=per_stage/pipelining=off) で 1 run 実測した結果、per-kernel share は Lego v2 とほぼ同一 (backward_raster 40.09% vs 40.07%、adam 15.52% vs 15.28%、rasterize 14.94% vs 14.13%、ssim 12.75% vs 13.12%、radix 11.37% vs 12.01% — 全 kernel で Δ≤1.5pt)。splat 数が 1.85倍 (in-window 748,708 vs 404,652) 違っても share 順位・構造がほぼ動かないという結果は、Lego で優先度付けした施策 (M3 系 backward・M4 radix・S4b ssim 等) の相対重要度が drums でも維持されることを示唆する。ただし絶対 ms/iter の比較は binary vintage 差で汚染されている — 比較対象の Lego v2 は commit a446f2c、drums は HEAD 3db33a8 で、間に S4b (ssim_reduce=gpu default flip) と C2 計装 (全 CB へ kernel timestamp 収集追加) が入っている。splat 数と無関係なはずの ssim_fwd_grad が 1.446倍 (1.202→1.738 ms/iter) 増えている一方、全 9 leaf kernel が揃って 1.17〜1.93倍という比較的均一な増加を示しており、これは純粋な splat-count scaling では説明しにくく、binary vintage (S4b/C2) 由来の系統的な底上げが乗っている可能性が高い。よって「share の相対構造」は信頼できるが「ms/iter の絶対値・scaling 係数」は次ラウンドで Lego 側も HEAD で撮り直すまで確定できない。
01

本文

drums (nerf_synthetic, 998k splats @30k 収束時 — Lego 30k の約 2.5倍、p1-axis1-phase-g-pareto-landscape §2) は本日の全最適化判断の根拠になった Lego per-kernel share (p3-kernel-share-post-s3 §6 v2) と splat 数の regime が大きく異なる。share 構造が splat 数に対して不変か — つまり Lego で優先した施策の順位が drums でも成り立つか — を 1 run 実測で判定する。

0. 計測 regime — c1v2 (Lego) と同一の逸脱・同一の理由

base config
`runs/multiscene-drums-30k/config.toml` (drums, G.3-alone 30k recipe) — [data]/[output]/[trainer]/[refine]/[adam] を継承
[backend] の出自
`2026-08-30-c1v2-12500-off-prof.toml` (Lego, M4/A7 後の per-kernel share 計測 config) の [backend] 節をそのまま移植: `submission = per_kernel` / `forward_submission = per_stage` / `pipelining = off` / `profile = true` / `binning = resident` / `raster_backward_range = last_contributor` / `radix_scan = gpu_hierarchical`
変更点
`[trainer] max_steps` を drums base の 30000 から **12500** に変更 (Lego c1v2 と同じ measurement window に揃える — 「drums 12.5k」)。`[refine] stop_iter` は drums base の 15000 のまま (15000 > 12500 なので measurement window 全域で refine が active、c1v2 の stop_iter=12500=max_steps と実質同じ状態)
run 実行
`splat check` で config 検証後、nohup + disown で background 起動 (DONE sentinel は run 側では書かれないため呼び出し側の shell wrapper で `echo done > *.DONE` を追加)。foreground `until` loop で能動待機、249.77s で完了 (exit=0)
flag 実測確認
run log の `[backend] BackendConfig { … }` 行で `radix_scatter: SimdBallot` / `refine_scratch_persist: true` / `refine_direct_write: true` / `ssim_reduce: Gpu` / `submission: PerKernel` / `forward_submission: PerStage` / `pipelining: Off` / `binning: Resident` を確認 (意図した regime で走っていることの直接証拠)

1. drums per-kernel gpu_ms 表 (leaf のみ、二重計上を除去)

leaf 判定の検算
9 leaf label (backward_raster / adam / fwd_rasterize / ssim_fwd_grad / fwd_radix_sort / fwd_project / fwd_emit_pairs / l1_combine_ssim / fwd_extract_off) の gpu_ms 合計 **170,414.242ms = 170.414242s** が、run 末尾の `[gpu] busy 170.414s` と**誤差 0.24ms (0.00014%) で一致** — c1v2 v2 と同じ検算が drums でも通る
ts_forward は集計 label (leaf から除外)
`ts_forward` (gpu_ms 51,751.594) = `fwd_project(4,921.986) + fwd_emit_pairs(1,763.565) + fwd_radix_sort(19,382.967) + fwd_rasterize(25,457.227) + fwd_extract_off(225.849)` の和と**bit 一致**。c1v2 v2 §6 の callout と同じ現象 (host 計測目的の子スコープ)
ts_project_back の二重計上
`ts_project_back` (gpu_ms 68,320.800) は `ts_backward_raster` (同 68,320.800) と bit 同値。c1v2/counter-session と同一現象、1 行に統合
0 に落ちる label
`ts_raster_bwd_gpu` / `ts_project_back_gpu` / `ts_project_soa_gpu` / `ts_refine_accumulate` / `ts_refine` / `ts_opacity_decay` / `ts_zero_grads` / 各 `*_alloc`/`*_upload`/`*_readback` は gpu_ms 0.000 (非ブロッキング harvest が親 label に帰属する既知の限界、p3-kernel-share-post-s3 §1 と同一機構)。leaf 集合から除外
kernel (leaf label)gpu_ms (12,500 iter)gpu_ms/itershare
**`ts_backward_raster` (+`ts_project_back`)**68,320.800**5.466****40.09%**
`ts_adam`26,451.1882.11615.52%
`ts_fwd_rasterize`25,457.2272.03714.94%
`ts_ssim_fwd_grad`21,721.8191.73812.75%
`ts_fwd_radix_sort`19,382.9671.55111.37%
`ts_fwd_project`4,921.9860.3942.89%
`ts_l1_combine_ssim`2,168.8410.1731.27%
`ts_fwd_emit_pairs`1,763.5650.1411.04%
`ts_fwd_extract_off`225.8490.0180.13%
**leaf 合計****170,414.242****13.633****100%**
(参照) `[gpu] busy` union170,414.0 (170.414s)13.633—

2. Lego v2 との並記 — share 構造はほぼ不変、ms/iter は全 kernel が 1.17〜1.93倍

kernelLego v2 ms/iter (a446f2c)drums ms/iter (3db33a8)ms/iter 比Lego v2 sharedrums shareshare Δ (pt)
backward_raster (+project_back)3.6705.4661.489×40.07%40.09%+0.02
adam1.4002.1161.511×15.28%15.52%+0.24
rasterize1.2952.0371.573×14.13%14.94%+0.81
ssim (`ts_ssim_fwd_grad`)1.2021.738**1.446×**13.12%12.75%-0.37
radix1.1001.5511.410×12.01%11.37%-0.64
project0.2710.3941.451×2.96%2.89%-0.07
l1_combine_ssim0.0900.173**1.928×**0.98%1.27%+0.29
emit_pairs0.1210.1411.167×1.32%1.04%-0.28
extract_off0.0110.0181.616×0.12%0.13%+0.01
**leaf 合計****9.161****13.633****1.488×**100%100%—
share は Δ≤1.5pt に収まる — splat 数 1.85倍でも構造はほぼ不変

9 kernel すべてで share の差は 1.5pt 未満 (最大は project の -0.07pt〜rasterize の +0.81pt)。backward_raster が単独最大ブロックであること (40%強)、2 位が adam/rasterize (15%前後)、3 位がssim/radix (11-13%) という順位・大まかな比率は drums でも維持されている。Lego の per-kernel share に基づいて優先付けた施策 (backward_raster 系が最優先、radix/adam/rasterize/ssim が僅差の次点) の相対順位は、splat 数が 1.85倍の drums でも覆らない、というのが本 run の一次的な結論。

ms/iter 絶対値は binary vintage (S4b + C2 計装) で汚染 — ssim アンカーが検出

本比較の Lego v2 (a446f2cacb5a) と drums (HEAD 3db33a802265) の間には 34 commit (非 doc-only 12 commit) が splat/ に入っている。特に S4b (`4405bb4`, ssim_reduce=Gpu default flip、12.5k production -1.43%) と C2 計装追加 (`9deb14a`, 全 CB に kernel_start/kernel_end timestamp 収集を追加) が per-kernel gpu_ms の絶対値に影響しうる。`ts_ssim_fwd_grad` は 800×800 固定解像度・window 7 の純粋 per-pixel kernel であり 理論上 splat 数に依存しないはずだが、実測は 1.202→1.738 ms/iter (+44.6%) と大きく増加している。しかも 9 leaf 全体が 1.17〜1.93倍というかなり均一な増加を示しており (leaf 合計の増加倍率 1.488× に近い値へ多くの kernel が収束している)、これは純粋な splat-count scaling (kernel ごとに増加率が大きく異なるはず — adam/radix は O(splats)、rasterize は O(tile-splat pairs)、ssim/project/extract_off は O(pixels) でほぼ一定のはず) では説明しにくい。S4b の ssim_reduce=Gpu が l1_combine_ssim (1.928×) 側に主な増分を持ち込み、C2 計装の全 CB 追加オーバーヘッドが残り 8 kernel を系統的に底上げしている可能性が高い — ただし本 run 単独では S4b/C2/thermal/純粋な splat scaling を分離できない (n=1、対照実験なし)。ms/iter の絶対値・scaling 係数は次ラウンドで Lego 側も HEAD (3db33a8) で撮り直すまで確定させない。

3. in-window splat 数 — 「2.5倍」は 30k 収束時の数字、12.5k 時点では 1.85倍

drums final splats @12,500 iter
**748,708** (result.toml, `[curve.splats]` — iter1: 5,207 → iter12,500: 748,708、末尾でも +30/iter で**まだ急成長中**、収束していない)
Lego v2 final splats @12,500 iter
**404,652** (`runs/c1v2-12500-off-prof/result.toml`、末尾は +1.44/iter でほぼ plateau)
in-window ratio
748,708 / 404,652 = **1.850倍** (タスク記述の「2.5倍」は drums 30k 収束時の 998k splats/Lego 30k baseline との比較であり、本 run の 12.5k window の実際の splat 数比とは異なる — 訂正)
capacity cap の影響
`capacity = 1,000,000` — drums 748,708 / Lego 404,652 とも上限未到達、cap による頭打ちはこの window では発生していない

4. 規約 / 次段への含意

  • **Lego で優先付けした施策の相対順位は drums (splat 数 1.85倍) でも share 構造上は維持される** — backward_raster が単独最大 (40%強) で最優先、adam/rasterize が次点 (15%前後)、radix/ssim が僅差の 3位 (11-13%) という構造に Δ≤1.5pt しか動きがなく、Lego で棄却した施策 (M3 per-splat backward 系、A7 refine 3-pass 等) が drums で急に有効化する可能性は share 構造だけからは示唆されない — ただし splat 数比例で絶対 gpu_ms/iter 自体は増えている (adam 1.511×、radix 1.410×) ため、絶対 wallclock 削減効果 (ms 単位) は drums の方が大きい可能性がある。
  • **A7 refine / sparse Adam の不可視率仮説は本 run では検証不能** — refine tick の gpu_ms は本 regime でも 0.000 に落ちる (非ブロッキング harvest の既知の限界、§1) ため、drums で refine コストが Lego と比べて相対的に重くなっているかどうかは per-kernel share 表からは読めない。host 時間 (ts_refine 総 host time) を drums/Lego で比較する追加解析、または C2 計装 (§8 実装済み) を使った refine tick 専用の gap 分解が必要。
  • **次ラウンドで per-kernel share を再測る際は Lego 側も同一 binary (HEAD) で撮り直すこと** — 本 finding は Lego v2 (a446f2c) と drums (3db33a8) の binary vintage が 34 commit 分ずれており、ssim/l1_combine_ssim 等で系統的な底上げ (S4b + C2 計装) が疑われる。scene 間の絶対 ms/iter 比較を厳密に行う場合は、両 scene を同一 commit の release binary で 1 セッション内に測り直す必要がある (share の相対構造比較は本 finding のままで妥当)。**2026-08-31 追記: この切り分けは §5 で実施済み — 判定 (a)、疑いは取り下げ。**

5. Lego 同 binary 再計測による切り分け (2026-08-31 追記) — 判定 (a): drums の差は scene 由来、profile 経路の系統的退行ではない

目的
§2/§4 で疑った「S4b (`4405bb4`, ssim_reduce=Gpu default flip) / C2 計装 (`9deb14a`, 全 CB に kernel_start/end timestamp 収集を追加) による profile=on 経路の系統的な底上げ」が、Lego v2 (`a446f2c`) → drums (`3db33a8`) 間の binary vintage 差 (34 commit) に起因するのか、それとも drums scene 自体 (splat 数 1.85倍、画像内容差) に起因するのかを、<strong>scene を Lego に固定したまま同じ binary vintage 差だけを再現</strong>して切り分ける
事前条件確認
`pmset -g batt`: AC 接続・100% 充電確認。`pgrep -fl "target/release/splat"`: 空 (実行中の splat process なし)。`uptime`: load1 2.43→(60秒待機後) 1.90 と < 4 を確認
config
`splat/configs/2026-08-31-c1v3-12500-off-prof.toml` — `2026-08-30-c1v2-12500-off-prof.toml` (§0/§6 で Lego v2 に使った config) を run 名のみ `c1v2-12500-off-prof` → `c1v3-12500-off-prof` に置換して複製 (`[experiment].name` と `[output].run_dir` の 2 行のみ差分、[backend] を含むそれ以外は完全一致)
binary
現行 main HEAD **`a556b78835d8`** (2026-08-31) の release binary をそのまま使用 (再ビルドなし)。比較対象の Lego v2 (`a446f2c`) との間には S4b (`4405bb4`) / C2 計装 (`9deb14a`) を含む多数の commit が入っており、drums finding §2 が疑った binary vintage 差そのものを再現している。drums run 自体の `3db33a8` よりもさらに新しい HEAD だが、`git merge-base --is-ancestor {3db33a802265,4405bb4,9deb14a} a556b78` を実行しいずれも exit 0 (祖先) であることを確認済み — drums run に効いていた commit 集合 (S4b/C2 含む) はすべて `a556b78` に部分集合として含まれる。加えて run log の `[backend] BackendConfig { …, ssim_reduce: Gpu, … }` (S4b の default flip が実際に効いている直接証拠) と、末尾の `=== C2 gap report ===` ブロック (C2 計装が実際に active であり値を出力している直接証拠) の 2 点を実測で確認しており、ancestry 論証より強い経験的証拠として §0 の「flag 実測確認」に記載済み
run 実行
`splat check` で config 検証後、nohup + disown で background 起動 (呼び出し側 shell wrapper で完了時に `*.DONE` sentinel を書く)。foreground `until`-loop で能動待機 (15秒間隔ポーリング)、**174.71s** で完了 (exit=0)
flag 実測確認
run log の `[backend] BackendConfig { … }` 行で `radix_scatter: SimdBallot` / `refine_scratch_persist: true` / `refine_direct_write: true` / `ssim_reduce: Gpu` / `submission: PerKernel` / `forward_submission: PerStage` / `pipelining: Off` / `binning: Resident` / `profile: true` を確認 (v2/drums と同じ regime で走っていることの直接証拠)。ログ末尾に C2 gap report (`=== C2 gap report (CB 間 driver-latency / scheduling 分解) ===`) が出力されており、profile=on 経路で C2 計装が実際に active であることも確認済み
結果サマリ
train elapsed **174.71s** (v2 174.57s とほぼ同一)、self-eval mean val PSNR **36.190dB** (v2 36.201dB)、final splats **409,702** (v2 404,652、ほぼ同水準)。`[gpu] busy 114.881s / wall 174.623s = 65.8%` (v2 は busy 114.508s / wall 174.57s = 65.6%、ほぼ同一)
leaf 検算
leaf 9 label (backward_raster(+project_back)/adam/fwd_rasterize/ssim_fwd_grad/fwd_radix_sort/fwd_project/l1_combine_ssim/fwd_emit_pairs/fwd_extract_off) の gpu_ms 合計 **114,880.732ms = 114.880732s** が run 末尾 `[gpu] busy 114.881s` と<strong>誤差 0.268ms (0.00023%) で一致</strong> — v1/v2/drums と同じ検算がここでも通る。`ts_forward` (gpu_ms 34,978.817) = `fwd_project(3,430.628) + fwd_emit_pairs(1,453.624) + fwd_radix_sort(13,788.972) + fwd_rasterize(16,163.920) + fwd_extract_off(141.674)` の和と一致 (集計 label、leaf から除外)。`ts_project_back` (46,157.186) は `ts_backward_raster` (同 46,157.186) と bit 同値 (v1/v2/drums と同じ二重計上、1 行に統合)
kernel (leaf label)v2 gpu_ms (a446f2c)v3 gpu_ms (a556b78, 同 Lego scene)v2 ms/iterv3 ms/iterv3/v2 比v2 sharev3 shareshare Δ (pt)
backward_raster (+project_back)45,877.98946,157.1863.6703.6931.006×40.07%40.18%+0.11
adam17,502.12817,695.3391.4001.4161.011×15.28%15.40%+0.12
rasterize (`ts_fwd_rasterize`)16,185.07716,163.9201.2951.2930.999×14.13%14.07%-0.06
ssim (`ts_ssim_fwd_grad`)15,025.37514,924.9691.2021.1940.993×13.12%12.99%-0.13
radix (`ts_fwd_radix_sort`)13,749.68113,788.9721.1001.1031.003×12.01%12.00%-0.01
project (`ts_fwd_project`)3,391.1383,430.6280.2710.2741.012×2.96%2.99%+0.03
l1_combine_ssim1,124.6331,124.4200.0900.0901.000×0.98%0.98%0.00
emit_pairs (`ts_fwd_emit_pairs`)1,511.1051,453.6240.1210.1160.962×1.32%1.27%-0.05
extract_off (`ts_fwd_extract_off`)140.612141.6740.0110.0111.008×0.12%0.12%0.00
**leaf 合計****114,507.738****114,880.732****9.161****9.190****1.003×**100%100%—
判定 (a) 確定 — 全 9 leaf が v2 と ±5% 以内、profile 経路の系統的底上げは棄却

同じ Lego scene・同じ [backend] regime のまま binary だけを `a446f2c` → `a556b78` (S4b + C2 計装 + それ以降の全 commit を含む) に進めても、9 leaf すべてが v2 比 0.962×〜1.012× (leaf 合計 1.003×) に収まった。最大逸脱は emit_pairs の -3.80%、次点は §2 で名指しした ssim (`ts_ssim_fwd_grad`) の -0.67% (むしろ微減) — drums で見られた +44.6% (1.202→1.738ms/iter) とは方向すら逆であり、ssim_fwd_grad の増加は binary vintage (S4b の ssim_reduce=Gpu) では説明できない。share Δ も全 kernel ±0.13pt 以内で、backward_raster 単独最大 (40%強)・adam/rasterize 次点 (15%前後)・ssim/radix 僅差の 3位 (12-13%) という構造も完全に維持されている。結論: S4b・C2 計装を含む binary vintage 差は per-kernel gpu_ms を系統的には底上げしていない — §2/§4 で報告した「profile=on 経路の系統的な底上げ」疑いは本 run により反証され、取り下げる。加えて、drums run (`cb=187501`) と v3 run (`cb=187501`) はiteration あたりの CB 数が完全に一致 (187,501÷12,500 ≈ 15.00/iter、両者とも submission=per_kernel/forward_submission=per_stage という同一 regime なので当然ではあるが)、C2 は全 CB に一様に kernel_start/end timestamp を挿すだけの計装であるため、C2 の per-CB オーバーヘッドは drums と Lego で iteration あたり同一のはずであり、drums の splat 数 (≒per-iteration の実 kernel dispatch 数) が多い分だけ C2 が「相対的に」より多く効く、という交互作用 (interaction effect) の可能性も本 CB 数一致によって別途排除できる。drums で観測された全 9 leaf 1.17〜1.93倍の増加 (leaf 合計 1.488×) は、drums scene 自体 (in-window splat 数 1.85倍 [§3]、nerf_synthetic 内の画像内容差・tile occupancy パターンの違いなど) に起因すると判定する。ただし本 run が確定させたのは「vintage 由来ではない」ことのみであり、scene 由来の内訳 (splat 数 vs 画像内容) と drums run 固有の測定環境 (thermal 等、§4 が挙げていたが本 run では制御していない要因) の寄与は未分離のまま残る。

ssim_fwd_grad の +44.6% は再考が必要 — 「splat 数に無関係」という前提そのものを疑うべき

§2 は `ts_ssim_fwd_grad` が「800×800 固定解像度・window 7 の純粋 per-pixel kernel であり理論上 splat 数に依存しないはず」という前提で drums の +44.6% を binary vintage 汚染の傍証として扱った。本 run (v3) は同じ Lego scene で binary vintage 差を再現しても ssim_fwd_grad が -0.67% (実質不変、むしろ微減) だったため、+44.6% が binary vintage 由来ではないことが確定した。これにより「ssim_fwd_grad は splat 数に依存しないはず」という §2 の前提こそが実測によって反証された (vintage 差では説明できない以上、splat 数または splat 数と相関する何か — 画像内容・rasterize 出力の統計的性質 — が ssim_fwd_grad の gpu_ms に影響している、と読み替える必要がある)。残る説明候補は (1) drums の画像内容 (nerf_synthetic 内での高周波成分・輝度分布の違いによる SSIM window 内の分岐/早期終了パターン差)、(2) `ssim_reduce = Gpu` (S4b default、`SsimReduceKind::Gpu`) の reduce kernel 自体が完全に splat 数非依存ではなく、上流の rasterize 出力 (splat 数に依存するタイル占有率・アルファブレンド深度) の統計的性質に応じて GPU 側のメモリアクセスパターン/occupancy が変わる、のいずれか。次段で drums 側の ssim_fwd_grad 単体を `ssim_reduce = "host"`/`"gpu"` (`SsimReduceKind::Host`/`Gpu`、`splat/crates/splat-train-v1/src/config.rs` 参照。**`Cpu` という variant は存在しない**) の A/B で切り分けるか、drums の rasterize 出力統計 (per-pixel contributor 数分布) を Lego と比較すれば追加の手がかりが得られる (本 finding のスコープ外、実施していない)。

  • **判定 (a) — drums finding §2/§4 の「profile=on 経路の系統的な底上げ」疑いは取り下げ**。同一 Lego scene・同一 backend regime で binary vintage 差 (S4b + C2 計装含む) のみを再現しても全 9 leaf が ±5% 以内に収まったため、S4b/C2 が per-kernel gpu_ms を系統的に底上げしている証拠はない。
  • **drums の絶対 ms/iter 差 (1.17〜1.93倍) は binary vintage (S4b/C2) 由来ではないと確定** — §4 の「絶対値比較は汚染されている」という留保は撤回してよい。本 run が確定させたのは「vintage 由来ではない」ことのみであり、残る主因は drums scene 自体 (splat 数、画像内容、tile occupancy 等) と推定されるが、「scene のどの性質が主因か」の内訳、および drums run 固有の測定環境 (thermal 等、n=1・対照なし) の寄与は本 finding のスコープ外で未分離のまま (§3 で in-window splat 比 1.85倍を報告済みだが、それだけで 9 kernel 一様 1.17〜1.93倍を説明できるかは検証していない)。
  • **§1 の drums per-kernel share 表・§2 の share 構造比較 (backward_raster 40.09% vs 40.07% 等) はそのまま有効** — 本追記は絶対 ms/iter 比較の解釈のみを訂正するものであり、share の相対構造比較の結論 (splat 数 1.85倍でも share 構造はほぼ不変) には影響しない。
02

関連する run

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

03

関連 finding

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