From 4c48ae4d3fe59c70c78f3813d48c209a54664c6e Mon Sep 17 00:00:00 2001
From: Shahar Papini <43779613+spapinistarkware@users.noreply.github.com>
Date: Thu, 21 Mar 2024 09:02:38 +0200
Subject: [PATCH] Fix merkle benchmarks (#517)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This change is [](https://reviewable.io/reviews/starkware-libs/stwo/517)
---
benches/merkle_bench.rs | 38 ++++++++++++++++++++++----------------
1 file changed, 22 insertions(+), 16 deletions(-)
diff --git a/benches/merkle_bench.rs b/benches/merkle_bench.rs
index 202d81fc2..d85bc8e8f 100644
--- a/benches/merkle_bench.rs
+++ b/benches/merkle_bench.rs
@@ -2,13 +2,15 @@
use blake2::{Blake2s256, Digest};
use criterion::measurement::WallTime;
use criterion::{
- criterion_group, criterion_main, BatchSize, BenchmarkGroup, BenchmarkId, Criterion, Throughput,
+ black_box, criterion_group, criterion_main, BatchSize, BenchmarkGroup, BenchmarkId, Criterion,
+ Throughput,
};
use stwo::commitment_scheme::blake2_hash::Blake2sHasher;
use stwo::commitment_scheme::blake3_hash::Blake3Hasher;
use stwo::commitment_scheme::hasher::{Hasher, Name};
use stwo::commitment_scheme::merkle_tree::MerkleTree;
use stwo::core::fields::m31::M31;
+use stwo::core::fields::IntoSlice;
static N_BYTES_U32: usize = 4;
@@ -16,24 +18,28 @@ fn prepare_element_vector(size: usize) -> Vec {
(0..size as u32).map(M31::from_u32_unchecked).collect()
}
-fn merkle_bench(group: &mut BenchmarkGroup<'_, WallTime>, elems: &[M31]) {
+fn merkle_bench(group: &mut BenchmarkGroup<'_, WallTime>, elems: &[M31])
+where
+ M31: IntoSlice<::NativeType>,
+{
let size = elems.len();
- let elems = elems.to_vec();
+ const LOG_N_COLS: usize = 7;
+ let cols: Vec<_> = elems
+ .chunks(size >> LOG_N_COLS)
+ .map(|chunk| chunk.to_vec())
+ .collect();
+ assert_eq!(cols.len(), 1 << LOG_N_COLS);
group.sample_size(10);
group.throughput(Throughput::Bytes((size * N_BYTES_U32) as u64));
- group.bench_with_input(
- BenchmarkId::new(T::Hash::NAME, size),
- &size,
- |b: &mut criterion::Bencher<'_>, &_size| {
- b.iter_batched(
- || -> Vec { elems.clone() },
- |elems| {
- MerkleTree::::commit(vec![elems]);
- },
- BatchSize::LargeInput,
- )
- },
- );
+ group.bench_function(BenchmarkId::new(H::Hash::NAME, size), |b| {
+ b.iter_batched(
+ || cols.clone(),
+ |cols| {
+ black_box(MerkleTree::::commit(black_box(cols)));
+ },
+ BatchSize::LargeInput,
+ )
+ });
}
fn merkle_blake3_benchmark(c: &mut Criterion) {