Only log timing for the final proof in recursion tests (#315)

* Only log timing for the final proof in recursion tests

Just to reduce noise; the performance of the final proof is most meaningful

* fmt
This commit is contained in:
Daniel Lubarov 2021-10-21 14:22:22 -07:00 committed by GitHub
parent 6463e4f4e7
commit b0b2a10da0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 19 deletions

View File

@ -413,7 +413,7 @@ mod tests {
builder.assert_permutation(a, b);
let data = builder.build();
let proof = data.prove(pw).unwrap();
let proof = data.prove(pw)?;
verify(proof, &data.verifier_only, &data.common)
}
@ -442,7 +442,7 @@ mod tests {
builder.assert_permutation(a, b);
let data = builder.build();
let proof = data.prove(pw).unwrap();
let proof = data.prove(pw)?;
verify(proof, &data.verifier_only, &data.common)
}
@ -470,7 +470,7 @@ mod tests {
builder.assert_permutation(a, b);
let data = builder.build();
data.prove(pw).unwrap();
data.prove(pw)?;
Ok(())
}

View File

@ -19,6 +19,7 @@ use crate::plonk::proof::ProofWithPublicInputs;
use crate::plonk::prover::prove;
use crate::plonk::verifier::verify;
use crate::util::marking::MarkedTargets;
use crate::util::timing::TimingTree;
#[derive(Clone, Debug)]
pub struct CircuitConfig {
@ -107,7 +108,12 @@ pub struct CircuitData<F: RichField + Extendable<D>, const D: usize> {
impl<F: RichField + Extendable<D>, const D: usize> CircuitData<F, D> {
pub fn prove(&self, inputs: PartialWitness<F>) -> Result<ProofWithPublicInputs<F, D>> {
prove(&self.prover_only, &self.common, inputs)
prove(
&self.prover_only,
&self.common,
inputs,
&mut TimingTree::default(),
)
}
pub fn verify(&self, proof_with_pis: ProofWithPublicInputs<F, D>) -> Result<()> {
@ -129,7 +135,12 @@ pub struct ProverCircuitData<F: RichField + Extendable<D>, const D: usize> {
impl<F: RichField + Extendable<D>, const D: usize> ProverCircuitData<F, D> {
pub fn prove(&self, inputs: PartialWitness<F>) -> Result<ProofWithPublicInputs<F, D>> {
prove(&self.prover_only, &self.common, inputs)
prove(
&self.prover_only,
&self.common,
inputs,
&mut TimingTree::default(),
)
}
}

View File

@ -26,8 +26,8 @@ pub(crate) fn prove<F: RichField + Extendable<D>, const D: usize>(
prover_data: &ProverOnlyCircuitData<F, D>,
common_data: &CommonCircuitData<F, D>,
inputs: PartialWitness<F>,
timing: &mut TimingTree,
) -> Result<ProofWithPublicInputs<F, D>> {
let mut timing = TimingTree::new("prove", Level::Debug);
let config = &common_data.config;
let num_challenges = config.num_challenges;
let quotient_degree = common_data.quotient_degree();
@ -73,7 +73,7 @@ pub(crate) fn prove<F: RichField + Extendable<D>, const D: usize>(
config.rate_bits,
config.zero_knowledge & PlonkPolynomials::WIRES.blinding,
config.cap_height,
&mut timing,
timing,
prover_data.fft_root_table.as_ref(),
)
);
@ -119,7 +119,7 @@ pub(crate) fn prove<F: RichField + Extendable<D>, const D: usize>(
config.rate_bits,
config.zero_knowledge & PlonkPolynomials::ZS_PARTIAL_PRODUCTS.blinding,
config.cap_height,
&mut timing,
timing,
prover_data.fft_root_table.as_ref(),
)
);
@ -169,7 +169,7 @@ pub(crate) fn prove<F: RichField + Extendable<D>, const D: usize>(
config.rate_bits,
config.zero_knowledge & PlonkPolynomials::QUOTIENT.blinding,
config.cap_height,
&mut timing,
timing,
prover_data.fft_root_table.as_ref(),
)
);
@ -191,12 +191,10 @@ pub(crate) fn prove<F: RichField + Extendable<D>, const D: usize>(
zeta,
&mut challenger,
common_data,
&mut timing,
timing,
)
);
timing.print();
let proof = Proof {
wires_cap: wires_commitment.merkle_tree.cap,
plonk_zs_partial_products_cap: zs_partial_products_commitment.merkle_tree.cap,

View File

@ -124,7 +124,7 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
#[cfg(test)]
mod tests {
use anyhow::Result;
use log::info;
use log::{info, Level};
use super::*;
use crate::field::goldilocks_field::GoldilocksField;
@ -141,7 +141,9 @@ mod tests {
CompressedProofWithPublicInputs, OpeningSetTarget, Proof, ProofTarget,
ProofWithPublicInputs,
};
use crate::plonk::prover::prove;
use crate::util::log2_strict;
use crate::util::timing::TimingTree;
// Construct a `FriQueryRoundTarget` with the same dimensions as the ones in `proof`.
fn get_fri_query_round<F: RichField + Extendable<D>, const D: usize>(
@ -367,7 +369,7 @@ mod tests {
let config = CircuitConfig::standard_recursion_config();
let (proof, vd, cd) = dummy_proof::<F, D>(&config, 8_000)?;
let (proof, _vd, cd) = recursive_proof(proof, vd, cd, &config, &config, true)?;
let (proof, _vd, cd) = recursive_proof(proof, vd, cd, &config, &config, true, true)?;
test_serialization(&proof, &cd)?;
Ok(())
@ -383,8 +385,8 @@ mod tests {
let config = CircuitConfig::standard_recursion_config();
let (proof, vd, cd) = dummy_proof::<F, D>(&config, 8_000)?;
let (proof, vd, cd) = recursive_proof(proof, vd, cd, &config, &config, false)?;
let (proof, _vd, cd) = recursive_proof(proof, vd, cd, &config, &config, true)?;
let (proof, vd, cd) = recursive_proof(proof, vd, cd, &config, &config, false, false)?;
let (proof, _vd, cd) = recursive_proof(proof, vd, cd, &config, &config, true, true)?;
test_serialization(&proof, &cd)?;
@ -414,8 +416,9 @@ mod tests {
let (proof, vd, cd) = dummy_proof::<F, D>(&normal_config, 8_000)?;
let (proof, vd, cd) =
recursive_proof(proof, vd, cd, &normal_config, &normal_config, false)?;
let (proof, _vd, cd) = recursive_proof(proof, vd, cd, &normal_config, &final_config, true)?;
recursive_proof(proof, vd, cd, &normal_config, &normal_config, false, false)?;
let (proof, _vd, cd) =
recursive_proof(proof, vd, cd, &normal_config, &final_config, true, true)?;
test_serialization(&proof, &cd)?;
@ -449,6 +452,7 @@ mod tests {
inner_config: &CircuitConfig,
config: &CircuitConfig,
print_gate_counts: bool,
print_timing: bool,
) -> Result<(
ProofWithPublicInputs<F, D>,
VerifierOnlyCircuitData<F>,
@ -474,7 +478,13 @@ mod tests {
}
let data = builder.build();
let proof = data.prove(pw)?;
let mut timing = TimingTree::new("prove", Level::Debug);
let proof = prove(&data.prover_only, &data.common, pw, &mut timing)?;
if print_timing {
timing.print();
}
data.verify(proof.clone())?;
Ok((proof, data.verifier_only, data.common))