瀏覽代碼

cuckoo: more pos benchmarks

Lennart Braun 2 年之前
父節點
當前提交
4d18b2f1d5
共有 1 個文件被更改,包括 27 次插入8 次删除
  1. 27 8
      cuckoo/benches/cuckoo.rs

+ 27 - 8
cuckoo/benches/cuckoo.rs

@@ -19,9 +19,8 @@ pub fn bench_position_map(c: &mut Criterion) {
     let domain_size = 100_000;
 
     let hash_table = hasher.hash_domain_into_buckets(domain_size);
-    let lookup_table =
-        Hasher::<AesHashFunction<u32>, _>::compute_pos_lookup_table(domain_size, &hash_table);
-    let lookup_table2 =
+    // (ab)use one lookup table to obtain the input pairs for pos
+    let values =
         Hasher::<AesHashFunction<u32>, _>::compute_pos_lookup_table(domain_size, &hash_table);
 
     let pos = |bucket_i: usize, item: u64| -> u64 {
@@ -33,22 +32,42 @@ pub fn bench_position_map(c: &mut Criterion) {
     };
 
     let mut group = c.benchmark_group("position_map");
-    group.bench_function("normal", |b| {
+    group.bench_function("search", |b| {
         b.iter(|| {
             for item in 0..domain_size {
-                for &(bucket_i, _) in lookup_table[item as usize].iter() {
+                for &(bucket_i, _) in values[item as usize].iter() {
                     let idx = pos(bucket_i, item);
                     black_box(idx);
                 }
             }
         })
     });
-    group.bench_function("precomputed", |b| {
+    group.bench_function("lookup", |b| {
+        let pos_lookup_table =
+            Hasher::<AesHashFunction<u32>, _>::compute_pos_lookup_table(domain_size, &hash_table);
+        b.iter(|| {
+            for item in 0..domain_size {
+                for &(bucket_i, _) in values[item as usize].iter() {
+                    let idx = Hasher::<AesHashFunction<u32>, _>::pos_lookup(
+                        &pos_lookup_table,
+                        bucket_i,
+                        item,
+                    );
+                    black_box(idx);
+                }
+            }
+        })
+    });
+    group.bench_function("precomputation+lookup", |b| {
         b.iter(|| {
+            let pos_lookup_table = Hasher::<AesHashFunction<u32>, _>::compute_pos_lookup_table(
+                domain_size,
+                &hash_table,
+            );
             for item in 0..domain_size {
-                for &(bucket_i, _) in lookup_table[item as usize].iter() {
+                for &(bucket_i, _) in values[item as usize].iter() {
                     let idx = Hasher::<AesHashFunction<u32>, _>::pos_lookup(
-                        &lookup_table2,
+                        &pos_lookup_table,
                         bucket_i,
                         item,
                     );