Files
wifi-densepose/crates/ruvector-core/benches/quantization_bench.rs
ruv d803bfe2b1 Squashed 'vendor/ruvector/' content from commit b64c2172
git-subtree-dir: vendor/ruvector
git-subtree-split: b64c21726f2bb37286d9ee36a7869fef60cc6900
2026-02-28 14:39:40 -05:00

78 lines
2.5 KiB
Rust

use criterion::{black_box, criterion_group, criterion_main, BenchmarkId, Criterion};
use ruvector_core::quantization::*;
fn bench_scalar_quantization(c: &mut Criterion) {
let mut group = c.benchmark_group("scalar_quantization");
for size in [128, 384, 768, 1536].iter() {
let vector: Vec<f32> = (0..*size).map(|i| i as f32 * 0.1).collect();
group.bench_with_input(BenchmarkId::new("encode", size), size, |bench, _| {
bench.iter(|| ScalarQuantized::quantize(black_box(&vector)));
});
let quantized = ScalarQuantized::quantize(&vector);
group.bench_with_input(BenchmarkId::new("decode", size), size, |bench, _| {
bench.iter(|| quantized.reconstruct());
});
let quantized2 = ScalarQuantized::quantize(&vector);
group.bench_with_input(BenchmarkId::new("distance", size), size, |bench, _| {
bench.iter(|| quantized.distance(black_box(&quantized2)));
});
}
group.finish();
}
fn bench_binary_quantization(c: &mut Criterion) {
let mut group = c.benchmark_group("binary_quantization");
for size in [128, 384, 768, 1536].iter() {
let vector: Vec<f32> = (0..*size)
.map(|i| if i % 2 == 0 { 1.0 } else { -1.0 })
.collect();
group.bench_with_input(BenchmarkId::new("encode", size), size, |bench, _| {
bench.iter(|| BinaryQuantized::quantize(black_box(&vector)));
});
let quantized = BinaryQuantized::quantize(&vector);
group.bench_with_input(BenchmarkId::new("decode", size), size, |bench, _| {
bench.iter(|| quantized.reconstruct());
});
let quantized2 = BinaryQuantized::quantize(&vector);
group.bench_with_input(
BenchmarkId::new("hamming_distance", size),
size,
|bench, _| {
bench.iter(|| quantized.distance(black_box(&quantized2)));
},
);
}
group.finish();
}
fn bench_quantization_compression_ratio(c: &mut Criterion) {
let dimensions = 384;
let vector: Vec<f32> = (0..dimensions).map(|i| i as f32 * 0.01).collect();
c.bench_function("scalar_vs_binary_encoding", |b| {
b.iter(|| {
let scalar = ScalarQuantized::quantize(black_box(&vector));
let binary = BinaryQuantized::quantize(black_box(&vector));
(scalar, binary)
});
});
}
criterion_group!(
benches,
bench_scalar_quantization,
bench_binary_quantization,
bench_quantization_compression_ratio
);
criterion_main!(benches);