Skip to content

zk: zero-knowledge leaf proofs by composition (draft) - #532

Closed
kevaundray wants to merge 16 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/zk-leaves
Closed

kevaundray wants to merge 16 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/zk-leaves

Conversation

@kevaundray

@kevaundray kevaundray commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

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

Zero-knowledge leaf proofs (zk mode), draft

An opt-in zk mode for RISC-V leaf proofs, by composition: the plain protocol runs unchanged with every scalar it sends one-time padded under keys committed beforehand, its commitment made hiding, and a small zero-knowledge Spartan over E proves that the padded transcript passes the verifier's checks. Plain proofs are byte-identical to upstream's.

Merged with riscv-exploration at 5735b01: after the BLAKE2s duplex transcript (#552), the Python verifier's removal (#537), the commitment encapsulation (#536) and the pcs overhaul (#599).

What zk hides, and what it does not

  • Hidden: the advice and the whole run. Every scalar of the bus GKR, the linear tables' values, the table sumcheck, flock (zerocheck with its univariate skip, lincheck bit slices), the opening's level-0 lane rounds and the final clock's free bits travels under a one-time pad; Merkle roots and level-0 answers are hidden by padding each lane past its power of two and by one uniform lane.
  • Public: the statement (program, output) and the run's shape: each table's height and the rate. A program whose advice is private must prove at a fixed public shape (documented on Prover and in the crate docs). The exact cycle count is not announced: the final clock's free bits are hidden scalars, each constrained to be a bit by the outer proof.

Design

  • Envelope and seed. A ZK proof travels as LVMZ version 15, its own magic, used by no other open PR. Its duplex is seeded with the domain BLAKE2s("leanvm-rv64im-zk" || 15 || digest) beside the output, so no challenge of one kind of proof is one of the other. Plain proofs keep LVMP 15 and every upstream domain; no shared version moves.
  • Transcript. ProverState pads each scalar sent while set_hidden holds with the next key; the duplex absorbs the padded value, so the BLAKE2s duplex needs no change and the verifier binds exactly the scalars on the wire. Roots are never hidden.
  • Prover randomness. ChaCha20 under a seed from the OS (Randomness::Os) or a test seed (Randomness::Seed), one stream per purpose. Nothing comes from the transcript.
  • Hiding stacked WHIR (after VEIL; Annex B sec:pcs-zk). Each committed lane carries k = q_0 + 2 uniform coefficients past its power of two, folded into the NTT's first pass as one extra butterfly layer. The padding factor is W_m(X + s), nonzero on the whole domain (W_m alone vanishes on the first 2^m points). One uniform lane is committed last, under no claim. After the lane fold the prover reveals the running claim and the padding's fold g_1, and level 0 takes the padding off each query. The query table WHIR_QUERIES_HIDING is pinned to the derivation by a test. CommittedStack::new_padded commits a hiding stack; a hiding configuration (Config::padding) picks the hiding opening, and QueryBatch::padding_correction takes the padding off level 0's queries.
  • Keys live in a separate fixed-shape key commitment (2^20 words: keys, the outer proof's dummies and Libra mask in lane 0, uniform words in lane 1), whose opening hides itself through its uniform lane. Its weight, the outer proof's linear claims on the keys, is neither a point nor a ring-switched claim, so no stack::Statement states it: pcs::whir::open_hiding and verify_hiding are the one public WHIR entry point kept for it, over the dense weight (DenseWeight) the WHIR tests already used.
  • Recording verifier (zk/sym.rs): the verifier's own code over a third arithmetic. Hidden values are affine forms over the keys; products, inverses and bound values become auxiliary variables the prover sends padded after the transcript; equalities become linear constraints. What it records is canonical (monic operands, BLAKE2s digests, ordered and deduplicated), and the prover replays it on its own transcript.
  • Deferred claims are linear in their hidden parts with public weights (producer_twist_terms, MatrixForm::slice_weights), so they become linear constraints.
  • Outer Spartan (zk/spartan.rs): one sumcheck with the eq-weighted Libra mask of the Binius64 whitepaper and two dummy constraints masking (a, b, c); its claims are discharged by the key commitment's opening.

Arguments, unreviewed parts flagged

  • ZK is honest-verifier statistical, then Fiat-Shamir in the ROM: padded scalars are uniform; level-0 answers by the (q_0 + 1)-wise independence of the padded code; roots by one uniform symbol per lane per unopened leaf; everything after the lane fold by the random lane (VEIL Lemma 4.7); the outer proof by its mask, dummies and the self-hiding key opening.
  • Unreviewed: the characteristic-2 MLE-check ZK theorem rests on the Binius64 whitepaper; the adaptation of VEIL's random-lane argument to an E-fold of K-valued lanes is argued, not proven.
  • Soundness: the plain ledger plus the outer Spartan's error, the padded level-0 code (its rate rederived; L0_LIST_BITS still bounds its lists) and the key commitment's opening. To be written as theorems in the spec.

Status

  • Done in Rust: stages 0 to 3 (envelope, seed, CSPRNG, Prover::zk, --zk; hiding WHIR and its Annex B subsection; keys, recording verifier, outer Spartan, key commitment, hidden final clock, hidden deferred claims).
  • Not done: the spec section for the composition and its theorems; ZK variants of the verifier integration tests; forged-outer-proof and wrong-key fault-injection tests; a tracked ZK bench case.
  • Out of scope: recursion verifying ZK leaves (--zk is refused for aggregation and for benchmarks), and ZK recursion proofs.

Tests

  • zk::spartan: completeness, unsatisfied witness, tampered rounds and openings, fresh masks share no scalar.
  • pcs: padded encode against direct evaluation, hiding opening verifies, tampered claim and g_1 refused, wrong pads refused, determinism, hiding table equals the derivation, revealed dimensions at most half a lane, list bound.
  • cpu::zk: a ZK proof verifies, round-trips its bytes, is refused as a plain proof, is a function of its seed, other seeds share no revealed scalar past the announcement; tampered scalars across the stream, the outer proof and the key opening are refused without panic.

An opt-in zk mode for RISC-V leaf proofs, by composition.

- Stage 0: a zero-knowledge proof travels as LVMZ version 15 with its own transcript seed; the prover draws its randomness from ChaCha20 seeded by the OS or a test; Prover::zk and the CLI's --zk. Plain proofs are unchanged.
- Stage 1: the hiding stacked WHIR: lanes padded past their power of two (one butterfly layer folded into the encode's first pass, the padding factor shifted so it vanishes nowhere on the domain), one uniform lane, the revealed claim after the lane fold and the padding's fold, the level-0 correction, a query table rederived for the padded code; Annex B describes it.
- Stages 2 and 3: every scalar the plain protocol sends until its opening's lane fold ends travels under a one-time pad from a separate key commitment; the verifier runs its own code over a recording arithmetic whose canonical constraints a natively zero-knowledge Spartan over E proves (eq-weighted Libra mask, two dummy constraints); the final clock's free bits are hidden scalars constrained to be bits; the deferred claims become linear constraints.

leanXMSS 400 at rate 1/4, single local runs at load about 5: proof 240.6 KiB plain, 350.3 KiB zk; proving 0.486 s and 0.511 s; verifying 3.5 ms and 12.0 ms.

Not yet: the Python verifier's zk mode, the spec of the composition, zk variants of the integration tests, the tracked bench case.
@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Benchmarks: base against this PR, on one runner

f0322a9 merged into its base, against the base 5735b01: 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).

Threads shows the named configuration; default means no thread count is encoded in the benchmark ID.

BLAKE2s

Prover stages
benchmark threads runner base this PR change
hash-50000 16 x86-64 347.31 ms 358.42 ms +3.20% (-5.15% to +10.36%)
 ↳ build-witness 22.98 ms 23.64 ms +2.72% (+1.90% to +6.59%)
 ↳ commit 48.69 ms 48.65 ms +5.39% (-0.55% to +12.08%)
 ↳ execute-program 30.73 ms 30.40 ms -1.40% (-1.88% to +3.33%)
 ↳ flock-reductions 91.00 ms 93.73 ms -0.55% (-2.84% to +16.15%)
 ↳ pcs-open 122.11 ms 129.46 ms +7.16% (-12.67% to +13.89%)
 ↳ prove-bus 21.52 ms 21.83 ms +2.24% (-1.81% to +10.98%)
 ↳ prove-constraints 8.80 ms 8.87 ms -0.30% (-3.53% to +12.73%)

Flock

benchmark threads runner measure base this PR change
flock-load-batch-262144 16 x86-64 Proving time 28.08 ms 28.51 ms +5.16% (+1.24% to +11.22%)

PCS

benchmark threads runner measure base this PR change
pcs-commit-22 16 arm64 Proving time 7.56 ms 7.20 ms -4.79% (-8.87% to -0.40%)

leanSPHINCS

Prover stages
benchmark threads runner base this PR change
leansphincs-26 16 x86-64 139.71 ms 141.49 ms -0.41% (-4.74% to +7.70%)
 ↳ build-witness 8.02 ms 8.20 ms +0.09% (-3.15% to +2.28%)
 ↳ commit 14.41 ms 15.08 ms -0.01% (-0.52% to +5.61%)
 ↳ execute-program 15.18 ms 14.86 ms -2.14% (-2.97% to -0.76%)
 ↳ flock-reductions 39.92 ms 41.46 ms -0.43% (-10.39% to +24.55%)
 ↳ pcs-open 44.11 ms 42.94 ms -0.69% (-4.64% to -0.06%)
 ↳ prove-bus 11.64 ms 12.01 ms +0.88% (-0.30% to +4.61%)
 ↳ prove-constraints 4.98 ms 5.03 ms +0.65% (-2.24% to +4.33%)

leanXMSS

benchmark threads runner measure base this PR change
aggregate-leanxmss-100-2to1-first 16 x86-64 Proving time 95.60 ms 88.92 ms -1.65% (-14.96% to -1.48%)
aggregate-leanxmss-100-2to1-node 16 x86-64 Proving time 94.27 ms 92.27 ms -3.51% (-9.93% to -0.55%)
aggregate-leanxmss-100-2to1-node 16 x86-64 Verifying time 3.82 ms 3.74 ms -1.78% (-20.94% to -0.20%)
aggregate-leanxmss-100-4to1-first 4 x86-64 Verifying time 3.82 ms 3.76 ms -1.54% (-7.47% to -0.40%)
Prover stages
benchmark threads runner base this PR change
aggregate-leanxmss-100-2to1-first 1 x86-64 591.29 ms 591.42 ms +0.29% (-1.58% to +0.75%)
 ↳ build-circuit 15.34 ms 15.23 ms -0.70% (-3.98% to +3.91%)
 ↳ prove-recursion 547.65 ms 547.69 ms +0.40% (-1.60% to +0.85%)
 ↳ reduce-claims 18.75 ms 18.80 ms +0.08% (-0.17% to +3.61%)
 ↳ reduce-in-rows 1.88 ms 1.65 ms -10.91% (-19.29% to -4.90%)
 ↳ verify 7.85 ms 7.84 ms -0.53% (-2.41% to +2.79%)
aggregate-leanxmss-100-2to1-first 4 x86-64 181.70 ms 182.74 ms +0.54% (-5.15% to +1.14%)
 ↳ build-circuit 14.50 ms 14.62 ms -0.76% (-1.46% to +5.20%)
 ↳ prove-recursion 150.79 ms 150.96 ms -0.03% (-5.71% to +0.41%)
 ↳ reduce-claims 6.85 ms 7.85 ms +8.53% (-6.92% to +30.01%)
 ↳ reduce-in-rows 2.02 ms 1.88 ms -7.73% (-11.12% to -2.05%)
 ↳ verify 7.45 ms 7.46 ms +0.04% (-1.22% to +1.87%)
aggregate-leanxmss-100-2to1-first 8 x86-64 115.83 ms 116.71 ms +0.65% (-1.75% to +9.08%)
 ↳ build-circuit 14.09 ms 14.32 ms +2.09% (-2.00% to +4.83%)
 ↳ prove-recursion 85.98 ms 86.27 ms +0.33% (-0.14% to +11.26%)
 ↳ reduce-claims 5.88 ms 6.41 ms +1.22% (-29.81% to +16.26%)
 ↳ reduce-in-rows 2.10 ms 1.92 ms -7.42% (-14.25% to -7.01%)
 ↳ verify 7.59 ms 7.61 ms +0.51% (-2.72% to +1.25%)
aggregate-leanxmss-100-2to1-first 16 x86-64 95.60 ms 88.92 ms -1.65% (-14.96% to -1.48%)
 ↳ build-circuit 13.62 ms 13.53 ms -1.19% (-26.30% to +4.64%)
 ↳ prove-recursion 61.12 ms 59.05 ms -3.38% (-18.90% to +3.68%)
 ↳ reduce-claims 7.60 ms 6.61 ms -21.44% (-33.21% to +19.30%)
 ↳ reduce-in-rows 1.92 ms 1.75 ms -10.26% (-22.97% to -3.50%)
 ↳ verify 7.99 ms 7.98 ms -1.10% (-5.54% to +2.96%)
aggregate-leanxmss-100-2to1-node 1 x86-64 633.50 ms 634.45 ms +0.15% (-0.62% to +0.77%)
 ↳ build-circuit 16.25 ms 16.22 ms -4.14% (-5.72% to +2.15%)
 ↳ prove-recursion 572.15 ms 573.34 ms +0.34% (-0.67% to +0.79%)
 ↳ reduce-claims 35.11 ms 35.71 ms +2.09% (-4.58% to +3.62%)
 ↳ reduce-in-rows 1.99 ms 1.83 ms -7.81% (-9.85% to -0.78%)
aggregate-leanxmss-100-2to1-node 4 x86-64 193.06 ms 192.98 ms +0.00% (-0.76% to +1.81%)
 ↳ build-circuit 15.72 ms 15.66 ms +1.94% (-2.97% to +24.19%)
 ↳ prove-recursion 156.71 ms 156.90 ms +0.16% (-0.23% to +0.65%)
 ↳ reduce-claims 12.37 ms 12.11 ms -1.85% (-8.46% to +1.00%)
 ↳ reduce-in-rows 2.03 ms 1.85 ms -8.98% (-11.29% to -1.95%)
aggregate-leanxmss-100-2to1-node 8 x86-64 122.45 ms 122.03 ms -0.43% (-8.57% to +10.28%)
 ↳ build-circuit 15.84 ms 15.71 ms -1.96% (-5.21% to +3.42%)
 ↳ prove-recursion 89.32 ms 89.31 ms -0.02% (-9.00% to +12.19%)
 ↳ reduce-claims 9.44 ms 9.39 ms -3.68% (-15.66% to +13.53%)
 ↳ reduce-in-rows 2.11 ms 2.02 ms -5.28% (-9.25% to -2.90%)
aggregate-leanxmss-100-2to1-node 16 x86-64 94.27 ms 92.27 ms -3.51% (-9.93% to -0.55%)
 ↳ build-circuit 14.62 ms 14.56 ms -1.72% (-25.43% to +1.31%)
 ↳ prove-recursion 62.34 ms 61.49 ms -1.50% (-4.60% to +0.57%)
 ↳ reduce-claims 10.14 ms 8.77 ms -7.68% (-21.34% to +6.41%)
 ↳ reduce-in-rows 2.00 ms 1.83 ms -8.46% (-22.04% to -4.73%)
aggregate-leanxmss-100-4to1-first 1 x86-64 1.14 s 1.15 s +0.08% (-0.05% to +0.78%)
 ↳ build-circuit 32.65 ms 33.84 ms +3.94% (+0.11% to +7.06%)
 ↳ prove-recursion 1.06 s 1.07 s -0.02% (-0.24% to +0.87%)
 ↳ reduce-claims 26.18 ms 26.32 ms +0.82% (-0.29% to +2.39%)
 ↳ reduce-in-rows 4.10 ms 3.83 ms -5.88% (-16.50% to -4.20%)
 ↳ verify 14.55 ms 14.55 ms -0.01% (-1.16% to +1.10%)
aggregate-leanxmss-100-4to1-first 4 x86-64 346.40 ms 347.43 ms +0.30% (-0.94% to +3.17%)
 ↳ build-circuit 30.97 ms 30.72 ms -0.81% (-2.13% to +4.39%)
 ↳ prove-recursion 288.59 ms 289.63 ms +0.56% (-0.72% to +3.22%)
 ↳ reduce-claims 8.61 ms 8.70 ms +0.79% (-5.14% to +10.56%)
 ↳ reduce-in-rows 4.06 ms 3.77 ms -7.27% (-10.03% to -2.05%)
 ↳ verify 14.15 ms 14.14 ms -0.26% (-2.56% to +1.42%)
aggregate-leanxmss-100-4to1-first 8 x86-64 219.20 ms 218.06 ms -0.26% (-0.95% to +2.51%)
 ↳ build-circuit 31.32 ms 31.08 ms -0.18% (-3.85% to +14.42%)
 ↳ prove-recursion 161.32 ms 160.85 ms +0.00% (-0.40% to +3.50%)
 ↳ reduce-claims 7.91 ms 7.42 ms -6.30% (-14.13% to +15.48%)
 ↳ reduce-in-rows 4.08 ms 3.86 ms -4.81% (-10.19% to -3.97%)
 ↳ verify 14.41 ms 14.40 ms +0.18% (-0.12% to +1.82%)
aggregate-leanxmss-100-4to1-first 16 x86-64 166.65 ms 158.30 ms -2.87% (-5.21% to +0.30%)
 ↳ build-circuit 30.56 ms 30.65 ms -0.71% (-3.35% to +1.56%)
 ↳ prove-recursion 108.36 ms 101.84 ms -2.75% (-6.02% to +1.49%)
 ↳ reduce-claims 8.05 ms 6.78 ms -15.74% (-29.85% to +19.85%)
 ↳ reduce-in-rows 4.04 ms 3.65 ms -8.12% (-9.62% to -5.66%)
 ↳ verify 15.39 ms 15.32 ms -0.29% (-1.75% to +1.11%)
aggregate-leanxmss-100-4to1-node 1 x86-64 1.26 s 1.27 s +0.11% (-0.12% to +0.74%)
 ↳ build-circuit 40.35 ms 40.52 ms +0.48% (-2.35% to +2.39%)
 ↳ prove-recursion 1.13 s 1.13 s +0.25% (-0.25% to +0.74%)
 ↳ reduce-claims 66.44 ms 66.48 ms +0.06% (-0.74% to +4.84%)
 ↳ reduce-in-rows 4.05 ms 3.70 ms -9.25% (-11.62% to -6.62%)
aggregate-leanxmss-100-4to1-node 4 x86-64 381.07 ms 380.99 ms -0.02% (-1.10% to +0.43%)
 ↳ build-circuit 35.75 ms 35.72 ms +0.47% (-0.20% to +2.10%)
 ↳ prove-recursion 306.15 ms 306.16 ms +0.04% (-0.73% to +0.39%)
 ↳ reduce-claims 20.67 ms 20.31 ms -1.74% (-9.49% to +2.62%)
 ↳ reduce-in-rows 4.41 ms 4.13 ms -4.99% (-7.66% to -2.78%)
aggregate-leanxmss-100-4to1-node 8 x86-64 236.12 ms 237.05 ms +0.84% (-0.64% to +7.81%)
 ↳ build-circuit 35.90 ms 35.20 ms -0.60% (-3.41% to +0.85%)
 ↳ prove-recursion 168.77 ms 169.33 ms +0.66% (-0.39% to +10.51%)
 ↳ reduce-claims 13.96 ms 15.32 ms +7.00% (-3.24% to +13.43%)
 ↳ reduce-in-rows 4.45 ms 4.12 ms -7.46% (-9.49% to -6.12%)
aggregate-leanxmss-100-4to1-node 16 x86-64 177.18 ms 171.12 ms -1.75% (-3.42% to +7.17%)
 ↳ build-circuit 36.26 ms 35.83 ms -1.29% (-4.42% to -0.99%)
 ↳ prove-recursion 109.44 ms 105.74 ms -0.92% (-3.91% to +11.36%)
 ↳ reduce-claims 12.66 ms 12.45 ms -3.38% (-12.29% to +8.62%)
 ↳ reduce-in-rows 4.30 ms 3.88 ms -8.94% (-10.01% to -6.95%)
leanxmss-100 1 arm64 1.86 s 1.86 s +0.18% (-0.30% to +0.55%)
 ↳ build-witness 46.79 ms 46.83 ms -0.13% (-0.61% to +0.80%)
 ↳ commit 296.10 ms 296.94 ms +0.01% (-1.30% to +1.17%)
 ↳ execute-program 10.16 ms 10.29 ms +0.21% (-0.41% to +1.50%)
 ↳ flock-reductions 651.33 ms 651.29 ms -0.15% (-0.69% to +0.51%)
 ↳ pcs-open 708.19 ms 709.78 ms +0.22% (-0.56% to +1.22%)
 ↳ prove-bus 132.84 ms 132.62 ms +0.15% (-0.60% to +0.57%)
 ↳ prove-constraints 15.08 ms 15.25 ms +1.34% (+0.25% to +3.39%)
leanxmss-100 1 x86-64 1.07 s 1.07 s -0.55% (-1.85% to +0.82%)
 ↳ build-witness 71.19 ms 70.50 ms -1.60% (-1.75% to -0.03%)
 ↳ commit 192.01 ms 189.34 ms -1.39% (-2.59% to +2.13%)
 ↳ execute-program 13.54 ms 13.75 ms +1.08% (-1.19% to +6.04%)
 ↳ flock-reductions 317.08 ms 313.26 ms -0.49% (-2.14% to +0.48%)
 ↳ pcs-open 373.92 ms 372.23 ms -0.45% (-2.04% to +0.57%)
 ↳ prove-bus 85.34 ms 84.08 ms -1.49% (-2.08% to +1.43%)
 ↳ prove-constraints 19.65 ms 19.78 ms +0.24% (-5.70% to +7.97%)
Every result

BLAKE2s

benchmark threads runner CPU measure base this PR change
hash-50000 16 arm64 Neoverse-V2 Proving time 539.49 ms 541.22 ms +0.21% (-1.18% to +0.95%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 347.31 ms 358.42 ms +3.20% (-5.15% to +10.36%)
hash-50000 16 arm64 Neoverse-V2 Verifying time 4.02 ms 4.05 ms +0.08% (-1.14% to +0.97%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.14 ms 4.13 ms -0.28% (-1.48% to +0.87%)
blake2s-batch 16 arm64 Neoverse-V2 Time per operation 2.89 ns 2.89 ns +0.10% (-0.17% to +0.28%)
blake2s-batch 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 1.03 ns 1.02 ns -1.26% (-19.68% to +17.14%)
hash-50000 16 arm64 Neoverse-V2 Proof size 326,238 B 326,238 B 0 B (+0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 326,238 B 326,238 B 0 B (+0.00%)
hash-50000 16 arm64 Neoverse-V2 Peak memory 4964.39 MiB 4961.02 MiB -0.05% (-0.11% to +0.15%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 2192.91 MiB 2191.62 MiB -0.10% (-0.30% to +0.22%)
hash-50000 16 arm64 Neoverse-V2 Peak heap 4400.73 MiB 4400.78 MiB +0.00% (+0.00% to +0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 1917.28 MiB 1917.30 MiB +0.00% (-0.01% to +0.01%)
hash-50000 16 arm64 Neoverse-V2 Allocations 16,843 16,843 +0.00% (-0.01% to +0.01%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,472 17,470 -0.01% (-0.02% to +0.01%)
Prover stages
benchmark threads runner CPU base this PR change
hash-50000 16 arm64 Neoverse-V2 539.49 ms 541.22 ms +0.21% (-1.18% to +0.95%)
 ↳ build-witness 20.91 ms 20.71 ms -1.12% (-1.46% to +0.07%)
 ↳ commit 83.79 ms 83.23 ms -0.72% (-0.76% to +0.97%)
 ↳ execute-program 24.29 ms 24.28 ms -0.33% (-2.36% to +0.65%)
 ↳ flock-reductions 171.50 ms 171.97 ms +0.28% (+0.05% to +0.56%)
 ↳ pcs-open 200.86 ms 202.56 ms +0.65% (-2.76% to +1.52%)
 ↳ prove-bus 30.68 ms 30.80 ms +0.77% (-0.04% to +1.23%)
 ↳ prove-constraints 7.17 ms 7.25 ms +1.13% (-3.13% to +3.69%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 347.31 ms 358.42 ms +3.20% (-5.15% to +10.36%)
 ↳ build-witness 22.98 ms 23.64 ms +2.72% (+1.90% to +6.59%)
 ↳ commit 48.69 ms 48.65 ms +5.39% (-0.55% to +12.08%)
 ↳ execute-program 30.73 ms 30.40 ms -1.40% (-1.88% to +3.33%)
 ↳ flock-reductions 91.00 ms 93.73 ms -0.55% (-2.84% to +16.15%)
 ↳ pcs-open 122.11 ms 129.46 ms +7.16% (-12.67% to +13.89%)
 ↳ prove-bus 21.52 ms 21.83 ms +2.24% (-1.81% to +10.98%)
 ↳ prove-constraints 8.80 ms 8.87 ms -0.30% (-3.53% to +12.73%)

Fibonacci

benchmark threads runner CPU measure base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proving time 846.16 ms 847.58 ms +0.26% (+0.07% to +1.46%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 508.12 ms 505.42 ms +0.49% (-3.46% to +4.59%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Verifying time 3.93 ms 3.93 ms +0.20% (-0.89% to +1.41%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.08 ms 4.08 ms +0.27% (-1.59% to +2.84%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proof size 366,462 B 366,462 B 0 B (+0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 366,462 B 366,462 B 0 B (+0.00%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak memory 7653.45 MiB 7651.57 MiB -0.05% (-0.06% to +0.04%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 3563.96 MiB 3564.23 MiB +0.02% (-0.11% to +0.22%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak heap 7049.79 MiB 7049.78 MiB -0.00% (-0.00% to +0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 3307.40 MiB 3307.45 MiB -0.00% (-0.00% to +0.01%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Allocations 11,803 11,803 +0.00% (+0.00% to +0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 12,394 12,394 +0.00% (+0.00% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 846.16 ms 847.58 ms +0.26% (+0.07% to +1.46%)
 ↳ build-witness 29.10 ms 29.28 ms +0.93% (-0.40% to +1.38%)
 ↳ commit 125.97 ms 125.41 ms -0.45% (-0.94% to -0.11%)
 ↳ execute-program 64.36 ms 65.35 ms +2.40% (-1.69% to +19.57%)
 ↳ flock-reductions 293.63 ms 294.23 ms +0.23% (-0.02% to +0.39%)
 ↳ pcs-open 262.47 ms 262.93 ms +0.10% (-0.08% to +0.33%)
 ↳ prove-bus 59.44 ms 59.53 ms +0.21% (-0.22% to +0.42%)
 ↳ prove-constraints 10.90 ms 10.85 ms -0.76% (-1.04% to +0.41%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 508.12 ms 505.42 ms +0.49% (-3.46% to +4.59%)
 ↳ build-witness 38.83 ms 37.97 ms -0.35% (-5.65% to +3.57%)
 ↳ commit 70.73 ms 68.14 ms -0.25% (-8.17% to +3.69%)
 ↳ execute-program 73.10 ms 72.85 ms -0.34% (-1.13% to +0.31%)
 ↳ flock-reductions 134.52 ms 135.36 ms -0.06% (-5.08% to +8.76%)
 ↳ pcs-open 137.33 ms 138.16 ms +0.08% (-2.19% to +6.37%)
 ↳ prove-bus 37.78 ms 37.40 ms +3.79% (-7.71% to +5.29%)
 ↳ prove-constraints 13.89 ms 13.13 ms +0.78% (-6.74% to +6.92%)

Field and transpose kernels

benchmark threads runner CPU measure base this PR change
f192-inv default arm64 Neoverse-V2 Time per operation 244.98 ns 245.14 ns +0.08% (-0.00% to +0.34%)
f192-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 267.39 ns 267.65 ns -0.06% (-0.58% to +0.92%)
f192-mul-latency default arm64 Neoverse-V2 Time per operation 8.04 ns 8.02 ns -0.39% (-0.63% to +0.05%)
f192-mul-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 7.58 ns 7.59 ns -0.16% (-0.83% to +0.33%)
f192-mul-throughput default arm64 Neoverse-V2 Time per operation 2.94 ns 2.94 ns -0.03% (-0.20% to +0.03%)
f192-mul-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 4.49 ns 4.49 ns -0.40% (-1.42% to +1.42%)
f192-mul4-latency default arm64 Neoverse-V2 Time per operation 12.74 ns 12.76 ns -0.25% (-3.19% to +0.67%)
f192-mul4-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 10.18 ns 10.15 ns -0.12% (-0.62% to +0.96%)
f192-mul4-throughput default arm64 Neoverse-V2 Time per operation 10.76 ns 10.76 ns +0.00% (-0.12% to +0.17%)
f192-mul4-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 15.78 ns 15.72 ns -0.36% (-0.89% to -0.16%)
f192-square default arm64 Neoverse-V2 Time per operation 1.70 ns 1.70 ns +0.06% (-0.06% to +0.12%)
f192-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 3.37 ns 3.34 ns -0.62% (-1.21% to +0.75%)
f64-inv default arm64 Neoverse-V2 Time per operation 211.58 ns 211.56 ns -0.03% (-0.08% to +0.04%)
f64-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 239.63 ns 239.69 ns -0.55% (-1.25% to +0.78%)
f64-mul default arm64 Neoverse-V2 Time per operation 0.56 ns 0.56 ns +0.00% (-0.18% to +0.18%)
f64-mul default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.87 ns 0.87 ns -0.69% (-2.36% to +0.11%)
f64-square default arm64 Neoverse-V2 Time per operation 0.55 ns 0.55 ns +0.00% (-1.08% to +0.18%)
f64-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 1.10 ns 1.09 ns -0.55% (-1.36% to +0.37%)
transpose-64bytes default arm64 Neoverse-V2 Time per operation 12.01 ns 12.00 ns -0.02% (-0.04% to +0.03%)
transpose-64bytes default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.85 ns 0.85 ns -1.28% (-5.90% to +0.24%)
transpose-64x64 default arm64 Neoverse-V2 Time per operation 96.45 ns 96.42 ns -0.05% (-0.10% to +0.09%)
transpose-64x64 default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 74.13 ns 73.99 ns +0.37% (-1.27% to +1.70%)

Flock

benchmark threads runner CPU measure base this PR change
flock-alu-batch-262144 16 arm64 Neoverse-V2 Proving time 53.95 ms 53.76 ms -0.28% (-1.13% to -0.08%)
flock-alu-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.97 ms 29.22 ms +2.01% (-0.04% to +9.08%)
flock-div-batch-262144 16 arm64 Neoverse-V2 Proving time 386.49 ms 385.54 ms -0.35% (-0.77% to +0.35%)
flock-div-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 170.05 ms 170.15 ms -0.00% (-4.69% to +5.71%)
flock-hash-batch-262144 16 arm64 Neoverse-V2 Proving time 806.27 ms 806.13 ms +0.46% (-0.48% to +1.44%)
flock-hash-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 360.18 ms 357.63 ms -0.43% (-1.23% to +0.71%)
flock-ld-batch-262144 16 arm64 Neoverse-V2 Proving time 16.37 ms 16.48 ms +1.25% (-0.92% to +18.66%)
flock-ld-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 9.89 ms 9.62 ms -1.75% (-22.50% to +33.92%)
flock-load-batch-262144 16 arm64 Neoverse-V2 Proving time 52.09 ms 51.90 ms -0.36% (-4.33% to +8.64%)
flock-load-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.08 ms 28.51 ms +5.16% (+1.24% to +11.22%)
flock-mul-batch-262144 16 arm64 Neoverse-V2 Proving time 198.30 ms 197.89 ms -0.51% (-0.97% to +5.49%)
flock-mul-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 96.62 ms 93.70 ms +3.86% (-10.79% to +7.94%)
flock-mulh-batch-262144 16 arm64 Neoverse-V2 Proving time 378.45 ms 377.89 ms -0.27% (-1.61% to +0.22%)
flock-mulh-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 169.14 ms 168.52 ms +0.19% (-0.62% to +6.05%)
flock-sd-batch-262144 16 arm64 Neoverse-V2 Proving time 15.56 ms 15.71 ms +1.07% (-0.96% to +6.86%)
flock-sd-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 9.60 ms 9.43 ms -0.28% (-23.16% to +35.00%)
flock-shift-batch-262144 16 arm64 Neoverse-V2 Proving time 54.28 ms 54.26 ms -0.47% (-0.55% to +0.72%)
flock-shift-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.92 ms 28.10 ms -0.62% (-18.09% to +27.51%)
flock-store-batch-262144 16 arm64 Neoverse-V2 Proving time 52.65 ms 52.41 ms -0.30% (-2.20% to +0.91%)
flock-store-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 27.36 ms 28.01 ms +0.73% (-4.60% to +27.44%)

PCS

benchmark threads runner CPU measure base this PR change
pcs-commit-22 16 arm64 Neoverse-V2 Proving time 7.56 ms 7.20 ms -4.79% (-8.87% to -0.40%)
pcs-commit-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 5.12 ms 4.61 ms -8.55% (-17.62% to +8.62%)
pcs-open-22 16 arm64 Neoverse-V2 Proving time 23.24 ms 21.49 ms -7.25% (-12.43% to +0.55%)
pcs-open-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 14.37 ms 14.45 ms -2.46% (-11.62% to +4.21%)
ntt-forward-22 16 arm64 Neoverse-V2 Time per operation 3.65 ms 3.73 ms +0.91% (-0.79% to +2.72%)
ntt-forward-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 2.92 ms 2.63 ms -9.53% (-10.86% to +8.70%)

leanSPHINCS

benchmark threads runner CPU measure base this PR change
leansphincs-26 16 arm64 Neoverse-V2 Proving time 187.23 ms 187.25 ms -0.19% (-0.73% to +0.44%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 139.71 ms 141.49 ms -0.41% (-4.74% to +7.70%)
leansphincs-26 16 arm64 Neoverse-V2 Verifying time 3.85 ms 3.82 ms -0.28% (-1.35% to +0.26%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.07 ms 4.14 ms +0.69% (-0.23% to +3.00%)
leansphincs-26 16 arm64 Neoverse-V2 Proof size 319,806 B 319,806 B 0 B (+0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 319,806 B 319,806 B 0 B (+0.00%)
leansphincs-26 16 arm64 Neoverse-V2 Peak memory 1740.42 MiB 1743.61 MiB +0.25% (-0.09% to +0.39%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 819.18 MiB 822.50 MiB +0.39% (-0.14% to +1.07%)
leansphincs-26 16 arm64 Neoverse-V2 Peak heap 1395.60 MiB 1395.62 MiB +0.00% (-0.01% to +0.01%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 649.89 MiB 649.80 MiB -0.01% (-0.02% to +0.01%)
leansphincs-26 16 arm64 Neoverse-V2 Allocations 25,355 25,355 +0.00% (-0.00% to +0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 26,040 26,039 +0.00% (-0.00% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
leansphincs-26 16 arm64 Neoverse-V2 187.23 ms 187.25 ms -0.19% (-0.73% to +0.44%)
 ↳ build-witness 5.65 ms 5.64 ms +0.14% (-2.50% to +0.86%)
 ↳ commit 23.55 ms 23.68 ms +0.18% (-0.25% to +0.91%)
 ↳ execute-program 11.57 ms 11.56 ms +0.06% (-1.74% to +1.62%)
 ↳ flock-reductions 62.01 ms 62.15 ms +0.22% (-1.53% to +0.68%)
 ↳ pcs-open 64.67 ms 64.58 ms -0.65% (-2.86% to +2.41%)
 ↳ prove-bus 15.17 ms 15.08 ms -0.60% (-0.68% to -0.20%)
 ↳ prove-constraints 4.24 ms 4.22 ms +0.09% (-4.77% to +1.17%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 139.71 ms 141.49 ms -0.41% (-4.74% to +7.70%)
 ↳ build-witness 8.02 ms 8.20 ms +0.09% (-3.15% to +2.28%)
 ↳ commit 14.41 ms 15.08 ms -0.01% (-0.52% to +5.61%)
 ↳ execute-program 15.18 ms 14.86 ms -2.14% (-2.97% to -0.76%)
 ↳ flock-reductions 39.92 ms 41.46 ms -0.43% (-10.39% to +24.55%)
 ↳ pcs-open 44.11 ms 42.94 ms -0.69% (-4.64% to -0.06%)
 ↳ prove-bus 11.64 ms 12.01 ms +0.88% (-0.30% to +4.61%)
 ↳ prove-constraints 4.98 ms 5.03 ms +0.65% (-2.24% to +4.33%)

leanXMSS

benchmark threads runner CPU measure base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proving time 985.71 ms 985.08 ms -0.27% (-0.50% to +0.24%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proving time 284.49 ms 285.13 ms -0.00% (-0.62% to +1.09%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proving time 161.36 ms 161.15 ms -0.13% (-0.25% to +0.30%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proving time 108.39 ms 107.81 ms -0.54% (-1.02% to +0.22%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 591.29 ms 591.42 ms +0.29% (-1.58% to +0.75%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 181.70 ms 182.74 ms +0.54% (-5.15% to +1.14%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 115.83 ms 116.71 ms +0.65% (-1.75% to +9.08%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 95.60 ms 88.92 ms -1.65% (-14.96% to -1.48%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proving time 1.06 s 1.06 s +0.03% (-0.08% to +0.12%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proving time 303.01 ms 303.05 ms +0.01% (-0.46% to +0.69%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proving time 171.16 ms 171.41 ms +0.13% (-0.20% to +0.47%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proving time 112.26 ms 113.04 ms +0.59% (-2.71% to +4.26%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 633.50 ms 634.45 ms +0.15% (-0.62% to +0.77%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 193.06 ms 192.98 ms +0.00% (-0.76% to +1.81%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 122.45 ms 122.03 ms -0.43% (-8.57% to +10.28%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 94.27 ms 92.27 ms -3.51% (-9.93% to -0.55%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proving time 1.95 s 1.95 s +0.07% (-0.40% to +0.44%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proving time 531.95 ms 531.67 ms +0.05% (-0.21% to +0.12%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proving time 308.55 ms 307.94 ms -0.01% (-0.25% to +0.07%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proving time 197.63 ms 196.84 ms -0.10% (-0.70% to +0.55%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.14 s 1.15 s +0.08% (-0.05% to +0.78%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 346.40 ms 347.43 ms +0.30% (-0.94% to +3.17%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 219.20 ms 218.06 ms -0.26% (-0.95% to +2.51%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 166.65 ms 158.30 ms -2.87% (-5.21% to +0.30%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proving time 2.13 s 2.14 s +0.24% (-0.12% to +0.33%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proving time 581.86 ms 583.29 ms +0.25% (-0.64% to +0.49%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proving time 337.11 ms 337.64 ms +0.12% (-0.06% to +0.63%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proving time 216.65 ms 215.79 ms -0.77% (-1.17% to +4.22%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.26 s 1.27 s +0.11% (-0.12% to +0.74%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 381.07 ms 380.99 ms -0.02% (-1.10% to +0.43%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 236.12 ms 237.05 ms +0.84% (-0.64% to +7.81%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 177.18 ms 171.12 ms -1.75% (-3.42% to +7.17%)
leanxmss-100 1 arm64 Neoverse-V2 Proving time 1.86 s 1.86 s +0.18% (-0.30% to +0.55%)
leanxmss-100 4 arm64 Neoverse-V2 Proving time 490.95 ms 489.51 ms +0.02% (-0.56% to +0.08%)
leanxmss-100 8 arm64 Neoverse-V2 Proving time 278.02 ms 278.02 ms +0.12% (-0.50% to +0.29%)
leanxmss-100 16 arm64 Neoverse-V2 Proving time 169.27 ms 169.72 ms +0.59% (-3.66% to +4.96%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.07 s 1.07 s -0.55% (-1.85% to +0.82%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 299.16 ms 299.27 ms +0.04% (-0.46% to +0.63%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 179.59 ms 179.72 ms -0.14% (-0.42% to +0.58%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 135.53 ms 130.72 ms -3.23% (-3.76% to +2.19%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Verifying time 4.78 ms 4.76 ms -0.17% (-1.06% to +0.96%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Verifying time 3.70 ms 3.74 ms +0.87% (-0.12% to +1.18%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Verifying time 3.23 ms 3.23 ms +0.06% (-0.34% to +1.01%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Verifying time 3.29 ms 3.29 ms +0.44% (-5.41% to +5.35%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.46 ms 4.47 ms +0.30% (-0.09% to +1.56%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.57 ms 3.56 ms -0.24% (-4.23% to +0.84%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.54 ms 3.55 ms +0.02% (-3.62% to +2.99%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.68 ms 3.65 ms -0.57% (-21.27% to +3.20%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Verifying time 7.63 ms 7.57 ms -0.37% (-3.00% to +0.09%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Verifying time 4.54 ms 4.53 ms -0.21% (-1.08% to +1.04%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Verifying time 3.65 ms 3.67 ms +0.47% (-0.06% to +0.80%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Verifying time 3.56 ms 3.64 ms +1.89% (-0.01% to +4.16%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 7.14 ms 7.03 ms -1.79% (-7.94% to +2.61%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.51 ms 4.47 ms -1.03% (-1.64% to +2.47%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.07 ms 4.01 ms -1.59% (-4.32% to +4.59%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.82 ms 3.74 ms -1.78% (-20.94% to -0.20%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Verifying time 5.69 ms 5.66 ms -0.12% (-1.32% to +0.49%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Verifying time 3.77 ms 3.77 ms -0.07% (-0.89% to +0.55%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Verifying time 3.58 ms 3.59 ms +0.44% (-0.46% to +1.97%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Verifying time 3.56 ms 3.57 ms +0.77% (-0.06% to +1.33%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 5.12 ms 5.23 ms +2.27% (-6.39% to +5.10%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.82 ms 3.76 ms -1.54% (-7.47% to -0.40%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.79 ms 3.71 ms -1.65% (-5.29% to +0.38%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.86 ms 3.88 ms -0.34% (-3.12% to +5.28%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Verifying time 11.26 ms 11.31 ms +0.85% (-4.12% to +1.89%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Verifying time 5.24 ms 5.24 ms -0.00% (-0.37% to +2.18%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Verifying time 4.39 ms 4.40 ms -0.05% (-0.68% to +1.25%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Verifying time 4.06 ms 4.08 ms +0.87% (-0.77% to +1.44%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 12.55 ms 12.70 ms +0.13% (-0.50% to +2.36%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 5.81 ms 5.78 ms -0.16% (-2.92% to +2.09%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.72 ms 4.74 ms +0.34% (-1.32% to +0.88%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.37 ms 4.36 ms -0.14% (-1.32% to +0.37%)
leanxmss-100 1 arm64 Neoverse-V2 Verifying time 3.82 ms 3.80 ms -0.55% (-1.92% to +0.04%)
leanxmss-100 4 arm64 Neoverse-V2 Verifying time 3.62 ms 3.62 ms -0.45% (-1.79% to +6.27%)
leanxmss-100 8 arm64 Neoverse-V2 Verifying time 3.85 ms 3.85 ms -0.03% (-0.63% to +0.26%)
leanxmss-100 16 arm64 Neoverse-V2 Verifying time 3.96 ms 3.97 ms +0.08% (-0.32% to +0.72%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.96 ms 3.94 ms -0.03% (-1.65% to +1.07%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.77 ms 3.77 ms -0.07% (-0.39% to +0.21%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.85 ms 3.85 ms +0.38% (-0.75% to +2.57%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.00 ms 4.01 ms +0.45% (-0.34% to +3.46%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,955 B 259,955 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 259,059 B 259,059 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 284,779 B 284,779 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 283,691 B 283,691 B 0 B (+0.00%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 283,691 B 283,691 B 0 B (+0.00%)
leanxmss-100 1 arm64 Neoverse-V2 Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 305,886 B 305,886 B 0 B (+0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 305,886 B 305,886 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak memory 1560.23 MiB 1560.60 MiB +0.02% (+0.02% to +0.03%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak memory 1592.22 MiB 1592.12 MiB +0.04% (-0.17% to +0.10%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak memory 1626.79 MiB 1626.93 MiB +0.08% (-0.10% to +0.34%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak memory 1707.33 MiB 1704.82 MiB -0.55% (-0.84% to +0.24%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 834.35 MiB 834.88 MiB +0.27% (+0.03% to +0.33%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 863.63 MiB 866.05 MiB +0.65% (-0.07% to +0.83%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 891.49 MiB 892.80 MiB +0.33% (-1.05% to +0.78%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 937.23 MiB 932.39 MiB -0.21% (-0.76% to +0.24%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak memory 1560.48 MiB 1560.85 MiB +0.02% (+0.02% to +0.03%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak memory 1592.97 MiB 1593.05 MiB +0.02% (-0.13% to +0.12%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak memory 1629.81 MiB 1630.77 MiB +0.03% (-0.30% to +0.36%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak memory 1727.90 MiB 1718.86 MiB -0.61% (-1.07% to +1.08%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 834.35 MiB 834.88 MiB +0.27% (+0.03% to +0.33%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 872.05 MiB 872.32 MiB +0.11% (-0.13% to +0.39%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 908.19 MiB 909.30 MiB +0.12% (-0.25% to +1.19%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 970.30 MiB 965.59 MiB -1.05% (-1.27% to +0.62%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak memory 1948.40 MiB 1948.75 MiB +0.02% (+0.01% to +0.03%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak memory 1980.32 MiB 1982.82 MiB +0.14% (-0.12% to +0.24%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak memory 2020.60 MiB 2016.18 MiB -0.10% (-0.38% to -0.04%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak memory 2105.18 MiB 2105.91 MiB -0.15% (-0.68% to +0.44%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1020.37 MiB 1020.88 MiB +0.05% (-0.17% to +0.22%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1055.59 MiB 1056.80 MiB +0.11% (+0.05% to +0.55%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1087.21 MiB 1085.89 MiB +0.20% (-0.66% to +0.51%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1136.47 MiB 1133.25 MiB -0.21% (-1.00% to +0.50%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak memory 1956.92 MiB 1949.27 MiB +0.00% (-0.39% to +0.12%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak memory 1985.55 MiB 1985.88 MiB +0.03% (-0.02% to +0.12%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak memory 2023.49 MiB 2021.34 MiB -0.10% (-0.20% to -0.04%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak memory 2123.51 MiB 2117.61 MiB -0.17% (-0.58% to +0.63%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1048.37 MiB 1046.88 MiB -0.17% (-0.52% to +0.98%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1071.10 MiB 1072.25 MiB +0.13% (-0.33% to +0.35%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1103.40 MiB 1100.22 MiB -0.20% (-0.52% to +0.33%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1170.44 MiB 1166.71 MiB -0.08% (-1.24% to +0.57%)
leanxmss-100 1 arm64 Neoverse-V2 Peak memory 1404.52 MiB 1402.82 MiB +0.01% (-0.12% to +0.02%)
leanxmss-100 4 arm64 Neoverse-V2 Peak memory 1420.05 MiB 1420.84 MiB +0.16% (+0.03% to +0.28%)
leanxmss-100 8 arm64 Neoverse-V2 Peak memory 1457.06 MiB 1455.30 MiB -0.03% (-0.55% to +0.15%)
leanxmss-100 16 arm64 Neoverse-V2 Peak memory 1518.48 MiB 1521.24 MiB +0.07% (-0.60% to +0.74%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 646.35 MiB 646.38 MiB +0.04% (+0.00% to +0.04%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 668.03 MiB 665.71 MiB -0.35% (-0.61% to +0.26%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 686.70 MiB 687.18 MiB +0.07% (-0.72% to +0.76%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 714.75 MiB 712.24 MiB -0.28% (-0.53% to +0.22%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak heap 600.70 MiB 600.70 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak heap 600.63 MiB 600.64 MiB +0.00% (-0.02% to +0.01%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak heap 600.63 MiB 600.57 MiB -0.01% (-0.02% to +0.01%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak heap 600.53 MiB 600.60 MiB +0.01% (-0.00% to +0.02%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.99 MiB 318.99 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 319.07 MiB 319.00 MiB -0.01% (-0.06% to +0.03%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 319.03 MiB 319.06 MiB +0.00% (-0.02% to +0.05%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 319.14 MiB 319.12 MiB -0.01% (-0.08% to +0.05%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak heap 600.37 MiB 600.37 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak heap 600.30 MiB 600.37 MiB +0.00% (-0.00% to +0.01%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak heap 600.30 MiB 600.30 MiB +0.00% (-0.02% to +0.01%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak heap 600.26 MiB 600.27 MiB +0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.66 MiB 318.66 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.72 MiB 318.67 MiB +0.01% (-0.02% to +0.01%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.68 MiB 318.75 MiB +0.01% (-0.02% to +0.02%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 318.71 MiB 318.77 MiB +0.01% (-0.01% to +0.06%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak heap 1201.27 MiB 1201.27 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak heap 1201.27 MiB 1201.29 MiB +0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak heap 1201.16 MiB 1201.22 MiB +0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak heap 1201.12 MiB 1201.14 MiB +0.00% (-0.01% to +0.02%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.91 MiB 637.91 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.89 MiB 637.89 MiB -0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.81 MiB 637.86 MiB -0.00% (-0.02% to +0.02%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.88 MiB 637.84 MiB -0.02% (-0.02% to +0.03%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak heap 1200.73 MiB 1200.73 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak heap 1200.72 MiB 1200.71 MiB -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak heap 1200.60 MiB 1200.61 MiB -0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak heap 1200.58 MiB 1200.58 MiB -0.00% (-0.01% to +0.01%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.36 MiB 637.36 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.33 MiB 637.33 MiB -0.00% (-0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.35 MiB 637.20 MiB -0.02% (-0.04% to -0.00%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 637.37 MiB 637.41 MiB +0.01% (-0.00% to +0.03%)
leanxmss-100 1 arm64 Neoverse-V2 Peak heap 1201.98 MiB 1201.98 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Peak heap 1202.04 MiB 1202.02 MiB -0.00% (-0.01% to +0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Peak heap 1201.81 MiB 1201.86 MiB +0.00% (-0.00% to +0.01%)
leanxmss-100 16 arm64 Neoverse-V2 Peak heap 1201.67 MiB 1201.64 MiB +0.00% (-0.00% to +0.01%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.73 MiB 557.73 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.80 MiB 557.75 MiB -0.00% (-0.01% to +0.01%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.87 MiB 557.91 MiB -0.00% (-0.01% to +0.02%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 557.99 MiB 558.11 MiB +0.02% (+0.01% to +0.03%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Allocations 20,253 20,263 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Allocations 20,379 20,389 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Allocations 20,523 20,533 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Allocations 20,811 20,821 +0.05% (+0.05% to +0.06%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,299 20,309 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,428 20,438 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,576 20,586 +0.05% (+0.05% to +0.05%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,872 20,882 +0.05% (+0.05% to +0.12%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Allocations 25,219 25,227 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Allocations 25,345 25,353 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Allocations 25,489 25,497 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Allocations 25,777 25,785 +0.03% (+0.03% to +0.11%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,265 25,273 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,394 25,402 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,542 25,550 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,838 25,846 +0.03% (+0.03% to +0.04%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Allocations 35,535 35,555 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Allocations 35,673 35,693 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Allocations 35,857 35,877 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Allocations 36,177 36,197 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,581 35,601 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,722 35,742 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,910 35,930 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 36,238 36,258 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Allocations 45,462 45,478 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Allocations 45,600 45,616 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Allocations 45,784 45,800 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Allocations 46,104 46,120 +0.03% (-0.02% to +0.03%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 45,508 45,524 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 45,649 45,665 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 45,837 45,853 +0.03% (+0.03% to +0.03%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 46,165 46,181 +0.03% (+0.03% to +0.04%)
leanxmss-100 1 arm64 Neoverse-V2 Allocations 25,031 25,031 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Allocations 25,249 25,249 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Allocations 25,485 25,485 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Allocations 25,957 25,957 +0.00% (-0.00% to +0.27%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,529 25,529 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,784 25,784 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 26,068 26,068 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 26,636 26,635 -0.00% (-0.01% to +0.01%)
Prover stages
benchmark threads runner CPU base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 985.71 ms 985.08 ms -0.27% (-0.50% to +0.24%)
 ↳ build-circuit 12.71 ms 12.78 ms +0.48% (-0.76% to +1.20%)
 ↳ prove-recursion 948.93 ms 948.12 ms -0.28% (-0.52% to +0.26%)
 ↳ reduce-claims 15.78 ms 15.73 ms -0.29% (-1.00% to +0.88%)
 ↳ reduce-in-rows 1.48 ms 1.49 ms +0.03% (-3.57% to +3.31%)
 ↳ verify 6.82 ms 6.81 ms +0.16% (-0.31% to +0.81%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 284.49 ms 285.13 ms -0.00% (-0.62% to +1.09%)
 ↳ build-circuit 11.58 ms 11.47 ms -0.55% (-2.98% to +3.35%)
 ↳ prove-recursion 258.90 ms 259.46 ms +0.03% (-0.60% to +0.98%)
 ↳ reduce-claims 5.46 ms 5.41 ms -1.02% (-1.89% to +1.56%)
 ↳ reduce-in-rows 1.58 ms 1.60 ms -0.09% (-1.24% to +2.29%)
 ↳ verify 6.85 ms 6.86 ms -0.06% (-1.05% to +0.76%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 161.36 ms 161.15 ms -0.13% (-0.25% to +0.30%)
 ↳ build-circuit 10.43 ms 10.33 ms -0.58% (-1.88% to +0.14%)
 ↳ prove-recursion 138.36 ms 138.46 ms +0.07% (-0.24% to +0.23%)
 ↳ reduce-claims 4.33 ms 4.43 ms +2.48% (-4.63% to +8.76%)
 ↳ reduce-in-rows 1.49 ms 1.49 ms -2.09% (-2.90% to +4.42%)
 ↳ verify 6.64 ms 6.61 ms -0.36% (-1.02% to -0.23%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 108.39 ms 107.81 ms -0.54% (-1.02% to +0.22%)
 ↳ build-circuit 10.42 ms 10.44 ms -0.31% (-5.50% to +0.41%)
 ↳ prove-recursion 84.84 ms 84.86 ms -0.53% (-1.25% to +0.54%)
 ↳ reduce-claims 3.96 ms 3.96 ms +0.86% (-6.23% to +2.02%)
 ↳ reduce-in-rows 1.49 ms 1.47 ms -0.35% (-7.96% to +1.96%)
 ↳ verify 7.03 ms 7.01 ms -0.58% (-2.69% to +0.56%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 591.29 ms 591.42 ms +0.29% (-1.58% to +0.75%)
 ↳ build-circuit 15.34 ms 15.23 ms -0.70% (-3.98% to +3.91%)
 ↳ prove-recursion 547.65 ms 547.69 ms +0.40% (-1.60% to +0.85%)
 ↳ reduce-claims 18.75 ms 18.80 ms +0.08% (-0.17% to +3.61%)
 ↳ reduce-in-rows 1.88 ms 1.65 ms -10.91% (-19.29% to -4.90%)
 ↳ verify 7.85 ms 7.84 ms -0.53% (-2.41% to +2.79%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 181.70 ms 182.74 ms +0.54% (-5.15% to +1.14%)
 ↳ build-circuit 14.50 ms 14.62 ms -0.76% (-1.46% to +5.20%)
 ↳ prove-recursion 150.79 ms 150.96 ms -0.03% (-5.71% to +0.41%)
 ↳ reduce-claims 6.85 ms 7.85 ms +8.53% (-6.92% to +30.01%)
 ↳ reduce-in-rows 2.02 ms 1.88 ms -7.73% (-11.12% to -2.05%)
 ↳ verify 7.45 ms 7.46 ms +0.04% (-1.22% to +1.87%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 115.83 ms 116.71 ms +0.65% (-1.75% to +9.08%)
 ↳ build-circuit 14.09 ms 14.32 ms +2.09% (-2.00% to +4.83%)
 ↳ prove-recursion 85.98 ms 86.27 ms +0.33% (-0.14% to +11.26%)
 ↳ reduce-claims 5.88 ms 6.41 ms +1.22% (-29.81% to +16.26%)
 ↳ reduce-in-rows 2.10 ms 1.92 ms -7.42% (-14.25% to -7.01%)
 ↳ verify 7.59 ms 7.61 ms +0.51% (-2.72% to +1.25%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 95.60 ms 88.92 ms -1.65% (-14.96% to -1.48%)
 ↳ build-circuit 13.62 ms 13.53 ms -1.19% (-26.30% to +4.64%)
 ↳ prove-recursion 61.12 ms 59.05 ms -3.38% (-18.90% to +3.68%)
 ↳ reduce-claims 7.60 ms 6.61 ms -21.44% (-33.21% to +19.30%)
 ↳ reduce-in-rows 1.92 ms 1.75 ms -10.26% (-22.97% to -3.50%)
 ↳ verify 7.99 ms 7.98 ms -1.10% (-5.54% to +2.96%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 1.06 s 1.06 s +0.03% (-0.08% to +0.12%)
 ↳ build-circuit 12.93 ms 13.08 ms +1.14% (-0.56% to +2.90%)
 ↳ prove-recursion 1.01 s 1.01 s -0.02% (-0.14% to +0.18%)
 ↳ reduce-claims 31.54 ms 31.58 ms +0.02% (-1.38% to +1.83%)
 ↳ reduce-in-rows 1.51 ms 1.52 ms -0.35% (-0.70% to +3.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 303.01 ms 303.05 ms +0.01% (-0.46% to +0.69%)
 ↳ build-circuit 12.51 ms 12.43 ms -0.52% (-2.07% to +2.43%)
 ↳ prove-recursion 271.87 ms 272.35 ms +0.20% (-0.44% to +0.69%)
 ↳ reduce-claims 10.97 ms 10.84 ms -1.33% (-2.40% to +1.15%)
 ↳ reduce-in-rows 1.59 ms 1.60 ms +0.21% (-1.25% to +3.06%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 171.16 ms 171.41 ms +0.13% (-0.20% to +0.47%)
 ↳ build-circuit 11.29 ms 11.32 ms +0.62% (-0.73% to +1.38%)
 ↳ prove-recursion 144.92 ms 144.89 ms +0.09% (-0.21% to +0.30%)
 ↳ reduce-claims 7.86 ms 7.94 ms +0.16% (-5.22% to +6.45%)
 ↳ reduce-in-rows 1.57 ms 1.55 ms -0.21% (-2.62% to +1.89%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 112.26 ms 113.04 ms +0.59% (-2.71% to +4.26%)
 ↳ build-circuit 11.29 ms 11.42 ms +0.97% (+0.43% to +5.30%)
 ↳ prove-recursion 87.28 ms 87.75 ms +0.84% (-3.73% to +5.02%)
 ↳ reduce-claims 6.65 ms 6.54 ms -0.58% (-4.17% to +1.29%)
 ↳ reduce-in-rows 1.50 ms 1.53 ms +2.27% (-1.90% to +4.57%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 633.50 ms 634.45 ms +0.15% (-0.62% to +0.77%)
 ↳ build-circuit 16.25 ms 16.22 ms -4.14% (-5.72% to +2.15%)
 ↳ prove-recursion 572.15 ms 573.34 ms +0.34% (-0.67% to +0.79%)
 ↳ reduce-claims 35.11 ms 35.71 ms +2.09% (-4.58% to +3.62%)
 ↳ reduce-in-rows 1.99 ms 1.83 ms -7.81% (-9.85% to -0.78%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 193.06 ms 192.98 ms +0.00% (-0.76% to +1.81%)
 ↳ build-circuit 15.72 ms 15.66 ms +1.94% (-2.97% to +24.19%)
 ↳ prove-recursion 156.71 ms 156.90 ms +0.16% (-0.23% to +0.65%)
 ↳ reduce-claims 12.37 ms 12.11 ms -1.85% (-8.46% to +1.00%)
 ↳ reduce-in-rows 2.03 ms 1.85 ms -8.98% (-11.29% to -1.95%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 122.45 ms 122.03 ms -0.43% (-8.57% to +10.28%)
 ↳ build-circuit 15.84 ms 15.71 ms -1.96% (-5.21% to +3.42%)
 ↳ prove-recursion 89.32 ms 89.31 ms -0.02% (-9.00% to +12.19%)
 ↳ reduce-claims 9.44 ms 9.39 ms -3.68% (-15.66% to +13.53%)
 ↳ reduce-in-rows 2.11 ms 2.02 ms -5.28% (-9.25% to -2.90%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 94.27 ms 92.27 ms -3.51% (-9.93% to -0.55%)
 ↳ build-circuit 14.62 ms 14.56 ms -1.72% (-25.43% to +1.31%)
 ↳ prove-recursion 62.34 ms 61.49 ms -1.50% (-4.60% to +0.57%)
 ↳ reduce-claims 10.14 ms 8.77 ms -7.68% (-21.34% to +6.41%)
 ↳ reduce-in-rows 2.00 ms 1.83 ms -8.46% (-22.04% to -4.73%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 1.95 s 1.95 s +0.07% (-0.40% to +0.44%)
 ↳ build-circuit 25.90 ms 25.94 ms +0.45% (-2.58% to +0.65%)
 ↳ prove-recursion 1.88 s 1.88 s +0.05% (-0.43% to +0.44%)
 ↳ reduce-claims 21.42 ms 21.43 ms +0.40% (-0.78% to +1.16%)
 ↳ reduce-in-rows 2.85 ms 2.89 ms +1.04% (-0.51% to +5.80%)
 ↳ verify 13.50 ms 13.41 ms -0.35% (-0.84% to +0.48%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 531.95 ms 531.67 ms +0.05% (-0.21% to +0.12%)
 ↳ build-circuit 21.39 ms 21.48 ms +0.11% (-1.62% to +0.77%)
 ↳ prove-recursion 487.54 ms 487.40 ms +0.09% (-0.33% to +0.18%)
 ↳ reduce-claims 7.03 ms 7.02 ms -0.39% (-4.58% to +6.79%)
 ↳ reduce-in-rows 2.87 ms 2.83 ms -2.35% (-2.98% to +1.10%)
 ↳ verify 12.86 ms 12.89 ms +0.17% (-0.66% to +0.78%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 308.55 ms 307.94 ms -0.01% (-0.25% to +0.07%)
 ↳ build-circuit 21.02 ms 20.86 ms -0.69% (-1.78% to +0.75%)
 ↳ prove-recursion 266.34 ms 265.65 ms -0.13% (-0.26% to +0.10%)
 ↳ reduce-claims 5.20 ms 5.20 ms +1.91% (-7.74% to +9.97%)
 ↳ reduce-in-rows 2.83 ms 2.87 ms +0.16% (-1.14% to +4.65%)
 ↳ verify 13.08 ms 13.08 ms +0.01% (-0.37% to +0.77%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 197.63 ms 196.84 ms -0.10% (-0.70% to +0.55%)
 ↳ build-circuit 20.92 ms 20.75 ms -0.08% (-1.09% to +0.60%)
 ↳ prove-recursion 155.22 ms 154.91 ms -0.05% (-0.94% to +0.90%)
 ↳ reduce-claims 4.60 ms 4.54 ms -2.70% (-3.86% to +9.21%)
 ↳ reduce-in-rows 2.82 ms 2.82 ms -0.63% (-2.32% to +0.93%)
 ↳ verify 13.79 ms 13.78 ms -0.05% (-0.99% to +1.51%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.14 s 1.15 s +0.08% (-0.05% to +0.78%)
 ↳ build-circuit 32.65 ms 33.84 ms +3.94% (+0.11% to +7.06%)
 ↳ prove-recursion 1.06 s 1.07 s -0.02% (-0.24% to +0.87%)
 ↳ reduce-claims 26.18 ms 26.32 ms +0.82% (-0.29% to +2.39%)
 ↳ reduce-in-rows 4.10 ms 3.83 ms -5.88% (-16.50% to -4.20%)
 ↳ verify 14.55 ms 14.55 ms -0.01% (-1.16% to +1.10%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 346.40 ms 347.43 ms +0.30% (-0.94% to +3.17%)
 ↳ build-circuit 30.97 ms 30.72 ms -0.81% (-2.13% to +4.39%)
 ↳ prove-recursion 288.59 ms 289.63 ms +0.56% (-0.72% to +3.22%)
 ↳ reduce-claims 8.61 ms 8.70 ms +0.79% (-5.14% to +10.56%)
 ↳ reduce-in-rows 4.06 ms 3.77 ms -7.27% (-10.03% to -2.05%)
 ↳ verify 14.15 ms 14.14 ms -0.26% (-2.56% to +1.42%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 219.20 ms 218.06 ms -0.26% (-0.95% to +2.51%)
 ↳ build-circuit 31.32 ms 31.08 ms -0.18% (-3.85% to +14.42%)
 ↳ prove-recursion 161.32 ms 160.85 ms +0.00% (-0.40% to +3.50%)
 ↳ reduce-claims 7.91 ms 7.42 ms -6.30% (-14.13% to +15.48%)
 ↳ reduce-in-rows 4.08 ms 3.86 ms -4.81% (-10.19% to -3.97%)
 ↳ verify 14.41 ms 14.40 ms +0.18% (-0.12% to +1.82%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 166.65 ms 158.30 ms -2.87% (-5.21% to +0.30%)
 ↳ build-circuit 30.56 ms 30.65 ms -0.71% (-3.35% to +1.56%)
 ↳ prove-recursion 108.36 ms 101.84 ms -2.75% (-6.02% to +1.49%)
 ↳ reduce-claims 8.05 ms 6.78 ms -15.74% (-29.85% to +19.85%)
 ↳ reduce-in-rows 4.04 ms 3.65 ms -8.12% (-9.62% to -5.66%)
 ↳ verify 15.39 ms 15.32 ms -0.29% (-1.75% to +1.11%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 2.13 s 2.14 s +0.24% (-0.12% to +0.33%)
 ↳ build-circuit 30.73 ms 30.49 ms -0.82% (-2.43% to -0.24%)
 ↳ prove-recursion 2.02 s 2.03 s +0.28% (-0.12% to +0.38%)
 ↳ reduce-claims 56.68 ms 56.61 ms -0.52% (-0.82% to -0.00%)
 ↳ reduce-in-rows 3.00 ms 3.03 ms +0.86% (-0.67% to +2.28%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 581.86 ms 583.29 ms +0.25% (-0.64% to +0.49%)
 ↳ build-circuit 25.52 ms 25.62 ms +0.09% (-0.04% to +0.44%)
 ↳ prove-recursion 522.86 ms 524.39 ms +0.29% (-0.75% to +0.51%)
 ↳ reduce-claims 17.44 ms 17.41 ms -0.22% (-1.19% to +0.63%)
 ↳ reduce-in-rows 3.02 ms 3.00 ms +0.87% (-3.03% to +2.07%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 337.11 ms 337.64 ms +0.12% (-0.06% to +0.63%)
 ↳ build-circuit 24.95 ms 24.92 ms -0.44% (-1.79% to +2.70%)
 ↳ prove-recursion 284.88 ms 285.12 ms +0.06% (-0.31% to +0.79%)
 ↳ reduce-claims 11.99 ms 12.01 ms +0.16% (-2.85% to +2.48%)
 ↳ reduce-in-rows 3.01 ms 3.02 ms -0.26% (-1.22% to +2.41%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 216.65 ms 215.79 ms -0.77% (-1.17% to +4.22%)
 ↳ build-circuit 24.81 ms 24.60 ms -0.78% (-1.98% to -0.24%)
 ↳ prove-recursion 167.45 ms 166.54 ms -1.00% (-1.19% to +5.48%)
 ↳ reduce-claims 9.38 ms 9.42 ms +0.76% (-2.81% to +1.23%)
 ↳ reduce-in-rows 2.99 ms 2.98 ms +0.08% (-2.05% to +1.81%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.26 s 1.27 s +0.11% (-0.12% to +0.74%)
 ↳ build-circuit 40.35 ms 40.52 ms +0.48% (-2.35% to +2.39%)
 ↳ prove-recursion 1.13 s 1.13 s +0.25% (-0.25% to +0.74%)
 ↳ reduce-claims 66.44 ms 66.48 ms +0.06% (-0.74% to +4.84%)
 ↳ reduce-in-rows 4.05 ms 3.70 ms -9.25% (-11.62% to -6.62%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 381.07 ms 380.99 ms -0.02% (-1.10% to +0.43%)
 ↳ build-circuit 35.75 ms 35.72 ms +0.47% (-0.20% to +2.10%)
 ↳ prove-recursion 306.15 ms 306.16 ms +0.04% (-0.73% to +0.39%)
 ↳ reduce-claims 20.67 ms 20.31 ms -1.74% (-9.49% to +2.62%)
 ↳ reduce-in-rows 4.41 ms 4.13 ms -4.99% (-7.66% to -2.78%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 236.12 ms 237.05 ms +0.84% (-0.64% to +7.81%)
 ↳ build-circuit 35.90 ms 35.20 ms -0.60% (-3.41% to +0.85%)
 ↳ prove-recursion 168.77 ms 169.33 ms +0.66% (-0.39% to +10.51%)
 ↳ reduce-claims 13.96 ms 15.32 ms +7.00% (-3.24% to +13.43%)
 ↳ reduce-in-rows 4.45 ms 4.12 ms -7.46% (-9.49% to -6.12%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 177.18 ms 171.12 ms -1.75% (-3.42% to +7.17%)
 ↳ build-circuit 36.26 ms 35.83 ms -1.29% (-4.42% to -0.99%)
 ↳ prove-recursion 109.44 ms 105.74 ms -0.92% (-3.91% to +11.36%)
 ↳ reduce-claims 12.66 ms 12.45 ms -3.38% (-12.29% to +8.62%)
 ↳ reduce-in-rows 4.30 ms 3.88 ms -8.94% (-10.01% to -6.95%)
leanxmss-100 1 arm64 Neoverse-V2 1.86 s 1.86 s +0.18% (-0.30% to +0.55%)
 ↳ build-witness 46.79 ms 46.83 ms -0.13% (-0.61% to +0.80%)
 ↳ commit 296.10 ms 296.94 ms +0.01% (-1.30% to +1.17%)
 ↳ execute-program 10.16 ms 10.29 ms +0.21% (-0.41% to +1.50%)
 ↳ flock-reductions 651.33 ms 651.29 ms -0.15% (-0.69% to +0.51%)
 ↳ pcs-open 708.19 ms 709.78 ms +0.22% (-0.56% to +1.22%)
 ↳ prove-bus 132.84 ms 132.62 ms +0.15% (-0.60% to +0.57%)
 ↳ prove-constraints 15.08 ms 15.25 ms +1.34% (+0.25% to +3.39%)
leanxmss-100 4 arm64 Neoverse-V2 490.95 ms 489.51 ms +0.02% (-0.56% to +0.08%)
 ↳ build-witness 12.92 ms 12.90 ms +0.06% (-0.59% to +0.42%)
 ↳ commit 74.27 ms 74.31 ms -0.05% (-0.49% to +0.21%)
 ↳ execute-program 10.08 ms 10.09 ms +0.30% (-1.67% to +1.08%)
 ↳ flock-reductions 170.47 ms 170.83 ms +0.32% (-0.13% to +0.50%)
 ↳ pcs-open 181.55 ms 180.82 ms -0.22% (-1.70% to +0.13%)
 ↳ prove-bus 35.43 ms 35.50 ms +0.23% (+0.09% to +0.25%)
 ↳ prove-constraints 5.49 ms 5.50 ms +0.10% (-0.90% to +0.22%)
leanxmss-100 8 arm64 Neoverse-V2 278.02 ms 278.02 ms +0.12% (-0.50% to +0.29%)
 ↳ build-witness 7.70 ms 7.72 ms +0.22% (-0.87% to +1.14%)
 ↳ commit 38.94 ms 38.73 ms -0.72% (-0.93% to +0.58%)
 ↳ execute-program 10.44 ms 10.45 ms -0.17% (-0.79% to +2.21%)
 ↳ flock-reductions 94.84 ms 95.14 ms +0.37% (-0.16% to +0.65%)
 ↳ pcs-open 100.51 ms 100.34 ms -0.17% (-1.46% to +0.30%)
 ↳ prove-bus 21.03 ms 21.06 ms +0.31% (-0.34% to +1.26%)
 ↳ prove-constraints 4.28 ms 4.30 ms -0.32% (-0.93% to +0.69%)
leanxmss-100 16 arm64 Neoverse-V2 169.27 ms 169.72 ms +0.59% (-3.66% to +4.96%)
 ↳ build-witness 4.96 ms 4.93 ms -0.68% (-3.75% to +1.92%)
 ↳ commit 20.48 ms 20.50 ms +0.13% (-1.77% to +0.67%)
 ↳ execute-program 10.17 ms 10.41 ms +1.82% (-3.02% to +6.73%)
 ↳ flock-reductions 57.17 ms 57.25 ms +0.05% (-8.30% to +13.13%)
 ↳ pcs-open 58.96 ms 58.84 ms +0.40% (-0.81% to +3.00%)
 ↳ prove-bus 13.46 ms 13.48 ms +0.07% (-9.49% to +0.79%)
 ↳ prove-constraints 3.90 ms 3.87 ms -0.81% (-3.03% to +3.59%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.07 s 1.07 s -0.55% (-1.85% to +0.82%)
 ↳ build-witness 71.19 ms 70.50 ms -1.60% (-1.75% to -0.03%)
 ↳ commit 192.01 ms 189.34 ms -1.39% (-2.59% to +2.13%)
 ↳ execute-program 13.54 ms 13.75 ms +1.08% (-1.19% to +6.04%)
 ↳ flock-reductions 317.08 ms 313.26 ms -0.49% (-2.14% to +0.48%)
 ↳ pcs-open 373.92 ms 372.23 ms -0.45% (-2.04% to +0.57%)
 ↳ prove-bus 85.34 ms 84.08 ms -1.49% (-2.08% to +1.43%)
 ↳ prove-constraints 19.65 ms 19.78 ms +0.24% (-5.70% to +7.97%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 299.16 ms 299.27 ms +0.04% (-0.46% to +0.63%)
 ↳ build-witness 18.98 ms 18.95 ms -0.35% (-0.52% to +3.41%)
 ↳ commit 46.67 ms 46.86 ms +0.30% (-0.72% to +0.78%)
 ↳ execute-program 13.05 ms 13.02 ms -0.35% (-1.96% to +0.76%)
 ↳ flock-reductions 86.24 ms 86.43 ms +0.03% (-0.36% to +0.35%)
 ↳ pcs-open 102.44 ms 102.29 ms -0.33% (-1.11% to +1.99%)
 ↳ prove-bus 23.99 ms 24.12 ms +0.78% (-0.81% to +1.34%)
 ↳ prove-constraints 7.24 ms 7.19 ms -0.40% (-1.80% to +0.46%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 179.59 ms 179.72 ms -0.14% (-0.42% to +0.58%)
 ↳ build-witness 10.91 ms 10.83 ms -0.01% (-1.00% to +1.85%)
 ↳ commit 24.00 ms 24.04 ms -0.24% (-2.09% to +0.74%)
 ↳ execute-program 13.20 ms 13.07 ms -0.75% (-0.95% to +0.03%)
 ↳ flock-reductions 50.74 ms 50.72 ms -0.02% (-0.39% to +0.29%)
 ↳ pcs-open 60.23 ms 60.94 ms +0.60% (-1.64% to +1.87%)
 ↳ prove-bus 14.76 ms 14.83 ms +0.27% (-1.22% to +1.19%)
 ↳ prove-constraints 5.29 ms 5.30 ms -0.49% (-1.55% to +0.81%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 135.53 ms 130.72 ms -3.23% (-3.76% to +2.19%)
 ↳ build-witness 8.62 ms 8.44 ms -2.29% (-5.71% to +2.89%)
 ↳ commit 14.56 ms 13.19 ms -9.49% (-13.09% to +6.24%)
 ↳ execute-program 12.78 ms 13.04 ms +2.30% (-3.24% to +7.93%)
 ↳ flock-reductions 40.47 ms 39.30 ms -2.03% (-8.34% to +2.82%)
 ↳ pcs-open 42.60 ms 41.13 ms -1.80% (-3.46% to +2.62%)
 ↳ prove-bus 11.41 ms 10.93 ms -2.87% (-6.22% to +2.01%)
 ↳ prove-constraints 4.97 ms 4.96 ms -1.11% (-6.43% to +0.43%)

@kevaundray

Copy link
Copy Markdown
Collaborator Author

Haven't reviewed the agents work yet, leaving in draft

Re-applies the zero-knowledge leaf proofs onto the BLAKE2s duplex transcript and upstream's encapsulated commitments: the hiding commitment and opening ride Committed and Commitment, chosen by the stack's random lane, and the NTT's padding rides upstream's reworked encode.
The Python verifier is gone upstream (leanEthereum#537) and its zero-knowledge mirror was never started, so nothing reads Program::zk_constraints.
Hiding carried the padding length beside the configuration that fixes it, and every caller passed config.padding(); the verifier's check of the two against each other and its error variant go with it. The transcript is unchanged.
SpartanError had one variant, the transcript's error, which the caller unwrapped back into it.
The specification has the hiding commitment (Annex B, sec:pcs-zk) but no sec:zk; the composition is described in the cpu::zk module docs.
…o-knowledge case

No tracked benchmark proves in zero knowledge.
Only the commitment pads an encode, always in place; its test checks every plan against direct evaluation.
announced_hiding repeated announced around one step; a flag picks the stack instead, and the size check returns to upstream's form.
new_hiding only asserted the random lane before new_padded, whose padding-length check already ties the pads to the stack's configuration.
Announcement::write writes the shape through write_shape, then the final clock: the same scalars in the same order. The docs the zero-knowledge work added wrapped prose by hand, which the repository does not.
Clippy 1.99 refuses chunks_exact with a constant size.
Re-applies the hiding WHIR onto the pcs overhaul: CommittedStack::new_padded and a hiding configuration's Config::padding pick the hiding opening; the padding's share of level 0's queries is QueryBatch::padding_correction, its shift padding_shift over Normalizers; the NTT padding rides the merged ntt.rs. The key commitment's opening goes through whir::open_hiding and verify_hiding, over the dense weight the tests already used, now DenseWeight.
Rustdoc refused links to the plain commit, which is test-only now.

@tcoratger tcoratger left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've checked with the agent and I think some stuffs are missing to have full ZK like here my understanding is that the ZK is only for the leaves and also I think that ZK proofs are somehow leaking witness. I'm preparing a plan with Claude and I'll push a series of granular PRs to include full ZK in a gradual manner with you as an author for the credit so that we can have maybe a more complete review of each small PR and merge the whole stack at the end.

\begin{itemize}[itemsep=1pt,topsep=2pt]
\item \emph{Level-$0$ answers.} For distinct $x_1, \dots, x_t \in \dom_0$ with $t \le \npad$, the map $\padc \mapsto \bigl(\Wn{\kappa}(x_i + \padshift) \sum_{j < \npad} \padc[j] \novel_j(x_i)\bigr)_i$ is onto $\K^t$: the $\novel_j$, $j < \npad$, span the polynomials of degree below $\npad$, which take any $t \le \npad$ values at $t$ points, and every factor is nonzero. So any $\npad$ symbols of a padded row are uniform whatever its message, the $(\nq_0 + 1)$-wise independence of the padded code~\cite{DHRR26,Dia25}, and a query message opens at most $\nq_0$ distinct columns.
\item \emph{Roots.} Given the opened columns, one more symbol of each row is still uniform ($\nq_0 + 1 \le \npad$), so each unopened leaf keeps one spare uniform symbol of $\K$ per row, $64$ bits of fresh entropy, and the root and the authentication paths are simulated in the random-oracle model with no salt.
\item \emph{After the lane fold.} No claim touches $\rlane$, so the lane fold gives $f^{(1)} = \sum_{u} \eq(\fc, u)\, f(u, \cdot)$ the term $\eq(\fc, \rlane)\, f(\rlane, \cdot)$, a nonzero multiple in $\E$ of a uniform vector of $\K^{2^\kappa}$ unless some $\fc_j$ is $0$ or $1$, which has probability at most $2\ell_0/|\E|$. Every later message is a linear functional of $f^{(1)}$, or for a root a random-oracle hash of the encoding of a fold of it: $c'$, the round and intro polynomials, the OOD answers, the values $c_q$, the opened rows of the levels past $0$, and $\ffinal$. An $\E$-valued functional is three $\K$-linear functionals of $f(\rlane, \cdot)$, and the configurations keep their number at most $2^{\kappa - 1}$, three per $\E$ scalar revealed, which is what fixes $\kappa \ge 14$; under that condition the random row makes them uniform, as VEIL's random column does~\cite[Lemma~4.7]{DHRR26}. The opened level-$0$ columns and $\padfold$ together determine the $c_q$, and reveal nothing more of the messages. This last step adapts VEIL's lemma to an $\E$-fold of $\K$-valued rows, with a random row of $\K$ and fold coefficients in $\E$: it is argued here, not proven.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this step breaks: a functional with coefficients in K (like c_q at level 0, or any opened symbol at level 1, whose twiddles are in K) only sees the random row along the line eq(r, R)·K, so dividing by eq(r, R) gives the verifier two K coordinates that depend only on the witness. I checked it with commit_hiding and ligero_commit_ext and it reproduces.

let shape = w.layout.shape;
let committed = info_span!("Commit").in_scope(|| {
let lane = 1usize << (shape.mu - LOG_BATCH);
rng.fill_k(Purpose::RandomLane, &mut w.q[shape.n_lanes * lane..]);

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With 4 uniform lanes instead of 1, their eq weights span E over K (with probability about 1 - 2^-128), so the folded vector becomes uniform in E^N and VEIL's lemma applies directly.

\paragraph{Zero knowledge.} The argument is for an honest verifier and statistical, then Fiat-Shamir in the random-oracle model. Every scalar sent before the lane fold's end is uniform, each under its own key. What the opening reveals besides is simulated in three parts.
\begin{itemize}[itemsep=1pt,topsep=2pt]
\item \emph{Level-$0$ answers.} For distinct $x_1, \dots, x_t \in \dom_0$ with $t \le \npad$, the map $\padc \mapsto \bigl(\Wn{\kappa}(x_i + \padshift) \sum_{j < \npad} \padc[j] \novel_j(x_i)\bigr)_i$ is onto $\K^t$: the $\novel_j$, $j < \npad$, span the polynomials of degree below $\npad$, which take any $t \le \npad$ values at $t$ points, and every factor is nonzero. So any $\npad$ symbols of a padded row are uniform whatever its message, the $(\nq_0 + 1)$-wise independence of the padded code~\cite{DHRR26,Dia25}, and a query message opens at most $\nq_0$ distinct columns.
\item \emph{Roots.} Given the opened columns, one more symbol of each row is still uniform ($\nq_0 + 1 \le \npad$), so each unopened leaf keeps one spare uniform symbol of $\K$ per row, $64$ bits of fresh entropy, and the root and the authentication paths are simulated in the random-oracle model with no salt.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Once g_1 is revealed (3k K dimensions of the pads) the spare pad freedom is gone, so I think an unopened leaf only keeps the random lane's 64 bits here, which the 4-lane fix would also cover.


/// The shared prover/verifier config of a hiding opening of a `K`-witness of `2^log_n` F64 words at L0 inverse-rate logarithm `log_inv_rate`.
///
/// The ladder, grinding and OOD samples of [`config_for_rate`], the query counts of the padded L0 code, and its padding `k = q_0 + 2` ([`Config::padding`]): `q_0 + 1` uniform coefficients make any `q_0` opened symbols of a lane uniform, and one more keeps a uniform symbol in every unopened leaf.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same point as the Roots paragraph: g_1 uses up the extra pad coefficient, so this sentence doesn't hold as stated.

//! lane 1 uniform words
//! ```
//!
//! Its opening's claim is public and its weight vanishes on lane 1, so the lane fold mixes the uniform lane into everything the opening reveals: it is the one commitment whose opening hides itself.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The key commitment has the same single uniform lane, so its level-1 symbols leak linear functionals of the keys; it's only hidden right now because about half the key slots go unused.

}
// The residual, and the closing rounds but the last, which the residual answers.
scalars += (1 << residual) + 2 * residual.saturating_sub(1);
3 * scalars

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This counts 3 dimensions per E scalar but never checks the rank, which is why it passes even with the leak above; a rank check (or a test that two noise draws can't be told apart) would catch it.

/// A fresh seed from the operating system for every proof.
Os,
/// One fixed seed, for reproducible tests: two proofs under one seed share their keys, so never reuse one in production.
#[doc(hidden)]

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small one: the derived Debug prints the seed, and two proofs under one seed share their keys, so it might be worth redacting it.

};
let (a, b, c) = match aux.kind {
Kind::Product => (row(&aux.a), row(&aux.b), row(&v)),
Kind::Inverse => (row(&aux.a), row(&v), constant(F192::ONE)),

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just noting that this is stricter than the native inv(0) = 0, which is fine for soundness, but an honest run that inverts a hidden zero couldn't be proven.

@kevaundray

Copy link
Copy Markdown
Collaborator Author

After speaking to my boss @tcoratger , this will be closed

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.

2 participants