Skip to content

perf(sumcheck): use narrow fp32 digit accumulators - #435

Draft
quangvdao wants to merge 3 commits into
mainfrom
codex/small-field-sumcheck
Draft

perf(sumcheck): use narrow fp32 digit accumulators#435
quangvdao wants to merge 3 commits into
mainfrom
codex/small-field-sumcheck

Conversation

@quangvdao

@quangvdao quangvdao commented Aug 22, 2026

Copy link
Copy Markdown

Summary

This PR gives compact fp32 digit sum-check kernels a dedicated narrow accumulator. FpExt4<Fp32> now sums each extension coefficient in one u64 slot and reduces only at the end or when a slot carries.

The new path covers:

  • direct digit range checks;
  • fused relation and range image checks;
  • the two round compact prefix kernels.

The proof protocol does not change. The planner, generated schedules, transcript, proof bytes, verifier, fp64 arithmetic, and fp128 arithmetic also do not change.

Diff metadata

  • Base: 6918a2018da6061d6399c74b542017027a7b74b8 on main
  • Head: 3984e5272e3b08231e6f7db85c581391e347e895
  • Commits: 2
  • Files changed: 20
  • Diff: 323 insertions and 80 deletions
  • Related design context: specs/packed-sumcheck.md

Motivation

The compact kernels multiply random fp32 extension field values by small integer coefficients derived from balanced digits. The old implementation reduced all four base field products after every multiplication. The first draft of this PR delayed those reductions in four u128 slots. That removed the repeated reductions, but it used twice the accumulator storage and wider arithmetic than these small products need.

The final implementation gives small integer products their own accumulator. Full extension products keep the existing u128 accumulator. Unrestricted one off multiplication keeps its ordinary reduced path.

Data flow

flowchart LR
    A[Compact signed digit term] --> B[mul_small_unreduced]
    B --> C[Positive or negative accumulator]
    C --> D[Four u64 coefficient slots]
    D --> E[Fold modulo p only on carry]
    E --> F[reduce_small_accum at the round boundary]
Loading

Change surface

Area Before After
Small fp32 extension products Four modular reductions per product Four native u64 products
Accumulator storage Four u128 slots in the first draft Four u64 slots
Long sums Relied on wide headroom Fold modulo p only when a slot carries
Other field families Existing accumulators Existing accumulators through the same capability
Protocol and proof bytes Current behavior Unchanged

Narrow accumulator arithmetic

HasUnreducedOps now distinguishes small integer accumulation from unrestricted u64 multiplication and full field multiplication. The new associated type is SmallMulAccum.

For FpExt4<Fp32<P>>, FpExt4Fp32SmallMulAccum<P> stores four u64 values. Each input coefficient and the scalar are canonical values below P, so one product is below and fits in u64.

Most additions are one native u64 addition. If an addition carries past 64 bits, the accumulator corrects the wrapped sum by 2^64 mod P. For a modulus P = 2^32 - c, this correction is c² mod P. The implementation uses the field's existing SHIFT64_MOD_P constant, so it also works for every supported Fp32<P> modulus.

The carry correction means correctness does not depend on the number of variables, the Rayon partition size, or a fixed batch length. Small balanced digit sums normally avoid the carry path. Long sums remain correct when they reach it.

The compact kernels keep positive and negative contributions in separate accumulators. They reduce each side once at the existing round boundary and then subtract the canonical field values.

Performance evidence

On an Apple Silicon development machine, the direct Criterion comparison measured:

Batch Reduce every product Narrow u64 accumulator Speedup
16 terms 39.36 ns 15.02 ns 2.62 times
64 terms 140.09 ns 48.73 ns 2.87 times
256 terms 570.14 ns 192.36 ns 2.96 times

At 64 and 256 terms, the narrow implementation is about 33 to 35 percent faster than the first draft's u128 accumulator.

Two local fp32 nv26 dense runs proved in 0.55 and 0.57 seconds and both verification modes passed. These runs confirm correctness but are not an exact comparison with main. The hosted interleaved profile report remains the acceptance evidence for the full proving effect.

Correctness and compatibility

The differential test compares ordinary field arithmetic with 1,024 accumulated products. It includes zero, u64::MAX, and random scalars. This also exercises repeated carry correction.

The HasUnreducedOps Rust trait gains one associated type and two methods. Custom implementations must provide the small accumulator operations. Akita's field implementations and the test field are updated in this PR.

There is no wire, transcript, serialization, schedule, planner, setup, or verifier change. No verifier input handling or panic behavior changes.

