Browse Source

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]
feature/ff
arnaucube 3 years ago
parent
commit
32cf0558fa
3 changed files with 41 additions and 0 deletions
  1. +6
    -0
      Cargo.toml
  2. +5
    -0
      README.md
  3. +30
    -0
      benches/bench_poseidon_hash.rs

+ 6
- 0
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

+ 5
- 0
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]
```

+ 30
- 0
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<poseidon_rs::Fr> = 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);

Loading…
Cancel
Save