-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy patheval_sq.rs
More file actions
50 lines (39 loc) · 1.34 KB
/
eval_sq.rs
File metadata and controls
50 lines (39 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#![allow(dead_code)]
#[path = "common.rs"]
mod common;
use anyhow::Result;
use clap::Parser;
use std::time::Instant;
use vq::{Quantizer, ScalarQuantizer};
#[derive(Parser)]
#[command(name = "eval_sq")]
#[command(about = "Evaluate Scalar Quantizer performance")]
struct Args {
#[arg(long, default_value_t = common::SEED)]
seed: u64,
#[arg(long, default_value_t = common::DIM)]
dim: usize,
#[arg(long, default_value_t = 256)]
levels: usize,
}
fn main() -> Result<()> {
let args = Args::parse();
println!("Scalar Quantizer Evaluation");
println!("===========================");
for &n_samples in &common::NUM_SAMPLES {
println!("\nSamples: {}", n_samples);
let original_data = common::generate_synthetic_data(n_samples, args.dim, args.seed);
let start = Instant::now();
let sq = ScalarQuantizer::new(0.0, 1.0, args.levels)?;
let training_time = start.elapsed().as_millis() as f64;
let start = Instant::now();
let _quantized: Vec<Vec<u8>> = original_data
.iter()
.filter_map(|vec| sq.quantize(&vec.data).ok())
.collect();
let quantization_time = start.elapsed().as_millis() as f64;
println!(" Training time: {} ms", training_time);
println!(" Quantization time: {} ms", quantization_time);
}
Ok(())
}