Commit map

  • 075a96a82 adds the differential test and focused benchmark.
  • 3984e5272 adds the narrow accumulator and routes all compact digit kernels through it.

Validation completed at 3984e5272

The following passed locally:

  • cargo fmt --all and git diff --check;
  • cargo test -p akita-field --lib, with 158 tests passed;
  • cargo test -p akita-sumcheck --lib, with 3 tests passed;
  • the 21 focused digit range prover tests;
  • the 31 focused relation and range image prover tests;
  • compilation of the extension opening reduction integration test;
  • focused Clippy for akita-field, akita-sumcheck, and akita-prover with warnings denied;
  • the Rust file line cap check;
  • the focused Criterion benchmark;
  • release fp32 profile generation and verification at nv26.

Hosted CI and the profile matrix are running at this head. No failure is currently reported.

Acceptance question

Keep this change if the hosted report shows a useful fp32 proving gain without regressions in the other field families. Revise or close the draft if the kernel gain does not transfer to full proving.

Reviewer map

Suggested review order:

  1. crates/akita-field/src/unreduced/accum.rs
  2. crates/akita-field/src/unreduced/mod.rs
  3. crates/akita-field/src/ext/fp_ext4.rs
  4. crates/akita-prover/src/protocol/sumcheck/digit_range/direct_range_leaf.rs
  5. crates/akita-prover/src/protocol/sumcheck/relation_range_image/mod.rs
  6. crates/akita-prover/src/protocol/sumcheck/two_round_prefix/common.rs
  7. crates/akita-field/src/ext/tests.rs
  8. crates/akita-pcs/benches/field_arith/kernel.rs

Accumulate FpExt4 by small scalar products in the existing exact u128 coefficient slots and reduce once per sum. Add direct differential coverage and a focused Criterion benchmark.
@cursor

cursor Bot commented Aug 22, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
Touches prover-side field arithmetic and sum-check kernels; protocol, transcripts, and verifier are unchanged, but incorrect accumulation would silently change proofs.

Overview
Speeds compact fp32 digit sum-check by accumulating field × small integer products in a new SmallMulAccum instead of reducing after every multiply.

FpExt4<Fp32> gets FpExt4Fp32SmallMulAccum: four u64 coefficient slots. Products stay exact in-slot; addition folds with SHIFT64_MOD_P only on 64-bit carry, so correctness does not depend on batch size. Other fields implement the new trait methods as identity or reuse existing wide accums.

Compact kernels (direct range, fused relation/range-image, two-round prefix) now use mul_small_unreduced / reduce_small_accum. Folded relation terms go through RelationAccum, which delays full products when DELAYED_PRODUCT_SUM_IS_EXACT. Stage-2 tensor norms can factor the inner small-scalar sum first when PREFER_FACTORED_SMALL_SUM (fp32 ext4 only).

Proof protocol, planner, transcripts, and verifier are unchanged. Adds a differential small-accum test and a Criterion kernel bench.

Reviewed by Cursor Bugbot for commit fc78c71. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions github-actions Bot added the no-spec PR has no spec file label Aug 22, 2026
@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown

Documentation blast radius (advisory)

These regions may need doc/spec/book updates based on changed paths.
This is not a merge gate. See docs/documentation.md.

Changed files in this PR: 23

prover-protocol

Prove pipeline, folds, sumcheck stages

Code paths touched:

  • crates/akita-prover/src/protocol/sumcheck/digit_range/direct_range_leaf.rs
  • crates/akita-prover/src/protocol/sumcheck/digit_range/direct_range_leaf/live_prefix.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/additional_terms.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/coefficient_prefix.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/coefficient_round_fold.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/compact_prefix.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/dense_terms.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/lane_prefix.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/mod.rs
  • crates/akita-prover/src/protocol/sumcheck/relation_range_image/tests.rs
  • crates/akita-prover/src/protocol/sumcheck/two_round_prefix/common.rs
  • crates/akita-prover/src/protocol/sumcheck/two_round_prefix/stage1.rs
  • crates/akita-prover/src/protocol/sumcheck/two_round_prefix/stage2.rs
  • crates/akita-sumcheck/src/accum.rs

