Browse Source

cuckoo: add basic hashing benchmarks

Lennart Braun 2 years ago
parent
commit
2fcb0ec937
3 changed files with 51 additions and 0 deletions
  1. 11 0
      cuckoo/Cargo.toml
  2. 26 0
      cuckoo/benches/cuckoo.rs
  3. 14 0
      cuckoo/benches/hash.rs

+ 11 - 0
cuckoo/Cargo.toml

@@ -10,3 +10,14 @@ aes = "0.8.1"
 libm = "0.2.5"
 rand = "0.8.5"
 rand_chacha = "0.3.1"
+
+[dev-dependencies]
+criterion = "0.4.0"
+
+[[bench]]
+name = "cuckoo"
+harness = false
+
+[[bench]]
+name = "hash"
+harness = false

+ 26 - 0
cuckoo/benches/cuckoo.rs

@@ -0,0 +1,26 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use cuckoo::cuckoo::{Hasher, Parameters};
+use cuckoo::hash::AesHashFunction;
+
+pub fn bench_hash_domain_into_buckets(c: &mut Criterion) {
+    let number_inputs = 1_000;
+    let parameters = Parameters::<AesHashFunction>::sample(number_inputs);
+    let hasher = Hasher::new(parameters);
+    let domain_size = 100_000;
+    c.bench_function("Hasher<AesHashFunction>.hash_domain_into_buckets", |b| {
+        b.iter(|| hasher.hash_domain_into_buckets(black_box(domain_size)))
+    });
+}
+
+pub fn bench_cuckoo_hash_items(c: &mut Criterion) {
+    let number_inputs = 1_000;
+    let parameters = Parameters::<AesHashFunction>::sample(number_inputs);
+    let hasher = Hasher::new(parameters);
+    let items: Vec<u64> = (0..number_inputs as u64).collect();
+    c.bench_function("Hasher<AesHashFunction>.cuckoo_hash_items", |b| {
+        b.iter(|| hasher.cuckoo_hash_items(black_box(&items)))
+    });
+}
+
+criterion_group!(benches, bench_hash_domain_into_buckets, bench_cuckoo_hash_items);
+criterion_main!(benches);

+ 14 - 0
cuckoo/benches/hash.rs

@@ -0,0 +1,14 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use cuckoo::hash::{AesHashFunction, HashFunction};
+
+pub fn bench_hash_range(c: &mut Criterion) {
+    let n = 100_000;
+    let range_size = 10_000;
+    let hash_function = AesHashFunction::sample(range_size);
+    c.bench_function("AesHashFunction.hash_range", |b| {
+        b.iter(|| hash_function.hash_range(black_box(0..n)))
+    });
+}
+
+criterion_group!(benches, bench_hash_range);
+criterion_main!(benches);