From 32cf0558fa8f5f67b251b9ff6c1e8cf94f0d2f3e Mon Sep 17 00:00:00 2001 From: arnaucube Date: Sun, 19 Jul 2020 12:12:39 +0200 Subject: [PATCH] Add benchmarks (49x improvement with ff) Tested on a Intel(R) Core(TM) i5-6300U CPU @ 2.40GHz, with 16GB of RAM. - Old (using nnum-bigint): hash time: [5.9258 ms 5.9407 ms 5.9587 ms] - New (using ff): hash time: [120.12 us 121.08 us 122.30 us] --- Cargo.toml | 6 ++++++ README.md | 5 +++++ benches/bench_poseidon_hash.rs | 30 ++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 benches/bench_poseidon_hash.rs diff --git a/Cargo.toml b/Cargo.toml index 6bbe2da..7049207 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,3 +12,9 @@ readme = "README.md" ff = {package="ff_ce" , version="0.11", features = ["derive"]} rand = "0.4" +[dev-dependencies] +criterion = "0.3" + +[[bench]] +name = "bench_poseidon_hash" +harness = false diff --git a/README.md b/README.md index 33ddf33..651d35c 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,8 @@ Compatible with the Poseidon Go implementation done in https://github.com/iden3/ ## Warning Do not use in production + +## Benchmarks +``` +hash time: [120.12 us 121.08 us 122.30 us] +``` diff --git a/benches/bench_poseidon_hash.rs b/benches/bench_poseidon_hash.rs new file mode 100644 index 0000000..6420ce2 --- /dev/null +++ b/benches/bench_poseidon_hash.rs @@ -0,0 +1,30 @@ +use criterion::{black_box, criterion_group, criterion_main, Criterion}; + +extern crate rand; +#[macro_use] +extern crate ff; +use ff::*; + +use poseidon_rs::Poseidon; + +fn criterion_benchmark(c: &mut Criterion) { + let b1: poseidon_rs::Fr = poseidon_rs::Fr::from_str( + "12242166908188651009877250812424843524687801523336557272219921456462821518061", + ) + .unwrap(); + let b2: poseidon_rs::Fr = poseidon_rs::Fr::from_str( + "12242166908188651009877250812424843524687801523336557272219921456462821518061", + ) + .unwrap(); + let mut big_arr: Vec = Vec::new(); + big_arr.push(b1.clone()); + big_arr.push(b2.clone()); + let poseidon = Poseidon::new(); + + c.bench_function("hash", |b| { + b.iter(|| poseidon.hash(big_arr.clone()).unwrap()) + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches);