arnaucube
arnaucube/shockwave-plusPublic Self-hosted repository
shockwave-plus/shockwave_plus/benches/prove.rs
shockwave_plus/benches/prove.rsRaw
 1#![allow(non_snake_case)]
 2use criterion::{criterion_group, criterion_main, Criterion};
 3use shockwave_plus::ShockwavePlus;
 4use shockwave_plus::R1CS;
 5use tensor_pcs::rs_config::good_curves::secp256k1::secp256k1_good_curve;
 6use tensor_pcs::{det_num_cols, Transcript};
 7
 8fn shockwave_plus_bench(c: &mut Criterion) {
 9    type F = halo2curves::secp256k1::Fp;
10
11    for exp in [12, 15, 18] {
12        let num_cons = 2usize.pow(exp as u32);
13        let num_input = 3;
14        let num_vars = num_cons - num_input;
15
16        let (r1cs, witness) = R1CS::<F>::produce_synthetic_r1cs(num_vars, num_input);
17
18        let mut group = c.benchmark_group(format!("ShockwavePlus num_cons: {}", r1cs.num_cons()));
19        let l = 319;
20        let num_cols = det_num_cols(r1cs.z_len(), l);
21
22        let (good_curve, coset_offset) =
23            secp256k1_good_curve((num_cols as f64).log2() as usize + 1);
24
25        group.bench_function("config", |b| {
26            b.iter(|| {
27                ShockwavePlus::new(r1cs.clone(), l, good_curve, coset_offset);
28            })
29        });
30
31        let shockwave_plus = ShockwavePlus::new(r1cs.clone(), l, good_curve, coset_offset);
32
33        group.bench_function("prove", |b| {
34            b.iter(|| {
35                let mut transcript = Transcript::new(b"bench");
36                shockwave_plus.prove(&witness, &r1cs.public_input, &mut transcript);
37            })
38        });
39    }
40}
41
42fn set_duration() -> Criterion {
43    Criterion::default().sample_size(10)
44}
45
46criterion_group! {
47    name = benches;
48    config = set_duration();
49    targets = shockwave_plus_bench
50}
51criterion_main!(benches);