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_vars = 2usize.pow(exp);
13 let num_input = 3;
14
15 let (r1cs, witness) = R1CS::<F>::produce_synthetic_r1cs(num_vars, num_input);
16
17 let mut group = c.benchmark_group(format!("ShockwavePlus num_cons: {}", r1cs.num_cons));
18 let l = 319;
19 let num_cols = det_num_cols(r1cs.z_len(), l);
20
21 let (good_curve, coset_offset) =
22 secp256k1_good_curve((num_cols as f64).log2() as usize + 1);
23
24 group.bench_function("config", |b| {
25 b.iter(|| {
26 ShockwavePlus::new(r1cs.clone(), l, good_curve, coset_offset);
27 })
28 });
29
30 let shockwave_plus = ShockwavePlus::new(r1cs.clone(), l, good_curve, coset_offset);
31
32 group.bench_function("prove", |b| {
33 b.iter(|| {
34 let mut transcript = Transcript::new(b"bench");
35 shockwave_plus.prove(&witness, &r1cs.public_input, &mut transcript);
36 })
37 });
38 }
39}
40
41fn set_duration() -> Criterion {
42 Criterion::default().sample_size(10)
43}
44
45criterion_group! {
46 name = benches;
47 config = set_duration();
48 targets = shockwave_plus_bench
49}
50criterion_main!(benches);