From e0c488a21401095ca68d35a922f885f7ce39ec3d Mon Sep 17 00:00:00 2001 From: Fletcher Haynes Date: Thu, 13 Sep 2018 11:53:14 -0700 Subject: [PATCH] Adds a few more benchmarks for poly operators. Changed benchmarks to use a seeded rng for reproducibility. --- benches/bench.rs | 53 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/benches/bench.rs b/benches/bench.rs index 36feaf1..bc67fdb 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -8,13 +8,16 @@ use criterion::Criterion; use pairing::bls12_381::Fr; use threshold_crypto::poly::Poly; +const TEST_DEGREES: [usize; 4] = [5, 10, 20, 40]; +const RNG_SEED: [u32; 4] = [1, 2, 3, 4]; + mod poly_benches { use super::*; - use rand::Rng; + use rand::{Rng, SeedableRng, XorShiftRng}; - // Benchmarks multiplication of two polynomials. + /// Benchmarks multiplication of two polynomials. fn multiplication(c: &mut Criterion) { - let mut rng = rand::thread_rng(); + let mut rng = XorShiftRng::from_seed(RNG_SEED); c.bench_function_over_inputs( "Polynomial multiplication", move |b, &°| { @@ -25,27 +28,61 @@ mod poly_benches { }; b.iter_with_setup(rand_factors, |(lhs, rhs)| &lhs * &rhs) }, - &[5, 10, 20, 40], + &TEST_DEGREES, ); } - // Benchmarks Lagrange interpolation for a polynomial. + /// Benchmarks subtraction of two polynomials + fn subtraction(c: &mut Criterion) { + let mut rng = XorShiftRng::from_seed(RNG_SEED); + c.bench_function_over_inputs( + "Polynomial subtraction", + move |b, &°| { + let rand_factors = || { + let lhs = Poly::random(deg, &mut rng); + let rhs = Poly::random(deg, &mut rng); + (lhs, rhs) + }; + b.iter_with_setup(rand_factors, |(lhs, rhs)| &lhs - &rhs) + }, + &TEST_DEGREES, + ); + } + + /// Benchmarks addition of two polynomials + fn addition(c: &mut Criterion) { + let mut rng = XorShiftRng::from_seed(RNG_SEED); + c.bench_function_over_inputs( + "Polynomial addition", + move |b, &°| { + let rand_factors = || { + let lhs = Poly::random(deg, &mut rng); + let rhs = Poly::random(deg, &mut rng); + (lhs, rhs) + }; + b.iter_with_setup(rand_factors, |(lhs, rhs)| &lhs + &rhs) + }, + &TEST_DEGREES, + ); + } + + /// Benchmarks Lagrange interpolation for a polynomial. fn interpolate(c: &mut Criterion) { - let mut rng = rand::thread_rng(); + let mut rng = XorShiftRng::from_seed(RNG_SEED); c.bench_function_over_inputs( "Polynomial interpolation", move |b, &°| { let rand_samples = || (0..=deg).map(|i| (i, rng.gen::())).collect::>(); b.iter_with_setup(rand_samples, Poly::interpolate) }, - &[5, 10, 20, 40], + &TEST_DEGREES, ); } criterion_group!{ name = poly_benches; config = Criterion::default(); - targets = multiplication, interpolate, + targets = multiplication, interpolate, addition, subtraction, } }