Retain quotient mask without domain padding - #326
Merged
Conversation
|
Note Complete: Audit complete. No review-worthy issues remain after automated review. One finding was auto-invalidated. Open the full results here. Analyzed five files, diff |
Contributor
Author
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
of a domain-sized zero-padded polynomial
[a]G_0 + [b]G_1 + [blind]Wvalue while letting multiopentreat the absent tail as zero
multiopening proof regression
At Orchard k = 11, the retained mask allocation falls from 2,048 field
elements (64 KiB) to two field elements (64 bytes). The mask distribution and
RNG draw order were already made linear by #267; this PR only removes its
stored zero tail. Proof and verifier formats are unchanged.
Benchmark
Compared exact main
161cd1bwith candidatebdcc4fdonlinux-1(
val-aus-zecnode01, x86_64 AMD EPYC 9654 VM), using Rust 1.97.1. The retainedrun used real one-Action Ironwood k=11 proofs, 50 flat Criterion samples per
leg, and a base/candidate/candidate/base bracket: 100 samples per variant at
each worker count. Every retained competitor log is empty; one-minute load was
0.10 before and 0.96 after the complete run.
The serial base medians moved from 649.935 ms in the opening leg to 637.734 ms
in the closing leg, while the two inner candidate legs were 649.993 and
649.955 ms. The bootstrap interval only captures within-leg sampling error, so
it cannot make that non-stationary bracket into evidence of a regression.
Temporary phase instrumentation also timed the two affected regions. Means
are used because the serial VM samples were bimodal.
At six workers, the measured 11.24 us phase saving is about 0.009% of a whole
proof, explaining why it is invisible in E2E noise. Two Apple M4 attempts were
discarded by the guard after unrelated XProtect, launchd, and airportd activity;
no macOS result is claimed.
Validation
cargo test -p zakura-halo2-proofs --all-featurescargo check -p zakura-halo2-proofs --no-default-featurescargo test -p zakura-halo2-proofs --no-default-features --lib short_trailing_polynomialcargo test -p zakura-orchard --all-featurescargo fmt --all -- --checkgit diff --checkAPI surface
No downstream-public API changes.
pub(crate) Polynomial::<_, Coeff>::from_coefficients(Vec<_>)EvaluationDomainargument from thepub(in crate::plonk) Argument::commit_random_polynomialmethodThis branch is based directly on current
mainand is independent of #319.