hyperplonk/pcs/benches/bench.rs
pcs/benches/bench.rsRaw
1use ark_bls12_381::{Bls12_381, Fr};
2use ark_ff::UniformRand;
3use ark_poly::{DenseMultilinearExtension, MultilinearExtension};
4use ark_std::test_rng;
5use pcs::{KZGMultilinearPC, MultilinearCommitmentScheme, PCSErrors};
6use std::time::Instant;
7
8fn main() -> Result<(), PCSErrors> {
9 bench_pcs()
10}
11
12fn bench_pcs() -> Result<(), PCSErrors> {
13 let mut rng = test_rng();
14
15 // normal polynomials
16 let uni_params = KZGMultilinearPC::<Bls12_381>::setup(&mut rng, 18)?;
17
18 for nv in 4..19 {
19 let repetition = if nv < 10 {
20 100
21 } else if nv < 20 {
22 50
23 } else {
24 10
25 };
26
27 let poly = DenseMultilinearExtension::rand(nv, &mut rng);
28 let (ck, vk) = uni_params.trim(nv)?;
29 let point: Vec<_> = (0..nv).map(|_| Fr::rand(&mut rng)).collect();
30
31 // commit
32 let com = {
33 let start = Instant::now();
34 for _ in 0..repetition {
35 let _commit = KZGMultilinearPC::commit(&ck, &poly)?;
36 }
37
38 println!(
39 "KZG commit for {} variables: {} ns",
40 nv,
41 start.elapsed().as_nanos() / repetition as u128
42 );
43
44 KZGMultilinearPC::commit(&ck, &poly)?
45 };
46
47 // open
48 let proof = {
49 let start = Instant::now();
50 for _ in 0..repetition {
51 let _open = KZGMultilinearPC::open(&ck, &poly, &point)?;
52 }
53
54 println!(
55 "KZG open for {} variables: {} ns",
56 nv,
57 start.elapsed().as_nanos() / repetition as u128
58 );
59 KZGMultilinearPC::open(&ck, &poly, &point)?
60 };
61 let value = poly.evaluate(&point).unwrap();
62
63 // verify
64
65 {
66 let start = Instant::now();
67 for _ in 0..repetition {
68 assert!(KZGMultilinearPC::verify(&vk, &com, &point, value, &proof)?);
69 }
70 println!(
71 "KZG verify for {} variables: {} ns",
72 nv,
73 start.elapsed().as_nanos() / repetition as u128
74 );
75 }
76
77 println!("====================================");
78 }
79
80 Ok(())
81}