Skip to content

Commit

Permalink
feat: add bench_lookup bench
Browse files Browse the repository at this point in the history
For now, the benchmarks on the `bench_lookup` I added are:

Using `permute_expression_pair_par`:
```
Benchmarking bench-lookup/14: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.425916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.426375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.261ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.694833ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.660875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.887375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.239875ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 6.8s.
Benchmarking bench-lookup/14: Collecting 10 samples in estimated 6.8417 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.548208ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.5575ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.678708ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.956375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 20.183791ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.00175ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.986916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.358875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 21.128708ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.92425ms
bench-lookup/14         time:   [678.46 ms 686.72 ms 694.16 ms]
                        change: [-0.7211% +1.2598% +3.1373%] (p = 0.25 > 0.05)
                        No change in performance detected.
Benchmarking bench-lookup/15: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.454916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.66425ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.290333ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 12.5s.
Benchmarking bench-lookup/15: Collecting 10 samples in estimated 12.503 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.871916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 39.03175ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 44.727416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 42.948333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.489958ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 43.823041ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 39.592ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.593375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.861708ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 45.023333ms
bench-lookup/15         time:   [1.2285 s 1.2341 s 1.2393 s]
                        change: [-6.0038% -4.4123% -2.7223%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 10 measurements (20.00%)
  1 (10.00%) low mild
  1 (10.00%) high mild
Benchmarking bench-lookup/16: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 92.282041ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 90.784875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 95.368958ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 23.9s.
Benchmarking bench-lookup/16: Collecting 10 samples in estimated 23.937 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 93.599166ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 95.992583ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 91.913625ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.482625ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 90.111875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 86.671916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 96.854666ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 102.468125ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 97.830583ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 87.925708ms
bench-lookup/16         time:   [2.3417 s 2.3644 s 2.3901 s]
                        change: [+2.2283% +4.1485% +6.0108%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 1 outliers among 10 measurements (10.00%)
  1 (10.00%) high mild
Benchmarking bench-lookup/17: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 214.102916ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 45.0s.
Benchmarking bench-lookup/17: Collecting 10 samples in estimated 45.000 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 199.65025ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 208.088875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 208.299666ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 199.684416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 199.761666ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 193.034458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 202.182375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 200.825375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 226.314541ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 211.914291ms
bench-lookup/17         time:   [4.3987 s 4.4299 s 4.4605 s]
                        change: [+0.7989% +1.9668% +3.0962%] (p = 0.01 < 0.05)
                        Change within noise threshold.
Benchmarking bench-lookup/18: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 423.016291ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 85.7s.
Benchmarking bench-lookup/18: Collecting 10 samples in estimated 85.748 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 451.549291ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 469.336ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 429.5375ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 430.579041ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 435.976541ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 416.241875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 423.361041ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 436.833625ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 456.685458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 454.897541ms
bench-lookup/18         time:   [8.5101 s 8.5631 s 8.6175 s]
                        change: [+0.5067% +1.6515% +2.8407%] (p = 0.02 < 0.05)
                        Change within noise threshold.
```

Using `permute_expression_pair_seq`:
```
Benchmarking bench-lookup/14: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.35325ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.101125ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.721708ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.291333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.860208ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.553916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.965375ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 6.9s.
Benchmarking bench-lookup/14: Collecting 10 samples in estimated 6.8584 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.117458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.80025ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.169875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.03325ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.636166ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.170166ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.000416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.565958ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 18.970333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 19.007291ms
bench-lookup/14         time:   [679.11 ms 687.62 ms 696.42 ms]
                        change: [-1.5707% +0.1313% +1.8844%] (p = 0.89 > 0.05)
                        No change in performance detected.
Benchmarking bench-lookup/15: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.634625ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.915958ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 40.774625ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 12.6s.
Benchmarking bench-lookup/15: Collecting 10 samples in estimated 12.569 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.548583ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.074333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.807125ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.106458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.222541ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.021458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.411666ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.024416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.636541ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 41.869166ms
bench-lookup/15         time:   [1.2474 s 1.2597 s 1.2711 s]
                        change: [+0.9856% +2.0736% +3.1604%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Benchmarking bench-lookup/16: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 90.202208ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.318083ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.717125ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 23.8s.
Benchmarking bench-lookup/16: Collecting 10 samples in estimated 23.789 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.929041ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.316333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.588083ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.630916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.872ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.961416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 88.796833ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.80725ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.426916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 89.039833ms
bench-lookup/16         time:   [2.3537 s 2.3854 s 2.4165 s]
                        change: [-0.7038% +0.8909% +2.5108%] (p = 0.33 > 0.05)
                        No change in performance detected.
Benchmarking bench-lookup/17: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 187.758583ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 43.2s.
Benchmarking bench-lookup/17: Collecting 10 samples in estimated 43.177 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 187.717833ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 185.975333ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 187.108625ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 187.965416ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 188.279458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 188.287166ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 188.590291ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 186.355708ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 186.600458ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 188.600875ms
bench-lookup/17         time:   [4.3965 s 4.4531 s 4.5112 s]
                        change: [-0.8127% +0.5248% +2.0814%] (p = 0.52 > 0.05)
                        No change in performance detected.
Benchmarking bench-lookup/18: Warming up for 3.0000 s[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 405.103375ms

Warning: Unable to complete 10 samples in 5.0s. You may wish to increase target time to 86.2s.
Benchmarking bench-lookup/18: Collecting 10 samples in estimated 86.153 s (10 iterations)[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 406.387125ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 402.833916ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 403.729208ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 404.397583ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 404.277833ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 409.32825ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 404.037583ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 403.349875ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 405.868083ms
[halo2_proofs/src/plonk/lookup/prover.rs:418] start.elapsed() = 403.907458ms
bench-lookup/18         time:   [8.5238 s 8.5804 s 8.6488 s]
                        change: [-0.7212% +0.2021% +1.2400%] (p = 0.70 > 0.05)
                        No change in performance detected.
Found 1 outliers among 10 measurements (10.00%)
  1 (10.00%) high mild
```
  • Loading branch information
