Skip to content

Commit 64212a2

Browse files
committed
chore: add fast_mul benchmark
1 parent 2d8892e commit 64212a2

File tree

2 files changed

+52
-3
lines changed

2 files changed

+52
-3
lines changed

crates/math/benches/polynomials/polynomial.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
use super::utils::{rand_field_elements, rand_poly, FE};
1+
use super::utils::{rand_complex_mersenne_poly, rand_field_elements, rand_poly, FE};
22
use const_random::const_random;
33
use core::hint::black_box;
44
use criterion::Criterion;
5-
use lambdaworks_math::polynomial::Polynomial;
5+
use lambdaworks_math::{
6+
field::fields::mersenne31::extensions::Degree2ExtensionField, polynomial::Polynomial,
7+
};
68

79
pub fn polynomial_benchmarks(c: &mut Criterion) {
810
let mut group = c.benchmark_group("Polynomial");
@@ -42,6 +44,25 @@ pub fn polynomial_benchmarks(c: &mut Criterion) {
4244
let y_poly = rand_poly(order);
4345
bench.iter(|| black_box(&x_poly) * black_box(&y_poly));
4446
});
47+
group.bench_function("fast mul", |bench| {
48+
let x_poly = rand_complex_mersenne_poly(order as u32);
49+
let y_poly = rand_complex_mersenne_poly(order as u32);
50+
bench.iter(|| black_box(&x_poly) * black_box(&y_poly));
51+
});
52+
53+
let big_order = 9;
54+
let x_poly = rand_complex_mersenne_poly(big_order);
55+
let y_poly = rand_complex_mersenne_poly(big_order);
56+
group.bench_function("fast_mul big poly", |bench| {
57+
bench.iter(|| {
58+
black_box(&x_poly)
59+
.fast_multiplication::<Degree2ExtensionField>(black_box(&y_poly))
60+
.unwrap()
61+
});
62+
});
63+
group.bench_function("slow mul big poly", |bench| {
64+
bench.iter(|| black_box(&x_poly) * black_box(&y_poly));
65+
});
4566

4667
group.bench_function("div", |bench| {
4768
let x_poly = rand_poly(order);

crates/math/benches/polynomials/utils.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
use const_random::const_random;
22
use lambdaworks_math::{
3-
field::fields::u64_prime_field::{U64FieldElement, U64PrimeField},
3+
field::{
4+
element::FieldElement,
5+
fields::{
6+
mersenne31::{extensions::Degree2ExtensionField, field::Mersenne31Field},
7+
u64_prime_field::{U64FieldElement, U64PrimeField},
8+
},
9+
},
410
polynomial::{
511
dense_multilinear_poly::DenseMultilinearPolynomial,
612
sparse_multilinear_poly::SparseMultilinearPolynomial, Polynomial,
@@ -36,6 +42,28 @@ pub fn rand_field_elements(order: u64) -> Vec<FE> {
3642
pub fn rand_poly(order: u64) -> Polynomial<FE> {
3743
Polynomial::new(&rand_field_elements(order))
3844
}
45+
#[allow(dead_code)]
46+
#[inline(never)]
47+
#[export_name = "u64_utils::rand_complex_mersenne_field_elements"]
48+
pub fn rand_complex_mersenne_field_elements(
49+
order: u32,
50+
) -> Vec<FieldElement<Degree2ExtensionField>> {
51+
let mut result = Vec::with_capacity(1 << order);
52+
for _ in 0..result.capacity() {
53+
result.push(FieldElement::<Degree2ExtensionField>::new([
54+
FieldElement::<Mersenne31Field>::new(random()),
55+
FieldElement::<Mersenne31Field>::new(random()),
56+
]));
57+
}
58+
result
59+
}
60+
61+
#[allow(dead_code)]
62+
#[inline(never)]
63+
#[export_name = "u64_utils::rand_complex_mersenne_poly"]
64+
pub fn rand_complex_mersenne_poly(order: u32) -> Polynomial<FieldElement<Degree2ExtensionField>> {
65+
Polynomial::new(&rand_complex_mersenne_field_elements(order))
66+
}
3967

4068
#[allow(dead_code)]
4169
#[inline(never)]

0 commit comments

Comments
 (0)