Skip to content

perf: runtime 0.3.1 keeps bucket points and the quotient's FFTs in SIMD lane form - #24

Merged
sergeytimoshin merged 1 commit into
mainfrom
sergei/runtime-0-3-1
Oct 17, 2026
Merged

sergeytimoshin merged 1 commit into
mainfrom
sergei/runtime-0-3-1

Conversation

@sergeytimoshin

Copy link
Copy Markdown
Collaborator

Runtime 0.3.1 for the browser prover: MSM bucket points and the quotient's FFTs stay in SIMD lane form, and the solver plan builds faster; follows #23.

  • Kernel (mopro sergei/kernel-solver-hints, d352504): a window's bucket points are stored as 29-bit limbs between layers and load into lanes with a lane load per limb; transforms run on quads (four consecutive elements in lane form) from conversion to conversion, the layers one and two apart through lane shuffles; a Lanes<F> type generic over Fq and Fr; an Fx-style hasher for interning solver prefixes.
  • runtime.lock.json, scripts/build-runtime-release.sh, READMEs, CHANGELOG: runtime 0.3.1 from the pinned mopro revision; release runtime-v0.3.1 is published.

Measured here at four threads, warm proofs against 0.3.0: 8→2 1.22→0.97 s, 24→2 3.54→2.73 s; key load for 8→2 0.57→0.48 s. A parallel witness solver was measured and dropped: these circuits have about 8,000 levels, most under 64 constraints wide, so per-level parallelism would cost more than the 45 ms of sums it could save. The bench comment of this PR compares with the 0.3.0 comment on #23.

Built from mopro d352504: a window's bucket points stored as 29-bit limbs
between layers, the quotient's transforms on quads from conversion to
conversion, and an Fx-style hasher for interning solver prefixes.
@github-actions

Copy link
Copy Markdown

Proof timing: chrome

After: this pull request at 4f72579. No report of main to compare with yet.

Medians of one browser, by shape (notes → outputs). Runner numbers are for comparing commits, not for how fast a device is.

scenario 1 → 2 2 → 2 4 → 2 8 → 2 16 → 2 24 → 2 merge 24 → 1
first run, including download 4.20 s (download: 0.91 s, 8.8 MiB) 6.52 s (download: 0.56 s, 15.6 MiB) 10.08 s (download: 0.66 s, 28.9 MiB) 19.29 s (download: 0.94 s, 55.9 MiB) 36.59 s (download: 1.54 s, 109.5 MiB) 57.59 s (download: 1.71 s, 171.6 MiB) 55.91 s (download: 2.05 s, 165.0 MiB)
warm 0.81 s 1.31 s 2.18 s 4.08 s 7.33 s 11.87 s 11.50 s
first run after restart 1.52 s 1.93 s 3.15 s 5.59 s 10.09 s 16.32 s 16.07 s
repeated after restart 1.00 s 1.26 s 2.19 s 4.05 s 7.34 s 11.81 s 11.51 s
stage 1 → 2 2 → 2 4 → 2 8 → 2 16 → 2 24 → 2 merge 24 → 1
key load 0.22 s 0.36 s 0.60 s 1.15 s 2.28 s 3.85 s 3.73 s
witness 0.00 s 0.00 s 0.00 s 0.00 s 0.00 s 0.00 s 0.00 s
prove 0.85 s 1.22 s 2.13 s 4.00 s 7.27 s 11.76 s 11.44 s
verify 0.01 s 0.01 s 0.01 s 0.01 s 0.02 s 0.02 s 0.02 s

@sergeytimoshin
sergeytimoshin merged commit 2622bac into main Oct 17, 2026
4 checks passed
@sergeytimoshin
sergeytimoshin deleted the sergei/runtime-0-3-1 branch October 17, 2026 14:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant