Skip to content
Snippets Groups Projects

benchmark the recoding process

Merged STEVAN Antoine requested to merge bench-recoding into main
2 files
+ 60
0
Compare changes
  • Side-by-side
  • Inline
Files
2
+ 55
0
use ark_bls12_381::Bls12_381;
use ark_ec::pairing::Pairing;
use ark_ff::PrimeField;
use ark_std::{One, Zero};
use rand::Rng;
use komodo::{fec::Shard, field};
use criterion::{black_box, criterion_group, criterion_main, Criterion};
fn to_curve<E: Pairing>(n: u128) -> E::ScalarField {
E::ScalarField::from_le_bytes_mod_order(&n.to_le_bytes())
}
fn create_fake_shard<E: Pairing>(
linear_combination: &[E::ScalarField],
nb_bytes: usize,
) -> Shard<E> {
let mut rng = rand::thread_rng();
let bytes: Vec<u8> = (0..nb_bytes).map(|_| rng.gen::<u8>()).collect();
let bytes = field::split_data_into_field_elements::<E>(&bytes, 1);
Shard {
k: 2,
linear_combination: linear_combination.to_vec(),
hash: vec![],
bytes,
size: 0,
}
}
fn bench_template<E: Pairing>(c: &mut Criterion, nb_bytes: usize) {
let b1: Shard<E> =
create_fake_shard(&[E::ScalarField::one(), E::ScalarField::zero()], nb_bytes);
let b2: Shard<E> =
create_fake_shard(&[E::ScalarField::zero(), E::ScalarField::one()], nb_bytes);
let mut rng = rand::thread_rng();
let alpha = to_curve::<E>(black_box(rng.gen::<u128>()));
let beta = to_curve::<E>(black_box(rng.gen::<u128>()));
c.bench_function(&format!("recoding {} bytes", nb_bytes), |b| {
b.iter(|| b1.combine(alpha, &b2, beta))
});
}
pub fn criterion_benchmark(c: &mut Criterion) {
for nb_bytes in [3, 3_000, 3_000_000] {
bench_template::<Bls12_381>(c, nb_bytes);
}
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);
Loading