arnaucube
arnaucube/hyperplonkPublic Self-hosted repository
hyperplonk/poly-iop/benches/bench.rs
poly-iop/benches/bench.rsRaw
  1use std::time::Instant;
  2
  3use ark_bls12_381::Fr;
  4use ark_std::test_rng;
  5use poly_iop::{PolyIOP, PolyIOPErrors, SumCheck, VirtualPolynomial, ZeroCheck};
  6
  7fn main() -> Result<(), PolyIOPErrors> {
  8    bench_sum_check()?;
  9    println!("\n\n");
 10    bench_zero_check()
 11}
 12
 13fn bench_sum_check() -> Result<(), PolyIOPErrors> {
 14    let mut rng = test_rng();
 15    for degree in 2..4 {
 16        for nv in 4..25 {
 17            let repetition = if nv < 10 {
 18                100
 19            } else if nv < 20 {
 20                50
 21            } else {
 22                10
 23            };
 24
 25            let (poly, asserted_sum) =
 26                VirtualPolynomial::rand(nv, (degree, degree + 1), 2, &mut rng)?;
 27            let poly_info = poly.domain_info.clone();
 28            let proof = {
 29                let start = Instant::now();
 30                let mut transcript = <PolyIOP<Fr> as SumCheck<Fr>>::init_transcript();
 31                let proof = <PolyIOP<Fr> as SumCheck<Fr>>::prove(&poly, &mut transcript)?;
 32
 33                println!(
 34                    "sum check proving time for {} variables and {} degree: {} ns",
 35                    nv,
 36                    degree,
 37                    start.elapsed().as_nanos() / repetition as u128
 38                );
 39                proof
 40            };
 41
 42            {
 43                let start = Instant::now();
 44                let mut transcript = <PolyIOP<Fr> as SumCheck<Fr>>::init_transcript();
 45                let subclaim = <PolyIOP<Fr> as SumCheck<Fr>>::verify(
 46                    asserted_sum,
 47                    &proof,
 48                    &poly_info,
 49                    &mut transcript,
 50                )?;
 51                assert!(
 52                    poly.evaluate(&subclaim.point).unwrap() == subclaim.expected_evaluation,
 53                    "wrong subclaim"
 54                );
 55
 56                println!(
 57                    "sum check verification time for {} variables: {} ns",
 58                    nv,
 59                    start.elapsed().as_nanos() / repetition as u128
 60                );
 61            }
 62
 63            println!("====================================");
 64        }
 65    }
 66    Ok(())
 67}
 68
 69fn bench_zero_check() -> Result<(), PolyIOPErrors> {
 70    let mut rng = test_rng();
 71    for degree in 2..4 {
 72        for nv in 4..20 {
 73            let repetition = if nv < 10 {
 74                100
 75            } else if nv < 20 {
 76                50
 77            } else {
 78                10
 79            };
 80
 81            let poly = VirtualPolynomial::rand_zero(nv, (degree, degree + 1), 2, &mut rng)?;
 82            let poly_info = poly.domain_info.clone();
 83            let proof = {
 84                let start = Instant::now();
 85                let mut transcript = <PolyIOP<Fr> as ZeroCheck<Fr>>::init_transcript();
 86                transcript.append_message(b"testing", b"initializing transcript for testing")?;
 87                let proof = <PolyIOP<Fr> as ZeroCheck<Fr>>::prove(&poly, &mut transcript)?;
 88
 89                println!(
 90                    "zero check proving time for {} variables and {} degree: {} ns",
 91                    nv,
 92                    degree,
 93                    start.elapsed().as_nanos() / repetition as u128
 94                );
 95                proof
 96            };
 97
 98            {
 99                let start = Instant::now();
100                let mut transcript = <PolyIOP<Fr> as ZeroCheck<Fr>>::init_transcript();
101                transcript.append_message(b"testing", b"initializing transcript for testing")?;
102                let subclaim =
103                    <PolyIOP<Fr> as ZeroCheck<Fr>>::verify(&proof, &poly_info, &mut transcript)?.0;
104                assert!(
105                    poly.evaluate(&subclaim.point)? == subclaim.expected_evaluation,
106                    "wrong subclaim"
107                );
108                println!(
109                    "zero check verification time for {} variables: {} ns",
110                    nv,
111                    start.elapsed().as_nanos() / repetition as u128
112                );
113            }
114
115            println!("====================================");
116        }
117    }
118    Ok(())
119}