diff --git a/plonky2/Cargo.toml b/plonky2/Cargo.toml index 466d3df6..28d5b210 100644 --- a/plonky2/Cargo.toml +++ b/plonky2/Cargo.toml @@ -55,3 +55,7 @@ harness = false [[bench]] name = "transpose" harness = false + +[[bench]] +name = "reverse_index_bits" +harness = false diff --git a/plonky2/benches/reverse_index_bits.rs b/plonky2/benches/reverse_index_bits.rs new file mode 100644 index 00000000..90f1e285 --- /dev/null +++ b/plonky2/benches/reverse_index_bits.rs @@ -0,0 +1,30 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use plonky2::field::field_types::Field; +use plonky2::field::goldilocks_field::GoldilocksField; +use plonky2_util::{reverse_index_bits, reverse_index_bits_in_place}; + +type F = GoldilocksField; + +fn benchmark_in_place(c: &mut Criterion) { + let mut group = c.benchmark_group("reverse-index-bits-in-place"); + for width in [1 << 8, 1 << 16, 1 << 24] { + group.bench_with_input(BenchmarkId::from_parameter(width), &width, |b, _| { + let mut values = F::rand_vec(width); + b.iter(|| reverse_index_bits_in_place(&mut values)); + }); + } +} + +fn benchmark_out_of_place(c: &mut Criterion) { + let mut group = c.benchmark_group("reverse-index-bits"); + for width in [1 << 8, 1 << 16, 1 << 24] { + group.bench_with_input(BenchmarkId::from_parameter(width), &width, |b, _| { + let values = F::rand_vec(width); + b.iter(|| reverse_index_bits(&values)); + }); + } +} + +criterion_group!(benches_in_place, benchmark_in_place); +criterion_group!(benches_out_of_place, benchmark_out_of_place); +criterion_main!(benches_in_place, benches_out_of_place);