Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
This commit is contained in:
74
crates/ruvector-core/benches/distance_metrics.rs
Normal file
74
crates/ruvector-core/benches/distance_metrics.rs
Normal file
@@ -0,0 +1,74 @@
|
||||
use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
|
||||
use ruvector_core::distance::*;
|
||||
use ruvector_core::types::DistanceMetric;
|
||||
|
||||
fn bench_euclidean(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("euclidean_distance");
|
||||
|
||||
for size in [128, 384, 768, 1536].iter() {
|
||||
let a: Vec<f32> = (0..*size).map(|i| i as f32).collect();
|
||||
let b: Vec<f32> = (0..*size).map(|i| (i + 1) as f32).collect();
|
||||
|
||||
group.bench_with_input(BenchmarkId::from_parameter(size), size, |bench, _| {
|
||||
bench.iter(|| euclidean_distance(black_box(&a), black_box(&b)));
|
||||
});
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_cosine(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("cosine_distance");
|
||||
|
||||
for size in [128, 384, 768, 1536].iter() {
|
||||
let a: Vec<f32> = (0..*size).map(|i| i as f32).collect();
|
||||
let b: Vec<f32> = (0..*size).map(|i| (i + 1) as f32).collect();
|
||||
|
||||
group.bench_with_input(BenchmarkId::from_parameter(size), size, |bench, _| {
|
||||
bench.iter(|| cosine_distance(black_box(&a), black_box(&b)));
|
||||
});
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_dot_product(c: &mut Criterion) {
|
||||
let mut group = c.benchmark_group("dot_product_distance");
|
||||
|
||||
for size in [128, 384, 768, 1536].iter() {
|
||||
let a: Vec<f32> = (0..*size).map(|i| i as f32).collect();
|
||||
let b: Vec<f32> = (0..*size).map(|i| (i + 1) as f32).collect();
|
||||
|
||||
group.bench_with_input(BenchmarkId::from_parameter(size), size, |bench, _| {
|
||||
bench.iter(|| dot_product_distance(black_box(&a), black_box(&b)));
|
||||
});
|
||||
}
|
||||
|
||||
group.finish();
|
||||
}
|
||||
|
||||
fn bench_batch_distances(c: &mut Criterion) {
|
||||
let query: Vec<f32> = (0..384).map(|i| i as f32).collect();
|
||||
let vectors: Vec<Vec<f32>> = (0..1000)
|
||||
.map(|_| (0..384).map(|i| (i as f32) * 1.1).collect())
|
||||
.collect();
|
||||
|
||||
c.bench_function("batch_distances_1000x384", |b| {
|
||||
b.iter(|| {
|
||||
batch_distances(
|
||||
black_box(&query),
|
||||
black_box(&vectors),
|
||||
DistanceMetric::Cosine,
|
||||
)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
criterion_group!(
|
||||
benches,
|
||||
bench_euclidean,
|
||||
bench_cosine,
|
||||
bench_dot_product,
|
||||
bench_batch_distances
|
||||
);
|
||||
criterion_main!(benches);
|
||||
Reference in New Issue
Block a user