diff --git a/halo2_proofs/Cargo.toml b/halo2_proofs/Cargo.toml index 6368bddc..56385ddf 100644 --- a/halo2_proofs/Cargo.toml +++ b/halo2_proofs/Cargo.toml @@ -31,6 +31,10 @@ harness = false name = "hashtocurve" harness = false +[[bench]] +name = "msm" +harness = false + [[bench]] name = "plonk" harness = false diff --git a/halo2_proofs/benches/msm.rs b/halo2_proofs/benches/msm.rs new file mode 100644 index 00000000..21c5508a --- /dev/null +++ b/halo2_proofs/benches/msm.rs @@ -0,0 +1,27 @@ +#[macro_use] +extern crate criterion; + +use crate::arithmetic::best_multiexp; +use crate::pasta::{EqAffine, Fp}; +use crate::poly::commitment::Params; +use criterion::{BenchmarkId, Criterion}; +use group::ff::Field; +use halo2_proofs::*; +use rand_core::OsRng; + +fn criterion_benchmark(c: &mut Criterion) { + let mut group = c.benchmark_group("msm"); + for k in 8..16 { + group + .bench_function(BenchmarkId::new("k", k), |b| { + let coeffs = (0..(1 << k)).map(|_| Fp::random(OsRng)).collect::>(); + let bases = Params::::new(k).get_g(); + + b.iter(|| best_multiexp(&coeffs, &bases)) + }) + .sample_size(30); + } +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches);