Skip to content

leanXMSS and leanSPHINCS verifier circuits on the recursion machine, proved in Clean - #610

Draft
kevaundray wants to merge 39 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/clean-leanxmss-rec
Draft

kevaundray wants to merge 39 commits into
leanEthereum:riscv-explorationfrom
kevaundray:kw/clean-leanxmss-rec

Conversation

@kevaundray

@kevaundray kevaundray commented Oct 11, 2026 •

Copy link
Copy Markdown
Collaborator

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

leanXMSS and leanSPHINCS verification as circuits on the recursion machine, authored and proved in Lean over the model of the builder, built call for call by Rust, on the CLI, and aggregatable in trees. Trees are single-scheme: one leaf family per tree, bound by the tree session.

What is proved

Kernel-checked, axioms propext, Classical.choice, Quot.sound only (verification/circuits/Audit.lean checks 245 theorems against that list; CI also runs leanchecker per module).

  • LeanVMCircuits.Xmss.accepted_iff: for every statement, the circuit for n ≤ 2^22 signatures (Xmss/Circuit.lean) has an accepting assignment (Accepts: Sat and the dynamic bus balance) iff each signature slot states a public key, message and epoch for which some signature makes the Ethereum XMSS specification's verify true. Spec: EthCryptographySpecs/Xmss vendored verbatim at ethereum/cryptography-specs@d1331f02 (scripts/check-xmss-spec.sh), compiling unchanged on Lean 4.33.1.
  • LeanVMCircuits.Sphincs.accepted_iff: the same for leanSPHINCS (n ≤ 2^20) (Sphincs/Circuit.lean) against LeanSphincs.verify. No external leanSPHINCS specification or pinned reference exists; Spec/LeanSphincs is a Lean transcription of the guest's verifier (programs/leansphincs/guest, each definition citing the lines it transcribes), checked against the host's known answer (public key bytes and the BLAKE2s of the signature) by #guard in Lean's evaluator.
  • Each is sound + complete against a word-level Words.verify, plus a bridge from Words.verify to the specification's verify on the words' bytes (including that the specification's BLAKE2s is RFC 7693 F chained as the builder chains it, and the 52-byte leanSPHINCS encoding hash), plus onto lemmas for the decoders. Completeness rests on new completeness contracts for the builder's methods (Xmss/CompleteBuilder.lean); soundness on Author leanVM circuits in Clean, prove them, and export them to Rust #595's method contracts.

Design: per signature, statement words are exposed E words; every hash is a builder chain (or leafBlock for the 52-byte encoding); target sums are checked as X^sum = X^195 (XMSS) or X^191 (SPHINCS) in K; Merkle sides are E arithmetic on index bits. leanXMSS chains are rows of two new recursion-machine tables on the bus: a LINK row per chain pushes (its digit's position, tip) and pulls (position 7, end), and each of the 99 STEP rows per signature (42 x 7 - 195, exactly the steps a valid signature needs) pulls its input at its tweak word's position and pushes its hash at the next position (Xmss/Paths.lean proves the per-key count argument: balance and the fixed step count leave every chain walked once from its digit to 7). leanSPHINCS chains are walked the same way, 103 STEP rows per layer (42 x 7 - 191), the tag (3j + layer) keeping signatures and layers apart (n ≤ 2^20); STEP's base column carries each scheme's tweak bytes.

What is trusted

Accepts (Rec/Contracts.lean) is the relation assumed to follow from a recursion proof: Sat and Balanced, the multiset of tuples the STEP and LINK rows push equal to the multiset they pull. Sat: wires in one class carry equal values (the copy-cycle bus; Rec/Bus.lean proves this from exact balance), each row's slots carry its table's forms over columns satisfying its identities, HASH rows carry a satisfying assignment of the exported Boolean BLAKE2s artifact, PUB rows carry their constants and statement words. Trusted: the proof system's soundness yields Accepts (for the balance, the bus's grand product over the dynamic blocks); Rust's HASH table circuit is that artifact (the flock circuits are not generated from Lean on this branch); the Lean SPHINCS transcription is the scheme; the export check covers the dumped sizes.

Export and CLI

  • crates/leanvm_core/src/rec/{xmss,sphincs}.rs make the Lean circuits' builder calls in the same order (XmssBatch, SphincsBatch: prove, verify, proof bytes). cargo leanvm circuits (--features circuits) dumps them for n = 1, 2, 3, 400 (XMSS) and 1, 2, 3, 104 (SPHINCS); lake exe checkxmss checks each dump replays through the builder model and equals the Lean-authored circuit (CI: rec-builder-model.yml).
  • cargo leanvm leanxmss-rec --n 400 [--tamper], cargo leanvm leansphincs-rec --n 104 [--tamper].
  • cargo leanvm aggregate --program leanxmss-rec|leansphincs-rec --n N --leaves L --arity0 A0 --arity A [--capacity C [--groups G]]: with --capacity, a claim-set tree (also over the leanxmss/leansphincs guests' leaves).

Aggregation: what changed in rec::tree

Trees are single-scheme: a tree has exactly one leaf family (Leaves::Runs for RISC-V proofs of one program as before, Leaves::Circuit for proofs of one signature circuit; XmssBatch/SphincsBatch::leaves()), bound by the tree session: its tag names the family (the program digest and leaf shape, or the leaf circuit's session, statement length, heights and rate), so a tree proof verifies only under a tree of its own family. A signature first-level node verifies each raw proof with the existing RecShape at the raw circuit's own heights, rate and session, turns its fixed-column hints into claims on a new dense polynomial W_leaf (the leaf circuit's fixed columns), and exposes the usual TreeStatement with a digest over the leaves' statement digests (instance_digest). The kind stays one bit, W_node stacks the two kinds' circuits, a carried claim on a polynomial the leaves do not fix is weighed by the child's kind, and the root settles exactly the polynomials its kind carries; a statement holds values only for the polynomials the tree has. Tree::verify takes the expected topology (Subtree), which makes unbalanced trees verifiable. Versions bumped (LVMT 18, tree session tag leanvm-tree-15). Raw signature proofs are not re-proven. The tree's first-level circuits are Rust only (not modeled in Lean).

Another family's proof is refused by the session or the statement, not by a scheme check (there is none in the code); a_tree_refuses_another_familys_tree_proofs checks both cases:

  • leanXMSS and leanSPHINCS trees: their proofs have one shape (heights and statement layout), so only the session differs. The child's recursion proof fails under the other tree's session at its first stage, flock's zerocheck (RecError::Flock(FlockError::Zerocheck(ZerocheckError::TerminalMismatch))), surfacing as TreeError::Child { index, .. } from prove_node and as TreeError::Root from verify, each carrying exactly the error the proof's own circuit gives under the other session.
  • RISC-V and circuit trees: the statement has the wrong length, so known() refuses the proof before reading it, with TreeError::Circuit(0) from both prove_node and verify.

Claim-set trees over circuit leaves

Claim-set trees (#614) take signature-circuit leaves too, one scheme per tree, so signer-set aggregation works with circuit leaves. A leaf publishes one group, one claim per signature, exactly as the scheme's guest writes its signer set: label [scheme, epoch, m0..m3] (leanXMSS, scheme 1) or [2, 0, m0..m3] (leanSPHINCS), member [r0, r1, p0, p1] (the key's root then public parameter). The leaf circuit and its Lean proofs are unchanged: the claims are read from the statement words the leaf's transcript absorbs.

  • rec/tree/leaf_set.rs: ClaimLayout says which statement word (or constant) each label and member word is. In the first-level circuit, each leaf's claims get their label words held equal to the first claim's (eq_k, so a leaf with two epochs or messages has no proof), and the set's written form (header, members two to a block, end) is chained over the statement wires with Builder::block. That digest is what the union reads in place of a RISC-V leaf's committed one. A tree of outputs keeps instance_digest, and the claim-set first level skips it.
  • XmssBatch::claim_set and SphincsBatch::claim_set give a batch's set in claim order (XmssError::Label/SphincsError::Label if the claims are not of one epoch and message). Tree::aggregate_leaves takes ClaimLeaf::new(batch.leaf(..), &set) and refuses with TreeError::LeafClaims a set the statement does not state. TreeError::CircuitClaims is gone.
  • The layout's words join the session of claim-set trees over circuit leaves. Trees of outputs and RISC-V trees keep their sessions.
  • Tests: the circuit leaves' sets equal the guests' for the same signers (digest of leanxmss_host::batch(4).set and leansphincs_host::batch(2).set); a 4-leaf leanXMSS claim-set tree states the canonical guest set of the four signers; a leaf given another leaf's set is refused; claims of two messages make no set and no satisfied rows (leaf_set unit tests over 0 to 4 claims).

Paired against claim-set trees over the guests' leaves: same signers, same sets, same capacity, one binary at bca51cc, alternating under the bench lock at 1-minute load below 12, 16 threads 2 rounds and 1 thread 2 rounds (values per round, 16 / 1 threads). The leaves are copies of one proof, so every set is one leaf's 400 or 104 claims. Whole tree = every node after the leaf proofs.

claim-set tree first-level node node whole tree root verify peak, 16 threads committed, first-level / node proof, first-level / node
leanXMSS-400 guest, 2-to-1, 4 leaves, capacity 801 0.087, 0.091 / 0.400, 0.401 s 0.089, 0.090 / 0.429, 0.416 s 0.265, 0.270 / 1.229, 1.197 s 3.143, 3.107 / 4.722, 4.715 ms 3.19 GiB 2^22.512, 2^22.512 251.6, 250.8 KiB
leanXMSS-400 circuit, 2-to-1, 4 leaves, capacity 801 0.095, 0.097 / 0.589, 0.425 s 0.104, 0.105 / 0.524, 0.465 s 0.299, 0.299 / 1.423, 1.326 s 4.604, 4.635 / 8.342, 7.922 ms 1.78 GiB 2^22.512, 2^22.512 251.0, 251.3 KiB
leanXMSS-400 guest, 4-to-1, 16 leaves, capacity 1601 0.169, 0.168 / 0.834, 0.797 s 0.177, 0.176 / 0.900, 0.854 s 0.844, 0.858 / 4.176, 4.021 s 5.601, 5.709 / 11.4, 10.1 ms 3.20 GiB 2^23.512, 2^23.512 274.1, 273.5 KiB
leanXMSS-400 circuit, 4-to-1, 16 leaves, capacity 1601 0.176, 0.171 / 0.827, 0.832 s 0.191, 0.190 / 0.897, 0.901 s 0.884, 0.901 / 5.302, 4.218 s 7.144, 7.295 / 17.5, 13.7 ms 1.90 GiB 2^23.512, 2^23.512 273.6, 274.3 KiB
leanSPHINCS-104 guest, 2-to-1, 4 leaves, capacity 209 0.091, 0.101 / 0.475, 0.398 s 0.086, 0.087 / 0.423, 0.409 s 0.263, 0.274 / 1.253, 1.210 s 3.087, 3.246 / 4.864, 4.669 ms 3.60 GiB 2^22.512, 2^22.512 251.0, 250.6 KiB
leanSPHINCS-104 circuit, 2-to-1, 4 leaves, capacity 209 0.085, 0.084 / 0.383, 0.379 s 0.095, 0.093 / 0.426, 0.414 s 0.268, 0.266 / 1.177, 1.162 s 4.230, 4.338 / 7.430, 6.986 ms 1.85 GiB 2^22.362, 2^22.362 242.6, 242.7 KiB
leanSPHINCS-104 guest, 4-to-1, 16 leaves, capacity 417 0.164, 0.164 / 0.798, 0.794 s 0.163, 0.174 / 0.858, 0.851 s 0.823, 0.858 / 3.989, 4.004 s 5.719, 5.779 / 9.911, 9.419 ms 3.62 GiB 2^23.512, 2^23.512 274.7, 274.2 KiB
leanSPHINCS-104 circuit, 4-to-1, 16 leaves, capacity 417 0.148, 0.150 / 0.902, 0.722 s 0.170, 0.165 / 1.016, 0.814 s 0.765, 0.758 / 4.998, 3.697 s 5.628, 5.531 / 13.4, 9.286 ms 1.93 GiB 2^23.362, 2^23.362 266.7, 265.6 KiB
  • A node verifies tree proofs, so it has the same rows over either leaf kind at the same tier heights. The first-level node over circuit leaves has fewer EMUL rows and more EXK rows than over guest leaves: leanXMSS EMUL 69,997, EXK 59,761, HASH 14,662 against 104,859, 45,471 and 13,926.
  • The leanXMSS circuit's claim-set first level just passes 2^16 EMUL rows, so its tier is one power of two higher than in the tree of outputs (2^22.51 against 2^22.36). Its trees commit as many words as the guest's, and the whole tree proves 4 to 13% slower at 16 threads (0.299 against 0.265 to 0.270 s for 2-to-1, 0.884 to 0.901 against 0.844 to 0.858 s for 4-to-1). The leanSPHINCS circuit trees stay at 2^22.36 and 2^23.36 and are level with the guest's or faster (0.266 to 0.268 against 0.263 to 0.274 s, 0.758 to 0.765 against 0.823 to 0.858 s).
  • As in trees of outputs, circuit trees' roots verify slower (they evaluate W_leaf natively), and peak memory is about half the guest trees' (1.8 to 1.9 against 3.2 to 3.6 GiB).

Duplicated from #595

Unchanged copies of #595's (kw/clean-circuits-adder-20261010 @ 2db90c1) LeanVMCircuits/Rec/*, Blake2s/* (without Emit), the generic closure (Adder, Lowering, Flatten, Export, Completeness, Gates, AdderFamily), CheckRec.lean, GenerateRec.lean, lakefile/manifest/toolchain, and the Rust builder trace (circuit-trace/circuits features, Circuit::dump, Tree::circuit_dump, rec/clean.rs, table.rs), rec-builder-model.yml. Audit.lean, README.md, the root module and clean-circuits.yml are trimmed to this branch.

Measurements

AMD Ryzen 9 7950X3D (16 cores, 32 threads), 62 GiB. Proof log-inv-rate 1 (aggregation leaves at 2, tree proofs at 1). Paired runs alternating guest and circuit under flock /tmp/leanvm-bench.lock, each started at 1-minute load below 12, one binary at dbc9ad8 (the guests publish signer sets since #612; rows and committed words of every circuit below are unchanged at the head). Single proofs: 3 runs of --repeat 3 at 16 threads, 2 runs at 1 thread; values per run. A circuit proof's verifier also builds the circuit from n once (about 80 ms), not included. Peak memory and proof sizes after #630 are under Upstream merges and CI.

leanXMSS, n = 400 guest circuit
proving, 16 threads 0.411, 0.392, 0.391 s 0.199, 0.183, 0.190 s
proving, 1 thread 2.65, 2.61 s 1.33, 1.33 s
verify, 16 / 1 threads 2.5 to 2.6 (one 6.1) / 2.3 ms 2.5 to 3.1 / 3.4 to 3.5 ms
peak memory, 16 threads 2.41 GiB 1.34 GiB
proof size 320.0 KiB 273.4 KiB
rows / cycles 768,713 cycles EMUL 25,600, EXK 113,201, HASH 57,600, SPLIT 14,400, CAST 41,600, STEP 39,600, LINK 16,800, PUB 19,256
committed words 2^25.22 2^24.31
leanSPHINCS, n = 104 guest circuit
proving, 16 threads 0.451, 0.470, 0.432 s 0.196, 0.195, 0.187 s
proving, 1 thread 3.84, 3.99 s 1.37, 1.46 s
verify, 16 / 1 threads 2.6 / 2.4 to 2.6 ms 2.4 to 2.6 / 3.7 to 4.0 ms
peak memory, 16 threads 2.74 GiB 1.41 GiB
proof size 331.0 KiB 276.6 KiB
rows / cycles 969,940 cycles EMUL 34,528, EXK 95,577, HASH 55,224, SPLIT 18,824, CAST 56,056, STEP 32,136, LINK 13,104, PUB 14,046
committed words 2^25.45 2^24.36

Circuit build caching (e6d7041): XmssBatch::new/SphincsBatch::new record the circuit as one part per signature, and prove replays each part for its values in parallel (Builder::parts, Replay) instead of re-running every builder call. 9f2381f before, e6d7041 after, alternating, medians of 3 runs ("Build circuit" from traced runs, proving from --repeat 5):

leanXMSS n = 400, before after leanSPHINCS n = 104, before after
Build circuit, 16 threads 57.6 ms 3.5 ms 56.6 ms 3.4 ms
Build circuit, 1 thread 54.6 ms 30.4 ms 51.2 ms 31.1 ms
proving, 16 threads 0.247 s 0.194 s 0.251 s 0.202 s

Proofs are byte-identical before and after (at 1 and 16 threads) and the dumped builder calls unchanged.

Single-scheme aggregation trees, 16 / 1 threads (one run each at dbc9ad8; whole tree = every node after the leaf proofs):

tree leaf proof first-level node node whole tree root verify peak node proof, committed
leanXMSS-400 guest, 2-to-1, 4 leaves 0.48 / 4.33 s 0.080 / 0.401 s 0.084 / 0.409 s 0.253 / 1.197 s 3.2 / 4.7 ms 3.20 / 3.05 GiB 251 KiB, 2^22.51
leanXMSS-400 circuit, 2-to-1, 4 leaves 0.24 / 1.96 s 0.086 / 0.392 s 0.091 / 0.449 s 0.267 / 1.145 s 4.6 / 7.3 ms 1.79 / 1.65 GiB 243 KiB, 2^22.36
leanXMSS-400 guest, 4-to-1, 16 leaves 0.49 / 3.52 s 0.150 / 0.779 s 0.155 / 0.853 s 0.757 / 3.846 s 4.1 / 6.7 ms 3.21 / 3.05 GiB 274 KiB, 2^23.51
leanXMSS-400 circuit, 4-to-1, 16 leaves 0.22 / 1.67 s 0.155 / 0.779 s 0.171 / 0.846 s 0.832 / 4.065 s 6.6 / 16.9 ms 1.84 / 1.70 GiB 266 KiB, 2^23.36
leanSPHINCS-104 guest, 2-to-1, 4 leaves 0.53 / 3.85 s 0.083 / 0.393 s 0.087 / 0.421 s 0.266 / 1.237 s 3.2 / 4.9 ms 3.59 / 3.46 GiB 250 KiB, 2^22.51
leanSPHINCS-104 circuit, 2-to-1, 4 leaves 0.25 / 1.85 s 0.079 / 0.376 s 0.095 / 0.420 s 0.260 / 1.203 s 4.5 / 7.1 ms 1.84 / 1.71 GiB 243 KiB, 2^22.36
leanSPHINCS-104 guest, 4-to-1, 16 leaves 0.51 / 3.89 s 0.149 / 0.782 s 0.147 / 0.913 s 0.771 / 4.267 s 4.1 / 7.8 ms 3.62 / 3.47 GiB 274 KiB, 2^23.51
leanSPHINCS-104 circuit, 4-to-1, 16 leaves 0.24 / 1.82 s 0.149 / 0.747 s 0.172 / 0.812 s 0.785 / 3.675 s 5.5 / 8.4 ms 1.89 / 1.75 GiB 266 KiB, 2^23.36

Circuit trees' roots verify slower than RISC-V trees' because the root evaluates W_leaf, the leaf circuit's fixed columns, natively.

Removing the selector (the kind bits, indicator constraints and per-kind masks that let a tree take more than one leaf family; 5c821f8 before, 1a14303 after) shrinks nothing. Rows per table and committed words are identical before and after for every tree, and the leanXMSS and leanSPHINCS trees' nodes are identical to each other (STEP and LINK absent everywhere):

tree first-level node rows node rows committed words, each
leanXMSS-400, 2-to-1 EMUL 54,067, EXK 38,302, HASH 13,328, SPLIT 602, CAST 8,184, PUB 572 EMUL 54,983, EXK 38,392, HASH 13,963, SPLIT 874, CAST 8,373, PUB 547 5,391,360 (2^22.36)
leanSPHINCS-104, 2-to-1 EMUL 48,031, EXK 29,126, HASH 12,042, SPLIT 602, CAST 8,332, PUB 573 as leanXMSS 5,391,360 (2^22.36)
leanXMSS-400, 4-to-1 EMUL 107,457, EXK 76,604, HASH 26,535, SPLIT 1,204, CAST 16,114, PUB 572 EMUL 116,017, EXK 78,540, HASH 30,576, SPLIT 1,848, CAST 18,071, PUB 550 10,782,720 (2^23.36)
leanSPHINCS-104, 4-to-1 EMUL 95,385, EXK 58,252, HASH 23,963, SPLIT 1,204, CAST 16,410, PUB 573 as leanXMSS 10,782,720 (2^23.36)

Paired timings (release binaries alternating under the bench lock, 16 threads 3 rounds, 1 thread 2 rounds; whole tree, values per round) are within noise:

whole tree 16 threads, before 16 threads, after 1 thread, before 1 thread, after
leanXMSS-400 circuit, 2-to-1, 4 leaves 0.399, 0.260, 0.276 s 0.261, 0.271, 0.271 s 1.155, 1.192 s 1.179, 1.231 s
leanXMSS-400 circuit, 4-to-1, 16 leaves 0.797, 0.827, 0.816 s 0.804, 0.773, 0.798 s 3.883, 3.893 s 3.825, 3.880 s
leanSPHINCS-104 circuit, 2-to-1, 4 leaves 0.259, 0.278, 0.278 s 0.271, 0.268, 0.270 s 1.188, 1.193 s 1.177, 1.180 s
leanSPHINCS-104 circuit, 4-to-1, 16 leaves 0.792, 0.799, 0.733 s 0.936, 0.800, 0.733 s 3.868, 3.898 s 3.921, 3.936 s

First-level, node and root-verify times are within noise too, peak memory is equal (1.65 to 1.89 GiB), and node proofs differ by under 1 KiB (for example 243.0 and 242.8 KiB).

Upstream merges and CI

  • fiat_shamir: spongefish-style transcript over the BLAKE2s duplex #607 (spongefish transcript) and pcs: refuse claim widths that do not fit a usize #608: merged (5740d40). Byte level, the duplex core (counters, hold-back, output blocks) is unchanged; the seed is init(session) (the old seed with a zero statement half), the instance is the first message, roots are four words, the COMMIT/POW_BASE/NONCE nodes are gone and proof of work hashes a squeezed challenge with a u64 nonce. Rec.Duplex is remodelled accordingly (5e5390a, also in Author leanVM circuits in Clean, prove them, and export them to Rust #595); Builder::k_to_d is traced and modelled. A first-level node over circuit leaves binds each leaf's statement by the 32 bytes its transcript would squeeze right after the instance (instance_digest; rows Transcript::digest_so_far, two hash rows per leaf).

  • signers: signer sets, their digest and canonical form #611/leanxmss, leansphincs: leaf guests publish signer sets #612/rec: claim sets and their union in rows #613/signers: bring riscv-exploration to the restructured signer sets #615: merged (dbc9ad8); the new public Builder::block and Builder::d_to_halves are traced and modelled (5c821f8, also for Author leanVM circuits in Clean, prove them, and export them to Rust #595). No tree circuit changed because of the builder.

  • tree: claim-set trees that anyone combines #614/tree: height-tiered claim-set trees, small proofs at heights of their own #618/tree: soundness fix, bind the claim-set union's run placement before its challenge #626 (claim-set trees, tiers, union): merged (785614c). Upstream's places, tiers, claim-set and union design is kept, with this branch's one leaf family per tree (Design.family) beside it. Dense polynomials are Bytecode, Image, Leaf, Fixed, Wide, a statement holding values for the ones the tree has. Tree::new(Leaves, TreeShape { arity_0, arity, rate, claims }). No builder call or Lean file changed: the tree dumps differ from 1a14303 only in the session-derived constants, and checkrec/checkxmss accept every dump. cargo leanvm bench --cycles-only is identical to b094d00 for every tracked case (the aggregate first-level and node rows, proven rows and committed words included).

  • tree: a lone child of any size, absent places at every claim-set node #627 (lone children and absent places at every claim-set node) and pcs: restrict the stacked opening to callers that bind its claims #609 (stacked-opening lint): merged (07df524). Versions were then leanvm-tree-16 and LVMT 19, one above upstream's 15 and 18. leanvm-claim-union-3 is upstream's, since this branch does not change the union. tree: a lone child of any size, absent places at every claim-set node #627's two pin tests (..._keeps_tree_12s_heights_and_layout) take this branch's heights (STEP and LINK absent), and their session bytes are pinned as this branch derives them, because the tag also names the leaf family. No new caller of CommittedStack::open or StackCommitment::verify.

  • leanvm_core, doc: prove flock's reductions before the bus #630 (flock's reductions before the bus) and tree: tests that a claim-set tree is its leaf program's, so leanXMSS and leanSPHINCS never mix #628 (a claim-set tree is its leaf program's; tests only): merged (c65b918, 747b534). The recursion machine's proof is commit, flock, bus and tables, opening, in prove_with and in TableArgument::verify_core, which node circuits replay; the STEP and LINK tables need nothing of their own, being bus and table-sumcheck blocks like the others. Versions are leanvm-tree-17 and LVMT 20, one above upstream's 16 and 19; LVMP 17, the v2 session tag and leanvm-rv64im-13 are upstream's. a_tree_refuses_another_familys_tree_proofs now expects a proof under the other family's session to fail at flock's zerocheck, the first stage. tree: tests that a claim-set tree is its leaf program's, so leanXMSS and leanSPHINCS never mix #628's tests build their trees from Leaves::Runs and pass. The tree dumps change (node circuits verify children in the new order); checkrec and checkxmss accept every fresh dump, the leanXMSS and leanSPHINCS circuit dumps are byte-identical, and GenerateRec reproduces rec/clean.rs. Paired peak memory after leanvm_core, doc: prove flock's reductions before the bus #630 (bca51cc before, 3a026fb after, alternating under the bench lock, 2 rounds each at 16 threads; trees of outputs). Rows and committed words are unchanged for every proof and tree node. Flock's batch is freed before the bus, so a circuit proof's peak falls by 0.16 to 0.21 GiB; a leanXMSS guest tree's peak lies elsewhere and is unchanged. Proving times in these runs were taken beside other jobs and are not reported; the tables above keep their binaries' numbers.

    16 threads peak, before peak, after proof size, before after
    leanXMSS-400 guest, one proof 2.41 GiB 2.21 GiB 320.0 KiB 319.7 KiB
    leanXMSS-400 circuit, one proof 1.34 GiB 1.18 GiB 273.4 KiB 273.2 KiB
    leanSPHINCS-104 guest, one proof 2.74 GiB 2.47 GiB 331.0 KiB 332.2 KiB
    leanSPHINCS-104 circuit, one proof 1.41 GiB 1.20 GiB 276.6 KiB 275.2 KiB
    leanXMSS-400 guest, 2-to-1, 4 leaves 3.19 GiB 3.19 to 3.20 GiB node 250.3 KiB 251.5 KiB
    leanXMSS-400 circuit, 2-to-1, 4 leaves 1.78 GiB 1.60 to 1.61 GiB node 243.2 KiB 242.8 KiB
    leanXMSS-400 guest, 4-to-1, 16 leaves 3.19 to 3.20 GiB 3.20 to 3.22 GiB node 274.0 KiB 274.7 KiB
    leanXMSS-400 circuit, 4-to-1, 16 leaves 1.83 GiB 1.66 GiB node 265.9 KiB 266.0 KiB
    leanSPHINCS-104 guest, 2-to-1, 4 leaves 3.60 GiB 3.32 GiB node 251.5 KiB 251.4 KiB
    leanSPHINCS-104 circuit, 2-to-1, 4 leaves 1.84 to 1.85 GiB 1.63 to 1.64 GiB node 243.0 KiB 243.0 KiB
    leanSPHINCS-104 guest, 4-to-1, 16 leaves 3.62 GiB 3.34 to 3.37 GiB node 273.8 KiB 274.3 KiB
    leanSPHINCS-104 circuit, 4-to-1, 16 leaves 1.89 GiB 1.68 to 1.69 GiB node 266.9 KiB 267.1 KiB
  • CI at 747b534: every check passes (Test, Counts, the Lean proofs and replay jobs, the iOS and Android release builds); only build-pdf skips, as usual. Counts are unchanged.

  • Counts: at 48a0d09 the guest trees grew (2-to-1 first rows 138537 to 138538, proven rows 231424 to 231426, committed 5981184 to 5981211; node rows 119464 to 120721; 4-to-1 first 275693 to 275694, node 250255 to 252703, proven rows +2, committed +27). Causes: an empty STEP and LINK table still committed one padding row each (18 + 9 words, 2 proven rows), node circuits verified those tables of every child, and the tree statement carried a value word for W_leaf even in trees without circuit leaves (the first level's +1 PUB row). Fixed (5b6d01c): a table with no rows is absent (Heights = PerRecTable<Option<usize>>; fixed by the heights the verifier holds, nothing committed, no bus blocks, constraints, opening share or verifier rows; tree session tag bumped), and a statement holds values for the dense polynomials the tree has only. cargo leanvm bench --cycles-only is now identical to the base for every tracked case.

  • flock: a bit pass leaves every worker tasks on a small circuit #631, doc: zero-knowledge leaves #619 to rec: aggregation trees over zero-knowledge leaves #624 (zero-knowledge leaves), leanvm, primitives: put every module where it belongs #633 and primitives, fiat_shamir, zk, pcs, flock, rec: std-grade APIs and module layout #634 (module layout and std-grade APIs): merged (fcead06). The branch follows upstream's layout and names. The builder is one rec/circuit.rs, with this branch's dynamic chains and parts replay beside it in rec/circuit/{chain,parts}.rs. Builder::eq and Builder::expose are traced as eq_e/eq_k/eq_d and expose_e, and the Arith impl's mul and square are traced as before, so the dumps and checkrec/checkxmss are unchanged in format. XmssBatch/SphincsBatch hold a CircuitKey, and LeafCircuit holds the batch's &CircuitKey. TreeShape has no leaf field: the leaf shape is the family's (Leaves::Runs { program, shape }), and TreeShape::depth replaces root_kind. The CLI formats table stats itself (bench::pretty_integer), so TableStats has no Display. Rec/Emit.lean emits crate::bus paths into clean.rs.

  • Zero knowledge: RISC-V leaves may be zero knowledge, as upstream's trees allow (Leaves::Runs with LeafShape::zero_knowledge(), --zk on aggregate with a guest program). The tree session names the leaf kind (one more byte in the Runs tag), so a ZK tree and a plain tree over one program never share a session. Signature-circuit leaves (Leaves::Circuit) are recursion proofs, which are never zero knowledge, so that combination is refused: --zk with leanxmss-rec/leansphincs-rec, or with those programs as aggregate leaves, is a CLI error. Versions: LVMT 20 and leanvm-tree-17 stay one above upstream's 19 and 16. LVMP 17 and leanvm-rv64im-13 are upstream's. The two ..._keeps_tree_12s_heights_and_layout tests pin the new session bytes; heights and layout are unchanged.

  • Checks at dc7bb92: fmt; clippyall (haswell 1.97 and 1.99, native 1.99), system-alloc, AVX-512, ARM64, --features circuits; docall; testall (541 passed); lake build, Audit.lean, leanchecker LeanVMCircuits.Rec.Emit, checkrec and checkxmss on fresh dumps, and the GenerateRec diff, all exit 0. Release smoke: leanxmss-rec --n 400 and leansphincs-rec --n 104 prove, serialize and verify, and refuse a tampered signature. Trees of outputs and claim-set trees (capacity 801 and 209) over four circuit leaves prove and verify. A ZK tree over leanxmss guest leaves proves and verifies. --zk with circuit leaves is refused. a_tree_refuses_another_familys_tree_proofs passes.

Recursion machine: STEP and LINK tables

Two tables join EMUL, EXK, HASH, SPLIT, CAST, PUB (order EMUL EXK HASH SPLIT CAST STEP LINK PUB). Their rows put data-keyed tuples (key, x0, x1, ACT, 0) on the existing bus (the leaf multiset framework already balances any degree-2 forms; the machine used it only for copy cycles): ACT is a new public fixed column (1 on a table's rows, 0 on padding), bit 63 of every dynamic key keeps them apart from slot keys, and a committed a (wired to 1 on real rows) makes zero padding rows push what they pull. STEP's tweak word is its nine position bits over 2^8; its push key is the pull key's position plus one, the carry over bits 32 to 34 as X^32 a + X^33 a s0 + X^34 a s0 s1. New Coord::ScaledProd in leaf. Lean: Rec.Model tables, chainStep/link, Rec.Tables forms (GenerateRec emits them into clean.rs), Balanced and Accepts in Rec.Contracts. Tamper tests: a wrong step input, swapped or missing steps, a mismatched link end, a cycle of steps at a chain index past 41, a padding row carrying a tuple (refused by the prover's bus; with a forged ACT the verifier rejects).

Not done

The export check is per dumped size; the tree's signature first-level circuits (and their claim-set reading) are not modeled in Lean; no tracked bench cases for the circuit paths; CheckXmss does not parse k_to_d, block or d_to_halves (signature circuits do not call them).

…hereum#595, vendor the XMSS specification, author the leanXMSS verifier circuit in Lean
…-rec to the CLI, and check the Rust circuit is the Lean one with checkxmss
… on the host's known answers, and author its recursion-machine circuit in Lean
…erification with Option.elim so the kernel never reduces a symbolic hash
…uilder's methods and an honest assignment for every verifying batch
…; aggregate signature-circuit proofs in trees with leaf families, mixed trees and topology-checked roots
…udit this branch's theorems, build and check every module in CI
@github-actions

github-actions Bot commented Oct 11, 2026 •

Copy link
Copy Markdown

Benchmarks: base against this PR, on one runner

dc7bb92 merged into its base, against the base 37c1525: 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.

Fibonacci

Prover stages
benchmark threads runner base this PR change
fibonacci-asm-2000000 16 x86-64 508.44 ms 514.13 ms +0.95% (-3.46% to +1.51%)
 ↳ build-witness 39.13 ms 39.68 ms +0.42% (-6.15% to +1.66%)
 ↳ commit 70.19 ms 70.02 ms -0.23% (-5.71% to +0.63%)
 ↳ execute-program 75.71 ms 75.23 ms -0.70% (-5.43% to +2.19%)
 ↳ flock-reductions 133.66 ms 133.93 ms +0.04% (-6.90% to +1.38%)
 ↳ pcs-open 137.51 ms 141.49 ms +2.98% (+0.17% to +5.02%)
 ↳ prove-bus 37.17 ms 37.92 ms +1.80% (-3.11% to +6.71%)
 ↳ prove-constraints 13.55 ms 14.06 ms +3.55% (-5.19% to +6.79%)

PCS

benchmark threads runner measure base this PR change
pcs-open-22 16 arm64 Proving time 21.44 ms 21.79 ms +1.57% (+0.94% to +17.56%)

leanSPHINCS

Prover stages
benchmark threads runner base this PR change
leansphincs-26 16 arm64 181.03 ms 180.09 ms -0.79% (-1.03% to +2.11%)
 ↳ build-witness 5.62 ms 5.65 ms +0.57% (-1.31% to +12.71%)
 ↳ commit 23.82 ms 23.78 ms -0.20% (-0.83% to +9.34%)
 ↳ execute-program 12.11 ms 11.73 ms -3.62% (-5.41% to -1.28%)
 ↳ flock-reductions 62.11 ms 61.96 ms -0.53% (-0.79% to +0.68%)
 ↳ pcs-open 57.77 ms 57.39 ms -1.06% (-1.57% to +1.15%)
 ↳ prove-bus 15.01 ms 14.98 ms +0.34% (-0.69% to +1.42%)
 ↳ prove-constraints 4.17 ms 4.22 ms +0.60% (-2.18% to +4.07%)

leanXMSS

benchmark threads runner measure base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Proving time 953.89 ms 939.92 ms -1.46% (-2.02% to -1.20%)
aggregate-leanxmss-100-2to1-first 4 x86-64 Proving time 176.60 ms 178.73 ms +1.20% (+0.40% to +1.61%)
aggregate-leanxmss-100-2to1-node 1 arm64 Proving time 1.02 s 992.72 ms -2.23% (-2.64% to -2.02%)
aggregate-leanxmss-100-2to1-node 4 arm64 Proving time 283.04 ms 279.49 ms -1.25% (-1.59% to -1.20%)
aggregate-leanxmss-100-2to1-node 1 x86-64 Proving time 567.41 ms 554.00 ms -1.86% (-4.06% to -1.29%)
aggregate-leanxmss-100-4to1-first 8 x86-64 Proving time 220.77 ms 224.43 ms +1.12% (+0.39% to +3.87%)
aggregate-leanxmss-100-4to1-first 1 x86-64 Verifying time 4.76 ms 4.65 ms -2.25% (-6.49% to -0.66%)
aggregate-leanxmss-100-4to1-node 1 arm64 Verifying time 10.28 ms 10.15 ms -1.27% (-2.12% to -0.16%)
aggregate-leanxmss-100-2to1-first 1 arm64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 4 arm64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 8 arm64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 16 arm64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 1 x86-64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 4 x86-64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 8 x86-64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 16 x86-64 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-node 1 arm64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 4 arm64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 8 arm64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 16 arm64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 1 x86-64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 4 x86-64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 8 x86-64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 16 x86-64 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-4to1-first 1 arm64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 4 arm64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 8 arm64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 16 arm64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 1 x86-64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 4 x86-64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 8 x86-64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 16 x86-64 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-node 1 arm64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 4 arm64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 8 arm64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 16 arm64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 1 x86-64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 4 x86-64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 8 x86-64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 16 x86-64 Proof size 280,863 B 281,343 B +480 B (+0.17%)
Prover stages
benchmark threads runner base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 953.89 ms 939.92 ms -1.46% (-2.02% to -1.20%)
 ↳ build-circuit 12.55 ms 13.53 ms +8.12% (+5.75% to +8.98%)
 ↳ prove-recursion 918.60 ms 903.31 ms -1.67% (-2.23% to -1.36%)
 ↳ reduce-claims 15.54 ms 15.75 ms +0.76% (+0.07% to +2.65%)
 ↳ reduce-in-rows 1.41 ms 1.57 ms +7.74% (+5.60% to +13.56%)
 ↳ verify 5.81 ms 5.81 ms +0.01% (-0.42% to +0.58%)
aggregate-leanxmss-100-2to1-first 4 arm64 267.37 ms 264.82 ms -0.92% (-1.23% to -0.70%)
 ↳ build-circuit 10.58 ms 11.53 ms +9.15% (+6.64% to +12.81%)
 ↳ prove-recursion 244.08 ms 240.41 ms -1.42% (-1.74% to -1.32%)
 ↳ reduce-claims 5.43 ms 5.45 ms +0.29% (-2.68% to +2.89%)
 ↳ reduce-in-rows 1.46 ms 1.62 ms +8.66% (+6.30% to +10.58%)
 ↳ verify 5.74 ms 5.73 ms +0.01% (-0.19% to +6.43%)
aggregate-leanxmss-100-2to1-first 8 arm64 156.24 ms 156.01 ms -0.19% (-0.77% to +0.55%)
 ↳ build-circuit 10.27 ms 11.21 ms +9.42% (+6.99% to +11.99%)
 ↳ prove-recursion 134.52 ms 133.02 ms -1.12% (-1.65% to -0.53%)
 ↳ reduce-claims 4.04 ms 4.27 ms +2.01% (+1.01% to +5.60%)
 ↳ reduce-in-rows 1.46 ms 1.57 ms +8.62% (+2.56% to +12.69%)
 ↳ verify 5.82 ms 5.88 ms +0.53% (-2.04% to +2.01%)
aggregate-leanxmss-100-2to1-first 16 arm64 103.94 ms 104.38 ms +0.84% (-0.34% to +9.24%)
 ↳ build-circuit 10.63 ms 11.58 ms +8.75% (+7.69% to +12.42%)
 ↳ prove-recursion 81.45 ms 80.89 ms -0.23% (-1.82% to +10.70%)
 ↳ reduce-claims 3.91 ms 3.86 ms -0.29% (-7.72% to +1.66%)
 ↳ reduce-in-rows 1.49 ms 1.61 ms +9.35% (+6.28% to +12.29%)
 ↳ verify 6.37 ms 6.36 ms -0.57% (-1.01% to +1.24%)
aggregate-leanxmss-100-2to1-first 1 x86-64 525.56 ms 525.97 ms +0.16% (-4.64% to +6.01%)
 ↳ build-circuit 13.46 ms 15.47 ms +12.39% (+10.92% to +19.27%)
 ↳ prove-recursion 487.61 ms 483.36 ms -0.51% (-5.50% to +5.45%)
 ↳ reduce-claims 16.37 ms 17.21 ms +1.65% (-0.88% to +16.03%)
 ↳ reduce-in-rows 1.65 ms 2.32 ms +40.35% (+38.46% to +45.53%)
 ↳ verify 6.30 ms 6.44 ms +3.97% (-4.17% to +5.18%)
aggregate-leanxmss-100-2to1-first 4 x86-64 176.60 ms 178.73 ms +1.20% (+0.40% to +1.61%)
 ↳ build-circuit 13.37 ms 15.37 ms +13.78% (+11.15% to +17.31%)
 ↳ prove-recursion 148.32 ms 147.75 ms -0.27% (-0.81% to +0.15%)
 ↳ reduce-claims 6.87 ms 6.69 ms -6.82% (-13.25% to +8.64%)
 ↳ reduce-in-rows 1.65 ms 2.23 ms +35.62% (+30.24% to +37.18%)
 ↳ verify 6.47 ms 6.47 ms +0.01% (-1.14% to +0.92%)
aggregate-leanxmss-100-2to1-first 8 x86-64 113.89 ms 115.36 ms +1.29% (-7.27% to +2.80%)
 ↳ build-circuit 13.71 ms 15.45 ms +13.06% (+9.29% to +13.79%)
 ↳ prove-recursion 85.75 ms 85.02 ms -0.29% (-10.02% to +0.15%)
 ↳ reduce-claims 5.59 ms 6.17 ms -5.51% (-21.74% to +22.01%)
 ↳ reduce-in-rows 1.81 ms 2.31 ms +28.60% (+26.56% to +40.50%)
 ↳ verify 6.63 ms 6.65 ms +0.65% (-1.19% to +1.03%)
aggregate-leanxmss-100-2to1-first 16 x86-64 90.69 ms 89.36 ms -1.28% (-4.57% to +6.74%)
 ↳ build-circuit 14.00 ms 15.81 ms +13.24% (+12.10% to +16.68%)
 ↳ prove-recursion 60.92 ms 57.93 ms -1.89% (-11.34% to +3.61%)
 ↳ reduce-claims 7.27 ms 6.52 ms -9.89% (-45.71% to +21.95%)
 ↳ reduce-in-rows 1.77 ms 2.35 ms +31.43% (+25.34% to +37.84%)
 ↳ verify 6.98 ms 7.05 ms +1.21% (+0.20% to +1.67%)
aggregate-leanxmss-100-2to1-node 1 arm64 1.02 s 992.72 ms -2.23% (-2.64% to -2.02%)
 ↳ build-circuit 12.33 ms 13.33 ms +8.11% (+7.00% to +8.65%)
 ↳ prove-recursion 965.03 ms 941.13 ms -2.48% (-2.90% to -2.25%)
 ↳ reduce-claims 31.05 ms 31.11 ms +0.03% (-0.83% to +0.69%)
 ↳ reduce-in-rows 1.52 ms 1.62 ms +7.04% (+3.69% to +7.68%)
aggregate-leanxmss-100-2to1-node 4 arm64 283.04 ms 279.49 ms -1.25% (-1.59% to -1.20%)
 ↳ build-circuit 11.56 ms 12.51 ms +8.48% (+7.02% to +11.45%)
 ↳ prove-recursion 254.76 ms 249.62 ms -2.04% (-2.16% to -1.81%)
 ↳ reduce-claims 10.42 ms 10.80 ms +1.16% (-0.35% to +8.24%)
 ↳ reduce-in-rows 1.57 ms 1.62 ms +4.18% (+1.01% to +6.69%)
aggregate-leanxmss-100-2to1-node 8 arm64 165.36 ms 164.13 ms -0.81% (-1.03% to -0.25%)
 ↳ build-circuit 11.40 ms 12.19 ms +7.38% (+5.61% to +9.08%)
 ↳ prove-recursion 139.85 ms 137.62 ms -1.70% (-1.77% to -0.93%)
 ↳ reduce-claims 7.93 ms 7.98 ms +0.60% (-3.66% to +2.42%)
 ↳ reduce-in-rows 1.52 ms 1.63 ms +8.36% (+3.59% to +10.05%)
aggregate-leanxmss-100-2to1-node 16 arm64 108.60 ms 108.17 ms -0.45% (-0.92% to +1.08%)
 ↳ build-circuit 11.73 ms 12.75 ms +8.51% (+5.27% to +8.84%)
 ↳ prove-recursion 84.01 ms 82.53 ms -1.45% (-2.31% to -0.23%)
 ↳ reduce-claims 6.52 ms 6.63 ms +1.93% (-2.10% to +4.10%)
 ↳ reduce-in-rows 1.54 ms 1.62 ms +5.24% (+3.28% to +10.44%)
aggregate-leanxmss-100-2to1-node 1 x86-64 567.41 ms 554.00 ms -1.86% (-4.06% to -1.29%)
 ↳ build-circuit 14.77 ms 16.32 ms +10.65% (+4.26% to +20.49%)
 ↳ prove-recursion 511.94 ms 499.89 ms -2.38% (-4.64% to -2.15%)
 ↳ reduce-claims 29.88 ms 30.10 ms -0.49% (-8.37% to +1.19%)
 ↳ reduce-in-rows 1.67 ms 2.01 ms +20.81% (+10.98% to +24.60%)
aggregate-leanxmss-100-2to1-node 4 x86-64 186.42 ms 188.09 ms +0.55% (-8.91% to +1.40%)
 ↳ build-circuit 14.14 ms 15.68 ms +10.92% (+6.88% to +13.21%)
 ↳ prove-recursion 153.46 ms 152.35 ms -0.59% (-11.35% to -0.20%)
 ↳ reduce-claims 11.47 ms 12.09 ms +3.71% (-6.73% to +8.37%)
 ↳ reduce-in-rows 1.74 ms 2.19 ms +26.78% (+22.43% to +29.53%)
aggregate-leanxmss-100-2to1-node 8 x86-64 118.63 ms 120.42 ms +0.93% (+0.21% to +3.29%)
 ↳ build-circuit 14.77 ms 16.22 ms +9.84% (+5.90% to +11.23%)
 ↳ prove-recursion 87.52 ms 87.28 ms -0.43% (-0.48% to +0.13%)
 ↳ reduce-claims 9.14 ms 9.30 ms -6.53% (-7.80% to +19.23%)
 ↳ reduce-in-rows 1.83 ms 2.29 ms +26.21% (+23.46% to +33.38%)
aggregate-leanxmss-100-2to1-node 16 x86-64 90.69 ms 92.17 ms +4.02% (-2.35% to +8.02%)
 ↳ build-circuit 14.52 ms 16.74 ms +15.87% (+13.10% to +16.92%)
 ↳ prove-recursion 60.16 ms 59.21 ms +1.81% (-7.24% to +8.54%)
 ↳ reduce-claims 8.89 ms 7.95 ms -4.17% (-13.74% to -1.71%)
 ↳ reduce-in-rows 1.80 ms 2.36 ms +28.02% (+24.72% to +35.85%)
aggregate-leanxmss-100-4to1-first 1 arm64 1.88 s 1.88 s -0.13% (-0.22% to -0.10%)
 ↳ build-circuit 25.31 ms 26.86 ms +6.20% (+5.16% to +6.78%)
 ↳ prove-recursion 1.82 s 1.82 s -0.24% (-0.31% to -0.20%)
 ↳ reduce-claims 21.19 ms 21.14 ms -0.29% (-0.73% to +0.69%)
 ↳ reduce-in-rows 2.82 ms 2.99 ms +6.50% (+4.58% to +7.88%)
 ↳ verify 11.53 ms 11.49 ms -0.25% (-0.86% to +0.38%)
aggregate-leanxmss-100-4to1-first 4 arm64 519.46 ms 518.55 ms -0.10% (-0.71% to +0.24%)
 ↳ build-circuit 21.51 ms 23.09 ms +7.38% (+6.28% to +7.93%)
 ↳ prove-recursion 477.01 ms 474.07 ms -0.46% (-1.21% to -0.18%)
 ↳ reduce-claims 6.77 ms 6.90 ms +1.08% (-1.67% to +1.86%)
 ↳ reduce-in-rows 2.87 ms 3.11 ms +8.51% (+5.79% to +13.64%)
 ↳ verify 11.27 ms 11.25 ms -0.13% (-0.93% to +0.28%)
aggregate-leanxmss-100-4to1-first 8 arm64 302.08 ms 303.05 ms +0.31% (-0.12% to +0.35%)
 ↳ build-circuit 21.49 ms 23.09 ms +7.34% (+6.84% to +8.70%)
 ↳ prove-recursion 260.93 ms 259.67 ms -0.46% (-0.79% to -0.33%)
 ↳ reduce-claims 5.14 ms 5.09 ms -1.65% (-2.88% to +0.51%)
 ↳ reduce-in-rows 2.84 ms 3.12 ms +10.38% (+8.68% to +11.09%)
 ↳ verify 11.64 ms 11.67 ms +0.26% (-0.42% to +1.15%)
aggregate-leanxmss-100-4to1-first 16 arm64 195.08 ms 194.56 ms -0.15% (-0.77% to +3.04%)
 ↳ build-circuit 22.19 ms 23.18 ms +5.00% (+3.29% to +12.54%)
 ↳ prove-recursion 152.76 ms 151.49 ms -0.83% (-1.32% to +1.48%)
 ↳ reduce-claims 4.54 ms 4.47 ms -0.52% (-3.35% to +1.89%)
 ↳ reduce-in-rows 2.93 ms 3.17 ms +6.61% (+5.16% to +11.68%)
 ↳ verify 12.64 ms 12.44 ms -1.80% (-2.26% to +4.03%)
aggregate-leanxmss-100-4to1-first 1 x86-64 1.14 s 1.14 s +0.25% (-0.14% to +0.74%)
 ↳ build-circuit 32.73 ms 35.67 ms +9.41% (+5.77% to +12.46%)
 ↳ prove-recursion 1.07 s 1.07 s -0.07% (-0.49% to +0.26%)
 ↳ reduce-claims 25.75 ms 25.80 ms +0.22% (-1.16% to +1.63%)
 ↳ reduce-in-rows 3.73 ms 4.78 ms +26.59% (+24.48% to +30.47%)
 ↳ verify 12.80 ms 12.72 ms -0.80% (-1.58% to +0.41%)
aggregate-leanxmss-100-4to1-first 4 x86-64 334.50 ms 335.23 ms +2.22% (-1.31% to +3.85%)
 ↳ build-circuit 30.04 ms 32.82 ms +6.75% (+4.02% to +17.98%)
 ↳ prove-recursion 278.79 ms 277.95 ms +1.21% (-2.13% to +2.14%)
 ↳ reduce-claims 9.06 ms 8.49 ms -6.12% (-11.99% to +8.22%)
 ↳ reduce-in-rows 3.58 ms 4.56 ms +27.46% (+24.35% to +37.98%)
 ↳ verify 12.10 ms 12.49 ms +1.69% (-0.15% to +5.08%)
aggregate-leanxmss-100-4to1-first 8 x86-64 220.77 ms 224.43 ms +1.12% (+0.39% to +3.87%)
 ↳ build-circuit 31.11 ms 33.25 ms +6.85% (+1.61% to +11.87%)
 ↳ prove-recursion 164.66 ms 164.84 ms -0.56% (-1.09% to +2.66%)
 ↳ reduce-claims 7.69 ms 7.34 ms -1.18% (-16.29% to +50.09%)
 ↳ reduce-in-rows 3.75 ms 4.64 ms +23.20% (+19.20% to +31.83%)
 ↳ verify 13.04 ms 13.08 ms +0.08% (-2.63% to +2.59%)
aggregate-leanxmss-100-4to1-first 16 x86-64 169.59 ms 177.15 ms +4.46% (-0.36% to +7.39%)
 ↳ build-circuit 32.16 ms 34.02 ms +6.26% (+5.51% to +8.64%)
 ↳ prove-recursion 110.87 ms 115.55 ms +4.68% (-2.82% to +7.58%)
 ↳ reduce-claims 8.38 ms 7.80 ms -8.27% (-12.53% to +12.25%)
 ↳ reduce-in-rows 3.90 ms 4.90 ms +26.10% (+22.25% to +30.48%)
 ↳ verify 13.83 ms 13.80 ms -0.64% (-1.57% to +2.17%)
aggregate-leanxmss-100-4to1-node 1 arm64 2.06 s 2.06 s +0.05% (-0.29% to +0.35%)
 ↳ build-circuit 29.42 ms 31.13 ms +5.63% (+5.16% to +6.42%)
 ↳ prove-recursion 1.95 s 1.95 s -0.05% (-0.38% to +0.26%)
 ↳ reduce-claims 56.89 ms 56.60 ms -0.37% (-0.81% to +0.11%)
 ↳ reduce-in-rows 3.03 ms 3.23 ms +6.64% (+3.85% to +9.19%)
aggregate-leanxmss-100-4to1-node 4 arm64 565.45 ms 565.82 ms +0.28% (-0.25% to +0.51%)
 ↳ build-circuit 25.58 ms 27.11 ms +6.25% (+4.82% to +6.76%)
 ↳ prove-recursion 508.81 ms 507.30 ms -0.11% (-0.58% to +0.23%)
 ↳ reduce-claims 17.40 ms 17.60 ms -0.11% (-0.54% to +1.64%)
 ↳ reduce-in-rows 3.03 ms 3.24 ms +6.81% (+6.21% to +9.58%)
aggregate-leanxmss-100-4to1-node 8 arm64 326.25 ms 328.79 ms +0.54% (+0.27% to +1.24%)
 ↳ build-circuit 25.59 ms 27.23 ms +6.42% (+4.80% to +7.72%)
 ↳ prove-recursion 275.43 ms 275.99 ms +0.00% (-0.19% to +0.74%)
 ↳ reduce-claims 12.05 ms 11.94 ms -0.86% (-1.45% to -0.07%)
 ↳ reduce-in-rows 3.00 ms 3.23 ms +7.90% (+6.16% to +9.21%)
aggregate-leanxmss-100-4to1-node 16 arm64 210.28 ms 211.00 ms +0.76% (+0.13% to +3.51%)
 ↳ build-circuit 25.39 ms 27.42 ms +6.19% (+4.81% to +15.07%)
 ↳ prove-recursion 161.33 ms 161.21 ms -0.16% (-0.77% to +1.62%)
 ↳ reduce-claims 9.43 ms 9.54 ms +0.35% (-0.44% to +2.15%)
 ↳ reduce-in-rows 3.06 ms 3.29 ms +7.63% (+4.18% to +8.92%)
aggregate-leanxmss-100-4to1-node 1 x86-64 1.26 s 1.26 s +0.05% (-0.54% to +0.91%)
 ↳ build-circuit 42.00 ms 43.07 ms +2.82% (-0.28% to +5.37%)
 ↳ prove-recursion 1.13 s 1.13 s -0.06% (-0.51% to +0.32%)
 ↳ reduce-claims 63.89 ms 65.00 ms +0.33% (-2.29% to +7.20%)
 ↳ reduce-in-rows 3.91 ms 4.65 ms +18.26% (+11.70% to +27.35%)
aggregate-leanxmss-100-4to1-node 4 x86-64 360.81 ms 367.49 ms +2.34% (-3.33% to +3.78%)
 ↳ build-circuit 36.25 ms 39.01 ms +6.16% (+3.55% to +13.10%)
 ↳ prove-recursion 289.47 ms 294.01 ms +1.97% (-2.90% to +3.11%)
 ↳ reduce-claims 19.21 ms 19.07 ms -0.68% (-21.51% to +12.19%)
 ↳ reduce-in-rows 3.73 ms 4.72 ms +26.21% (+17.09% to +27.46%)
aggregate-leanxmss-100-4to1-node 8 x86-64 242.67 ms 243.00 ms +1.99% (-1.59% to +12.72%)
 ↳ build-circuit 36.13 ms 38.77 ms +7.31% (+5.92% to +8.53%)
 ↳ prove-recursion 175.52 ms 172.60 ms +0.03% (-3.31% to +15.76%)
 ↳ reduce-claims 15.76 ms 14.60 ms -5.22% (-11.22% to +10.53%)
 ↳ reduce-in-rows 3.92 ms 4.82 ms +24.00% (+20.08% to +24.67%)
aggregate-leanxmss-100-4to1-node 16 x86-64 178.22 ms 183.94 ms +4.67% (-4.49% to +17.19%)
 ↳ build-circuit 36.42 ms 39.31 ms +7.93% (+6.20% to +11.34%)
 ↳ prove-recursion 115.25 ms 116.03 ms +3.93% (-8.95% to +20.60%)
 ↳ reduce-claims 12.44 ms 11.59 ms -3.80% (-18.91% to +29.04%)
 ↳ reduce-in-rows 4.25 ms 5.15 ms +20.95% (+19.63% to +23.66%)
leanxmss-100 8 x86-64 171.87 ms 171.74 ms -0.07% (-0.89% to +0.38%)
 ↳ build-witness 10.82 ms 10.91 ms +0.73% (+0.19% to +2.14%)
 ↳ commit 23.90 ms 23.85 ms -0.50% (-5.35% to +0.37%)
 ↳ execute-program 12.07 ms 12.23 ms +1.32% (+0.51% to +5.78%)
 ↳ flock-reductions 47.48 ms 47.26 ms -0.41% (-0.71% to +0.29%)
 ↳ pcs-open 57.53 ms 57.55 ms +0.05% (-0.60% to +0.60%)
 ↳ prove-bus 14.41 ms 14.37 ms -0.26% (-1.32% to +0.78%)
 ↳ prove-constraints 5.23 ms 5.19 ms -0.77% (-1.00% to -0.20%)
leanxmss-100 16 x86-64 117.72 ms 119.59 ms +2.43% (-3.19% to +6.96%)
 ↳ build-witness 7.16 ms 7.16 ms -0.21% (-10.92% to +14.33%)
 ↳ commit 12.79 ms 12.89 ms +4.15% (-5.84% to +10.98%)
 ↳ execute-program 11.78 ms 12.09 ms +0.46% (-0.86% to +4.18%)
 ↳ flock-reductions 31.47 ms 31.88 ms +2.79% (-4.43% to +10.09%)
 ↳ pcs-open 38.98 ms 39.30 ms +4.48% (-3.04% to +4.91%)
 ↳ prove-bus 10.57 ms 10.94 ms +3.23% (-2.74% to +6.93%)
 ↳ prove-constraints 4.83 ms 4.93 ms +2.88% (+0.77% to +5.70%)
Every result

BLAKE2s

benchmark threads runner CPU measure base this PR change
hash-50000 16 arm64 Neoverse-V2 Proving time 522.00 ms 521.23 ms -0.22% (-0.48% to +0.18%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 375.38 ms 365.26 ms -2.70% (-6.89% to +3.51%)
hash-50000 16 arm64 Neoverse-V2 Verifying time 3.23 ms 3.23 ms +0.11% (-0.44% to +0.94%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.51 ms 3.47 ms -0.95% (-3.69% to +2.28%)
blake2s-batch 16 arm64 Neoverse-V2 Time per operation 2.91 ns 2.91 ns +0.03% (-0.14% to +2.96%)
blake2s-batch 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 1.03 ns 1.03 ns +0.78% (-6.88% to +17.45%)
hash-50000 16 arm64 Neoverse-V2 Proof size 322,698 B 322,698 B 0 B (+0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 322,698 B 322,698 B 0 B (+0.00%)
hash-50000 16 arm64 Neoverse-V2 Peak memory 4985.72 MiB 4982.62 MiB -0.06% (-0.25% to +0.01%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 2019.98 MiB 2019.66 MiB -0.04% (-0.34% to +0.26%)
hash-50000 16 arm64 Neoverse-V2 Peak heap 4400.28 MiB 4400.26 MiB -0.00% (-0.00% to +0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 1823.96 MiB 1823.94 MiB -0.00% (-0.01% to +0.00%)
hash-50000 16 arm64 Neoverse-V2 Allocations 16,708 16,708 +0.00% (-0.08% to +0.00%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,349 17,354 +0.02% (+0.01% to +0.11%)
Prover stages
benchmark threads runner CPU base this PR change
hash-50000 16 arm64 Neoverse-V2 522.00 ms 521.23 ms -0.22% (-0.48% to +0.18%)
 ↳ build-witness 19.89 ms 19.87 ms +0.12% (-0.28% to +1.79%)
 ↳ commit 81.99 ms 81.78 ms -0.12% (-0.31% to +1.01%)
 ↳ execute-program 23.77 ms 23.93 ms -2.71% (-6.31% to +2.02%)
 ↳ flock-reductions 170.39 ms 170.09 ms -0.12% (-0.58% to +0.16%)
 ↳ pcs-open 188.74 ms 188.74 ms -0.10% (-0.42% to +0.14%)
 ↳ prove-bus 29.96 ms 29.95 ms -0.02% (-0.28% to +0.26%)
 ↳ prove-constraints 7.02 ms 7.08 ms +0.03% (-0.80% to +0.93%)
hash-50000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 375.38 ms 365.26 ms -2.70% (-6.89% to +3.51%)
 ↳ build-witness 25.86 ms 26.43 ms +0.30% (-6.27% to +7.80%)
 ↳ commit 51.92 ms 51.46 ms +1.92% (-10.75% to +14.44%)
 ↳ execute-program 30.83 ms 30.51 ms +0.08% (-5.38% to +1.02%)
 ↳ flock-reductions 98.52 ms 93.36 ms -2.59% (-9.32% to +5.32%)
 ↳ pcs-open 135.41 ms 130.12 ms -4.41% (-6.50% to +0.26%)
 ↳ prove-bus 23.00 ms 22.38 ms -5.15% (-7.67% to +2.89%)
 ↳ prove-constraints 9.79 ms 9.60 ms -2.99% (-6.06% to +6.95%)

Fibonacci

benchmark threads runner CPU measure base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proving time 823.26 ms 822.12 ms -0.22% (-1.10% to +0.55%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 508.44 ms 514.13 ms +0.95% (-3.46% to +1.51%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Verifying time 3.38 ms 3.37 ms -0.06% (-0.95% to +0.75%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.49 ms 3.47 ms -0.61% (-1.07% to +1.29%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Proof size 364,138 B 364,138 B 0 B (+0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 364,138 B 364,138 B 0 B (+0.00%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak memory 7452.28 MiB 7451.06 MiB -0.02% (-0.05% to +0.02%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 3254.46 MiB 3251.50 MiB +0.03% (-0.16% to +0.10%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Peak heap 7049.90 MiB 7049.89 MiB -0.00% (-0.00% to +0.00%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 2998.77 MiB 2998.83 MiB +0.00% (-0.00% to +0.01%)
fibonacci-asm-2000000 16 arm64 Neoverse-V2 Allocations 11,644 11,644 +0.00% (-0.01% to +0.24%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 12,281 12,281 +0.00% (-0.01% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
fibonacci-asm-2000000 16 arm64 Neoverse-V2 823.26 ms 822.12 ms -0.22% (-1.10% to +0.55%)
 ↳ build-witness 29.45 ms 29.43 ms -0.17% (-0.72% to +1.01%)
 ↳ commit 126.37 ms 126.12 ms -0.22% (-0.36% to +0.49%)
 ↳ execute-program 65.64 ms 65.87 ms +0.09% (-2.02% to +6.21%)
 ↳ flock-reductions 294.81 ms 294.32 ms -0.20% (-0.46% to +0.09%)
 ↳ pcs-open 236.26 ms 235.32 ms -0.31% (-1.01% to +0.44%)
 ↳ prove-bus 59.74 ms 59.63 ms -0.21% (-0.46% to +0.21%)
 ↳ prove-constraints 10.98 ms 11.03 ms +0.40% (-28.44% to +1.98%)
fibonacci-asm-2000000 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 508.44 ms 514.13 ms +0.95% (-3.46% to +1.51%)
 ↳ build-witness 39.13 ms 39.68 ms +0.42% (-6.15% to +1.66%)
 ↳ commit 70.19 ms 70.02 ms -0.23% (-5.71% to +0.63%)
 ↳ execute-program 75.71 ms 75.23 ms -0.70% (-5.43% to +2.19%)
 ↳ flock-reductions 133.66 ms 133.93 ms +0.04% (-6.90% to +1.38%)
 ↳ pcs-open 137.51 ms 141.49 ms +2.98% (+0.17% to +5.02%)
 ↳ prove-bus 37.17 ms 37.92 ms +1.80% (-3.11% to +6.71%)
 ↳ prove-constraints 13.55 ms 14.06 ms +3.55% (-5.19% to +6.79%)

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 244.98 ns -0.01% (-0.04% to +0.01%)
f192-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 268.75 ns 268.37 ns -0.43% (-0.51% to +0.60%)
f192-mul-latency default arm64 Neoverse-V2 Time per operation 7.98 ns 7.97 ns +0.06% (-0.35% to +0.35%)
f192-mul-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 7.74 ns 7.71 ns -0.22% (-1.14% to +1.25%)
f192-mul-throughput default arm64 Neoverse-V2 Time per operation 2.94 ns 2.94 ns -0.03% (-0.03% to +0.03%)
f192-mul-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 4.50 ns 4.49 ns +0.13% (-0.47% to +1.15%)
f192-mul4-latency default arm64 Neoverse-V2 Time per operation 12.74 ns 13.08 ns +2.68% (-3.46% to +3.07%)
f192-mul4-latency default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 10.20 ns 10.20 ns +0.21% (-0.44% to +1.23%)
f192-mul4-throughput default arm64 Neoverse-V2 Time per operation 10.77 ns 10.77 ns +0.05% (-0.05% to +0.09%)
f192-mul4-throughput default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 15.83 ns 15.78 ns -0.20% (-1.15% to +1.35%)
f192-square default arm64 Neoverse-V2 Time per operation 1.56 ns 1.56 ns +0.00% (-0.83% to +0.32%)
f192-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 3.37 ns 3.36 ns -0.03% (-0.83% to +1.34%)
f64-inv default arm64 Neoverse-V2 Time per operation 211.67 ns 211.64 ns -0.01% (-0.07% to +0.02%)
f64-inv default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 240.11 ns 240.90 ns +0.33% (-0.67% to +1.19%)
f64-mul default arm64 Neoverse-V2 Time per operation 0.56 ns 0.56 ns +0.00% (+0.00% to +0.18%)
f64-mul default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.88 ns 0.87 ns -0.57% (-0.91% to +0.23%)
f64-square default arm64 Neoverse-V2 Time per operation 0.55 ns 0.55 ns +0.00% (-0.18% to +1.09%)
f64-square default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 1.09 ns 1.10 ns +0.55% (-0.82% to +0.82%)
transpose-64bytes default arm64 Neoverse-V2 Time per operation 12.01 ns 12.00 ns -0.04% (-0.06% to +0.02%)
transpose-64bytes default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 0.86 ns 0.86 ns +0.35% (-0.93% to +4.22%)
transpose-64x64 default arm64 Neoverse-V2 Time per operation 96.60 ns 96.62 ns -0.02% (-0.08% to +0.10%)
transpose-64x64 default x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 74.27 ns 74.45 ns -0.01% (-2.07% to +0.79%)

Flock

benchmark threads runner CPU measure base this PR change
flock-alu-batch-262144 16 arm64 Neoverse-V2 Proving time 52.04 ms 51.27 ms -1.78% (-6.44% to +17.13%)
flock-alu-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 29.59 ms 30.27 ms +3.18% (-3.58% to +6.66%)
flock-div-batch-262144 16 arm64 Neoverse-V2 Proving time 368.32 ms 366.34 ms -0.37% (-0.55% to +0.09%)
flock-div-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 180.63 ms 180.77 ms -4.68% (-7.64% to +12.30%)
flock-hash-batch-262144 16 arm64 Neoverse-V2 Proving time 765.97 ms 760.47 ms -0.07% (-0.72% to +0.26%)
flock-hash-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 358.57 ms 355.20 ms -1.24% (-5.56% to +2.95%)
flock-ld-batch-262144 16 arm64 Neoverse-V2 Proving time 15.77 ms 15.63 ms -1.22% (-3.19% to +0.70%)
flock-ld-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 9.65 ms 9.73 ms +0.12% (-3.95% to +14.79%)
flock-load-batch-262144 16 arm64 Neoverse-V2 Proving time 50.24 ms 50.44 ms -0.11% (-3.86% to +1.20%)
flock-load-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 28.22 ms 27.94 ms -3.12% (-8.72% to +18.88%)
flock-mul-batch-262144 16 arm64 Neoverse-V2 Proving time 189.00 ms 188.39 ms -0.50% (-1.16% to +0.61%)
flock-mul-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 94.19 ms 96.28 ms +2.22% (-11.81% to +8.96%)
flock-mulh-batch-262144 16 arm64 Neoverse-V2 Proving time 362.14 ms 358.63 ms -0.53% (-1.12% to +0.04%)
flock-mulh-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 170.13 ms 168.81 ms -0.70% (-6.74% to +4.95%)
flock-sd-batch-262144 16 arm64 Neoverse-V2 Proving time 16.33 ms 16.30 ms -0.46% (-2.76% to +0.70%)
flock-sd-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 10.00 ms 10.05 ms +1.03% (-1.06% to +22.33%)
flock-shift-batch-262144 16 arm64 Neoverse-V2 Proving time 51.02 ms 50.35 ms -0.13% (-1.53% to +0.85%)
flock-shift-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 27.37 ms 29.49 ms +7.92% (-4.31% to +14.04%)
flock-store-batch-262144 16 arm64 Neoverse-V2 Proving time 50.16 ms 49.96 ms +0.08% (-2.83% to +0.74%)
flock-store-batch-262144 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 27.72 ms 27.92 ms -0.89% (-1.99% to +19.99%)

PCS

benchmark threads runner CPU measure base this PR change
pcs-commit-22 16 arm64 Neoverse-V2 Proving time 7.21 ms 7.49 ms +2.95% (-0.36% to +11.55%)
pcs-commit-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 5.23 ms 5.13 ms -2.45% (-11.74% to +13.47%)
pcs-open-22 16 arm64 Neoverse-V2 Proving time 21.44 ms 21.79 ms +1.57% (+0.94% to +17.56%)
pcs-open-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 14.48 ms 13.90 ms -6.41% (-10.12% to +18.58%)
ntt-forward-22 16 arm64 Neoverse-V2 Time per operation 3.73 ms 3.73 ms -0.04% (-1.89% to +3.43%)
ntt-forward-22 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Time per operation 2.65 ms 2.63 ms -3.01% (-12.97% to +15.14%)

leanSPHINCS

benchmark threads runner CPU measure base this PR change
leansphincs-26 16 arm64 Neoverse-V2 Proving time 181.03 ms 180.09 ms -0.79% (-1.03% to +2.11%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 128.66 ms 128.52 ms +0.06% (-2.92% to +3.56%)
leansphincs-26 16 arm64 Neoverse-V2 Verifying time 3.26 ms 3.27 ms +0.28% (-0.72% to +0.74%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.40 ms 3.37 ms -0.30% (-1.49% to +0.74%)
leansphincs-26 16 arm64 Neoverse-V2 Proof size 316,466 B 316,466 B 0 B (+0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 316,466 B 316,466 B 0 B (+0.00%)
leansphincs-26 16 arm64 Neoverse-V2 Peak memory 1734.75 MiB 1738.89 MiB +0.13% (-0.18% to +0.45%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 709.97 MiB 704.25 MiB -0.82% (-1.43% to -0.03%)
leansphincs-26 16 arm64 Neoverse-V2 Peak heap 1395.22 MiB 1395.23 MiB +0.00% (-0.01% to +0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 587.86 MiB 587.82 MiB -0.00% (-0.02% to +0.01%)
leansphincs-26 16 arm64 Neoverse-V2 Allocations 25,211 25,211 +0.00% (-0.05% to +0.00%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,910 25,910 +0.00% (+0.00% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
leansphincs-26 16 arm64 Neoverse-V2 181.03 ms 180.09 ms -0.79% (-1.03% to +2.11%)
 ↳ build-witness 5.62 ms 5.65 ms +0.57% (-1.31% to +12.71%)
 ↳ commit 23.82 ms 23.78 ms -0.20% (-0.83% to +9.34%)
 ↳ execute-program 12.11 ms 11.73 ms -3.62% (-5.41% to -1.28%)
 ↳ flock-reductions 62.11 ms 61.96 ms -0.53% (-0.79% to +0.68%)
 ↳ pcs-open 57.77 ms 57.39 ms -1.06% (-1.57% to +1.15%)
 ↳ prove-bus 15.01 ms 14.98 ms +0.34% (-0.69% to +1.42%)
 ↳ prove-constraints 4.17 ms 4.22 ms +0.60% (-2.18% to +4.07%)
leansphincs-26 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 128.66 ms 128.52 ms +0.06% (-2.92% to +3.56%)
 ↳ build-witness 8.27 ms 8.23 ms +0.18% (-1.57% to +2.81%)
 ↳ commit 14.34 ms 14.33 ms +0.05% (-0.36% to +4.96%)
 ↳ execute-program 14.01 ms 14.02 ms -0.16% (-3.88% to +5.15%)
 ↳ flock-reductions 35.00 ms 34.94 ms -0.39% (-2.28% to +5.52%)
 ↳ pcs-open 40.67 ms 40.31 ms +0.56% (-3.96% to +4.01%)
 ↳ prove-bus 11.55 ms 11.64 ms -0.46% (-3.51% to +6.54%)
 ↳ prove-constraints 4.89 ms 4.98 ms -1.18% (-4.76% to +4.55%)

leanXMSS

benchmark threads runner CPU measure base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proving time 953.89 ms 939.92 ms -1.46% (-2.02% to -1.20%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proving time 267.37 ms 264.82 ms -0.92% (-1.23% to -0.70%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proving time 156.24 ms 156.01 ms -0.19% (-0.77% to +0.55%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proving time 103.94 ms 104.38 ms +0.84% (-0.34% to +9.24%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 525.56 ms 525.97 ms +0.16% (-4.64% to +6.01%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 176.60 ms 178.73 ms +1.20% (+0.40% to +1.61%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 113.89 ms 115.36 ms +1.29% (-7.27% to +2.80%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 90.69 ms 89.36 ms -1.28% (-4.57% to +6.74%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proving time 1.02 s 992.72 ms -2.23% (-2.64% to -2.02%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proving time 283.04 ms 279.49 ms -1.25% (-1.59% to -1.20%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proving time 165.36 ms 164.13 ms -0.81% (-1.03% to -0.25%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proving time 108.60 ms 108.17 ms -0.45% (-0.92% to +1.08%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 567.41 ms 554.00 ms -1.86% (-4.06% to -1.29%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 186.42 ms 188.09 ms +0.55% (-8.91% to +1.40%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 118.63 ms 120.42 ms +0.93% (+0.21% to +3.29%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 90.69 ms 92.17 ms +4.02% (-2.35% to +8.02%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proving time 1.88 s 1.88 s -0.13% (-0.22% to -0.10%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proving time 519.46 ms 518.55 ms -0.10% (-0.71% to +0.24%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proving time 302.08 ms 303.05 ms +0.31% (-0.12% to +0.35%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proving time 195.08 ms 194.56 ms -0.15% (-0.77% to +3.04%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.14 s 1.14 s +0.25% (-0.14% to +0.74%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 334.50 ms 335.23 ms +2.22% (-1.31% to +3.85%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 220.77 ms 224.43 ms +1.12% (+0.39% to +3.87%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 169.59 ms 177.15 ms +4.46% (-0.36% to +7.39%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proving time 2.06 s 2.06 s +0.05% (-0.29% to +0.35%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proving time 565.45 ms 565.82 ms +0.28% (-0.25% to +0.51%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proving time 326.25 ms 328.79 ms +0.54% (+0.27% to +1.24%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proving time 210.28 ms 211.00 ms +0.76% (+0.13% to +3.51%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.26 s 1.26 s +0.05% (-0.54% to +0.91%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 360.81 ms 367.49 ms +2.34% (-3.33% to +3.78%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 242.67 ms 243.00 ms +1.99% (-1.59% to +12.72%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 178.22 ms 183.94 ms +4.67% (-4.49% to +17.19%)
leanxmss-100 1 arm64 Neoverse-V2 Proving time 1.77 s 1.76 s -0.27% (-0.81% to -0.08%)
leanxmss-100 4 arm64 Neoverse-V2 Proving time 472.29 ms 472.73 ms -0.02% (-0.53% to +0.20%)
leanxmss-100 8 arm64 Neoverse-V2 Proving time 264.98 ms 264.77 ms -0.10% (-13.52% to -0.04%)
leanxmss-100 16 arm64 Neoverse-V2 Proving time 162.79 ms 163.08 ms +0.18% (-5.59% to +3.44%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 1.02 s 1.02 s -0.03% (-2.16% to +1.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 287.58 ms 287.44 ms -0.30% (-0.71% to +1.30%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 171.87 ms 171.74 ms -0.07% (-0.89% to +0.38%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proving time 117.72 ms 119.59 ms +2.43% (-3.19% to +6.96%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Verifying time 4.02 ms 4.02 ms -0.05% (-0.24% to +0.88%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Verifying time 2.82 ms 2.84 ms +0.53% (-2.07% to +0.69%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Verifying time 2.72 ms 2.72 ms +0.47% (-0.54% to +0.82%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Verifying time 2.87 ms 2.87 ms +0.11% (-1.53% to +0.77%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.66 ms 3.72 ms +2.10% (-11.06% to +7.26%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 2.87 ms 2.83 ms -0.37% (-3.93% to +2.07%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 2.98 ms 2.94 ms -1.02% (-2.24% to +5.32%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.15 ms 3.12 ms +0.34% (-3.22% to +2.66%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Verifying time 6.68 ms 6.70 ms +0.58% (-0.64% to +1.55%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Verifying time 3.58 ms 3.60 ms +0.80% (-0.06% to +1.56%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Verifying time 3.16 ms 3.16 ms -0.05% (-0.29% to +0.75%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Verifying time 3.12 ms 3.14 ms +0.03% (-0.57% to +1.04%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 6.72 ms 6.79 ms +1.18% (-2.60% to +2.73%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.64 ms 3.63 ms -1.31% (-3.46% to +2.12%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.36 ms 3.34 ms -0.37% (-1.62% to +1.08%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.24 ms 3.16 ms -1.82% (-3.75% to +1.66%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Verifying time 4.85 ms 4.87 ms +0.45% (-0.24% to +0.77%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Verifying time 3.18 ms 3.17 ms -0.14% (-1.48% to +0.53%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Verifying time 3.06 ms 3.05 ms -0.42% (-1.45% to +0.25%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Verifying time 3.05 ms 3.14 ms +2.07% (-1.64% to +7.09%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.76 ms 4.65 ms -2.25% (-6.49% to -0.66%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.34 ms 3.28 ms -1.99% (-6.69% to +6.92%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.25 ms 3.29 ms -0.56% (-3.83% to +3.60%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.36 ms 3.36 ms +1.11% (-3.59% to +2.75%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Verifying time 10.28 ms 10.15 ms -1.27% (-2.12% to -0.16%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Verifying time 4.62 ms 4.61 ms -0.28% (-2.14% to +0.46%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Verifying time 3.87 ms 3.86 ms -0.19% (-1.20% to +0.43%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Verifying time 3.61 ms 3.61 ms -0.77% (-2.49% to +4.71%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 11.96 ms 11.82 ms -1.25% (-3.94% to +4.26%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.99 ms 4.91 ms -2.62% (-3.94% to +0.04%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 4.25 ms 4.30 ms -1.22% (-2.04% to +2.69%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.91 ms 3.95 ms +0.14% (-1.17% to +7.33%)
leanxmss-100 1 arm64 Neoverse-V2 Verifying time 3.07 ms 3.07 ms +0.31% (-0.49% to +0.92%)
leanxmss-100 4 arm64 Neoverse-V2 Verifying time 3.02 ms 3.02 ms -0.19% (-2.13% to +0.59%)
leanxmss-100 8 arm64 Neoverse-V2 Verifying time 3.12 ms 3.12 ms -0.26% (-12.50% to +1.41%)
leanxmss-100 16 arm64 Neoverse-V2 Verifying time 3.29 ms 3.29 ms -0.17% (-2.39% to +1.21%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.20 ms 3.21 ms +0.43% (-1.54% to +0.84%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.09 ms 3.14 ms +1.89% (-0.11% to +3.53%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.19 ms 3.19 ms -0.03% (-0.97% to +0.93%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Verifying time 3.40 ms 3.39 ms -0.70% (-1.49% to +0.51%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,731 B 257,659 B +928 B (+0.36%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 256,379 B 257,595 B +1,216 B (+0.47%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,703 B 281,279 B +576 B (+0.21%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,863 B 281,343 B +480 B (+0.17%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 280,863 B 281,343 B +480 B (+0.17%)
leanxmss-100 1 arm64 Neoverse-V2 Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,762 B 303,762 B 0 B (+0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Proof size 303,762 B 303,762 B 0 B (+0.00%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak memory 1584.88 MiB 1585.10 MiB +0.01% (-0.22% to +0.14%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak memory 1607.30 MiB 1605.11 MiB -0.16% (-0.20% to +0.08%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak memory 1632.54 MiB 1632.31 MiB +0.00% (-0.40% to +0.15%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak memory 1713.82 MiB 1719.24 MiB +0.26% (-0.06% to +0.74%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 775.38 MiB 775.62 MiB +0.03% (-0.19% to +0.07%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 803.85 MiB 804.48 MiB +0.08% (-0.47% to +0.63%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 834.16 MiB 834.36 MiB +0.17% (-1.14% to +0.87%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 875.91 MiB 874.96 MiB -0.02% (-0.94% to +1.39%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak memory 1585.13 MiB 1585.22 MiB +0.00% (-0.22% to +0.14%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak memory 1609.02 MiB 1606.87 MiB -0.13% (-0.17% to +0.05%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak memory 1635.42 MiB 1636.06 MiB +0.00% (-0.42% to +0.22%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak memory 1731.30 MiB 1734.37 MiB -0.04% (-0.39% to +1.06%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 775.38 MiB 775.62 MiB +0.03% (-0.19% to +0.07%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 814.48 MiB 814.27 MiB -0.14% (-0.31% to +0.78%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 853.82 MiB 851.79 MiB -0.37% (-0.73% to +0.80%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 908.80 MiB 906.53 MiB -0.58% (-0.83% to +1.62%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak memory 1779.37 MiB 1779.45 MiB +0.03% (-0.11% to +0.14%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak memory 1801.61 MiB 1802.61 MiB +0.01% (-0.09% to +0.17%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak memory 1833.23 MiB 1833.99 MiB +0.22% (-0.23% to +0.34%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak memory 1911.94 MiB 1912.79 MiB +0.20% (-0.06% to +0.87%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 961.38 MiB 961.63 MiB -0.00% (-0.39% to +0.26%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 998.41 MiB 997.95 MiB -0.06% (-0.44% to +0.61%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1022.25 MiB 1026.91 MiB +0.35% (+0.30% to +0.75%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1075.73 MiB 1074.11 MiB -0.22% (-1.29% to +0.66%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak memory 1781.91 MiB 1780.45 MiB -0.12% (-0.28% to +0.03%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak memory 1802.75 MiB 1803.74 MiB +0.00% (-0.10% to +0.17%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak memory 1835.92 MiB 1838.80 MiB +0.12% (-0.13% to +0.19%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak memory 1930.17 MiB 1935.39 MiB +0.40% (+0.07% to +1.08%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 987.38 MiB 987.63 MiB -0.00% (-0.38% to +1.23%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1013.48 MiB 1011.19 MiB -0.23% (-0.64% to +0.64%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1046.66 MiB 1046.22 MiB +0.08% (-0.46% to +0.57%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 1114.77 MiB 1108.98 MiB -0.07% (-1.89% to +0.67%)
leanxmss-100 1 arm64 Neoverse-V2 Peak memory 1404.98 MiB 1402.76 MiB -0.16% (-0.31% to -0.16%)
leanxmss-100 4 arm64 Neoverse-V2 Peak memory 1430.36 MiB 1428.57 MiB -0.15% (-0.22% to +0.31%)
leanxmss-100 8 arm64 Neoverse-V2 Peak memory 1461.70 MiB 1461.10 MiB -0.11% (-0.31% to +0.21%)
leanxmss-100 16 arm64 Neoverse-V2 Peak memory 1528.50 MiB 1522.38 MiB -0.21% (-1.03% to +0.43%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 584.63 MiB 587.12 MiB +0.38% (-0.30% to +0.77%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 608.79 MiB 608.79 MiB +0.00% (-0.64% to +0.72%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 627.29 MiB 627.53 MiB +0.20% (-0.82% to +0.57%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak memory 651.81 MiB 655.88 MiB +0.74% (+0.29% to +1.06%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Peak heap 602.79 MiB 602.34 MiB -0.07% (-0.07% to -0.07%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Peak heap 602.84 MiB 602.40 MiB -0.07% (-0.09% to -0.06%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Peak heap 602.74 MiB 602.33 MiB -0.07% (-0.09% to -0.07%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Peak heap 602.80 MiB 602.46 MiB -0.06% (-0.08% to -0.05%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.26 MiB 264.81 MiB -0.17% (-0.17% to -0.17%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.27 MiB 264.88 MiB -0.15% (-0.18% to -0.13%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.29 MiB 264.89 MiB -0.17% (-0.20% to -0.13%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.33 MiB 264.98 MiB -0.18% (-0.23% to -0.08%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Peak heap 602.50 MiB 602.50 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Peak heap 602.54 MiB 602.55 MiB -0.00% (-0.01% to +0.00%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Peak heap 602.50 MiB 602.50 MiB +0.00% (-0.02% to +0.01%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Peak heap 602.72 MiB 602.52 MiB -0.03% (-0.05% to +0.02%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 264.98 MiB 264.98 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.05 MiB 265.09 MiB +0.01% (-0.04% to +0.03%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.10 MiB 264.98 MiB -0.03% (-0.07% to -0.00%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 265.02 MiB 265.10 MiB +0.02% (-0.02% to +0.08%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Peak heap 1205.49 MiB 1204.59 MiB -0.07% (-0.07% to -0.07%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Peak heap 1205.53 MiB 1204.66 MiB -0.07% (-0.08% to -0.07%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Peak heap 1205.53 MiB 1204.58 MiB -0.08% (-0.08% to -0.07%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Peak heap 1205.58 MiB 1204.73 MiB -0.07% (-0.09% to -0.06%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.46 MiB 529.57 MiB -0.17% (-0.17% to -0.17%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.47 MiB 529.57 MiB -0.17% (-0.19% to -0.14%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.51 MiB 529.51 MiB -0.19% (-0.20% to -0.17%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.51 MiB 529.64 MiB -0.17% (-0.19% to -0.16%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Peak heap 1205.01 MiB 1205.01 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Peak heap 1205.03 MiB 1205.03 MiB -0.00% (-0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Peak heap 1205.00 MiB 1204.99 MiB -0.01% (-0.01% to +0.00%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Peak heap 1205.09 MiB 1205.23 MiB +0.02% (-0.01% to +0.02%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 529.99 MiB 529.99 MiB +0.00% (+0.00% to +0.00%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 529.99 MiB 530.01 MiB +0.01% (-0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.02 MiB 529.96 MiB -0.01% (-0.02% to +0.01%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 530.01 MiB 530.13 MiB +0.03% (-0.02% to +0.05%)
leanxmss-100 1 arm64 Neoverse-V2 Peak heap 1200.93 MiB 1200.93 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Peak heap 1200.93 MiB 1201.00 MiB +0.01% (-0.00% to +0.01%)
leanxmss-100 8 arm64 Neoverse-V2 Peak heap 1200.98 MiB 1201.03 MiB +0.00% (-0.00% to +0.01%)
leanxmss-100 16 arm64 Neoverse-V2 Peak heap 1201.21 MiB 1201.21 MiB -0.00% (-0.01% to +0.01%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 504.34 MiB 504.34 MiB +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 504.36 MiB 504.36 MiB -0.00% (-0.01% to +0.02%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 504.42 MiB 504.45 MiB +0.00% (-0.01% to +0.03%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Peak heap 504.58 MiB 504.74 MiB +0.03% (+0.01% to +0.05%)
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 Allocations 16,785 16,796 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 Allocations 16,911 16,922 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 Allocations 17,055 17,066 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 Allocations 17,343 17,354 +0.06% (-0.10% to +0.06%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 16,887 16,898 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,016 17,027 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,164 17,175 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 17,460 17,471 +0.06% (+0.06% to +0.06%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 Allocations 20,496 20,510 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 Allocations 20,622 20,636 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 Allocations 20,766 20,780 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 Allocations 21,054 21,068 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,590 20,604 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,719 20,733 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 20,867 20,881 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 21,163 21,177 +0.07% (+0.07% to +0.07%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 Allocations 28,729 28,740 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 Allocations 28,867 28,878 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 Allocations 29,051 29,062 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 Allocations 29,371 29,382 +0.04% (+0.04% to +0.07%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 28,875 28,886 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 29,016 29,027 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 29,201 29,215 +0.05% (+0.04% to +0.05%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 29,532 29,543 +0.04% (+0.04% to +0.04%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 Allocations 35,514 35,521 +0.02% (+0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 Allocations 35,652 35,659 +0.02% (+0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 Allocations 35,836 35,843 +0.02% (+0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 Allocations 36,156 36,163 +0.02% (+0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,660 35,667 +0.02% (+0.02% to +0.02%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,801 35,808 +0.02% (+0.00% to +0.02%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 35,989 35,996 +0.02% (+0.01% to +0.04%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 36,317 36,324 +0.02% (+0.02% to +0.02%)
leanxmss-100 1 arm64 Neoverse-V2 Allocations 24,847 24,847 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 arm64 Neoverse-V2 Allocations 25,065 25,065 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 arm64 Neoverse-V2 Allocations 25,301 25,301 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 arm64 Neoverse-V2 Allocations 25,773 25,773 +0.00% (-0.11% to +0.03%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,365 25,365 +0.00% (+0.00% to +0.00%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,620 25,620 +0.00% (+0.00% to +0.00%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 25,904 25,904 +0.00% (+0.00% to +0.00%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N Allocations 26,472 26,472 +0.00% (+0.00% to +0.00%)
Prover stages
benchmark threads runner CPU base this PR change
aggregate-leanxmss-100-2to1-first 1 arm64 Neoverse-V2 953.89 ms 939.92 ms -1.46% (-2.02% to -1.20%)
 ↳ build-circuit 12.55 ms 13.53 ms +8.12% (+5.75% to +8.98%)
 ↳ prove-recursion 918.60 ms 903.31 ms -1.67% (-2.23% to -1.36%)
 ↳ reduce-claims 15.54 ms 15.75 ms +0.76% (+0.07% to +2.65%)
 ↳ reduce-in-rows 1.41 ms 1.57 ms +7.74% (+5.60% to +13.56%)
 ↳ verify 5.81 ms 5.81 ms +0.01% (-0.42% to +0.58%)
aggregate-leanxmss-100-2to1-first 4 arm64 Neoverse-V2 267.37 ms 264.82 ms -0.92% (-1.23% to -0.70%)
 ↳ build-circuit 10.58 ms 11.53 ms +9.15% (+6.64% to +12.81%)
 ↳ prove-recursion 244.08 ms 240.41 ms -1.42% (-1.74% to -1.32%)
 ↳ reduce-claims 5.43 ms 5.45 ms +0.29% (-2.68% to +2.89%)
 ↳ reduce-in-rows 1.46 ms 1.62 ms +8.66% (+6.30% to +10.58%)
 ↳ verify 5.74 ms 5.73 ms +0.01% (-0.19% to +6.43%)
aggregate-leanxmss-100-2to1-first 8 arm64 Neoverse-V2 156.24 ms 156.01 ms -0.19% (-0.77% to +0.55%)
 ↳ build-circuit 10.27 ms 11.21 ms +9.42% (+6.99% to +11.99%)
 ↳ prove-recursion 134.52 ms 133.02 ms -1.12% (-1.65% to -0.53%)
 ↳ reduce-claims 4.04 ms 4.27 ms +2.01% (+1.01% to +5.60%)
 ↳ reduce-in-rows 1.46 ms 1.57 ms +8.62% (+2.56% to +12.69%)
 ↳ verify 5.82 ms 5.88 ms +0.53% (-2.04% to +2.01%)
aggregate-leanxmss-100-2to1-first 16 arm64 Neoverse-V2 103.94 ms 104.38 ms +0.84% (-0.34% to +9.24%)
 ↳ build-circuit 10.63 ms 11.58 ms +8.75% (+7.69% to +12.42%)
 ↳ prove-recursion 81.45 ms 80.89 ms -0.23% (-1.82% to +10.70%)
 ↳ reduce-claims 3.91 ms 3.86 ms -0.29% (-7.72% to +1.66%)
 ↳ reduce-in-rows 1.49 ms 1.61 ms +9.35% (+6.28% to +12.29%)
 ↳ verify 6.37 ms 6.36 ms -0.57% (-1.01% to +1.24%)
aggregate-leanxmss-100-2to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 525.56 ms 525.97 ms +0.16% (-4.64% to +6.01%)
 ↳ build-circuit 13.46 ms 15.47 ms +12.39% (+10.92% to +19.27%)
 ↳ prove-recursion 487.61 ms 483.36 ms -0.51% (-5.50% to +5.45%)
 ↳ reduce-claims 16.37 ms 17.21 ms +1.65% (-0.88% to +16.03%)
 ↳ reduce-in-rows 1.65 ms 2.32 ms +40.35% (+38.46% to +45.53%)
 ↳ verify 6.30 ms 6.44 ms +3.97% (-4.17% to +5.18%)
aggregate-leanxmss-100-2to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 176.60 ms 178.73 ms +1.20% (+0.40% to +1.61%)
 ↳ build-circuit 13.37 ms 15.37 ms +13.78% (+11.15% to +17.31%)
 ↳ prove-recursion 148.32 ms 147.75 ms -0.27% (-0.81% to +0.15%)
 ↳ reduce-claims 6.87 ms 6.69 ms -6.82% (-13.25% to +8.64%)
 ↳ reduce-in-rows 1.65 ms 2.23 ms +35.62% (+30.24% to +37.18%)
 ↳ verify 6.47 ms 6.47 ms +0.01% (-1.14% to +0.92%)
aggregate-leanxmss-100-2to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 113.89 ms 115.36 ms +1.29% (-7.27% to +2.80%)
 ↳ build-circuit 13.71 ms 15.45 ms +13.06% (+9.29% to +13.79%)
 ↳ prove-recursion 85.75 ms 85.02 ms -0.29% (-10.02% to +0.15%)
 ↳ reduce-claims 5.59 ms 6.17 ms -5.51% (-21.74% to +22.01%)
 ↳ reduce-in-rows 1.81 ms 2.31 ms +28.60% (+26.56% to +40.50%)
 ↳ verify 6.63 ms 6.65 ms +0.65% (-1.19% to +1.03%)
aggregate-leanxmss-100-2to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 90.69 ms 89.36 ms -1.28% (-4.57% to +6.74%)
 ↳ build-circuit 14.00 ms 15.81 ms +13.24% (+12.10% to +16.68%)
 ↳ prove-recursion 60.92 ms 57.93 ms -1.89% (-11.34% to +3.61%)
 ↳ reduce-claims 7.27 ms 6.52 ms -9.89% (-45.71% to +21.95%)
 ↳ reduce-in-rows 1.77 ms 2.35 ms +31.43% (+25.34% to +37.84%)
 ↳ verify 6.98 ms 7.05 ms +1.21% (+0.20% to +1.67%)
aggregate-leanxmss-100-2to1-node 1 arm64 Neoverse-V2 1.02 s 992.72 ms -2.23% (-2.64% to -2.02%)
 ↳ build-circuit 12.33 ms 13.33 ms +8.11% (+7.00% to +8.65%)
 ↳ prove-recursion 965.03 ms 941.13 ms -2.48% (-2.90% to -2.25%)
 ↳ reduce-claims 31.05 ms 31.11 ms +0.03% (-0.83% to +0.69%)
 ↳ reduce-in-rows 1.52 ms 1.62 ms +7.04% (+3.69% to +7.68%)
aggregate-leanxmss-100-2to1-node 4 arm64 Neoverse-V2 283.04 ms 279.49 ms -1.25% (-1.59% to -1.20%)
 ↳ build-circuit 11.56 ms 12.51 ms +8.48% (+7.02% to +11.45%)
 ↳ prove-recursion 254.76 ms 249.62 ms -2.04% (-2.16% to -1.81%)
 ↳ reduce-claims 10.42 ms 10.80 ms +1.16% (-0.35% to +8.24%)
 ↳ reduce-in-rows 1.57 ms 1.62 ms +4.18% (+1.01% to +6.69%)
aggregate-leanxmss-100-2to1-node 8 arm64 Neoverse-V2 165.36 ms 164.13 ms -0.81% (-1.03% to -0.25%)
 ↳ build-circuit 11.40 ms 12.19 ms +7.38% (+5.61% to +9.08%)
 ↳ prove-recursion 139.85 ms 137.62 ms -1.70% (-1.77% to -0.93%)
 ↳ reduce-claims 7.93 ms 7.98 ms +0.60% (-3.66% to +2.42%)
 ↳ reduce-in-rows 1.52 ms 1.63 ms +8.36% (+3.59% to +10.05%)
aggregate-leanxmss-100-2to1-node 16 arm64 Neoverse-V2 108.60 ms 108.17 ms -0.45% (-0.92% to +1.08%)
 ↳ build-circuit 11.73 ms 12.75 ms +8.51% (+5.27% to +8.84%)
 ↳ prove-recursion 84.01 ms 82.53 ms -1.45% (-2.31% to -0.23%)
 ↳ reduce-claims 6.52 ms 6.63 ms +1.93% (-2.10% to +4.10%)
 ↳ reduce-in-rows 1.54 ms 1.62 ms +5.24% (+3.28% to +10.44%)
aggregate-leanxmss-100-2to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 567.41 ms 554.00 ms -1.86% (-4.06% to -1.29%)
 ↳ build-circuit 14.77 ms 16.32 ms +10.65% (+4.26% to +20.49%)
 ↳ prove-recursion 511.94 ms 499.89 ms -2.38% (-4.64% to -2.15%)
 ↳ reduce-claims 29.88 ms 30.10 ms -0.49% (-8.37% to +1.19%)
 ↳ reduce-in-rows 1.67 ms 2.01 ms +20.81% (+10.98% to +24.60%)
aggregate-leanxmss-100-2to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 186.42 ms 188.09 ms +0.55% (-8.91% to +1.40%)
 ↳ build-circuit 14.14 ms 15.68 ms +10.92% (+6.88% to +13.21%)
 ↳ prove-recursion 153.46 ms 152.35 ms -0.59% (-11.35% to -0.20%)
 ↳ reduce-claims 11.47 ms 12.09 ms +3.71% (-6.73% to +8.37%)
 ↳ reduce-in-rows 1.74 ms 2.19 ms +26.78% (+22.43% to +29.53%)
aggregate-leanxmss-100-2to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 118.63 ms 120.42 ms +0.93% (+0.21% to +3.29%)
 ↳ build-circuit 14.77 ms 16.22 ms +9.84% (+5.90% to +11.23%)
 ↳ prove-recursion 87.52 ms 87.28 ms -0.43% (-0.48% to +0.13%)
 ↳ reduce-claims 9.14 ms 9.30 ms -6.53% (-7.80% to +19.23%)
 ↳ reduce-in-rows 1.83 ms 2.29 ms +26.21% (+23.46% to +33.38%)
aggregate-leanxmss-100-2to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 90.69 ms 92.17 ms +4.02% (-2.35% to +8.02%)
 ↳ build-circuit 14.52 ms 16.74 ms +15.87% (+13.10% to +16.92%)
 ↳ prove-recursion 60.16 ms 59.21 ms +1.81% (-7.24% to +8.54%)
 ↳ reduce-claims 8.89 ms 7.95 ms -4.17% (-13.74% to -1.71%)
 ↳ reduce-in-rows 1.80 ms 2.36 ms +28.02% (+24.72% to +35.85%)
aggregate-leanxmss-100-4to1-first 1 arm64 Neoverse-V2 1.88 s 1.88 s -0.13% (-0.22% to -0.10%)
 ↳ build-circuit 25.31 ms 26.86 ms +6.20% (+5.16% to +6.78%)
 ↳ prove-recursion 1.82 s 1.82 s -0.24% (-0.31% to -0.20%)
 ↳ reduce-claims 21.19 ms 21.14 ms -0.29% (-0.73% to +0.69%)
 ↳ reduce-in-rows 2.82 ms 2.99 ms +6.50% (+4.58% to +7.88%)
 ↳ verify 11.53 ms 11.49 ms -0.25% (-0.86% to +0.38%)
aggregate-leanxmss-100-4to1-first 4 arm64 Neoverse-V2 519.46 ms 518.55 ms -0.10% (-0.71% to +0.24%)
 ↳ build-circuit 21.51 ms 23.09 ms +7.38% (+6.28% to +7.93%)
 ↳ prove-recursion 477.01 ms 474.07 ms -0.46% (-1.21% to -0.18%)
 ↳ reduce-claims 6.77 ms 6.90 ms +1.08% (-1.67% to +1.86%)
 ↳ reduce-in-rows 2.87 ms 3.11 ms +8.51% (+5.79% to +13.64%)
 ↳ verify 11.27 ms 11.25 ms -0.13% (-0.93% to +0.28%)
aggregate-leanxmss-100-4to1-first 8 arm64 Neoverse-V2 302.08 ms 303.05 ms +0.31% (-0.12% to +0.35%)
 ↳ build-circuit 21.49 ms 23.09 ms +7.34% (+6.84% to +8.70%)
 ↳ prove-recursion 260.93 ms 259.67 ms -0.46% (-0.79% to -0.33%)
 ↳ reduce-claims 5.14 ms 5.09 ms -1.65% (-2.88% to +0.51%)
 ↳ reduce-in-rows 2.84 ms 3.12 ms +10.38% (+8.68% to +11.09%)
 ↳ verify 11.64 ms 11.67 ms +0.26% (-0.42% to +1.15%)
aggregate-leanxmss-100-4to1-first 16 arm64 Neoverse-V2 195.08 ms 194.56 ms -0.15% (-0.77% to +3.04%)
 ↳ build-circuit 22.19 ms 23.18 ms +5.00% (+3.29% to +12.54%)
 ↳ prove-recursion 152.76 ms 151.49 ms -0.83% (-1.32% to +1.48%)
 ↳ reduce-claims 4.54 ms 4.47 ms -0.52% (-3.35% to +1.89%)
 ↳ reduce-in-rows 2.93 ms 3.17 ms +6.61% (+5.16% to +11.68%)
 ↳ verify 12.64 ms 12.44 ms -1.80% (-2.26% to +4.03%)
aggregate-leanxmss-100-4to1-first 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.14 s 1.14 s +0.25% (-0.14% to +0.74%)
 ↳ build-circuit 32.73 ms 35.67 ms +9.41% (+5.77% to +12.46%)
 ↳ prove-recursion 1.07 s 1.07 s -0.07% (-0.49% to +0.26%)
 ↳ reduce-claims 25.75 ms 25.80 ms +0.22% (-1.16% to +1.63%)
 ↳ reduce-in-rows 3.73 ms 4.78 ms +26.59% (+24.48% to +30.47%)
 ↳ verify 12.80 ms 12.72 ms -0.80% (-1.58% to +0.41%)
aggregate-leanxmss-100-4to1-first 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 334.50 ms 335.23 ms +2.22% (-1.31% to +3.85%)
 ↳ build-circuit 30.04 ms 32.82 ms +6.75% (+4.02% to +17.98%)
 ↳ prove-recursion 278.79 ms 277.95 ms +1.21% (-2.13% to +2.14%)
 ↳ reduce-claims 9.06 ms 8.49 ms -6.12% (-11.99% to +8.22%)
 ↳ reduce-in-rows 3.58 ms 4.56 ms +27.46% (+24.35% to +37.98%)
 ↳ verify 12.10 ms 12.49 ms +1.69% (-0.15% to +5.08%)
aggregate-leanxmss-100-4to1-first 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 220.77 ms 224.43 ms +1.12% (+0.39% to +3.87%)
 ↳ build-circuit 31.11 ms 33.25 ms +6.85% (+1.61% to +11.87%)
 ↳ prove-recursion 164.66 ms 164.84 ms -0.56% (-1.09% to +2.66%)
 ↳ reduce-claims 7.69 ms 7.34 ms -1.18% (-16.29% to +50.09%)
 ↳ reduce-in-rows 3.75 ms 4.64 ms +23.20% (+19.20% to +31.83%)
 ↳ verify 13.04 ms 13.08 ms +0.08% (-2.63% to +2.59%)
aggregate-leanxmss-100-4to1-first 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 169.59 ms 177.15 ms +4.46% (-0.36% to +7.39%)
 ↳ build-circuit 32.16 ms 34.02 ms +6.26% (+5.51% to +8.64%)
 ↳ prove-recursion 110.87 ms 115.55 ms +4.68% (-2.82% to +7.58%)
 ↳ reduce-claims 8.38 ms 7.80 ms -8.27% (-12.53% to +12.25%)
 ↳ reduce-in-rows 3.90 ms 4.90 ms +26.10% (+22.25% to +30.48%)
 ↳ verify 13.83 ms 13.80 ms -0.64% (-1.57% to +2.17%)
aggregate-leanxmss-100-4to1-node 1 arm64 Neoverse-V2 2.06 s 2.06 s +0.05% (-0.29% to +0.35%)
 ↳ build-circuit 29.42 ms 31.13 ms +5.63% (+5.16% to +6.42%)
 ↳ prove-recursion 1.95 s 1.95 s -0.05% (-0.38% to +0.26%)
 ↳ reduce-claims 56.89 ms 56.60 ms -0.37% (-0.81% to +0.11%)
 ↳ reduce-in-rows 3.03 ms 3.23 ms +6.64% (+3.85% to +9.19%)
aggregate-leanxmss-100-4to1-node 4 arm64 Neoverse-V2 565.45 ms 565.82 ms +0.28% (-0.25% to +0.51%)
 ↳ build-circuit 25.58 ms 27.11 ms +6.25% (+4.82% to +6.76%)
 ↳ prove-recursion 508.81 ms 507.30 ms -0.11% (-0.58% to +0.23%)
 ↳ reduce-claims 17.40 ms 17.60 ms -0.11% (-0.54% to +1.64%)
 ↳ reduce-in-rows 3.03 ms 3.24 ms +6.81% (+6.21% to +9.58%)
aggregate-leanxmss-100-4to1-node 8 arm64 Neoverse-V2 326.25 ms 328.79 ms +0.54% (+0.27% to +1.24%)
 ↳ build-circuit 25.59 ms 27.23 ms +6.42% (+4.80% to +7.72%)
 ↳ prove-recursion 275.43 ms 275.99 ms +0.00% (-0.19% to +0.74%)
 ↳ reduce-claims 12.05 ms 11.94 ms -0.86% (-1.45% to -0.07%)
 ↳ reduce-in-rows 3.00 ms 3.23 ms +7.90% (+6.16% to +9.21%)
aggregate-leanxmss-100-4to1-node 16 arm64 Neoverse-V2 210.28 ms 211.00 ms +0.76% (+0.13% to +3.51%)
 ↳ build-circuit 25.39 ms 27.42 ms +6.19% (+4.81% to +15.07%)
 ↳ prove-recursion 161.33 ms 161.21 ms -0.16% (-0.77% to +1.62%)
 ↳ reduce-claims 9.43 ms 9.54 ms +0.35% (-0.44% to +2.15%)
 ↳ reduce-in-rows 3.06 ms 3.29 ms +7.63% (+4.18% to +8.92%)
aggregate-leanxmss-100-4to1-node 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.26 s 1.26 s +0.05% (-0.54% to +0.91%)
 ↳ build-circuit 42.00 ms 43.07 ms +2.82% (-0.28% to +5.37%)
 ↳ prove-recursion 1.13 s 1.13 s -0.06% (-0.51% to +0.32%)
 ↳ reduce-claims 63.89 ms 65.00 ms +0.33% (-2.29% to +7.20%)
 ↳ reduce-in-rows 3.91 ms 4.65 ms +18.26% (+11.70% to +27.35%)
aggregate-leanxmss-100-4to1-node 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 360.81 ms 367.49 ms +2.34% (-3.33% to +3.78%)
 ↳ build-circuit 36.25 ms 39.01 ms +6.16% (+3.55% to +13.10%)
 ↳ prove-recursion 289.47 ms 294.01 ms +1.97% (-2.90% to +3.11%)
 ↳ reduce-claims 19.21 ms 19.07 ms -0.68% (-21.51% to +12.19%)
 ↳ reduce-in-rows 3.73 ms 4.72 ms +26.21% (+17.09% to +27.46%)
aggregate-leanxmss-100-4to1-node 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 242.67 ms 243.00 ms +1.99% (-1.59% to +12.72%)
 ↳ build-circuit 36.13 ms 38.77 ms +7.31% (+5.92% to +8.53%)
 ↳ prove-recursion 175.52 ms 172.60 ms +0.03% (-3.31% to +15.76%)
 ↳ reduce-claims 15.76 ms 14.60 ms -5.22% (-11.22% to +10.53%)
 ↳ reduce-in-rows 3.92 ms 4.82 ms +24.00% (+20.08% to +24.67%)
aggregate-leanxmss-100-4to1-node 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 178.22 ms 183.94 ms +4.67% (-4.49% to +17.19%)
 ↳ build-circuit 36.42 ms 39.31 ms +7.93% (+6.20% to +11.34%)
 ↳ prove-recursion 115.25 ms 116.03 ms +3.93% (-8.95% to +20.60%)
 ↳ reduce-claims 12.44 ms 11.59 ms -3.80% (-18.91% to +29.04%)
 ↳ reduce-in-rows 4.25 ms 5.15 ms +20.95% (+19.63% to +23.66%)
leanxmss-100 1 arm64 Neoverse-V2 1.77 s 1.76 s -0.27% (-0.81% to -0.08%)
 ↳ build-witness 46.06 ms 46.19 ms +0.29% (-0.13% to +0.65%)
 ↳ commit 296.55 ms 295.83 ms -0.39% (-0.59% to +0.40%)
 ↳ execute-program 10.54 ms 10.02 ms -3.88% (-6.17% to +1.46%)
 ↳ flock-reductions 645.65 ms 642.97 ms -0.38% (-1.24% to -0.12%)
 ↳ pcs-open 628.88 ms 625.34 ms -0.51% (-0.64% to -0.15%)
 ↳ prove-bus 131.24 ms 130.99 ms -0.17% (-1.28% to +0.28%)
 ↳ prove-constraints 14.25 ms 14.31 ms +0.16% (-0.31% to +2.39%)
leanxmss-100 4 arm64 Neoverse-V2 472.29 ms 472.73 ms -0.02% (-0.53% to +0.20%)
 ↳ build-witness 12.81 ms 12.76 ms -0.61% (-1.72% to -0.09%)
 ↳ commit 74.53 ms 75.06 ms +0.46% (-0.47% to +0.99%)
 ↳ execute-program 10.43 ms 10.10 ms -3.16% (-6.58% to +1.83%)
 ↳ flock-reductions 169.21 ms 168.43 ms -0.50% (-0.83% to +0.09%)
 ↳ pcs-open 164.17 ms 164.71 ms +0.10% (-0.18% to +0.57%)
 ↳ prove-bus 35.48 ms 35.43 ms -0.09% (-1.28% to +0.14%)
 ↳ prove-constraints 5.55 ms 5.55 ms -0.57% (-1.48% to +1.14%)
leanxmss-100 8 arm64 Neoverse-V2 264.98 ms 264.77 ms -0.10% (-13.52% to -0.04%)
 ↳ build-witness 7.43 ms 7.39 ms -0.21% (-32.06% to +0.03%)
 ↳ commit 38.64 ms 38.53 ms -0.27% (-9.99% to +0.32%)
 ↳ execute-program 10.24 ms 10.13 ms -1.09% (-29.03% to +0.50%)
 ↳ flock-reductions 93.64 ms 93.41 ms -0.28% (-12.35% to +0.04%)
 ↳ pcs-open 89.89 ms 90.12 ms -0.09% (-11.56% to +0.40%)
 ↳ prove-bus 20.59 ms 20.63 ms +0.15% (-16.45% to +0.54%)
 ↳ prove-constraints 4.25 ms 4.24 ms +0.44% (-6.81% to +1.04%)
leanxmss-100 16 arm64 Neoverse-V2 162.79 ms 163.08 ms +0.18% (-5.59% to +3.44%)
 ↳ build-witness 4.90 ms 4.86 ms -1.26% (-1.83% to +2.81%)
 ↳ commit 20.63 ms 20.58 ms -0.43% (-0.79% to +0.24%)
 ↳ execute-program 10.53 ms 10.13 ms -3.60% (-6.37% to +0.27%)
 ↳ flock-reductions 56.70 ms 56.42 ms -0.56% (-9.66% to +2.33%)
 ↳ pcs-open 52.67 ms 53.08 ms +0.89% (-5.19% to +3.60%)
 ↳ prove-bus 13.34 ms 13.31 ms -0.21% (-12.44% to +16.03%)
 ↳ prove-constraints 3.78 ms 3.86 ms +0.13% (-4.20% to +11.41%)
leanxmss-100 1 x86-64 INTEL(R) XEON(R) GOLD 6548N 1.02 s 1.02 s -0.03% (-2.16% to +1.00%)
 ↳ build-witness 69.32 ms 69.33 ms -0.12% (-0.97% to +1.50%)
 ↳ commit 185.46 ms 183.67 ms -0.96% (-2.52% to +0.88%)
 ↳ execute-program 12.47 ms 12.24 ms -1.22% (-3.26% to +2.73%)
 ↳ flock-reductions 304.41 ms 303.86 ms -0.43% (-3.61% to +1.09%)
 ↳ pcs-open 353.67 ms 352.59 ms +0.26% (-1.71% to +0.98%)
 ↳ prove-bus 80.16 ms 80.81 ms -0.74% (-4.42% to +1.58%)
 ↳ prove-constraints 18.92 ms 18.82 ms -0.42% (-3.32% to +1.50%)
leanxmss-100 4 x86-64 INTEL(R) XEON(R) GOLD 6548N 287.58 ms 287.44 ms -0.30% (-0.71% to +1.30%)
 ↳ build-witness 18.92 ms 19.08 ms +1.14% (-3.60% to +1.95%)
 ↳ commit 45.93 ms 45.65 ms -0.13% (-1.71% to +1.62%)
 ↳ execute-program 11.97 ms 11.95 ms -0.68% (-2.60% to +1.69%)
 ↳ flock-reductions 82.65 ms 82.34 ms +0.15% (-1.41% to +1.01%)
 ↳ pcs-open 96.98 ms 96.94 ms -0.14% (-1.27% to +2.68%)
 ↳ prove-bus 23.18 ms 23.35 ms +1.05% (-1.59% to +2.21%)
 ↳ prove-constraints 7.40 ms 7.31 ms -0.58% (-2.62% to +0.76%)
leanxmss-100 8 x86-64 INTEL(R) XEON(R) GOLD 6548N 171.87 ms 171.74 ms -0.07% (-0.89% to +0.38%)
 ↳ build-witness 10.82 ms 10.91 ms +0.73% (+0.19% to +2.14%)
 ↳ commit 23.90 ms 23.85 ms -0.50% (-5.35% to +0.37%)
 ↳ execute-program 12.07 ms 12.23 ms +1.32% (+0.51% to +5.78%)
 ↳ flock-reductions 47.48 ms 47.26 ms -0.41% (-0.71% to +0.29%)
 ↳ pcs-open 57.53 ms 57.55 ms +0.05% (-0.60% to +0.60%)
 ↳ prove-bus 14.41 ms 14.37 ms -0.26% (-1.32% to +0.78%)
 ↳ prove-constraints 5.23 ms 5.19 ms -0.77% (-1.00% to -0.20%)
leanxmss-100 16 x86-64 INTEL(R) XEON(R) GOLD 6548N 117.72 ms 119.59 ms +2.43% (-3.19% to +6.96%)
 ↳ build-witness 7.16 ms 7.16 ms -0.21% (-10.92% to +14.33%)
 ↳ commit 12.79 ms 12.89 ms +4.15% (-5.84% to +10.98%)
 ↳ execute-program 11.78 ms 12.09 ms +0.46% (-0.86% to +4.18%)
 ↳ flock-reductions 31.47 ms 31.88 ms +2.79% (-4.43% to +10.09%)
 ↳ pcs-open 38.98 ms 39.30 ms +4.48% (-3.04% to +4.91%)
 ↳ prove-bus 10.57 ms 10.94 ms +3.23% (-2.74% to +6.93%)
 ↳ prove-constraints 4.83 ms 4.93 ms +2.88% (+0.77% to +5.70%)

… pool of fourteen entries routed to the chains by a five-stage EXK mux network, the entry's tweak word checked by step 1; re-prove soundness and completeness
Rec.Tables: STEP and LINK slot forms and identities, their pushed and pulled
tuples (step_spec, link_tuples, stepPush_next). Rec.Builder: the tables,
chainStep and link. Rec.Contracts: Sat holds STEP and LINK rows to their
identities, Balanced is the dynamic multiset balance, Accepts both;
chainStep_good, link_good, Balanced.count_key and Balanced.unique.
GenerateRec emits the new forms into clean.rs; checkrec and checkxmss parse
chain_step and link and finish eight tables.
…n machine

STEP rows pull a chain step's input at its position's key and push its
output at the next position's; LINK rows push a chain's tip at its digit's
position and pull its end at position 7. Each table has an activity fixed
column (one on the circuit's rows), and bit 63 keeps dynamic keys apart from
slot keys. The forms are GenerateRec's (clean.rs), with the new scaled
product coordinate leaf::Coord::ScaledProd. Builder::chain_step and
Builder::link build the rows, and finish records an unbalanced multiset.

Table order is now EMUL, EXK, HASH, SPLIT, CAST, STEP, LINK, PUB, so every
circuit's PUB slot keys, fixed columns, airs and bus blocks change: existing
circuits' proofs and dumps are not byte-identical to before.
…the wire classes of the circuit already held
…eps the digits need; re-prove acceptance over the dynamic balance
…s, leanXMSS chains walked on the bus (exactly the steps the digits need), acceptance re-proved over the dynamic balance
… at bit 32, so leanXMSS and leanSPHINCS chains share the table; leanXMSS passes tweak0(1, 0) and its chain proofs are stated over any base and tag
…Ethereum#608 claim width check) into the leanXMSS/leanSPHINCS circuits

Tree, signature circuits and in-circuit verifier move to SessionId sessions and recorded openings. A first-level node over recursion-circuit leaves binds each leaf's statement by the digest its transcript would squeeze right after the instance (instance_digest; rows: Transcript::digest_so_far), in place of the statement hash the old transcript was seeded with. The Lean transcript model follows in the next commit.
…e session seed, words absorbed and squeezed, the digest, the new proof of work; trace k_to_d and model it

The duplex core (counters, hold-back, output blocks) is unchanged by leanEthereum#607. What changed and is modelled: the seed node is init(session) (the old seed with a zero statement half), the instance is the first message, roots are four words, COMMIT/POW_BASE/NONCE are gone (the terminal binding is four squeezed words), and proof of work hashes a squeezed challenge with a u64 nonce and checks the trial word's top bits. Builder::k_to_d, now used by the transcript, is traced, with a Lean model and contract, so checkrec replays tree circuits.
… dense values are the tree's polynomials only

A table with no rows, other than HASH and PUB, is absent: Table::height_log
gives it no height (rec::table::Heights), and RecLayout keeps the present
owned tables, which alone have committed columns (witness::Source::Absent
otherwise), bus blocks (indexed among the present tables), summands, fixed
columns and claims. The verifier reads the heights off the circuit or the
tree's shape (RecShape), never the proof, so a proof with rows in a table
the verifier expects absent is a proof of another shape and is refused
(the_heights_fix_the_absent_tables). A circuit's floor keeps a table
present; Tree::converge's fixed point starts from no table and keeps one
absent only while every kind's circuit lacks it.

The tree statement's DenseValues section has one word per dense
polynomial the tree has (StatementLayout::new takes Design::present).

The session tag encodes an absent height as 2^64 - 1 and moves to
leanvm-tree-12. CircuitStats reports an absent table's height as none.

cargo leanvm bench --cycles-only now equals riscv-exploration d3c7f9d on
every tracked count, the aggregate-leanxmss cases included:
2to1-first rows 138530 -> 138529, proven-rows 231426 -> 231424, committed
5981211 -> 5981184; 2to1-node rows 120668 -> 119413; 4to1-first rows
275682 -> 275681, proven-rows 461826 -> 461824, committed 11962395 ->
11962368; 4to1-node rows 252644 -> 250195.
… its circuit

XmssBatch and SphincsBatch build their circuit once, one part per signature
(Builder::parts), and record each fold of a constant or an EMUL/EXK row. A
proof replays the parts for their values alone (Replay::values): the folds are
read back, so wires are numbered as the build numbered them, with no rows,
wire classes, kinds or dedup maps, and the parts run in parallel, each into its
own stretch of the values, hash rows and statement. A part reads of earlier
parts only the constants and rows over them it folds into, whose values are the
circuit's own; the build checks it for rows and the replay for reads. Each part
checks its own step and link rows; only when some part's dynamic tuples do not
balance are the circuit's counted together, so the failures are the build's,
in its order.

The dynamic check evaluates each table's tuple forms once rather than per row
(Table::dynamic_tuples replaces row_dynamic). Assignment shares its slot wires
with the replay (Arc). Builder::finish_values is gone.

Calls, circuits and dumps are unchanged ('cargo leanvm circuits' output is
byte-identical). 'Build circuit' at 16 threads: leanxmss-rec n=400 69.5 ms ->
2.8 ms, leansphincs-rec n=104 58.2 ms -> 3.1 ms (single traced runs).
# Conflicts:
#	crates/leanvm_core/src/rec/circuit/mod.rs
…um#615 signer sets, leanEthereum#613 claim sets and union in rows) into the leanXMSS/leanSPHINCS circuits

The host crates keep exporting the signing constants and one-message signers for the recursion circuits beside the new signer-set batches; leaf_block stays traced and is now d_const of its counter word then the new Builder::block's row.
… merge, which picked them up unfinished; the next commit adds them whole
…model them: Model.hashBlock, Model.dToHalves, their contracts, leafBlock_eq

leaf_block is d_const of its counter word then block's row (Model.leafBlock_eq, by rfl); checkrec parses block and d_to_halves. No tree or signature dump calls them yet; the claim-set trees of leanEthereum#614 will.
…d leanXMSS/leanSPHINCS trees

A tree is built from one leaf family (`Tree::new(Leaves, TreeShape)`): RISC-V proofs of one program, or proofs of one
recursion circuit. The session tag names that family as before (program digest and leaf shape, or the leaf circuit's
session, statement length, heights and rate), so a tree proof of another tree fails its recursion proof's
verification as a child or root; nothing checks the scheme otherwise.

Deleted: the multi-family selector (`Kind::First(i)`, kind codes past two, kind bits with indicator checks and
per-kind masks), several leaf circuits stacked in `W_leaf` by slot, `TreeError::Families` and `ForeignChild`,
`Tree::kinds`, the unused `Builder::sum`, `aggregate --mixed/--mixed-n` and the mixed-tree test. The kind is one bit
again (`Kind::First`, `Kind::Node`, `Kind::ALL`), `DenseTerm::top` one coordinate, `W_leaf` the leaf circuit's stack.
DOMAIN is leanvm-tree-13. Rows and committed words of every tree circuit are unchanged (cycles-only counts identical
to 5c821f8); only the session constant and no-op builder calls in the node's trace differ.

New test `a_tree_refuses_another_familys_tree_proofs`: leanXMSS and leanSPHINCS trees (same heights and statement
layout) refuse each other's first-level nodes and nodes as children and roots with the error the proof gets under the
other session alone (bus GKR layer mismatch); RISC-V and leanXMSS trees refuse each other's at the statement length.
…eanEthereum#626: claim-set trees, tiers, places)

Upstream's places, tiers, claim-set and union design, with this branch's one leaf family per tree:

- Design has `family: Family` (RISC-V runs of one program, or proofs of one leaf circuit) beside upstream's
  places and tiers. Circuit leaves are for trees of outputs only: a claim-set tree over them is
  `TreeError::CircuitClaims`.
- DensePoly is [Bytecode, Image, Leaf, Fixed, Wide]; a statement holds values for the polynomials the tree has
  only. A first-level node carries claims on the polynomials its leaves fix; every other proof on all of them.
- The statement digest's level enum is `Items` (upstream's design has its own `Level`).
- `Tree::new(Leaves, TreeShape { arity_0, arity, rate, claims })`; `Leaf`, `Subtree` verification and absent
  tables (`Heights`) as before, with upstream's `known()`, positions and `TreeError::Circuit`.
- `FixedLayout::polynomial` stacks a tier's circuits by kind index over the absent-aware layout.
- LVMT 18, tree DOMAIN leanvm-tree-15.
…bsent places, leanEthereum#609 stacked-opening lint)

Tree session leanvm-tree-16 and LVMT 19, above upstream's. leanEthereum#627's pinned-heights tests take this branch's PerRecTable heights (STEP and LINK absent) and pin the session tags as this branch derives them (they name the leaf family).
…ignatures as one group

A leanXMSS or leanSPHINCS batch's proof publishes one claim per signature (label: the scheme word, the epoch where the scheme has one, the message; member: the key's root and public parameter), as the scheme's guest writes its signer set. The first-level node holds every claim's label to the first's, chains the set's written form over the leaf statement's wires and hands the union that digest. The claim layout joins the session of claim-set trees. XmssBatch::claim_set and SphincsBatch::claim_set give the set; TreeError::CircuitClaims is gone. cargo leanvm aggregate --capacity N [--groups G] proves claim-set trees over guest or circuit leaves.
…before the bus); leanvm-tree-17, LVMT 20
…now fails at flock's zerocheck, its first stage
… its leaf program's): its tests build trees from Leaves::Runs
…zero-knowledge leaves, leanEthereum#631, leanEthereum#633, leanEthereum#634): the circuits, trees and CLI on upstream's layout and APIs; circuit leaves are never zero knowledge

This branch has not been deployed

No deployments
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