Skip to content

ci: track the 4-to-1 aggregation proven on one thread - #530

Merged
kevaundray merged 1 commit into
leanEthereum:riscv-explorationfrom
kevaundray:kw/bench-aggregate-4to1-one-thread
Oct 7, 2026
Merged

kevaundray merged 1 commit into
leanEthereum:riscv-explorationfrom
kevaundray:kw/bench-aggregate-4to1-one-thread

Conversation

@kevaundray

@kevaundray kevaundray commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

This PR was created with Claude Code, prompted by @kevaundray.

What is tracked

A new proven_trees() case, aggregate-leanxmss-100-4to1-1thread: the same tree as aggregate-leanxmss-100-4to1 (a leanXMSS 100 leaf proven once, a first-level node over 4 copies of its proof, a node over 4 copies of that), proven on one thread. It prints the two benchmarks the multi-threaded entry prints, with the same measures (latency, proof-size, verify, stage.<name>, peak-memory, heap-peak, allocations):

  • aggregate-leanxmss-100-4to1-1thread-first: the first-level node (the RISC-V verifier in rows over 4 leaf proofs).
  • aggregate-leanxmss-100-4to1-1thread-node: the node above it (the recursion verifier in rows over 4 first-level proofs).

This sits next to aggregate-leanxmss-100-2to1-1thread (#470), so both tracked tree shapes now show what one core costs per level, apart from how the prover scales over the testbed's cores.

How

Exactly as the 2-to-1 one-thread case: the name is added to ONE_THREAD and to proven_trees() in bins/leanvm/src/tracked.rs, and to the bench.yml matrix (both testbeds). When the pool has more than one thread, the CLI runs itself again with --only <case> and LEANVM_NUM_THREADS=1 and merges the child's JSON; the child proves the whole tree, leaf included. AGENTS.md's CI paragraph names it. --cycles-only is unchanged: its JSON is byte-identical to the base's.

CI time

Estimate, from the latest Bench run on the self-hosted testbeds (#528): a run of aggregate-leanxmss-100-2to1-1thread takes 6.0 s on x86-64 (Xeon Gold 6548N) and 9.4 s on arm64 (Neoverse-V2), and the rest of the job (checkout, cache, the two builds) about 65 s; those jobs took 2.2 and 2.6 minutes. Locally, a 4-to-1 one-thread run takes about 1.35 times a 2-to-1 one (6.8 to 7.7 s against 5.2 to 6.0 s), so a run should take about 8 s on x86-64 and 13 s on arm64, and a job with 10 runs about 2.5 minutes on x86-64 and 3.2 minutes on arm64.

Measured, in this PR's Bench run (the base cannot run the new entry, so each new job proved the head's 5 runs only): a one-thread 4-to-1 run took 8.1 s on x86-64 and 14.2 s on arm64, and the new jobs took 2.1 minutes (128 s) and 2.6 minutes (158 s). Once the base has the entry, each job proves 5 more runs: about 2.8 minutes on x86-64 and 3.8 minutes on arm64. The longest job in the same run is the 2-to-1 one-thread job on arm64 (3.0 minutes), so the new arm64 job becomes the longest by under a minute; jobs run in parallel, so a PR's Bench wall time grows by at most that. I would leave ROUNDS as is; if the arm64 job's length matters, the change would be a per-case round count in scripts/ab.sh (3 rounds for this case would save about 57 s on arm64), not fewer rounds for every benchmark.

CI numbers

Medians of the 5 rounds, latency, from this PR's run; each pair of columns is one CPU (x86-64 Xeon Gold 6548N, 32 vCPUs; arm64 Neoverse-V2, 16 vCPUs).

testbed level one thread all threads ratio
x86-64 first-level node, 4 leaves 1.086 s 0.155 s 7.0
x86-64 node, 4 children 1.178 s 0.165 s 7.1
arm64 first-level node, 4 leaves 2.157 s 0.239 s 9.0
arm64 node, 4 children 2.341 s 0.258 s 9.1

Proof sizes match the multi-threaded entry (283,331 and 285,027 bytes); peak memory on one thread is 1.43 GiB on x86-64 and 2.23 GiB on arm64. For reference, the 2-to-1 one-thread entry in the same run: 0.630 s and 0.658 s on x86-64, 1.065 s and 1.119 s on arm64.

Local smoke (AMD Ryzen 9 7950X3D, 32 threads, under other load)

/usr/bin/time cargo leanvm bench --only aggregate-leanxmss-100-4to1-1thread --repeat 1 --cooldown 0: 7.5 s wall, 7.4 s user, CPU 99% (the parent idles while the child proves), so it ran on one thread. --only aggregate-leanxmss-100-4to1 for comparison: 2.3 s wall, CPU 709%.

level one thread all threads proof size
first-level node, 4 leaves 0.98 s 0.25 s 283,331 B
node, 4 children 1.06 s 0.24 s 285,027 B

Proof sizes match the multi-threaded entry; peak memory 1.53 GB. The base refuses the new name (no tracked case is named aggregate-leanxmss-100-4to1-1thread), so this PR's own Bench jobs prove the head's 5 runs only.

Checks

  • cargo fmt --all --check
  • cargo clippyall with RUSTFLAGS="-C target-cpu=haswell" on 1.97 and 1.99, native on 1.99
  • cargo test --release -p leanvm-cli -p bench
  • cargo docall
  • actionlint .github/workflows/bench.yml

A new proven_trees() case, aggregate-leanxmss-100-4to1-1thread: the tree of aggregate-leanxmss-100-4to1 (a leanXMSS 100 leaf, a first-level node over 4 copies of its proof, a node over 4 copies of that) proven whole on one thread through ONE_THREAD's re-exec with LEANVM_NUM_THREADS=1, reporting -first and -node with the multi-threaded entry's measures. A bench.yml matrix job on both testbeds; AGENTS.md names it. --cycles-only is unchanged (identical JSON against the base).

Local smoke (AMD Ryzen 9 7950X3D, loaded): --only aggregate-leanxmss-100-4to1-1thread --repeat 1 --cooldown 0 took 7.5 s wall at CPU 99%; first-level node 0.98 s and node 1.06 s against 0.25 s and 0.24 s on all threads, proof sizes equal (283,331 and 285,027 bytes).
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

Benchmarks: base against this PR, on one runner

5f2c1fc merged into its base, against the base 651735f: each benchmark run in turns on one runner, base and PR 5 times each. A size is shown when it changed; a time or a peak memory when it moved the same way in every round and its median by at least 1% (the change is the median ratio, with the rounds' range).

Proving time

benchmark runner base this PR change
aggregate-leanxmss-100-4to1-1thread-first arm64 none 2.16 s new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 1.09 s new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 2.34 s new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 1.18 s new
shielded-258 arm64 983.08 ms 972.24 ms -1.21% (-2.18% to -0.35%)
Prover stages
benchmark runner base this PR change
aggregate-leanxmss-100-2to1-1thread-first x86-64 623.10 ms 630.35 ms +1.24% (-2.90% to +1.47%)
 ↳ build-circuit 15.66 ms 16.00 ms +1.14% (-8.48% to +13.98%)
 ↳ prove-recursion 577.90 ms 583.78 ms +0.61% (-2.69% to +1.57%)
 ↳ reduce-claims 19.18 ms 19.17 ms -0.03% (-3.61% to +5.72%)
 ↳ reduce-in-rows 1.70 ms 1.84 ms +5.87% (+2.29% to +14.09%)
 ↳ verify 8.12 ms 8.07 ms -0.56% (-5.73% to +24.35%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 656.03 ms 658.07 ms +0.48% (-0.25% to +1.15%)
 ↳ build-circuit 16.73 ms 17.16 ms +2.02% (-6.96% to +3.41%)
 ↳ prove-recursion 594.17 ms 596.00 ms +0.43% (-0.33% to +1.02%)
 ↳ reduce-claims 34.98 ms 35.54 ms +1.61% (-2.51% to +3.61%)
 ↳ reduce-in-rows 1.77 ms 1.92 ms +9.36% (+6.74% to +11.84%)
aggregate-leanxmss-100-2to1-node arm64 129.94 ms 130.37 ms +0.35% (-2.72% to +2.18%)
 ↳ build-circuit 10.98 ms 10.96 ms +0.17% (-0.61% to +2.99%)
 ↳ prove-recursion 104.89 ms 105.14 ms +0.23% (-3.82% to +2.60%)
 ↳ reduce-claims 6.81 ms 6.81 ms -0.29% (-6.22% to +7.80%)
 ↳ reduce-in-rows 1.43 ms 1.49 ms +1.62% (+1.01% to +9.51%)
aggregate-leanxmss-100-4to1-1thread-first arm64 none 2.16 s new
 ↳ build-circuit none 25.73 ms new
 ↳ prove-recursion none 2.09 s new
 ↳ reduce-claims none 21.30 ms new
 ↳ reduce-in-rows none 2.72 ms new
 ↳ verify none 13.83 ms new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 1.09 s new
 ↳ build-circuit none 29.64 ms new
 ↳ prove-recursion none 1.02 s new
 ↳ reduce-claims none 24.10 ms new
 ↳ reduce-in-rows none 3.45 ms new
 ↳ verify none 13.92 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 2.34 s new
 ↳ build-circuit none 30.96 ms new
 ↳ prove-recursion none 2.23 s new
 ↳ reduce-claims none 56.75 ms new
 ↳ reduce-in-rows none 3.01 ms new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 1.18 s new
 ↳ build-circuit none 36.40 ms new
 ↳ prove-recursion none 1.06 s new
 ↳ reduce-claims none 58.74 ms new
 ↳ reduce-in-rows none 3.49 ms new
aggregate-leanxmss-100-4to1-first x86-64 156.06 ms 154.92 ms -1.04% (-3.35% to +0.02%)
 ↳ build-circuit 32.48 ms 31.86 ms -2.63% (-5.59% to -1.85%)
 ↳ prove-recursion 94.92 ms 94.29 ms -0.67% (-1.79% to +0.13%)
 ↳ reduce-claims 8.55 ms 9.00 ms -5.35% (-26.00% to +21.21%)
 ↳ reduce-in-rows 3.71 ms 3.77 ms +1.56% (-0.08% to +5.70%)
 ↳ verify 16.74 ms 16.64 ms -0.22% (-2.65% to +0.66%)
leanxmss-100-1thread x86-64 1.04 s 1.03 s -0.38% (-1.00% to +0.77%)
 ↳ build-witness 75.21 ms 74.28 ms -1.35% (-1.51% to -0.33%)
 ↳ commit 184.19 ms 183.71 ms -0.41% (-1.09% to +1.50%)
 ↳ execute-program 13.16 ms 12.97 ms -1.41% (-14.95% to -1.19%)
 ↳ flock-reductions 304.98 ms 304.20 ms -0.26% (-1.22% to +0.82%)
 ↳ pcs-open 355.29 ms 353.98 ms -0.37% (-1.17% to +0.36%)
 ↳ prove-bus 84.68 ms 85.25 ms +0.83% (-2.91% to +2.40%)
 ↳ prove-constraints 18.89 ms 18.78 ms -0.57% (-1.64% to +2.16%)
shielded-258 arm64 983.08 ms 972.24 ms -1.21% (-2.18% to -0.35%)
 ↳ build-witness 31.76 ms 31.48 ms -0.74% (-17.01% to +1.25%)
 ↳ commit 135.16 ms 134.89 ms -0.37% (-1.57% to +0.42%)
 ↳ execute-program 58.89 ms 57.49 ms -2.46% (-6.45% to -0.77%)
 ↳ flock-reductions 253.86 ms 253.67 ms -0.03% (-0.61% to +0.02%)
 ↳ pcs-open 438.93 ms 429.46 ms -1.99% (-3.14% to -0.15%)
 ↳ prove-bus 54.85 ms 54.65 ms -0.16% (-7.28% to +0.37%)
 ↳ prove-constraints 10.09 ms 10.05 ms -0.04% (-7.18% to +1.68%)

Verifying time

benchmark runner base this PR change
aggregate-leanxmss-100-2to1-node x86-64 4.37 ms 4.25 ms -2.12% (-6.71% to -0.92%)
aggregate-leanxmss-100-4to1-1thread-first arm64 none 5.85 ms new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 5.37 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 11.27 ms new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 10.85 ms new

Proof size

benchmark runner base this PR change
aggregate-leanxmss-100-4to1-1thread-first arm64 none 283,331 B new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 283,331 B new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 285,027 B new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 285,027 B new

Peak memory

benchmark runner base this PR change
aggregate-leanxmss-100-4to1-1thread-first arm64 none 2266.93 MiB new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 1454.37 MiB new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 2267.26 MiB new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 1460.37 MiB new

allocations

benchmark runner base this PR change
aggregate-leanxmss-100-4to1-1thread-first arm64 none 41.84 µs new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 41.88 µs new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 49.74 µs new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 49.79 µs new

heap-peak

benchmark runner base this PR change
aggregate-leanxmss-100-4to1-1thread-first arm64 none 1.48 s new
aggregate-leanxmss-100-4to1-1thread-first x86-64 none 746.21 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 none 1.48 s new
aggregate-leanxmss-100-4to1-1thread-node x86-64 none 745.63 ms new
Every result

Proving time

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 1.06 s 1.06 s +0.11% (-0.72% to +0.44%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 623.10 ms 630.35 ms +1.24% (-2.90% to +1.47%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 1.12 s 1.12 s +0.03% (-0.20% to +0.38%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 656.03 ms 658.07 ms +0.48% (-0.25% to +1.15%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 126.09 ms 125.87 ms +0.72% (-0.25% to +4.27%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 90.11 ms 89.21 ms -1.67% (-3.87% to +2.67%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 129.94 ms 130.37 ms +0.35% (-2.72% to +2.18%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 92.35 ms 92.22 ms -1.06% (-1.07% to +1.26%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 2.16 s new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 1.09 s new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 2.34 s new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 1.18 s new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 241.61 ms 239.46 ms -0.09% (-1.66% to +1.14%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 156.06 ms 154.92 ms -1.04% (-3.35% to +0.02%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 260.72 ms 258.12 ms -1.63% (-2.07% to +1.51%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 167.53 ms 164.92 ms -0.50% (-4.27% to +0.36%)
falcon-7 arm64 Neoverse-V2 751.34 ms 743.52 ms -1.38% (-2.29% to +5.20%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 324.25 ms 323.44 ms -0.48% (-0.64% to -0.05%)
fibonacci-asm-2000000 arm64 Neoverse-V2 1.05 s 1.05 s -0.25% (-0.50% to +0.82%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 472.64 ms 470.95 ms -0.13% (-3.68% to +0.81%)
flock-add-wrapping-batch-262144 arm64 Neoverse-V2 21.48 ms 21.76 ms +0.34% (-1.86% to +6.81%)
flock-add-wrapping-batch-262144 x86-64 INTEL(R) XEON(R) GOLD 6548N 9.95 ms 9.96 ms -0.00% (-4.27% to +4.25%)
flock-hash-batch-262144 arm64 Neoverse-V2 1.02 s 1.02 s -0.09% (-0.76% to +1.16%)
flock-hash-batch-262144 x86-64 INTEL(R) XEON(R) GOLD 6548N 346.63 ms 344.41 ms -0.28% (-0.69% to +0.51%)
flock-mul-widening-batch-262144 arm64 Neoverse-V2 489.06 ms 488.12 ms -0.40% (-1.57% to +0.33%)
flock-mul-widening-batch-262144 x86-64 INTEL(R) XEON(R) GOLD 6548N 166.61 ms 164.71 ms -0.51% (-1.83% to +0.74%)
flock-mul-wrapping-batch-262144 arm64 Neoverse-V2 269.83 ms 270.48 ms +0.19% (-0.91% to +0.81%)
flock-mul-wrapping-batch-262144 x86-64 INTEL(R) XEON(R) GOLD 6548N 88.99 ms 88.58 ms -0.26% (-0.68% to +1.67%)
hash-50000 arm64 Neoverse-V2 695.15 ms 695.64 ms -0.02% (-0.36% to +1.07%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 312.68 ms 312.03 ms -0.24% (-0.27% to +0.80%)
leansphincs-26 arm64 Neoverse-V2 240.18 ms 238.87 ms -0.29% (-1.39% to +0.78%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 129.45 ms 129.38 ms +0.04% (-0.57% to +0.94%)
leanxmss-100 arm64 Neoverse-V2 215.98 ms 217.04 ms -0.15% (-1.05% to +1.09%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 120.71 ms 120.16 ms -0.59% (-0.86% to -0.16%)
leanxmss-100-1thread arm64 Neoverse-V2 2.07 s 2.07 s -0.17% (-0.79% to +0.43%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 1.04 s 1.03 s -0.38% (-1.00% to +0.77%)
pcs-commit-22 arm64 Neoverse-V2 8.88 ms 8.88 ms +0.00% (-9.31% to +0.51%)
pcs-commit-22 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.44 ms 4.14 ms -1.05% (-16.33% to +2.03%)
pcs-open-22 arm64 Neoverse-V2 18.91 ms 18.83 ms -1.25% (-3.70% to +12.85%)
pcs-open-22 x86-64 INTEL(R) XEON(R) GOLD 6548N 15.80 ms 15.90 ms -0.28% (-5.03% to +1.20%)
shielded-258 arm64 Neoverse-V2 983.08 ms 972.24 ms -1.21% (-2.18% to -0.35%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 465.59 ms 466.38 ms +0.22% (-1.22% to +1.59%)
stateproof-5 arm64 Neoverse-V2 1.59 s 1.58 s -0.88% (-1.47% to +0.37%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 709.97 ms 708.60 ms -0.56% (-1.22% to +3.48%)
Prover stages
benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 1.06 s 1.06 s +0.11% (-0.72% to +0.44%)
 ↳ build-circuit 12.24 ms 12.25 ms +0.02% (-0.45% to +1.08%)
 ↳ prove-recursion 1.03 s 1.03 s +0.16% (-0.69% to +0.45%)
 ↳ reduce-claims 15.45 ms 15.29 ms -0.92% (-2.53% to +1.26%)
 ↳ reduce-in-rows 1.33 ms 1.30 ms -2.17% (-5.44% to +2.33%)
 ↳ verify 6.88 ms 6.89 ms +0.29% (-0.55% to +0.39%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 623.10 ms 630.35 ms +1.24% (-2.90% to +1.47%)
 ↳ build-circuit 15.66 ms 16.00 ms +1.14% (-8.48% to +13.98%)
 ↳ prove-recursion 577.90 ms 583.78 ms +0.61% (-2.69% to +1.57%)
 ↳ reduce-claims 19.18 ms 19.17 ms -0.03% (-3.61% to +5.72%)
 ↳ reduce-in-rows 1.70 ms 1.84 ms +5.87% (+2.29% to +14.09%)
 ↳ verify 8.12 ms 8.07 ms -0.56% (-5.73% to +24.35%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 1.12 s 1.12 s +0.03% (-0.20% to +0.38%)
 ↳ build-circuit 11.92 ms 11.97 ms +0.22% (-0.21% to +0.92%)
 ↳ prove-recursion 1.07 s 1.07 s +0.03% (-0.21% to +0.41%)
 ↳ reduce-claims 30.07 ms 29.95 ms -0.20% (-2.35% to +0.03%)
 ↳ reduce-in-rows 1.40 ms 1.37 ms -3.28% (-6.45% to +6.18%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 656.03 ms 658.07 ms +0.48% (-0.25% to +1.15%)
 ↳ build-circuit 16.73 ms 17.16 ms +2.02% (-6.96% to +3.41%)
 ↳ prove-recursion 594.17 ms 596.00 ms +0.43% (-0.33% to +1.02%)
 ↳ reduce-claims 34.98 ms 35.54 ms +1.61% (-2.51% to +3.61%)
 ↳ reduce-in-rows 1.77 ms 1.92 ms +9.36% (+6.74% to +11.84%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 126.09 ms 125.87 ms +0.72% (-0.25% to +4.27%)
 ↳ build-circuit 10.15 ms 10.13 ms -0.16% (-1.71% to +1.46%)
 ↳ prove-recursion 103.00 ms 102.82 ms +0.09% (-0.55% to +5.08%)
 ↳ reduce-claims 4.21 ms 4.45 ms +3.88% (-1.16% to +23.02%)
 ↳ reduce-in-rows 1.44 ms 1.41 ms -1.20% (-5.43% to +4.75%)
 ↳ verify 7.19 ms 7.20 ms -0.06% (-1.22% to +0.69%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 90.11 ms 89.21 ms -1.67% (-3.87% to +2.67%)
 ↳ build-circuit 14.32 ms 14.30 ms -1.54% (-3.11% to +5.24%)
 ↳ prove-recursion 57.61 ms 57.06 ms -1.17% (-1.92% to +0.05%)
 ↳ reduce-claims 7.65 ms 7.45 ms -16.09% (-22.45% to +31.09%)
 ↳ reduce-in-rows 1.76 ms 1.78 ms -0.40% (-3.54% to +4.20%)
 ↳ verify 8.65 ms 8.64 ms -0.25% (-1.65% to +0.96%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 129.94 ms 130.37 ms +0.35% (-2.72% to +2.18%)
 ↳ build-circuit 10.98 ms 10.96 ms +0.17% (-0.61% to +2.99%)
 ↳ prove-recursion 104.89 ms 105.14 ms +0.23% (-3.82% to +2.60%)
 ↳ reduce-claims 6.81 ms 6.81 ms -0.29% (-6.22% to +7.80%)
 ↳ reduce-in-rows 1.43 ms 1.49 ms +1.62% (+1.01% to +9.51%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 92.35 ms 92.22 ms -1.06% (-1.07% to +1.26%)
 ↳ build-circuit 14.86 ms 14.70 ms -0.18% (-6.11% to +5.19%)
 ↳ prove-recursion 58.85 ms 58.45 ms -0.69% (-2.19% to +0.40%)
 ↳ reduce-claims 9.90 ms 10.03 ms +1.31% (-7.75% to +8.32%)
 ↳ reduce-in-rows 1.82 ms 1.85 ms +0.05% (-1.93% to +7.11%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 2.16 s new
 ↳ build-circuit none 25.73 ms new
 ↳ prove-recursion none 2.09 s new
 ↳ reduce-claims none 21.30 ms new
 ↳ reduce-in-rows none 2.72 ms new
 ↳ verify none 13.83 ms new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 1.09 s new
 ↳ build-circuit none 29.64 ms new
 ↳ prove-recursion none 1.02 s new
 ↳ reduce-claims none 24.10 ms new
 ↳ reduce-in-rows none 3.45 ms new
 ↳ verify none 13.92 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 2.34 s new
 ↳ build-circuit none 30.96 ms new
 ↳ prove-recursion none 2.23 s new
 ↳ reduce-claims none 56.75 ms new
 ↳ reduce-in-rows none 3.01 ms new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 1.18 s new
 ↳ build-circuit none 36.40 ms new
 ↳ prove-recursion none 1.06 s new
 ↳ reduce-claims none 58.74 ms new
 ↳ reduce-in-rows none 3.49 ms new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 241.61 ms 239.46 ms -0.09% (-1.66% to +1.14%)
 ↳ build-circuit 21.56 ms 21.19 ms -0.62% (-4.45% to +3.62%)
 ↳ prove-recursion 197.36 ms 196.20 ms +0.01% (-1.33% to +0.90%)
 ↳ reduce-claims 4.97 ms 5.17 ms +3.06% (-4.93% to +5.90%)
 ↳ reduce-in-rows 2.78 ms 2.79 ms +1.84% (-0.17% to +2.22%)
 ↳ verify 14.80 ms 14.53 ms +0.58% (-3.92% to +1.95%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 156.06 ms 154.92 ms -1.04% (-3.35% to +0.02%)
 ↳ build-circuit 32.48 ms 31.86 ms -2.63% (-5.59% to -1.85%)
 ↳ prove-recursion 94.92 ms 94.29 ms -0.67% (-1.79% to +0.13%)
 ↳ reduce-claims 8.55 ms 9.00 ms -5.35% (-26.00% to +21.21%)
 ↳ reduce-in-rows 3.71 ms 3.77 ms +1.56% (-0.08% to +5.70%)
 ↳ verify 16.74 ms 16.64 ms -0.22% (-2.65% to +0.66%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 260.72 ms 258.12 ms -1.63% (-2.07% to +1.51%)
 ↳ build-circuit 24.72 ms 24.27 ms -0.81% (-8.47% to +1.31%)
 ↳ prove-recursion 210.37 ms 208.28 ms -1.26% (-2.12% to +1.68%)
 ↳ reduce-claims 9.66 ms 9.66 ms -0.63% (-2.36% to +1.83%)
 ↳ reduce-in-rows 2.91 ms 2.93 ms +1.31% (-1.57% to +1.44%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 167.53 ms 164.92 ms -0.50% (-4.27% to +0.36%)
 ↳ build-circuit 37.73 ms 36.20 ms -4.84% (-6.99% to +1.92%)
 ↳ prove-recursion 98.69 ms 98.00 ms -0.41% (-1.36% to +5.10%)
 ↳ reduce-claims 12.50 ms 12.15 ms -6.14% (-20.13% to +5.84%)
 ↳ reduce-in-rows 4.06 ms 4.08 ms +0.75% (-1.07% to +3.42%)
falcon-7 arm64 Neoverse-V2 751.34 ms 743.52 ms -1.38% (-2.29% to +5.20%)
 ↳ build-witness 25.28 ms 25.27 ms +0.03% (-0.69% to +0.96%)
 ↳ commit 97.59 ms 98.16 ms -0.01% (-3.01% to +0.85%)
 ↳ execute-program 31.83 ms 32.06 ms +1.63% (-0.43% to +1.74%)
 ↳ flock-reductions 191.48 ms 192.27 ms -0.08% (-2.09% to +1.63%)
 ↳ pcs-open 363.50 ms 352.44 ms -3.29% (-4.45% to +10.41%)
 ↳ prove-bus 33.26 ms 34.62 ms +4.08% (-7.09% to +6.27%)
 ↳ prove-constraints 7.61 ms 7.71 ms -0.49% (-1.86% to +6.94%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 324.25 ms 323.44 ms -0.48% (-0.64% to -0.05%)
 ↳ build-witness 21.11 ms 21.16 ms +0.09% (-3.75% to +0.71%)
 ↳ commit 41.50 ms 41.50 ms +0.27% (-0.99% to +1.17%)
 ↳ execute-program 40.03 ms 39.73 ms -0.43% (-1.25% to +2.53%)
 ↳ flock-reductions 86.37 ms 86.10 ms -0.39% (-4.84% to +0.95%)
 ↳ pcs-open 101.95 ms 101.57 ms -0.37% (-1.41% to +0.73%)
 ↳ prove-bus 24.21 ms 24.38 ms +0.67% (-2.27% to +2.73%)
 ↳ prove-constraints 8.55 ms 8.59 ms +0.39% (-2.03% to +3.35%)
fibonacci-asm-2000000 arm64 Neoverse-V2 1.05 s 1.05 s -0.25% (-0.50% to +0.82%)
 ↳ build-witness 35.89 ms 35.88 ms +0.18% (-0.68% to +1.36%)
 ↳ commit 148.12 ms 148.11 ms +0.11% (-0.24% to +0.29%)
 ↳ execute-program 63.61 ms 63.18 ms -1.49% (-2.03% to +4.00%)
 ↳ flock-reductions 310.44 ms 311.06 ms +0.13% (-0.06% to +0.78%)
 ↳ pcs-open 429.98 ms 427.60 ms -0.40% (-1.78% to +1.31%)
 ↳ prove-bus 52.93 ms 52.90 ms +0.01% (-0.17% to +0.24%)
 ↳ prove-constraints 10.71 ms 10.70 ms -0.27% (-0.55% to +1.46%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 472.64 ms 470.95 ms -0.13% (-3.68% to +0.81%)
 ↳ build-witness 34.58 ms 34.78 ms +0.52% (-0.39% to +0.98%)
 ↳ commit 62.06 ms 62.03 ms -0.04% (-1.45% to +0.77%)
 ↳ execute-program 72.36 ms 72.42 ms +0.09% (-3.22% to +4.07%)
 ↳ flock-reductions 120.34 ms 120.47 ms -0.08% (-10.67% to +0.34%)
 ↳ pcs-open 135.99 ms 135.76 ms -0.31% (-0.86% to +0.21%)
 ↳ prove-bus 33.61 ms 33.53 ms -0.79% (-7.58% to +1.04%)
 ↳ prove-constraints 12.27 ms 12.27 ms -0.19% (-2.12% to +1.85%)
hash-50000 arm64 Neoverse-V2 695.15 ms 695.64 ms -0.02% (-0.36% to +1.07%)
 ↳ build-witness 24.67 ms 24.58 ms +0.04% (-5.66% to +0.40%)
 ↳ commit 98.10 ms 97.76 ms -0.11% (-0.42% to +2.32%)
 ↳ execute-program 23.38 ms 23.39 ms -0.05% (-0.31% to +0.82%)
 ↳ flock-reductions 179.09 ms 179.10 ms +0.06% (-0.04% to +1.44%)
 ↳ pcs-open 334.99 ms 334.95 ms -0.04% (-1.24% to +0.28%)
 ↳ prove-bus 27.81 ms 27.83 ms +0.05% (-0.59% to +13.54%)
 ↳ prove-constraints 7.10 ms 7.11 ms +0.55% (-2.28% to +4.79%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 312.68 ms 312.03 ms -0.24% (-0.27% to +0.80%)
 ↳ build-witness 21.58 ms 21.60 ms +0.52% (-0.41% to +1.51%)
 ↳ commit 42.68 ms 42.86 ms +0.74% (-0.72% to +1.16%)
 ↳ execute-program 30.03 ms 29.90 ms -0.25% (-1.54% to +1.18%)
 ↳ flock-reductions 85.88 ms 85.86 ms -0.15% (-0.85% to +1.45%)
 ↳ pcs-open 102.86 ms 103.00 ms +0.10% (-0.11% to +1.84%)
 ↳ prove-bus 20.58 ms 20.43 ms -0.13% (-2.39% to +0.66%)
 ↳ prove-constraints 8.36 ms 8.32 ms -0.58% (-3.10% to +0.89%)
leansphincs-26 arm64 Neoverse-V2 240.18 ms 238.87 ms -0.29% (-1.39% to +0.78%)
 ↳ build-witness 7.16 ms 7.13 ms +0.31% (-2.61% to +2.75%)
 ↳ commit 28.17 ms 28.30 ms +0.20% (-1.24% to +0.84%)
 ↳ execute-program 11.75 ms 11.63 ms -0.63% (-9.26% to +0.63%)
 ↳ flock-reductions 68.74 ms 68.29 ms -0.52% (-4.91% to +0.38%)
 ↳ pcs-open 105.44 ms 104.78 ms -0.01% (-1.13% to +1.96%)
 ↳ prove-bus 14.39 ms 14.34 ms -0.50% (-1.51% to +1.24%)
 ↳ prove-constraints 4.23 ms 4.21 ms -0.78% (-1.88% to -0.13%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 129.45 ms 129.38 ms +0.04% (-0.57% to +0.94%)
 ↳ build-witness 7.45 ms 7.56 ms +1.62% (-0.50% to +2.07%)
 ↳ commit 12.95 ms 13.01 ms +0.57% (-1.22% to +1.03%)
 ↳ execute-program 15.31 ms 15.22 ms -0.97% (-1.98% to +4.43%)
 ↳ flock-reductions 39.73 ms 39.84 ms -0.10% (-0.37% to +0.58%)
 ↳ pcs-open 35.72 ms 35.63 ms -0.51% (-1.16% to +0.77%)
 ↳ prove-bus 13.01 ms 12.97 ms +0.36% (-1.98% to +13.65%)
 ↳ prove-constraints 5.12 ms 5.14 ms -0.41% (-2.60% to +1.57%)
leanxmss-100 arm64 Neoverse-V2 215.98 ms 217.04 ms -0.15% (-1.05% to +1.09%)
 ↳ build-witness 6.18 ms 6.30 ms +1.49% (-2.26% to +3.52%)
 ↳ commit 24.48 ms 24.55 ms -0.06% (-4.99% to +0.61%)
 ↳ execute-program 10.22 ms 10.15 ms -0.47% (-3.24% to +5.49%)
 ↳ flock-reductions 63.51 ms 63.93 ms +0.80% (-2.78% to +4.65%)
 ↳ pcs-open 93.71 ms 93.50 ms -0.41% (-2.51% to +1.65%)
 ↳ prove-bus 12.81 ms 12.85 ms -0.35% (-1.44% to +1.43%)
 ↳ prove-constraints 3.91 ms 3.95 ms +0.17% (-1.45% to +2.62%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 120.71 ms 120.16 ms -0.59% (-0.86% to -0.16%)
 ↳ build-witness 7.93 ms 7.90 ms -1.24% (-6.78% to +1.29%)
 ↳ commit 11.62 ms 11.67 ms -0.05% (-1.28% to +0.65%)
 ↳ execute-program 12.89 ms 12.86 ms -0.17% (-2.10% to +1.90%)
 ↳ flock-reductions 39.63 ms 39.40 ms -0.65% (-1.54% to -0.31%)
 ↳ pcs-open 31.83 ms 31.85 ms +0.09% (-2.05% to +1.34%)
 ↳ prove-bus 11.66 ms 11.62 ms -0.56% (-1.91% to +1.80%)
 ↳ prove-constraints 5.01 ms 4.99 ms -0.38% (-1.00% to +0.88%)
leanxmss-100-1thread arm64 Neoverse-V2 2.07 s 2.07 s -0.17% (-0.79% to +0.43%)
 ↳ build-witness 66.24 ms 66.62 ms +0.57% (-0.08% to +1.55%)
 ↳ commit 358.49 ms 358.73 ms +0.19% (-0.94% to +0.82%)
 ↳ execute-program 10.40 ms 10.42 ms +1.70% (-4.28% to +5.36%)
 ↳ flock-reductions 704.62 ms 702.68 ms -0.31% (-0.62% to +0.35%)
 ↳ pcs-open 796.95 ms 795.23 ms -0.22% (-1.08% to +1.42%)
 ↳ prove-bus 118.17 ms 117.15 ms -1.13% (-2.14% to +0.33%)
 ↳ prove-constraints 14.70 ms 14.19 ms -4.16% (-6.87% to +1.47%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 1.04 s 1.03 s -0.38% (-1.00% to +0.77%)
 ↳ build-witness 75.21 ms 74.28 ms -1.35% (-1.51% to -0.33%)
 ↳ commit 184.19 ms 183.71 ms -0.41% (-1.09% to +1.50%)
 ↳ execute-program 13.16 ms 12.97 ms -1.41% (-14.95% to -1.19%)
 ↳ flock-reductions 304.98 ms 304.20 ms -0.26% (-1.22% to +0.82%)
 ↳ pcs-open 355.29 ms 353.98 ms -0.37% (-1.17% to +0.36%)
 ↳ prove-bus 84.68 ms 85.25 ms +0.83% (-2.91% to +2.40%)
 ↳ prove-constraints 18.89 ms 18.78 ms -0.57% (-1.64% to +2.16%)
shielded-258 arm64 Neoverse-V2 983.08 ms 972.24 ms -1.21% (-2.18% to -0.35%)
 ↳ build-witness 31.76 ms 31.48 ms -0.74% (-17.01% to +1.25%)
 ↳ commit 135.16 ms 134.89 ms -0.37% (-1.57% to +0.42%)
 ↳ execute-program 58.89 ms 57.49 ms -2.46% (-6.45% to -0.77%)
 ↳ flock-reductions 253.86 ms 253.67 ms -0.03% (-0.61% to +0.02%)
 ↳ pcs-open 438.93 ms 429.46 ms -1.99% (-3.14% to -0.15%)
 ↳ prove-bus 54.85 ms 54.65 ms -0.16% (-7.28% to +0.37%)
 ↳ prove-constraints 10.09 ms 10.05 ms -0.04% (-7.18% to +1.68%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 465.59 ms 466.38 ms +0.22% (-1.22% to +1.59%)
 ↳ build-witness 33.76 ms 33.70 ms -0.40% (-0.82% to +3.21%)
 ↳ commit 58.82 ms 58.99 ms +0.29% (-1.08% to +1.80%)
 ↳ execute-program 76.23 ms 78.51 ms +1.32% (-1.78% to +5.91%)
 ↳ flock-reductions 113.29 ms 113.74 ms +0.33% (-2.21% to +1.27%)
 ↳ pcs-open 132.47 ms 132.91 ms +0.68% (-3.04% to +1.11%)
 ↳ prove-bus 38.26 ms 38.91 ms -0.18% (-0.66% to +2.31%)
 ↳ prove-constraints 11.52 ms 11.60 ms +0.70% (-0.99% to +3.68%)
stateproof-5 arm64 Neoverse-V2 1.59 s 1.58 s -0.88% (-1.47% to +0.37%)
 ↳ build-witness 51.61 ms 52.31 ms +1.22% (-4.63% to +1.80%)
 ↳ commit 223.30 ms 225.14 ms +0.39% (-0.83% to +1.02%)
 ↳ execute-program 75.68 ms 76.05 ms +1.15% (-1.78% to +1.95%)
 ↳ flock-reductions 388.02 ms 387.60 ms -0.13% (-0.37% to +1.53%)
 ↳ pcs-open 755.02 ms 739.95 ms -2.20% (-3.25% to +0.34%)
 ↳ prove-bus 83.83 ms 83.10 ms -0.83% (-2.01% to +2.07%)
 ↳ prove-constraints 15.60 ms 15.53 ms -1.57% (-2.61% to +1.53%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 709.97 ms 708.60 ms -0.56% (-1.22% to +3.48%)
 ↳ build-witness 51.63 ms 52.11 ms +0.93% (-1.42% to +4.37%)
 ↳ commit 97.03 ms 96.83 ms -0.15% (-0.63% to -0.02%)
 ↳ execute-program 96.45 ms 97.44 ms +0.29% (-2.98% to +15.98%)
 ↳ flock-reductions 172.74 ms 170.91 ms -1.06% (-5.03% to +0.51%)
 ↳ pcs-open 220.39 ms 219.98 ms -0.23% (-0.30% to +3.73%)
 ↳ prove-bus 54.16 ms 54.01 ms -0.31% (-1.76% to +0.94%)
 ↳ prove-constraints 17.35 ms 17.37 ms -0.80% (-2.29% to +2.65%)

Verifying time

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 4.62 ms 4.62 ms +0.16% (-0.28% to +0.35%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 5.32 ms 5.11 ms -0.74% (-7.29% to +3.24%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 7.27 ms 7.31 ms +0.01% (-1.89% to +2.64%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 8.93 ms 8.81 ms -1.48% (-3.04% to +2.80%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 3.46 ms 3.45 ms -0.09% (-1.27% to +1.65%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 4.37 ms 4.36 ms -1.50% (-4.89% to +5.34%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 3.69 ms 3.71 ms +0.51% (-0.55% to +0.98%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 4.37 ms 4.25 ms -2.12% (-6.71% to -0.92%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 5.85 ms new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 5.37 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 11.27 ms new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 10.85 ms new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 3.85 ms 3.80 ms +1.58% (-4.27% to +3.59%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 4.42 ms 4.42 ms +0.91% (-7.89% to +1.62%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 4.45 ms 4.22 ms -1.50% (-5.75% to +4.78%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 4.73 ms 4.70 ms +0.32% (-4.89% to +1.17%)
falcon-7 arm64 Neoverse-V2 4.37 ms 4.33 ms +0.01% (-2.58% to +0.60%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.76 ms 4.71 ms -0.26% (-1.84% to +1.01%)
fibonacci-asm-2000000 arm64 Neoverse-V2 4.00 ms 4.00 ms +0.27% (-0.42% to +0.36%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.46 ms 4.44 ms -0.61% (-0.87% to +2.12%)
hash-50000 arm64 Neoverse-V2 4.01 ms 4.01 ms -0.01% (-0.39% to +0.40%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.48 ms 4.49 ms +0.25% (-1.56% to +0.40%)
leansphincs-26 arm64 Neoverse-V2 4.13 ms 4.05 ms -0.16% (-3.33% to +0.84%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.53 ms 4.53 ms -0.32% (-0.78% to +0.99%)
leanxmss-100 arm64 Neoverse-V2 4.03 ms 4.05 ms +0.76% (-2.90% to +3.22%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.52 ms 4.57 ms +0.80% (-0.41% to +1.88%)
leanxmss-100-1thread arm64 Neoverse-V2 3.83 ms 3.86 ms +0.48% (-4.25% to +3.86%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 4.10 ms 4.06 ms -0.84% (-3.09% to +0.11%)
shielded-258 arm64 Neoverse-V2 4.21 ms 4.19 ms -1.00% (-3.64% to +0.37%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.79 ms 4.85 ms +1.33% (-1.36% to +2.34%)
stateproof-5 arm64 Neoverse-V2 4.54 ms 4.45 ms -1.09% (-3.19% to +5.80%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 4.90 ms 4.90 ms -0.19% (-1.81% to +1.13%)

Time per operation

benchmark runner CPU base this PR change
blake2s-batch arm64 Neoverse-V2 3.89 ns 3.87 ns -0.33% (-0.69% to +0.60%)
blake2s-batch x86-64 INTEL(R) XEON(R) GOLD 6548N 0.80 ns 0.80 ns +0.25% (-1.24% to +1.38%)
f192-inv arm64 Neoverse-V2 245.05 ns 244.96 ns -0.04% (-0.08% to +0.09%)
f192-inv x86-64 INTEL(R) XEON(R) GOLD 6548N 265.41 ns 265.52 ns +0.05% (-0.04% to +0.07%)
f192-mul-latency arm64 Neoverse-V2 8.04 ns 8.03 ns -0.01% (-0.10% to +0.41%)
f192-mul-latency x86-64 INTEL(R) XEON(R) GOLD 6548N 7.54 ns 7.52 ns -0.12% (-0.41% to +0.59%)
f192-mul-throughput arm64 Neoverse-V2 2.94 ns 2.94 ns +0.00% (-0.14% to +0.00%)
f192-mul-throughput x86-64 INTEL(R) XEON(R) GOLD 6548N 4.43 ns 4.43 ns +0.02% (-0.05% to +0.18%)
f192-mul4-latency arm64 Neoverse-V2 13.07 ns 12.78 ns +0.11% (-3.06% to +4.10%)
f192-mul4-latency x86-64 INTEL(R) XEON(R) GOLD 6548N 10.09 ns 10.10 ns +0.02% (-0.07% to +1.47%)
f192-mul4-throughput arm64 Neoverse-V2 10.76 ns 10.76 ns +0.01% (-0.18% to +0.12%)
f192-mul4-throughput x86-64 INTEL(R) XEON(R) GOLD 6548N 15.60 ns 15.60 ns -0.06% (-0.17% to +0.17%)
f192-square arm64 Neoverse-V2 1.70 ns 1.70 ns +0.00% (+0.00% to +0.12%)
f192-square x86-64 INTEL(R) XEON(R) GOLD 6548N 3.32 ns 3.32 ns -0.06% (-0.09% to +1.83%)
f64-inv arm64 Neoverse-V2 211.61 ns 211.49 ns -0.04% (-0.21% to +0.02%)
f64-inv x86-64 INTEL(R) XEON(R) GOLD 6548N 237.08 ns 237.27 ns +0.07% (-0.07% to +0.27%)
f64-mul arm64 Neoverse-V2 0.56 ns 0.56 ns +0.00% (-0.36% to +0.18%)
f64-mul x86-64 INTEL(R) XEON(R) GOLD 6548N 0.86 ns 0.86 ns +0.00% (-0.12% to +0.12%)
f64-square arm64 Neoverse-V2 0.55 ns 0.55 ns +0.00% (+0.00% to +0.73%)
f64-square x86-64 INTEL(R) XEON(R) GOLD 6548N 1.08 ns 1.08 ns +0.00% (-0.46% to +2.31%)
ntt-forward-22 arm64 Neoverse-V2 4.04 ms 3.99 ms -1.30% (-2.97% to +1.80%)
ntt-forward-22 x86-64 INTEL(R) XEON(R) GOLD 6548N 2.50 ms 2.38 ms +0.92% (-36.68% to +56.26%)
transpose-64bytes arm64 Neoverse-V2 12.00 ns 12.00 ns -0.02% (-0.03% to +0.03%)
transpose-64bytes x86-64 INTEL(R) XEON(R) GOLD 6548N 0.84 ns 0.84 ns +0.00% (-0.72% to +0.72%)
transpose-64x64 arm64 Neoverse-V2 96.34 ns 96.41 ns +0.06% (-0.02% to +0.13%)
transpose-64x64 x86-64 INTEL(R) XEON(R) GOLD 6548N 73.14 ns 73.18 ns -0.03% (-0.10% to +0.98%)

Proof size

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 260,427 B 260,427 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 260,427 B 260,427 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 259,659 B 259,659 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 259,659 B 259,659 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 260,427 B 260,427 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 260,427 B 260,427 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 259,659 B 259,659 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 259,659 B 259,659 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 283,331 B new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 283,331 B new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 285,027 B new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 285,027 B new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 283,331 B 283,331 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 283,331 B 283,331 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 285,027 B 285,027 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 285,027 B 285,027 B 0 B (+0.00%)
falcon-7 arm64 Neoverse-V2 326,382 B 326,382 B 0 B (+0.00%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 326,382 B 326,382 B 0 B (+0.00%)
fibonacci-asm-2000000 arm64 Neoverse-V2 366,742 B 366,742 B 0 B (+0.00%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 366,742 B 366,742 B 0 B (+0.00%)
hash-50000 arm64 Neoverse-V2 326,742 B 326,742 B 0 B (+0.00%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 326,742 B 326,742 B 0 B (+0.00%)
leansphincs-26 arm64 Neoverse-V2 319,734 B 319,734 B 0 B (+0.00%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 319,734 B 319,734 B 0 B (+0.00%)
leanxmss-100 arm64 Neoverse-V2 307,670 B 307,670 B 0 B (+0.00%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 307,670 B 307,670 B 0 B (+0.00%)
leanxmss-100-1thread arm64 Neoverse-V2 307,670 B 307,670 B 0 B (+0.00%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 307,670 B 307,670 B 0 B (+0.00%)
shielded-258 arm64 Neoverse-V2 357,614 B 357,614 B 0 B (+0.00%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 357,614 B 357,614 B 0 B (+0.00%)
stateproof-5 arm64 Neoverse-V2 350,614 B 350,614 B 0 B (+0.00%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 350,614 B 350,614 B 0 B (+0.00%)

Peak memory

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 1780.62 MiB 1780.62 MiB +0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 1176.34 MiB 1172.34 MiB -0.17% (-0.34% to -0.02%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 1780.88 MiB 1780.87 MiB +0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 1176.34 MiB 1172.34 MiB -0.17% (-0.34% to -0.02%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 1956.66 MiB 1951.04 MiB -0.18% (-0.45% to +0.45%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 1303.08 MiB 1300.83 MiB -0.17% (-0.65% to +0.44%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 1990.32 MiB 1986.21 MiB -0.27% (-0.79% to +0.68%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 1368.35 MiB 1370.16 MiB +0.20% (-0.79% to +1.28%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 2266.93 MiB new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 1454.37 MiB new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 2267.26 MiB new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 1460.37 MiB new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 2461.97 MiB 2462.45 MiB -0.02% (-0.44% to +0.69%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 1320.34 MiB 1322.04 MiB +0.14% (-0.54% to +0.43%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 2496.82 MiB 2489.59 MiB -0.52% (-0.69% to +0.64%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 1397.57 MiB 1390.47 MiB -0.51% (-1.27% to +0.11%)
falcon-7 arm64 Neoverse-V2 5835.03 MiB 5835.62 MiB -0.05% (-0.35% to +0.40%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 3205.55 MiB 3208.95 MiB +0.03% (-0.15% to +0.23%)
fibonacci-asm-2000000 arm64 Neoverse-V2 9066.36 MiB 9067.36 MiB +0.02% (-0.09% to +0.09%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 4229.88 MiB 4233.20 MiB +0.07% (-0.23% to +0.37%)
hash-50000 arm64 Neoverse-V2 5753.24 MiB 5754.69 MiB +0.04% (-0.11% to +0.21%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 3049.14 MiB 3047.14 MiB -0.10% (-0.52% to +0.21%)
leansphincs-26 arm64 Neoverse-V2 1929.86 MiB 1931.09 MiB +0.14% (-0.19% to +0.20%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 1025.64 MiB 1025.23 MiB +0.00% (-0.24% to +0.20%)
leanxmss-100 arm64 Neoverse-V2 1721.86 MiB 1722.09 MiB -0.23% (-0.53% to +0.14%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 881.00 MiB 881.04 MiB +0.00% (-0.21% to +0.25%)
leanxmss-100-1thread arm64 Neoverse-V2 1598.45 MiB 1600.43 MiB +0.00% (-0.00% to +0.51%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 990.36 MiB 990.37 MiB +0.00% (-0.20% to +0.41%)
shielded-258 arm64 Neoverse-V2 8349.95 MiB 8358.59 MiB -0.02% (-0.54% to +0.53%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 4263.61 MiB 4270.31 MiB +0.20% (-0.10% to +0.24%)
stateproof-5 arm64 Neoverse-V2 12476.94 MiB 12476.72 MiB +0.00% (-0.05% to +0.02%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 6177.23 MiB 6177.24 MiB +0.00% (-0.10% to +0.03%)

allocations

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 23.34 µs 23.34 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 23.39 µs 23.39 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 27.23 µs 27.23 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 27.28 µs 27.28 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 23.79 µs 23.79 µs +0.00% (-0.08% to +0.01%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 24.25 µs 24.25 µs +0.00% (-0.08% to +0.06%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 27.68 µs 27.68 µs +0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 28.14 µs 28.14 µs +0.00% (-0.05% to +0.02%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 41.84 µs new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 41.88 µs new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 49.74 µs new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 49.79 µs new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 42.36 µs 42.36 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 42.93 µs 42.93 µs +0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 50.27 µs 50.27 µs +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 50.84 µs 50.83 µs -0.01% (-0.05% to +0.00%)
falcon-7 arm64 Neoverse-V2 15.90 µs 15.90 µs +0.01% (+0.00% to +0.01%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 17.57 µs 17.57 µs +0.00% (+0.00% to +0.07%)
fibonacci-asm-2000000 arm64 Neoverse-V2 11.51 µs 11.51 µs +0.00% (-0.01% to +0.00%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 12.37 µs 12.37 µs +0.00% (+0.00% to +0.04%)
hash-50000 arm64 Neoverse-V2 16.89 µs 16.89 µs +0.00% (-0.28% to +0.11%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 18.75 µs 18.75 µs -0.02% (-0.02% to +0.00%)
leansphincs-26 arm64 Neoverse-V2 25.58 µs 25.58 µs +0.00% (+0.00% to +0.00%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 27.14 µs 27.13 µs -0.01% (-0.01% to +0.06%)
leanxmss-100 arm64 Neoverse-V2 26.21 µs 26.21 µs +0.00% (+0.00% to +0.00%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 27.71 µs 27.71 µs -0.00% (-0.02% to +0.02%)
leanxmss-100-1thread arm64 Neoverse-V2 25.05 µs 25.05 µs +0.00% (+0.00% to +0.00%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 25.50 µs 25.50 µs +0.00% (+0.00% to +0.00%)
shielded-258 arm64 Neoverse-V2 45.27 µs 45.27 µs +0.00% (+0.00% to +0.00%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 47.28 µs 47.28 µs +0.00% (-0.04% to +0.01%)
stateproof-5 arm64 Neoverse-V2 19.35 µs 19.36 µs -0.01% (-0.04% to +0.04%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 21.28 µs 21.28 µs +0.00% (-0.07% to +0.00%)

heap-peak

benchmark runner CPU base this PR change
aggregate-leanxmss-100-2to1-1thread-first arm64 Neoverse-V2 738.67 ms 738.67 ms +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N 373.29 ms 373.29 ms +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-node arm64 Neoverse-V2 738.32 ms 738.32 ms +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N 372.94 ms 372.94 ms +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first arm64 Neoverse-V2 738.79 ms 738.82 ms +0.00% (-0.00% to +0.01%)
aggregate-leanxmss-100-2to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 373.99 ms 373.85 ms -0.01% (-0.05% to +0.01%)
aggregate-leanxmss-100-2to1-node arm64 Neoverse-V2 738.02 ms 738.36 ms +0.04% (+0.00% to +0.05%)
aggregate-leanxmss-100-2to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 373.59 ms 373.63 ms +0.02% (+0.01% to +0.06%)
aggregate-leanxmss-100-4to1-1thread-first arm64 Neoverse-V2 none 1.48 s new
aggregate-leanxmss-100-4to1-1thread-first x86-64 INTEL(R) XEON(R) GOLD 6548N none 746.21 ms new
aggregate-leanxmss-100-4to1-1thread-node arm64 Neoverse-V2 none 1.48 s new
aggregate-leanxmss-100-4to1-1thread-node x86-64 INTEL(R) XEON(R) GOLD 6548N none 745.63 ms new
aggregate-leanxmss-100-4to1-first arm64 Neoverse-V2 1.48 s 1.48 s -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first x86-64 INTEL(R) XEON(R) GOLD 6548N 747.04 ms 747.01 ms -0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-4to1-node arm64 Neoverse-V2 1.48 s 1.48 s -0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-4to1-node x86-64 INTEL(R) XEON(R) GOLD 6548N 746.50 ms 746.49 ms -0.00% (-0.06% to +0.01%)
falcon-7 arm64 Neoverse-V2 5.43 s 5.43 s -0.00% (-0.00% to +0.00%)
falcon-7 x86-64 INTEL(R) XEON(R) GOLD 6548N 2.42 s 2.42 s -0.01% (-0.01% to +0.01%)
fibonacci-asm-2000000 arm64 Neoverse-V2 8.70 s 8.70 s -0.00% (-0.00% to +0.00%)
fibonacci-asm-2000000 x86-64 INTEL(R) XEON(R) GOLD 6548N 3.95 s 3.95 s +0.00% (-0.00% to +0.01%)
hash-50000 arm64 Neoverse-V2 5.45 s 5.45 s -0.00% (-0.00% to +0.00%)
hash-50000 x86-64 INTEL(R) XEON(R) GOLD 6548N 2.30 s 2.30 s +0.00% (-0.00% to +0.00%)
leansphincs-26 arm64 Neoverse-V2 1.72 s 1.72 s -0.00% (-0.01% to +0.01%)
leansphincs-26 x86-64 INTEL(R) XEON(R) GOLD 6548N 776.33 ms 776.33 ms +0.00% (-0.01% to +0.04%)
leanxmss-100 arm64 Neoverse-V2 1.49 s 1.49 s -0.00% (-0.01% to +0.02%)
leanxmss-100 x86-64 INTEL(R) XEON(R) GOLD 6548N 666.95 ms 666.94 ms -0.00% (-0.01% to +0.00%)
leanxmss-100-1thread arm64 Neoverse-V2 1.49 s 1.49 s +0.00% (+0.00% to +0.00%)
leanxmss-100-1thread x86-64 INTEL(R) XEON(R) GOLD 6548N 667.32 ms 667.32 ms +0.00% (+0.00% to +0.00%)
shielded-258 arm64 Neoverse-V2 7.89 s 7.89 s +0.00% (-0.00% to +0.00%)
shielded-258 x86-64 INTEL(R) XEON(R) GOLD 6548N 3.66 s 3.66 s +0.00% (-0.00% to +0.01%)
stateproof-5 arm64 Neoverse-V2 12.44 s 12.44 s +0.00% (-0.00% to +0.00%)
stateproof-5 x86-64 INTEL(R) XEON(R) GOLD 6548N 5.82 s 5.82 s -0.00% (-0.00% to +0.00%)

@kevaundray
kevaundray merged commit 40f22fc into leanEthereum:riscv-exploration Oct 7, 2026
50 checks passed
kevaundray added a commit that referenced this pull request Oct 7, 2026
leanxmss-100, aggregate-leanxmss-100-2to1 and aggregate-leanxmss-100-4to1 are now also proven on 4 and 8 threads (`-4thread`, `-8thread`), so each is reported at 1, 4, 8 and all threads on both testbeds.

`ONE_THREAD` becomes `THREADS`, a list of (case, threads): the CLI proves such a case in a child with `LEANVM_NUM_THREADS` set to its count unless its own pool already has that many performance workers. The `-1thread` cases keep their names and behaviour, and `--cycles-only` is unchanged (its JSON is identical to #530's head).

Smoke, `bench --only <case> --repeat 5 --cooldown 0` on a Ryzen 9 7950X3D (32 threads), `/usr/bin/time`'s CPU:
leanxmss-100-1thread 100%, -4thread 360%, -8thread 646%, leanxmss-100 1905%;
aggregate-leanxmss-100-4to1-4thread 343%, -8thread 597%.
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