jonathanpwang committed Aug 12, 2023
1 parent c848852 commit e0b4479
Show file tree
Hide file tree
Showing 3 changed files with 146 additions and 1 deletion.
4 changes: 4 additions & 0 deletions halo2_proofs/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ harness = false
name = "dev_lookup"
harness = false

[[bench]]
name = "bench_lookup"
harness = false

[[bench]]
name = "fft"
harness = false
Expand Down
137 changes: 137 additions & 0 deletions halo2_proofs/benches/bench_lookup.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
#[macro_use]
extern crate criterion;

use ff::{Field, PrimeField};
use halo2_proofs::circuit::{Layouter, SimpleFloorPlanner, Value};
use halo2_proofs::plonk::*;
use halo2_proofs::poly::commitment::ParamsProver;
use halo2_proofs::poly::ipa::commitment::{IPACommitmentScheme, ParamsIPA};
use halo2_proofs::poly::ipa::multiopen::ProverIPA;
use halo2_proofs::poly::Rotation;
use halo2_proofs::transcript::{Blake2bWrite, Challenge255, TranscriptWriterBuffer};
use halo2curves::pasta::{pallas, EqAffine};
use rand_core::OsRng;

use std::marker::PhantomData;

use criterion::{BenchmarkId, Criterion};

fn criterion_benchmark(c: &mut Criterion) {
#[derive(Clone, Default)]
struct MyCircuit<F: Field> {
k: usize,
_marker: PhantomData<F>,
}

#[derive(Clone)]
struct MyConfig {
selector: Selector,
table: TableColumn,
advice: Column<Advice>,
}

impl<F: PrimeField> Circuit<F> for MyCircuit<F> {
type Config = MyConfig;
type FloorPlanner = SimpleFloorPlanner;
#[cfg(feature = "circuit-params")]
type Params = ();

fn without_witnesses(&self) -> Self {
Self::default()
}

fn configure(meta: &mut ConstraintSystem<F>) -> MyConfig {
let config = MyConfig {
selector: meta.complex_selector(),
table: meta.lookup_table_column(),
advice: meta.advice_column(),
};

meta.lookup("lookup", |meta| {
let selector = meta.query_selector(config.selector);
let not_selector = Expression::Constant(F::ONE) - selector.clone();
let advice = meta.query_advice(config.advice, Rotation::cur());
vec![(selector * advice + not_selector, config.table)]
});

config
}

fn synthesize(
&self,
config: MyConfig,
mut layouter: impl Layouter<F>,
) -> Result<(), Error> {
layouter.assign_table(
|| "lookup table",
|mut table| {
for row in 0u64..(1 << (self.k - 1)) {
table.assign_cell(
|| format!("row {}", row),
config.table,
row as usize,
|| Value::known(F::from(row)),
)?;
}

Ok(())
},
)?;

layouter.assign_region(
|| "assign values",
|mut region| {
for offset in 0u64..(1 << self.k) - 20 {
config.selector.enable(&mut region, offset as usize)?;
region.assign_advice(
|| format!("offset {}", offset),
config.advice,
offset as usize,
|| Value::known(F::from(offset >> 1)),
)?;
}

Ok(())
},
)
}
}

let k_range = 14..=18;

let mut prover_group = c.benchmark_group("bench-lookup");
prover_group.sample_size(10);
for k in k_range {
let circuit = MyCircuit::<pallas::Base> {
k: k as usize,
_marker: PhantomData,
};
let params = ParamsIPA::<EqAffine>::new(k);
let vk = keygen_vk(&params, &circuit).unwrap();
let pk = keygen_pk(&params, vk, &circuit).unwrap();
prover_group.bench_with_input(
BenchmarkId::from_parameter(k),
&(params, pk),
|b, (params, pk)| {
b.iter(|| {
let mut transcript = Blake2bWrite::<_, _, Challenge255<EqAffine>>::init(vec![]);
let rng = OsRng;
create_proof::<IPACommitmentScheme<EqAffine>, ProverIPA<EqAffine>, _, _, _, _>(
params,
pk,
&[circuit.clone()],
&[&[]],
rng,
&mut transcript,
)
.unwrap();
transcript.finalize();
});
},
);
}
prover_group.finish();
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
6 changes: 5 additions & 1 deletion halo2_proofs/src/plonk/lookup/prover.rs
Original file line number Diff line number Diff line change
Expand Up @@ -412,7 +412,11 @@ fn permute_expression_pair<'params, C: CurveAffine, P: Params<'params, C>, R: Rn
table_expression,
);
}*/
permute_expression_pair_par(pk, params, domain, rng, input_expression, table_expression)
let start = std::time::Instant::now();
let res =
permute_expression_pair_par(pk, params, domain, rng, input_expression, table_expression);
dbg!(start.elapsed());
res
}

fn permute_expression_pair_par<'params, C: CurveAffine, P: Params<'params, C>, R: RngCore>(
Expand Down

0 comments on commit e0b4479

Please sign in to comment.