Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
99
crates/ruvector-math/benches/spectral.rs
Normal file
99
crates/ruvector-math/benches/spectral.rs
Normal file
@@ -0,0 +1,99 @@
|
||||
//! Benchmarks for spectral methods
|
||||
|
||||
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
|
||||
use ruvector_math::spectral::{ChebyshevExpansion, ChebyshevPolynomial};
|
||||
|
||||
fn bench_chebyshev_eval(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("chebyshev_eval");
|
||||
|
||||
for degree in [10, 20, 50, 100] {
|
||||
group.bench_with_input(
|
||||
BenchmarkId::new("degree", degree),
|
||||
°ree,
|
||||
|bench, °| {
|
||||
let poly = ChebyshevPolynomial::new(deg);
|
||||
bench.iter(|| poly.eval(black_box(0.5)));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_chebyshev_eval_all(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("chebyshev_eval_all");
|
||||
|
||||
for degree in [10, 20, 50, 100] {
|
||||
group.bench_with_input(
|
||||
BenchmarkId::new("degree", degree),
|
||||
°ree,
|
||||
|bench, °| {
|
||||
bench.iter(|| ChebyshevPolynomial::eval_all(black_box(0.5), black_box(deg)));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_chebyshev_expansion(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("chebyshev_expansion");
|
||||
|
||||
for degree in [10, 20, 50] {
|
||||
group.bench_with_input(
|
||||
BenchmarkId::new("from_function", degree),
|
||||
°ree,
|
||||
|bench, °| {
|
||||
bench.iter(|| ChebyshevExpansion::from_function(|x| x.sin(), black_box(deg)));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_heat_kernel(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("heat_kernel");
|
||||
|
||||
for degree in [10, 20, 50] {
|
||||
for t in [0.1, 1.0, 10.0] {
|
||||
group.bench_with_input(
|
||||
BenchmarkId::new(format!("deg={}_t={}", degree, t), degree),
|
||||
&(degree, t),
|
||||
|bench, &(deg, t)| {
|
||||
bench.iter(|| ChebyshevExpansion::heat_kernel(black_box(t), black_box(deg)));
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_clenshaw_eval(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("clenshaw_eval");
|
||||
|
||||
for degree in [10, 20, 50, 100] {
|
||||
let expansion = ChebyshevExpansion::from_function(|x| x.sin(), degree);
|
||||
|
||||
group.bench_with_input(
|
||||
BenchmarkId::new("degree", degree),
|
||||
&expansion,
|
||||
|bench, exp| {
|
||||
bench.iter(|| exp.eval(black_box(0.5)));
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
criterion_group!(
|
||||
benches,
|
||||
bench_chebyshev_eval,
|
||||
bench_chebyshev_eval_all,
|
||||
bench_chebyshev_expansion,
|
||||
bench_heat_kernel,
|
||||
bench_clenshaw_eval,
|
||||
);
|
||||
criterion_main!(benches);
|
||||
Reference in New Issue
Block a user