Browse Source

utils: bench vector Fp decode

Lennart Braun 2 years ago
parent
commit
44d0e4b217
1 changed files with 35 additions and 19 deletions
  1. 35 19
      utils/benches/field.rs

+ 35 - 19
utils/benches/field.rs

@@ -1,31 +1,47 @@
 use bincode;
-use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
 use ff::Field;
 use rand::thread_rng;
 use utils::field::Fp;
 
+const VEC_LENS: [usize; 4] = [1, 4, 16, 64];
+
 pub fn bench_encode(c: &mut Criterion) {
-    c.bench_function("Fp::encode", |b| {
-        let x = Fp::random(thread_rng());
-        b.iter(|| {
-            black_box(
-                bincode::encode_to_vec(x, bincode::config::standard()).expect("encode failed"),
-            )
-        });
-    });
+    for vec_len in VEC_LENS {
+        c.bench_with_input(
+            BenchmarkId::new("Fp::encode", vec_len),
+            &vec_len,
+            |b, &vec_len| {
+                let x: Vec<_> = (0..vec_len).map(|_| Fp::random(thread_rng())).collect();
+                b.iter(|| {
+                    black_box(
+                        bincode::encode_to_vec(&x, bincode::config::standard())
+                            .expect("encode failed"),
+                    )
+                });
+            },
+        );
+    }
 }
 
 pub fn bench_decode(c: &mut Criterion) {
-    c.bench_function("Fp::decode", |b| {
-        let x = Fp::random(thread_rng());
-        let bytes = bincode::encode_to_vec(x, bincode::config::standard()).expect("encode failed");
-        b.iter(|| {
-            black_box(
-                bincode::decode_from_slice::<Fp, _>(&bytes, bincode::config::standard())
-                    .expect("decode failed"),
-            )
-        });
-    });
+    for vec_len in VEC_LENS {
+        c.bench_with_input(
+            BenchmarkId::new("Fp::decode", vec_len),
+            &vec_len,
+            |b, &vec_len| {
+                let x: Vec<_> = (0..vec_len).map(|_| Fp::random(thread_rng())).collect();
+                let bytes =
+                    bincode::encode_to_vec(&x, bincode::config::standard()).expect("encode failed");
+                b.iter(|| {
+                    black_box(
+                        bincode::decode_from_slice::<Vec<Fp>, _>(&bytes, bincode::config::standard())
+                            .expect("decode failed"),
+                    )
+                });
+            },
+        );
+    }
 }
 
 criterion_group!(benches, bench_encode, bench_decode);