lighthouse/eth2/utils/tree_hash/benches/benches.rs
Paul Hauner 4f45bf2255
Tree hash benches (#486)
* Add initial tree hash benches

* Add tree hash example

* Use lazy static in tree hash benches
2019-08-05 18:06:50 +10:00

57 lines
1.8 KiB
Rust

#[macro_use]
extern crate lazy_static;
use criterion::Criterion;
use criterion::{black_box, criterion_group, criterion_main, Benchmark};
use tree_hash::TreeHash;
use types::test_utils::{generate_deterministic_keypairs, TestingBeaconStateBuilder};
use types::{BeaconState, EthSpec, Keypair, MainnetEthSpec, MinimalEthSpec};
lazy_static! {
static ref KEYPAIRS: Vec<Keypair> = { generate_deterministic_keypairs(300_000) };
}
fn build_state<T: EthSpec>(validator_count: usize) -> BeaconState<T> {
let (state, _keypairs) = TestingBeaconStateBuilder::from_keypairs(
KEYPAIRS[0..validator_count].to_vec(),
&T::default_spec(),
)
.build();
assert_eq!(state.validators.len(), validator_count);
assert_eq!(state.balances.len(), validator_count);
assert!(state.previous_epoch_attestations.is_empty());
assert!(state.current_epoch_attestations.is_empty());
assert!(state.eth1_data_votes.is_empty());
assert!(state.historical_roots.is_empty());
state
}
fn bench_suite<T: EthSpec>(c: &mut Criterion, spec_desc: &str, validator_count: usize) {
let state = build_state::<T>(validator_count);
c.bench(
&format!("{}/{}_validators", spec_desc, validator_count),
Benchmark::new("genesis_state", move |b| {
b.iter_batched_ref(
|| state.clone(),
|state| black_box(state.tree_hash_root()),
criterion::BatchSize::SmallInput,
)
})
.sample_size(10),
);
}
fn all_benches(c: &mut Criterion) {
bench_suite::<MinimalEthSpec>(c, "minimal", 100_000);
bench_suite::<MinimalEthSpec>(c, "minimal", 300_000);
bench_suite::<MainnetEthSpec>(c, "mainnet", 100_000);
bench_suite::<MainnetEthSpec>(c, "mainnet", 300_000);
}
criterion_group!(benches, all_benches,);
criterion_main!(benches);