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::{rc::Rc, test_rng};
5use pcs::{
6 prelude::{MultilinearKzgPCS, PCSError, PolynomialCommitmentScheme},
7 StructuredReferenceString,
8};
9use std::time::Instant;
10
11fn main() -> Result<(), PCSError> {
12 bench_pcs()
13}
14
15fn bench_pcs() -> Result<(), PCSError> {
16 let mut rng = test_rng();
17
18 // normal polynomials
19 let uni_params = MultilinearKzgPCS::<Bls12_381>::gen_srs_for_testing(&mut rng, 18)?;
20
21 for nv in 4..19 {
22 let repetition = if nv < 10 {
23 100
24 } else if nv < 20 {
25 50
26 } else {
27 10
28 };
29
30 let poly = Rc::new(DenseMultilinearExtension::rand(nv, &mut rng));
31 let (ml_ck, ml_vk) = uni_params.0.trim(nv)?;
32 let (uni_ck, uni_vk) = uni_params.1.trim(nv)?;
33 let ck = (ml_ck, uni_ck);
34 let vk = (ml_vk, uni_vk);
35
36 let point: Vec<_> = (0..nv).map(|_| Fr::rand(&mut rng)).collect();
37
38 // commit
39 let com = {
40 let start = Instant::now();
41 for _ in 0..repetition {
42 let _commit = MultilinearKzgPCS::commit(&ck, &poly)?;
43 }
44
45 println!(
46 "KZG commit for {} variables: {} ns",
47 nv,
48 start.elapsed().as_nanos() / repetition as u128
49 );
50
51 MultilinearKzgPCS::commit(&ck, &poly)?
52 };
53
54 // open
55 let (proof, value) = {
56 let start = Instant::now();
57 for _ in 0..repetition {
58 let _open = MultilinearKzgPCS::open(&ck, &poly, &point)?;
59 }
60
61 println!(
62 "KZG open for {} variables: {} ns",
63 nv,
64 start.elapsed().as_nanos() / repetition as u128
65 );
66 MultilinearKzgPCS::open(&ck, &poly, &point)?
67 };
68
69 // verify
70 {
71 let start = Instant::now();
72 for _ in 0..repetition {
73 assert!(MultilinearKzgPCS::verify(
74 &vk, &com, &point, &value, &proof
75 )?);
76 }
77 println!(
78 "KZG verify for {} variables: {} ns",
79 nv,
80 start.elapsed().as_nanos() / repetition as u128
81 );
82 }
83
84 println!("====================================");
85 }
86
87 Ok(())
88}