Consider updating:

  • book/src/how/proving/**
  • book/src/how/recursion.md
  • specs/packed-sumcheck.md
  • specs/archive/2026-Q3/terminal-fold-cutover.md
  • specs/archive/2026-Q3/protocol-field-geometry-cutover.md

field-algebra

Field traits, packed SIMD, extension towers

Code paths touched:

  • crates/akita-field/src/ext/fp_ext2.rs
  • crates/akita-field/src/ext/fp_ext4.rs
  • crates/akita-field/src/ext/fp_ext8.rs
  • crates/akita-field/src/ext/tests.rs
  • crates/akita-field/src/unreduced/accum.rs
  • crates/akita-field/src/unreduced/mod.rs
  • crates/akita-field/src/unreduced/native_algebra.rs

Consider updating:

  • book/src/foundations/rings-and-fields.md
  • book/src/foundations/ntt-crt.md
  • book/src/how/optimizations.md
  • specs/archive/2026-Q3/akita-field-refactor.md
  • specs/archive/2026-Q3/crt-ntt-*.md
  • specs/archive/2026-Q3/avx-simd-port.md

pcs-umbrella

Public PCS API, examples, integration tests

Code paths touched:

  • crates/akita-pcs/benches/field_arith/kernel.rs

Consider updating:

  • book/src/usage/**
  • README.md

Per-PR checklist: spec Status / acceptance criteria; book owning page; AGENTS.md if contracts changed; archive spec after fold.

@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown

PCS Profile Benchmark

13 of 13 profiles passed.

Times are medians of 3 measured runs after 1 discarded warmup run. Peak RSS is the largest measured value.

Each sample verifies the same proof first with the configured multi-threaded pool and then with one thread. Both timings reuse the same verifier setup.

Merge-base comparisons are available for 13 of 13 profiles. For matching profiles, the head and merge-base binaries ran interleaved on the same runner.

Benchmark shards

CI shard Profiles
1-fp32-base Fp32 dense nv26, direct setup check
Fp32 one-hot nv30, direct setup check
2-fp64-base Fp64 dense nv26, direct setup check
Fp64 one-hot nv30, direct setup check
3-fp128-base Fp128 dense nv28, direct setup check
Fp128 one-hot nv36, direct setup check
Fp128 one-hot nv36, recursive setup check
4-multi-group-direct Fp128 multi-group, direct setup check
5-multi-group-recursive Fp128 multi-group, recursive setup check
6-multi-group-recursive-w8r2 Fp128 multi-group W8R2, recursive setup check
7-distributed Fp128 one-hot nv32 W2R2, direct setup check
Fp128 one-hot nv32 W4R2, direct setup check
Fp128 one-hot nv32 W8R2, direct setup check

Public opening statements

Public opening statement Profiles
Over Fp32, one committed 26 variable multilinear polynomial with 2^26 coefficients is opened at one 26 coordinate point. Fp32 dense nv26, direct setup check
Over Fp32, one committed 30 variable multilinear polynomial with 2^30 coefficients is opened at one 30 coordinate point. Fp32 one-hot nv30, direct setup check
Over Fp64, one committed 26 variable multilinear polynomial with 2^26 coefficients is opened at one 26 coordinate point. Fp64 dense nv26, direct setup check
Over Fp64, one committed 30 variable multilinear polynomial with 2^30 coefficients is opened at one 30 coordinate point. Fp64 one-hot nv30, direct setup check
Over Fp128, one committed 28 variable multilinear polynomial with 2^28 coefficients is opened at one 28 coordinate point. Fp128 dense nv28, direct setup check
Over Fp128, one committed 36 variable multilinear polynomial with 2^36 coefficients is opened at one 36 coordinate point. Fp128 one-hot nv36, direct setup check
Fp128 one-hot nv36, recursive setup check
Over Fp128, 4 polynomials in 3 groups: one 16 variable polynomial at its own point, one 16 variable polynomial at its own point, and 2 32 variable polynomials at one shared point. Fp128 multi-group, direct setup check
Fp128 multi-group, recursive setup check
Fp128 multi-group W8R2, recursive setup check
Over Fp128, one committed 32 variable multilinear polynomial with 2^32 coefficients is opened at one 32 coordinate point. Fp128 one-hot nv32 W2R2, direct setup check
Fp128 one-hot nv32 W4R2, direct setup check
Fp128 one-hot nv32 W8R2, direct setup check

One-hot profiles generate deterministic witnesses with one 1 in every consecutive chunk of 256 coefficients. This witness shape is not a separate public claim.

Direct evaluates the public setup contribution during Stage 2. Recursive carries the same check through a Stage 3 setup-product sumcheck. Both modes execute the complete fold schedule and terminal verification.

The chunked profiles W2R2, W4R2, W8R2 divide the witness relation into the stated number of exact chunks for the first two fold levels.

Generated profiles may select different A, B, and D ring dimensions at different fold levels. The short profile names omit those dimensions.

Each sample generates deterministic witnesses and opening points, prepares setup, commits, proves, serializes the proof, checks its size, prepares verifier setup, and verifies the claimed openings. It does not test malformed proofs.

Phase time

Profile Setup Commit Prove Verify, multi-threaded Verify, single-threaded
Fp32 dense nv26, direct setup check 0.019 s
-0.7%
0.167 s
-2.5%
0.776 s
-3.0%
12.2 ms
-0.5%
17.9 ms
-0.2%
Fp32 one-hot nv30, direct setup check 0.021 s
-0.6%
0.156 s
-0.2%
1.006 s
-1.7%
13.8 ms
+1.8%
24.0 ms
+0.1%
Fp64 dense nv26, direct setup check 0.025 s
+2.4%
0.659 s
-1.6%
0.855 s
-0.2%
12.3 ms
-1.0%
20.8 ms
+0.2%
Fp64 one-hot nv30, direct setup check 0.033 s
+0.9%
0.065 s
+0.3%
0.624 s
-0.3%
12.0 ms
+4.1%
19.6 ms
+0.7%
Fp128 dense nv28, direct setup check 0.087 s
+1.2%
7.556 s
+0.2%
2.261 s
+0.8%
16.6 ms
+2.4%
54.0 ms
+0.0%
Fp128 one-hot nv36, direct setup check 0.217 s
+0.0%
6.291 s
-0.6%
3.528 s
-1.2%
23.3 ms
+3.8%
123.9 ms
-0.3%
Fp128 one-hot nv36, recursive setup check 0.769 s
+0.7%
6.245 s
-1.3%
4.131 s
+5.5%
17.1 ms
-0.1%
41.0 ms
-0.3%
Fp128 multi-group, direct setup check 0.107 s
+0.8%
1.684 s
-1.4%
1.382 s
-0.6%
16.4 ms
+0.9%
64.3 ms
+0.4%
Fp128 multi-group, recursive setup check 0.388 s
+0.2%
1.680 s
-1.1%
1.721 s
+1.8%
14.3 ms
+1.8%
27.4 ms
+0.1%
Fp128 multi-group W8R2, recursive setup check 0.436 s
-1.9%
1.770 s
+2.7%
3.755 s
+0.3%
23.4 ms
-2.3%
61.5 ms
-0.3%
Fp128 one-hot nv32 W2R2, direct setup check 0.057 s
-1.2%
0.571 s
-1.3%
1.382 s
+0.7%
16.6 ms
+3.6%
45.1 ms
-0.2%
Fp128 one-hot nv32 W4R2, direct setup check 0.065 s
-0.4%
0.568 s
-1.4%
1.853 s
+0.4%
18.2 ms
+1.0%
59.8 ms
-0.0%
Fp128 one-hot nv32 W8R2, direct setup check 0.059 s
-0.2%
0.573 s
-0.6%
2.585 s
-0.1%
20.5 ms
-0.1%
62.5 ms
-0.1%

Proof size and protocol shape

Profile Fold A/B/D schedule Total proof Fold payload Terminal response Fold levels Grinding retries
Fp32 dense nv26, direct setup check 2048/256/256 → 512/256/256 → 128/128/128 66,584 bytes
+0.0%
28,060 bytes
+0.0%
38,524 bytes
+0.0%
z 20,604 · e 2,560 · t 15,360
7
+0.0%
None
Fp32 one-hot nv30, direct setup check 2048/256/256 → 256/256/256 → 128/128/128 67,273 bytes
+0.0%
28,700 bytes
+0.0%
38,573 bytes
+0.0%
z 20,653 · e 2,560 · t 15,360
7
+0.0%
None
Fp64 dense nv26, direct setup check 1024/128/128 → 128/64/64 → 64/64/64 70,028 bytes
+0.0%
24,156 bytes
+0.0%
45,872 bytes
+0.0%
z 20,784 · e 3,584 · t 21,504
7
+0.0%
None
Fp64 one-hot nv30, direct setup check 512/256/128 → 128/64/64 → 64/64/64 69,778 bytes
+0.0%
23,900 bytes
+0.0%
45,878 bytes
+0.0%
z 20,790 · e 3,584 · t 21,504
7
+0.0%
None
Fp128 dense nv28, direct setup check 512/64/64 → 64/64/64 72,951 bytes
+0.0%
19,916 bytes
+0.0%
53,035 bytes
+0.0%
z 20,267 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 one-hot nv36, direct setup check 512/64/64 → 256/64/64 → 64/64/64 73,996 bytes
+0.0%
20,892 bytes
+0.0%
53,104 bytes
+0.0%
z 20,336 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 one-hot nv36, recursive setup check 512/64/64 → 256/64/64 → 64/64/64 76,414 bytes
+0.0%
23,308 bytes
+0.0%
53,106 bytes
+0.0%
z 20,338 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 multi-group, direct setup check 512/64/64 → 64/64/64 73,013 bytes
+0.0%
19,916 bytes
+0.0%
53,097 bytes
+0.0%
z 20,329 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 multi-group, recursive setup check 512/64/64 → 256/64/64 → 64/64/64 76,166 bytes
+0.0%
23,052 bytes
+0.0%
53,114 bytes
+0.0%
z 20,346 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 multi-group W8R2, recursive setup check 256/64/64 → 64/64/64 79,497 bytes
+0.0%
26,432 bytes
+0.0%
53,065 bytes
+0.0%
z 20,297 · e 8,192 · t 24,576
8
+0.0%
None
Fp128 one-hot nv32 W2R2, direct setup check 512/64/64 → 64/64/64 73,443 bytes
+0.0%
20,332 bytes
+0.0%
53,111 bytes
+0.0%
z 20,343 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 one-hot nv32 W4R2, direct setup check 512/64/64 → 256/64/64 → 64/64/64 73,966 bytes
+0.0%
20,892 bytes
+0.0%
53,074 bytes
+0.0%
z 20,306 · e 8,192 · t 24,576
7
+0.0%
None
Fp128 one-hot nv32 W8R2, direct setup check 512/64/64 → 64/64/64 74,689 bytes
+0.0%
21,596 bytes
+0.0%
53,093 bytes
+0.0%
z 20,325 · e 8,192 · t 24,576
7
+0.0%
None

Grinding retries are rejected attempts at each fold, listed in measured-run order. Zero means the first sampled nonce was accepted.

Memory and setup size

Profile Setup vector Prepared NTT cache Verifier NTT cache Peak RSS
Fp32 dense nv26, direct setup check 4.0 MiB
+0.0%
53.9 MiB
+0.0%
0.9 MiB
+0.0%
763.0 MiB
+0.1%
Fp32 one-hot nv30, direct setup check 8.0 MiB
+0.0%
63.0 MiB
+0.0%
0.9 MiB
+0.0%
472.1 MiB
+0.9%
Fp64 dense nv26, direct setup check 11.0 MiB
+0.0%
93.8 MiB
+0.0%
1.5 MiB
+0.0%
950.5 MiB
-0.4%
Fp64 one-hot nv30, direct setup check 16.0 MiB
+0.0%
147.5 MiB
+0.0%
1.5 MiB
+0.0%
397.0 MiB
+0.6%
Fp128 dense nv28, direct setup check 86.0 MiB
+0.0%
424.0 MiB
+0.0%
1.2 MiB
+0.0%
5216.8 MiB
-0.1%
Fp128 one-hot nv36, direct setup check 256.0 MiB
+0.0%
1150.0 MiB
+0.0%
1.2 MiB
+0.0%
3815.7 MiB
-0.2%
Fp128 one-hot nv36, recursive setup check 256.0 MiB
+0.0%
1174.5 MiB
+0.0%
1.2 MiB
+0.0%
3822.5 MiB
-0.2%
Fp128 multi-group, direct setup check 128.0 MiB
+0.0%
535.6 MiB
+0.0%
1.2 MiB
+0.0%
1538.6 MiB
-0.0%
Fp128 multi-group, recursive setup check 128.0 MiB
+0.0%
623.0 MiB
+0.0%
1.2 MiB
+0.0%
1678.1 MiB
-0.0%
Fp128 multi-group W8R2, recursive setup check 128.0 MiB
+0.0%
542.9 MiB
+0.0%
1.2 MiB
+0.0%
2590.2 MiB
+0.0%
Fp128 one-hot nv32 W2R2, direct setup check 64.0 MiB
+0.0%
267.5 MiB
+0.0%
1.2 MiB
+0.0%
931.5 MiB
-0.4%
Fp128 one-hot nv32 W4R2, direct setup check 64.0 MiB
+0.0%
301.8 MiB
+0.0%
1.2 MiB
+0.0%
1229.1 MiB
+0.0%
Fp128 one-hot nv32 W8R2, direct setup check 64.0 MiB
+0.0%
267.5 MiB
+0.0%
1.2 MiB
+0.0%
1551.3 MiB
+0.3%

Deltas are shown only for profiles with a matching merge-base case. Negative is smaller or faster.

The uploaded report.md benchmark artifact contains the detailed fold schedule, proof-size breakdown, terminal response segments, and Golomb diagnostics.

Add a dedicated small-scalar accumulator that keeps FpExt4<Fp32> coefficient sums in u64 slots and folds only on carry. Route compact digit-range and range-image kernels through it while preserving the unrestricted multiplication path.
@quangvdao quangvdao changed the title perf(sumcheck): delay fp32 small reductions perf(sumcheck): use narrow fp32 digit accumulators Aug 22, 2026
@github-actions

github-actions Bot commented Aug 22, 2026

Copy link
Copy Markdown

CI test timing

  • Report generated: 2026-08-22T04:12:22Z.
  • Source: 39a02af on codex/small-field-sumcheck.
  • Workflow run: 32549759198.
  • Main baseline: 6918a20.
  • Previous run: a86f8ce.

Run summary

Wall s Main wall s Main Δ Ratio Tests Skipped Failed Status
422.0 357.0 +18.2% 1.18x 1696 0 0 ok

Wall time spans 2 parallel nextest slice shards.

Slowest tests

Rank Duration s Test
1 19.5 akita-planner::schedule_params::adaptive_search_tests::uniform_suffix_dp_matches_unpruned_exact_cutover_search
2 18.9 akita-pcs::akita_fp128_e2e::fp128_dense
3 11.3 akita-pcs::scheme::tests::onehot::selective_l2::selective_l2_proof_rejects_transcript_mutations
4 7.8 akita-pcs::scheme::tests::onehot::multi_group_root_allows_precommitted_arity_above_final_group
5 5.5 akita-planner::schedule_params::adaptive_search_tests::adaptive_nv36_minimizes_first_direct_setup_before_proof_bytes
6 4.6 akita-prover::kernels::linear::tests::chunking::q128_many_blocks_digits_chunk_instead_of_unsafe_block_parallel
7 4.5 akita-pcs::akita_small_field_e2e::fp32_dense
8 4.4 akita-pcs::akita_small_field_e2e::selective_l2::fp32_nv20_shipped_terminal_route_roundtrip_and_rejections
9 4.4 akita-pcs::akita_small_field_e2e::fp64_dense_pre
10 4.2 akita-pcs::akita_small_field_e2e::fp32_onehot_pre
11 4.0 akita-pcs::akita_fp128_e2e::fp128_onehot_pre
12 3.9 akita-planner::schedule_params::adaptive_search_tests::mixed_domain_search_beats_or_ties_uniform_d64
13 3.9 akita-pcs::scheme::tests::single::folded_payload_commitments_and_digits_stay_base_field
14 3.8 akita-pcs::akita_fp128_e2e::fp128_onehot_batched
15 3.7 akita-pcs::akita_fp128_e2e::heterogeneous::heterogeneous_compute_backends
16 3.7 akita-planner::schedule_params::adaptive_search_tests::adaptive_frontier_matches_unpruned_traversal_and_hand_priced_role_optima
17 3.6 akita-planner::schedule_params::adaptive_search_tests::adaptive_search_applies_setup_budget_in_physical_fields
18 3.6 akita-pcs::scheme::tests::single::verify_rejects_malformed_v_dimension_without_panicking
19 3.6 akita-pcs::setup::adaptive_dense::large_setup_batch_passes
20 3.6 akita-pcs::protocol_soundness::trace_internalization_rejects_tampered_root_fold_handle

Regressions vs main

No per-test regressions above the threshold.

New slow tests

No new tests ≥30s vs main baseline.

Delay exact relation-polynomial reductions to worker boundaries across the folded Stage 2 kernels.

Factor the compact prefix norm along its tensor boundary for fields where small-scalar accumulation is cheaper, while preserving the direct fp64 path. Add differential coverage for fp32 and fp64 relation accumulation.
@github-actions

Copy link
Copy Markdown

Warning

This PR has more than 500 changed lines and does not include a spec.

Large features and architectural changes benefit from a short spec before implementation review.
See CONTRIBUTING.md for the spec workflow.

If this PR is a bug fix, small cleanup, or otherwise does not warrant a spec, feel free to ignore this message.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-spec PR has no spec file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant