From b14328c2dff8cf41e7e77762ff325ba48794c9ef Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Fri, 14 May 2021 07:33:46 -0700 Subject: [PATCH] Move timed! and call from ListPolynomialCommitment --- src/polynomial/commitment.rs | 52 +++++++++++++++++++++++------------- src/prover.rs | 10 +------ src/{util.rs => util/mod.rs} | 2 ++ src/util/timing.rs | 13 +++++++++ 4 files changed, 50 insertions(+), 27 deletions(-) rename src/{util.rs => util/mod.rs} (99%) create mode 100644 src/util/timing.rs diff --git a/src/polynomial/commitment.rs b/src/polynomial/commitment.rs index dabf2bf2..4775d5ac 100644 --- a/src/polynomial/commitment.rs +++ b/src/polynomial/commitment.rs @@ -1,3 +1,6 @@ +use anyhow::Result; +use rayon::prelude::*; + use crate::field::field::Field; use crate::field::lagrange::interpolant; use crate::fri::{prover::fri_proof, verifier::verify_fri_proof, FriConfig}; @@ -6,9 +9,8 @@ use crate::plonk_challenger::Challenger; use crate::plonk_common::reduce_with_powers; use crate::polynomial::polynomial::PolynomialCoeffs; use crate::proof::{FriProof, Hash, OpeningSet}; +use crate::timed; use crate::util::{log2_strict, reverse_index_bits_in_place, transpose}; -use anyhow::Result; -use rayon::prelude::*; pub const SALT_SIZE: usize = 2; @@ -23,7 +25,31 @@ pub struct ListPolynomialCommitment { impl ListPolynomialCommitment { pub fn new(polynomials: Vec>, rate_bits: usize, blinding: bool) -> Self { let degree = polynomials[0].len(); - let lde_values = polynomials + let lde_values = timed!( + Self::lde_values(&polynomials, rate_bits, blinding), + "to compute LDE" + ); + + let mut leaves = timed!(transpose(&lde_values), "to transpose LDEs"); + reverse_index_bits_in_place(&mut leaves); + let merkle_tree = timed!(MerkleTree::new(leaves, false), "to build Merkle tree"); + + Self { + polynomials, + merkle_tree, + degree, + rate_bits, + blinding, + } + } + + fn lde_values( + polynomials: &[PolynomialCoeffs], + rate_bits: usize, + blinding: bool, + ) -> Vec> { + let degree = polynomials[0].len(); + polynomials .par_iter() .map(|p| { assert_eq!(p.len(), degree, "Polynomial degree invalid."); @@ -40,19 +66,7 @@ impl ListPolynomialCommitment { } else { Vec::new() }) - .collect::>(); - - let mut leaves = transpose(&lde_values); - reverse_index_bits_in_place(&mut leaves); - let merkle_tree = MerkleTree::new(leaves, false); - - Self { - polynomials, - merkle_tree, - degree, - rate_bits, - blinding, - } + .collect() } pub fn leaf(&self, index: usize) -> &[F] { @@ -323,10 +337,12 @@ impl OpeningProof { #[cfg(test)] mod tests { - use super::*; - use crate::field::crandall_field::CrandallField; use anyhow::Result; + use crate::field::crandall_field::CrandallField; + + use super::*; + fn gen_random_test_case( k: usize, degree_log: usize, diff --git a/src/prover.rs b/src/prover.rs index 434d0084..6adc5906 100644 --- a/src/prover.rs +++ b/src/prover.rs @@ -13,20 +13,12 @@ use crate::polynomial::commitment::ListPolynomialCommitment; use crate::polynomial::division::divide_by_z_h; use crate::polynomial::polynomial::{PolynomialCoeffs, PolynomialValues}; use crate::proof::Proof; +use crate::timed; use crate::util::transpose; use crate::vars::EvaluationVars; use crate::wire::Wire; use crate::witness::PartialWitness; -macro_rules! timed { - ($a:expr, $msg:expr) => {{ - let timer = Instant::now(); - let res = $a; - info!("{:.3}s {}", timer.elapsed().as_secs_f32(), $msg); - res - }}; -} - /// Corresponds to constants - sigmas - wires - zs - quotient — polynomial commitments. pub const PLONK_BLINDING: [bool; 5] = [false, false, true, true, true]; diff --git a/src/util.rs b/src/util/mod.rs similarity index 99% rename from src/util.rs rename to src/util/mod.rs index c1e32617..2b459c92 100644 --- a/src/util.rs +++ b/src/util/mod.rs @@ -1,3 +1,5 @@ +pub(crate) mod timing; + use crate::field::field::Field; use crate::polynomial::polynomial::PolynomialValues; diff --git a/src/util/timing.rs b/src/util/timing.rs new file mode 100644 index 00000000..17136f36 --- /dev/null +++ b/src/util/timing.rs @@ -0,0 +1,13 @@ +#[macro_export] +macro_rules! timed { + ($a:expr, $msg:expr) => {{ + use std::time::Instant; + + use log::info; + + let timer = Instant::now(); + let res = $a; + info!("{:.3}s {}", timer.elapsed().as_secs_f32(), $msg); + res + }}; +}