Field arithmetic benchmark improvements (#200)

* Field arithmetic benchmark improvements

* Separate throughput/latency benchmarks

* Widen addition throughput benchmark
This commit is contained in:
Jakub Nabaglo 2021-08-24 11:56:00 -07:00 committed by GitHub
parent 002a0ffc06
commit 6949d04c72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,3 +1,5 @@
#![feature(destructuring_assignment)]
use criterion::{criterion_group, criterion_main, BatchSize, Criterion};
use plonky2::field::crandall_field::CrandallField;
use plonky2::field::extension_field::quartic::QuarticCrandallField;
@ -5,10 +7,78 @@ use plonky2::field::field_types::Field;
use tynm::type_name;
pub(crate) fn bench_field<F: Field>(c: &mut Criterion) {
c.bench_function(&format!("mul<{}>", type_name::<F>()), |b| {
c.bench_function(&format!("mul-throughput<{}>", type_name::<F>()), |b| {
b.iter_batched(
|| (F::rand(), F::rand()),
|(x, y)| x * y,
|| (F::rand(), F::rand(), F::rand(), F::rand()),
|(mut x, mut y, mut z, mut w)| {
for _ in 0..25 {
(x, y, z, w) = (x * y, y * z, z * w, w * x);
}
(x, y, z, w)
},
BatchSize::SmallInput,
)
});
c.bench_function(&format!("mul-latency<{}>", type_name::<F>()), |b| {
b.iter_batched(
|| F::rand(),
|(mut x)| {
for _ in 0..100 {
x = x * x;
}
x
},
BatchSize::SmallInput,
)
});
c.bench_function(&format!("add-throughput<{}>", type_name::<F>()), |b| {
b.iter_batched(
|| {
(
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
F::rand(),
)
},
|(mut a, mut b, mut c, mut d, mut e, mut f, mut g, mut h, mut i, mut j)| {
for _ in 0..10 {
(a, b, c, d, e, f, g, h, i, j) = (
a + b,
b + c,
c + d,
d + e,
e + f,
f + g,
g + h,
h + i,
i + j,
j + a,
);
}
(a, b, c, d, e, f, g, h, i, j)
},
BatchSize::SmallInput,
)
});
c.bench_function(&format!("add-latency<{}>", type_name::<F>()), |b| {
b.iter_batched(
|| F::rand(),
|mut x| {
for _ in 0..100 {
x = x + x;
}
x
},
BatchSize::SmallInput,
)
});