Skip to content

perf(akita): integrate portable recursive verifier optimizations - #60

Draft
RadNi wants to merge 1 commit into
mainfrom
codex/jolt-portable-verifier-optimizations-20261106
Draft

RadNi wants to merge 1 commit into
mainfrom
codex/jolt-portable-verifier-optimizations-20261106

Conversation

@RadNi

@RadNi RadNi commented Nov 6, 2026

Copy link
Copy Markdown

Integrate committed setup recursion and the complete portable Akita verifier optimization stack: compact deferred setup, audited selected-row catalog packets, serial guest challenge decoding, byte-string advice transport, the size-class allocator, and optional transcript-authenticated quartet and position hints. Include advice preparation tooling and pin the matching Akita integration.

The original complete stack measured 397,276,220 guest cycles with field and NTT inlines disabled, with ten committed proofs generated and verified. This publication port has not been rebenchmarked.

Validation: formatting, metadata and static checks passed. Rust tests and Clippy remain pending.

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown

📏 PR diff

Note

Actual code changed: 2,656 lines

🟢 +2,568 added    🔴 −88 removed

Tests, docs, fixtures, and helper scripts excluded.

Category 🟢 Added 🔴 Removed
⌨️ Actual code +2,568 −88
🧪 Tests +363 −48
📚 Docs +283 0
📦 Fixtures +109 −16
🔧 Helper scripts +4,954 −4,768
Total diff +8,277 −4,920

Every changed line is classified once.

@github-actions

github-actions Bot commented Nov 6, 2026

Copy link
Copy Markdown

Benchmark comparison (crates)

Same-runner A/B: base_run = 54f30ce (merge target) vs pr_run = 71233cc (PR head merged onto it). Bold = faster run; Δ colored when the difference exceeds the ±10% noise threshold.

No differences above the ±10% noise threshold.

