From 18991cdfbcffc4d245d1d100482901876d9f8b38 Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Fri, 5 Apr 2024 16:05:37 +0200 Subject: [PATCH 1/5] add "commit" to the benchmarks --- Cargo.toml | 4 ++++ benches/commit.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 benches/commit.rs diff --git a/Cargo.toml b/Cargo.toml index c446fa49..108b4085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,3 +33,7 @@ harness = false [[bench]] name = "setup" harness = false + +[[bench]] +name = "commit" +harness = false diff --git a/benches/commit.rs b/benches/commit.rs new file mode 100644 index 00000000..bf87031d --- /dev/null +++ b/benches/commit.rs @@ -0,0 +1,38 @@ +use ark_bls12_381::{Fr, G1Projective}; +use ark_ec::CurveGroup; +use ark_ff::PrimeField; +use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial}; +use ark_std::{ops::Div, test_rng}; + +use criterion::{black_box, criterion_group, criterion_main, Criterion}; + +use komodo::zk; + +fn commit_template<F, G, P>(c: &mut Criterion, nb_bytes: usize) +where + F: PrimeField, + G: CurveGroup<ScalarField = F>, + P: DenseUVPolynomial<F>, + for<'a, 'b> &'a P: Div<&'b P, Output = P>, +{ + let rng = &mut test_rng(); + + let degree = zk::nb_elements_in_setup::<F>(nb_bytes); + + let setup = zk::setup::<_, F, G>(degree, rng).unwrap(); + let polynomial = P::rand(degree, rng); + + c.bench_function( + &format!("commit {} bytes on {}", nb_bytes, std::any::type_name::<F>()), + |b| b.iter(|| zk::commit(&setup, &polynomial)), + ); +} + +fn commit(c: &mut Criterion) { + for n in [1, 2, 4, 8, 16] { + commit_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024)); + } +} + +criterion_group!(benches, commit); +criterion_main!(benches); -- GitLab From 0934c6cb16d4bcd3c74c97bb16a9faa19edf332d Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Fri, 5 Apr 2024 16:30:41 +0200 Subject: [PATCH 2/5] measure the Arkworks commit operation as well --- Cargo.toml | 1 + benches/commit.rs | 52 +++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 108b4085..bf76cdf2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,6 +20,7 @@ tracing = "0.1.40" tracing-subscriber = "0.3.17" [dev-dependencies] +ark-poly-commit = "0.4.0" criterion = "0.3" [[bench]] diff --git a/benches/commit.rs b/benches/commit.rs index bf87031d..e3594da9 100644 --- a/benches/commit.rs +++ b/benches/commit.rs @@ -1,9 +1,11 @@ -use ark_bls12_381::{Fr, G1Projective}; -use ark_ec::CurveGroup; +use ark_bls12_381::{Bls12_381, Fr, G1Projective}; +use ark_ec::{pairing::Pairing, CurveGroup}; use ark_ff::PrimeField; use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial}; use ark_std::{ops::Div, test_rng}; +use ark_poly_commit::kzg10::{Powers, KZG10}; + use criterion::{black_box, criterion_group, criterion_main, Criterion}; use komodo::zk; @@ -23,16 +25,58 @@ where let polynomial = P::rand(degree, rng); c.bench_function( - &format!("commit {} bytes on {}", nb_bytes, std::any::type_name::<F>()), + &format!( + "commit {} bytes on {}", + nb_bytes, + std::any::type_name::<F>() + ), |b| b.iter(|| zk::commit(&setup, &polynomial)), ); } +fn ark_commit_template<E, P>(c: &mut Criterion, nb_bytes: usize) +where + E: Pairing, + P: DenseUVPolynomial<E::ScalarField>, + for<'a, 'b> &'a P: Div<&'b P, Output = P>, +{ + let rng = &mut test_rng(); + + let degree = zk::nb_elements_in_setup::<E::ScalarField>(nb_bytes); + + let setup = KZG10::<E, P>::setup(degree, false, rng).unwrap(); + let powers_of_g = setup.powers_of_g[..=degree].to_vec(); + let powers_of_gamma_g = (0..=degree).map(|i| setup.powers_of_gamma_g[&i]).collect(); + let powers = Powers::<E> { + powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g), + powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g), + }; + let polynomial = P::rand(degree, rng); + + c.bench_function( + &format!( + "commit (arkworks) {} bytes on {}", + nb_bytes, + std::any::type_name::<E>() + ), + |b| b.iter(|| KZG10::commit(&powers, &polynomial, None, None)), + ); +} + fn commit(c: &mut Criterion) { for n in [1, 2, 4, 8, 16] { commit_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024)); } } -criterion_group!(benches, commit); +fn ark_commit(c: &mut Criterion) { + for n in [1, 2, 4, 8, 16] { + ark_commit_template::<Bls12_381, DensePolynomial<<Bls12_381 as Pairing>::ScalarField>>( + c, + black_box(n * 1024), + ); + } +} + +criterion_group!(benches, commit, ark_commit); criterion_main!(benches); -- GitLab From aed74bffd3d96bf5680c88020e498a45f7707db9 Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Fri, 5 Apr 2024 16:50:10 +0200 Subject: [PATCH 3/5] measure the time of an Arkworks setup --- benches/setup.rs | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/benches/setup.rs b/benches/setup.rs index 5ca6b63d..280189df 100644 --- a/benches/setup.rs +++ b/benches/setup.rs @@ -1,7 +1,8 @@ use ark_bls12_381::{Fr, G1Projective}; -use ark_ec::CurveGroup; +use ark_ec::{pairing::Pairing, CurveGroup}; use ark_ff::PrimeField; use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial}; +use ark_poly_commit::kzg10::{self, KZG10}; use ark_serialize::{CanonicalDeserialize, CanonicalSerialize, Compress, Validate}; use ark_std::{ops::Div, test_rng}; @@ -114,11 +115,50 @@ where group.finish(); } +fn ark_setup_template<E, P>(c: &mut Criterion, nb_bytes: usize) +where + E: Pairing, + P: DenseUVPolynomial<E::ScalarField>, + for<'a, 'b> &'a P: Div<&'b P, Output = P>, +{ + let rng = &mut test_rng(); + + let degree = zk::nb_elements_in_setup::<E::ScalarField>(nb_bytes); + + c.bench_function( + &format!( + "setup (arkworks) {} bytes on {}", + nb_bytes, + std::any::type_name::<E>() + ), + |b| { + b.iter(|| { + let setup = KZG10::<E, P>::setup(degree, false, rng).unwrap(); + let powers_of_g = setup.powers_of_g[..=degree].to_vec(); + let powers_of_gamma_g = (0..=degree).map(|i| setup.powers_of_gamma_g[&i]).collect(); + kzg10::Powers::<E> { + powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g), + powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g), + }; + }) + }, + ); +} + fn setup(c: &mut Criterion) { for n in [1, 2, 4, 8, 16] { setup_template::<Fr, G1Projective, DensePolynomial<Fr>>(c, black_box(n * 1024)); } } -criterion_group!(benches, setup); +fn ark_setup(c: &mut Criterion) { + for n in [1, 2, 4, 8, 16] { + ark_setup_template::<Bls12_381, DensePolynomial<<Bls12_381 as Pairing>::ScalarField>>( + c, + black_box(n * 1024), + ); + } +} + +criterion_group!(benches, setup, ark_setup); criterion_main!(benches); -- GitLab From 11433b6c81beec631eca42a88557b3a35d69c53f Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Fri, 5 Apr 2024 16:50:32 +0200 Subject: [PATCH 4/5] compute the degree outside the measurement loop --- benches/setup.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/benches/setup.rs b/benches/setup.rs index 280189df..dee3b8da 100644 --- a/benches/setup.rs +++ b/benches/setup.rs @@ -1,4 +1,4 @@ -use ark_bls12_381::{Fr, G1Projective}; +use ark_bls12_381::{Bls12_381, Fr, G1Projective}; use ark_ec::{pairing::Pairing, CurveGroup}; use ark_ff::PrimeField; use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial}; @@ -21,9 +21,11 @@ where let rng = &mut test_rng(); + let degree = zk::nb_elements_in_setup::<F>(nb_bytes); + group.bench_function( &format!("setup {} on {}", nb_bytes, std::any::type_name::<F>()), - |b| b.iter(|| zk::setup::<_, F, G>(zk::nb_elements_in_setup::<F>(nb_bytes), rng).unwrap()), + |b| b.iter(|| zk::setup::<_, F, G>(degree, rng).unwrap()), ); let setup = zk::setup::<_, F, G>(zk::nb_elements_in_setup::<F>(nb_bytes), rng).unwrap(); -- GitLab From b8a8fb3ba4d1eab17963a2f4ba015b27bad766c8 Mon Sep 17 00:00:00 2001 From: "a.stevan" <antoine.stevan@isae-supaero.fr> Date: Mon, 8 Apr 2024 09:39:46 +0200 Subject: [PATCH 5/5] make Clippy happy --- benches/setup.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benches/setup.rs b/benches/setup.rs index dee3b8da..5ef5d0eb 100644 --- a/benches/setup.rs +++ b/benches/setup.rs @@ -141,7 +141,7 @@ where kzg10::Powers::<E> { powers_of_g: ark_std::borrow::Cow::Owned(powers_of_g), powers_of_gamma_g: ark_std::borrow::Cow::Owned(powers_of_gamma_g), - }; + } }) }, ); -- GitLab