From 7e4e6bac28900d7e4dddca366b6a64fdf6fa63e9 Mon Sep 17 00:00:00 2001 From: mmagician Date: Sat, 2 Sep 2023 20:45:17 +0200 Subject: [PATCH 1/3] Add a Multi-pairing bench for 1..=5 pairs --- bench-templates/src/macros/pairing.rs | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/bench-templates/src/macros/pairing.rs b/bench-templates/src/macros/pairing.rs index a4337fc5e..fec09fa42 100644 --- a/bench-templates/src/macros/pairing.rs +++ b/bench-templates/src/macros/pairing.rs @@ -85,3 +85,58 @@ macro_rules! pairing_bench { } }; } + +#[macro_export] +macro_rules! multi_pairing_bench { + ($curve:ident) => { + mod multi_pairing { + use super::*; + use ark_std::UniformRand; + fn pairing(c: &mut $crate::criterion::Criterion) { + use ark_ec::{pairing::Pairing, CurveGroup}; + + type G1 = <$curve as Pairing>::G1; + type G2 = <$curve as Pairing>::G2; + type G1Prepared = <$curve as Pairing>::G1Prepared; + type G2Prepared = <$curve as Pairing>::G2Prepared; + + const SAMPLES: usize = 1000; + + let mut rng = ark_std::test_rng(); + + let g1s = (0..SAMPLES).map(|_| G1::rand(&mut rng)).collect::>(); + let g2s = (0..SAMPLES).map(|_| G2::rand(&mut rng)).collect::>(); + let g1s = G1::normalize_batch(&g1s); + let g2s = G2::normalize_batch(&g2s); + let (prepared_1, prepared_2): (Vec, Vec) = g1s + .iter() + .zip(&g2s) + .map(|(g1, g2)| { + let g1: G1Prepared = g1.into(); + let g2: G2Prepared = g2.into(); + (g1, g2) + }) + .unzip(); + let mut i = 0; + let mut pairing = c.benchmark_group(format!("Pairing for {}", stringify!($curve))); + + const NUM_PAIRS: usize = 5; + + for pairs in 1..=NUM_PAIRS { + pairing.bench_function(&format!("Multi Pairing for {} with {} pairs", stringify!($curve), pairs), |b| { + b.iter(|| { + i = (i + 1) % (SAMPLES - NUM_PAIRS); + <$curve as Pairing>::multi_pairing( + g1s[(i)..(i + pairs)].to_vec(), + g2s[(i)..(i + pairs)].to_vec(), + ) + }) + }); + } + } + + $crate::criterion_group!(benches, pairing); + } + }; +} + From cbcdf644a6d1c0062815a7bf1245f6e142954af6 Mon Sep 17 00:00:00 2001 From: mmagician Date: Sat, 2 Sep 2023 23:12:15 +0200 Subject: [PATCH 2/3] Replace pairing with multi-pairing bench, up to 10 pairs --- bench-templates/src/macros/pairing.rs | 49 +-------------------------- 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/bench-templates/src/macros/pairing.rs b/bench-templates/src/macros/pairing.rs index fec09fa42..fbf8fa62c 100644 --- a/bench-templates/src/macros/pairing.rs +++ b/bench-templates/src/macros/pairing.rs @@ -73,54 +73,8 @@ macro_rules! pairing_bench { }) }, ); - pairing.bench_function(&format!("Full Pairing for {}", stringify!($curve)), |b| { - b.iter(|| { - i = (i + 1) % SAMPLES; - <$curve as Pairing>::multi_pairing([g1s[i]], [g2s[i]]) - }) - }); - } - - $crate::criterion_group!(benches, pairing); - } - }; -} - -#[macro_export] -macro_rules! multi_pairing_bench { - ($curve:ident) => { - mod multi_pairing { - use super::*; - use ark_std::UniformRand; - fn pairing(c: &mut $crate::criterion::Criterion) { - use ark_ec::{pairing::Pairing, CurveGroup}; - - type G1 = <$curve as Pairing>::G1; - type G2 = <$curve as Pairing>::G2; - type G1Prepared = <$curve as Pairing>::G1Prepared; - type G2Prepared = <$curve as Pairing>::G2Prepared; - const SAMPLES: usize = 1000; - - let mut rng = ark_std::test_rng(); - - let g1s = (0..SAMPLES).map(|_| G1::rand(&mut rng)).collect::>(); - let g2s = (0..SAMPLES).map(|_| G2::rand(&mut rng)).collect::>(); - let g1s = G1::normalize_batch(&g1s); - let g2s = G2::normalize_batch(&g2s); - let (prepared_1, prepared_2): (Vec, Vec) = g1s - .iter() - .zip(&g2s) - .map(|(g1, g2)| { - let g1: G1Prepared = g1.into(); - let g2: G2Prepared = g2.into(); - (g1, g2) - }) - .unzip(); - let mut i = 0; - let mut pairing = c.benchmark_group(format!("Pairing for {}", stringify!($curve))); - - const NUM_PAIRS: usize = 5; + const NUM_PAIRS: usize = 10; for pairs in 1..=NUM_PAIRS { pairing.bench_function(&format!("Multi Pairing for {} with {} pairs", stringify!($curve), pairs), |b| { @@ -139,4 +93,3 @@ macro_rules! multi_pairing_bench { } }; } - From f30064c443116822103eaff365dc91b1d571fbe4 Mon Sep 17 00:00:00 2001 From: mmagician Date: Sun, 3 Sep 2023 10:01:52 +0200 Subject: [PATCH 3/3] fmt multi pairing bench --- bench-templates/src/macros/pairing.rs | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/bench-templates/src/macros/pairing.rs b/bench-templates/src/macros/pairing.rs index fbf8fa62c..17b5a63ae 100644 --- a/bench-templates/src/macros/pairing.rs +++ b/bench-templates/src/macros/pairing.rs @@ -75,17 +75,24 @@ macro_rules! pairing_bench { ); const NUM_PAIRS: usize = 10; - + for pairs in 1..=NUM_PAIRS { - pairing.bench_function(&format!("Multi Pairing for {} with {} pairs", stringify!($curve), pairs), |b| { - b.iter(|| { - i = (i + 1) % (SAMPLES - NUM_PAIRS); - <$curve as Pairing>::multi_pairing( - g1s[(i)..(i + pairs)].to_vec(), - g2s[(i)..(i + pairs)].to_vec(), - ) - }) - }); + pairing.bench_function( + &format!( + "Multi Pairing for {} with {} pairs", + stringify!($curve), + pairs + ), + |b| { + b.iter(|| { + i = (i + 1) % (SAMPLES - NUM_PAIRS); + <$curve as Pairing>::multi_pairing( + g1s[(i)..(i + pairs)].to_vec(), + g2s[(i)..(i + pairs)].to_vec(), + ) + }) + }, + ); } }