All 92 benchmarks
Benchmark base_run (merge target) pr_run (this PR) Δ
EqPolynomial::evals/17 1.6±0.03ms 1.6±0.06ms +2.1%
EqPolynomial::evals/19 6.1±0.09ms 6.0±0.12ms -1.5%
EqPolynomial::evals/20 15.2±0.27ms 15.4±0.34ms +1.1%
EqPolynomial::evals/22 60.6±1.15ms 60.0±1.12ms -1.1%
EqPolynomial::evaluations/14 435.1±8.47µs 440.4±10.26µs +1.2%
EqPolynomial::evaluations/18 5.4±0.07ms 5.4±0.06ms +0.6%
EqPolynomial::evaluations/20 29.3±1.21ms 29.3±1.02ms +0.0%
F128/accumulator/deferred 1.3±0.03µs 1.3±0.02µs +0.2%
F128/accumulator/naive 2.6±0.06µs 2.6±0.06µs -0.1%
F128/mul 2.1±0.03ns 2.1±0.04ns -0.1%
F128/mul_slice 2.1±0.04µs 2.1±0.05µs +0.2%
F128/square 2.8±0.05ns 2.8±0.06ns +0.9%
F192/accumulator/deferred 2.8±0.07µs 2.8±0.05µs -0.3%
F192/accumulator/naive 4.0±0.08µs 4.0±0.07µs -0.1%
F192/mul 3.6±0.05ns 3.6±0.07ns +0.9%
F192/mul_slice 3.7±0.06µs 3.7±0.06µs +0.9%
F192/square 2.7±0.05ns 2.7±0.06ns +0.9%
F64/accumulator/deferred 702.9±12.84ns 703.4±11.91ns +0.1%
F64/accumulator/naive 926.3±23.72ns 923.6±17.80ns -0.3%
F64/mul 0.9±0.02ns 0.9±0.02ns +0.7%
F64/mul_slice 920.3±14.84ns 924.2±13.29ns +0.4%
F64/square 0.9±0.02ns 0.9±0.01ns +0.7%
Polynomial::bind/14 113.3±4.62µs 114.5±7.98µs +1.0%
Polynomial::bind/18 1.7±0.02ms 1.7±0.03ms +0.8%
Polynomial::bind/20 6.7±0.12ms 6.7±0.19ms -0.5%
Polynomial::bind_low_to_high_in_place/Fr/14 174.9±4.35µs 172.0±5.31µs -1.7%
Polynomial::bind_low_to_high_in_place/Fr/20 6.9±0.16ms 6.9±0.16ms -0.1%
Polynomial::bind_low_to_high_in_place/Fr/24 113.7±0.86ms 113.3±1.94ms -0.4%
Polynomial::bind_low_to_high_in_place/Prime128OffsetA7F7/14 47.0±0.90µs 46.5±0.90µs -0.9%
Polynomial::bind_low_to_high_in_place/Prime128OffsetA7F7/20 1.7±0.04ms 1.7±0.10ms +1.3%
Polynomial::bind_low_to_high_in_place/Prime128OffsetA7F7/24 24.6±0.42ms 24.6±0.75ms +0.0%
Polynomial::evaluate/20 39.1±0.85ms 39.6±1.18ms +1.2%
UnivariatePoly::from_evals/16 41.9±0.76µs 41.9±0.74µs -0.2%
UnivariatePoly::from_evals/3 5.2±0.12µs 5.2±0.09µs -0.4%
UnivariatePoly::from_evals/4 7.8±0.13µs 7.8±0.14µs +0.8%
UnivariatePoly::from_evals/8 18.9±0.37µs 19.0±0.39µs +0.4%
append_bytes/Blake2b/256B 333.9±9.31ns 328.3±9.33ns -1.7%
append_bytes/Blake2b/32B 74.5±4.31ns 74.8±3.11ns +0.4%
append_bytes/Keccak/256B 675.0±15.99ns 686.8±24.46ns +1.7%
append_bytes/Keccak/32B 63.8±3.39ns 64.3±3.64ns +0.8%
append_bytes/Poseidon/256B 186.2±3.44µs 184.3±4.51µs -1.0%
append_bytes/Poseidon/32B 57.1±1.37µs 56.7±1.35µs -0.7%
challenge/Blake2b 751.5±20.57ns 745.8±20.89ns -0.8%
challenge/Keccak 473.5±14.83ns 470.4±11.15ns -0.7%
field arithmetic/add/fp128_a7f7 4.3±0.09µs 4.3±0.07µs -0.5%
field arithmetic/add/fp32_c99 2.5±0.06µs 2.5±0.05µs -0.3%
field arithmetic/add/fp64_c59 2.5±0.06µs 2.5±0.06µs -0.7%
field arithmetic/mul/fp128_a7f7 11.8±0.19µs 11.7±0.19µs -0.7%
field arithmetic/mul/fp32_c99 4.4±0.11µs 4.4±0.08µs +0.6%
field arithmetic/mul/fp64_c59 5.3±0.09µs 5.4±0.14µs +1.1%
field arithmetic/square/fp128_a7f7 14.0±0.22µs 14.2±0.34µs +1.5%
field arithmetic/square/fp32_c99 4.6±0.09µs 4.7±0.13µs +0.4%
field arithmetic/square/fp64_c59 4.7±0.08µs 4.7±0.10µs -0.1%
field arithmetic/sub/fp128_a7f7 3.3±0.06µs 3.4±0.08µs +0.4%
field arithmetic/sub/fp32_c99 1.4±0.03µs 1.4±0.03µs +0.2%
field arithmetic/sub/fp64_c59 1.8±0.05µs 1.8±0.04µs -1.7%
field reduction/reduce_product/fp128_a7f7 19.4±0.37µs 19.4±0.55µs -0.1%
fp64_prime63_offset259/ext2_packed_mul 20.1±0.42ns 20.1±0.52ns -0.1%
fp64_prime63_offset259/ext2_scalar_mul 4.5±0.20ns 4.5±0.06ns -0.2%
fp64_prime63_offset259/packed_mul 7.4±0.16ns 7.3±0.17ns -0.7%
fp64_prime63_offset259/scalar_mul 1.6±0.03ns 1.5±0.04ns -0.6%
fp64_prime64_offset59/ext2_dependent_mul_1024 7.8±0.14µs 7.8±0.14µs -0.4%
fp64_prime64_offset59/ext2_neg_one_scalar_mul 5.3±0.14ns 5.2±0.13ns -1.1%
fp64_prime64_offset59/ext2_packed_mul 25.6±0.54ns 25.2±0.36ns -1.7%
fp64_prime64_offset59/ext2_scalar_mul 5.5±0.11ns 5.4±0.14ns -1.4%
fp64_prime64_offset59/ext2_scalar_square 4.6±0.10ns 4.6±0.13ns -1.1%
g1_add 314.0±5.00ns 314.5±6.33ns +0.2%
g1_deserialize_bincode 6.9±0.15µs 6.9±0.14µs +0.3%
g1_double 155.3±3.23ns 155.5±2.35ns +0.2%
g1_msm/1024 10.5±0.20ms 10.3±0.13ms -1.7%
g1_msm/16 447.3±11.20µs 444.1±11.28µs -0.7%
g1_msm/256 3.5±0.06ms 3.5±0.05ms -0.5%
g1_msm/4 202.1±7.30µs 197.2±8.14µs -2.4%
g1_msm/64 1.3±0.03ms 1.3±0.03ms -1.3%
g1_scalar_mul 49.5±1.29µs 49.1±0.86µs -0.9%
g1_serialize_bincode 113.4±2.42ns 113.3±1.82ns -0.2%
g2_msm/16 1.6±0.03ms 1.7±0.03ms +0.8%
g2_msm/256 13.3±0.19ms 13.1±0.17ms -1.7%
g2_msm/4 673.4±13.53µs 666.0±11.52µs -1.1%
g2_msm/64 4.8±0.06ms 4.7±0.08ms -1.2%
g2_scalar_mul 277.1±7.61µs 272.8±6.65µs -1.6%
gt_scalar_mul 808.1±23.79µs 796.6±13.59µs -1.4%
multi_pairing/16 5.1±0.06ms 5.1±0.06ms +0.1%
multi_pairing/2 1.1±0.03ms 1.1±0.03ms +0.1%
multi_pairing/4 1.7±0.03ms 1.7±0.04ms +0.3%
multi_pairing/8 2.8±0.04ms 2.8±0.04ms +0.3%
pairing 849.3±16.91µs 854.2±18.91µs +0.6%
pedersen_commit/1024 10.5±0.11ms 10.3±0.14ms -1.8%
pedersen_commit/16 508.9±24.05µs 504.2±7.74µs -0.9%
pedersen_commit/256 3.5±0.05ms 3.5±0.05ms +0.6%
pedersen_commit/4 249.7±5.38µs 244.8±4.54µs -2.0%
pedersen_commit/64 1.4±0.02ms 1.4±0.03ms -0.1%

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