arnaucube
arnaucube/hyperplonkPublic Self-hosted repository
hyperplonk/arithmetic/benches/bench.rs
arithmetic/benches/bench.rsRaw
 1#[macro_use]
 2extern crate criterion;
 3
 4use arithmetic::fix_variables;
 5use ark_bls12_381::Fr;
 6use ark_ff::Field;
 7use ark_poly::{DenseMultilinearExtension, MultilinearExtension};
 8use ark_std::{ops::Range, test_rng};
 9use criterion::{black_box, BenchmarkId, Criterion};
10
11const NUM_VARIABLES_RANGE: Range<usize> = 10..21;
12
13fn evaluation_op_bench<F: Field>(c: &mut Criterion) {
14    let mut rng = test_rng();
15    let mut group = c.benchmark_group("Evaluate");
16    for nv in NUM_VARIABLES_RANGE {
17        group.bench_with_input(BenchmarkId::new("evaluate native", nv), &nv, |b, &nv| {
18            let poly = DenseMultilinearExtension::<F>::rand(nv, &mut rng);
19            let point: Vec<_> = (0..nv).map(|_| F::rand(&mut rng)).collect();
20            b.iter(|| black_box(poly.evaluate(&point).unwrap()))
21        });
22
23        group.bench_with_input(BenchmarkId::new("evaluate optimized", nv), &nv, |b, &nv| {
24            let poly = DenseMultilinearExtension::<F>::rand(nv, &mut rng);
25            let point: Vec<_> = (0..nv).map(|_| F::rand(&mut rng)).collect();
26            b.iter(|| black_box(fix_variables(&poly, &point)))
27        });
28    }
29    group.finish();
30}
31
32fn bench_bls_381(c: &mut Criterion) {
33    evaluation_op_bench::<Fr>(c);
34}
35
36criterion_group!(benches, bench_bls_381);
37criterion_main!(benches);