From d41924dad3b4e0822dc5a649a97c6a4372db19fc Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Wed, 18 Aug 2021 09:43:19 -0700 Subject: [PATCH] Benchmark transpose (#190) * Benchmark transpose * fmt --- Cargo.toml | 4 ++++ benches/transpose.rs | 26 ++++++++++++++++++++++++++ src/util/mod.rs | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 benches/transpose.rs diff --git a/Cargo.toml b/Cargo.toml index 420aafc8..d8b84356 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,10 @@ harness = false name = "ffts" harness = false +[[bench]] +name = "transpose" +harness = false + [profile.release] opt-level = 3 #lto = "fat" diff --git a/benches/transpose.rs b/benches/transpose.rs new file mode 100644 index 00000000..b8ef43e0 --- /dev/null +++ b/benches/transpose.rs @@ -0,0 +1,26 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use plonky2::field::crandall_field::CrandallField; +use plonky2::field::field_types::Field; +use plonky2::util::transpose; + +fn criterion_benchmark(c: &mut Criterion) { + type F = CrandallField; + + // In practice, for the matrices we care about, each row is associated with a polynomial of + // degree 2^13, and has been low-degree extended to a length of 2^16. + const WIDTH: usize = 1 << 16; + + let mut group = c.benchmark_group("transpose"); + + // We have matrices with various numbers of polynomials. For example, the witness matrix + // involves 100+ polynomials. + for height in [5, 50, 100, 150] { + group.bench_with_input(BenchmarkId::from_parameter(height), &height, |b, _| { + let matrix = (0..height).map(|_| F::rand_vec(WIDTH)).collect::>(); + b.iter(|| transpose(&matrix)); + }); + } +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches); diff --git a/src/util/mod.rs b/src/util/mod.rs index b468ab35..853e09f1 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -35,7 +35,7 @@ pub(crate) fn transpose_poly_values(polys: Vec>) - transpose(&poly_values) } -pub(crate) fn transpose(matrix: &[Vec]) -> Vec> { +pub fn transpose(matrix: &[Vec]) -> Vec> { let l = matrix.len(); let w = matrix[0].len(); let mut transposed = vec![vec![F::ZERO; l]; w];