Commit 5619390
bench: the gauntlet runs on pipeline compilation, gpu.js 2.23.0
Thirteen multi-pass rows now orchestrate through gpu.createPipeline: the
hand-rolled ping-pong loops are traced once into a static plan and executed
fused, so intermediates never leave device or wasm memory. Kernel bodies,
sizes, algorithms and every js()/webgpu()/reduce() are untouched — only the
orchestration around them changed.
Against the recorded 2.22.0 run, on released 2.23.0:
WebGPU median -25% wavefront -90% (674->68ms, 12,289 passes)
compaction -70%, spectral-filter -62%, topk -35%
WebASM median -9%
WebGL2 median +2%
WebGL median -0%
Six more rows were deliberately NOT migrated. launch-overhead measures
per-dispatch cost as the DIFFERENCE between the gpu.js column and a
hand-written column that is already one encoder — fusing makes the two
identical and the measurement goes to zero. residency exists to price
setPipeline(true) as an opt-in, and a traced version contains none of the API
it measures. jacobi, ising, bitonic-sort and fft declined on cost grounds that
2.23.0 has since fixed and can be revisited. residency.js carries the reason
in its header so the next person does not have to rediscover it.
backend() reads pipeline.backend, not the user's kernel shortcut. Under a plan
the shortcut is not what executes, so asking it reports the mode we requested
no matter what ran — silently disabling this suite's guard against gpu.js
degrading to CPU, which is the guard that caught 17 degradations in
gpujs/gpu.js#868. An accessor built on plan internals went stale one upstream
commit later without erroring, which is why this uses supported API.
Cells now carry the executor kind. A row that reached only fused-sync or the
generic executor says so, muted rather than pink, because a reduced lowering
is not a wrong answer. Threads are NOT pinned off: the table shows what gpu.js
gives you by default and discloses when that was reduced, rather than holding
every row to the slowest common denominator.
Every migrated row was checked against its plain-JS oracle at 1e-4 before any
timing was taken; several are bit-exact. No cell reports WRONG.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RJujXBsBhXBbQ72tS7E7GV1 parent 44b8bac commit 5619390
2 files changed
Lines changed: 5 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2018 | 2018 | | |
2019 | 2019 | | |
2020 | 2020 | | |
2021 | | - | |
2022 | | - | |
2023 | | - | |
2024 | | - | |
| 2021 | + | |
| 2022 | + | |
| 2023 | + | |
| 2024 | + | |
2025 | 2025 | | |
2026 | 2026 | | |
2027 | 2027 | | |
| |||
0 commit comments