use std::time::Instant;
use crate::quantize::{
fused_q4_0_q8_0_dot_scalar, fused_q4_0_q8_0_parallel_matvec, fused_q8_0_q8_0_dot_scalar,
fused_q8_0_q8_0_parallel_matvec, InterleavedQ4K,
};
#[test]
fn test_f200_simd_backend_detection() {
let backend = crate::quantize::detect_simd_backend();
#[cfg(target_arch = "x86_64")]
{
println!("Detected SIMD backend: {:?}", backend);
if is_x86_feature_detected!("avx2") {
println!(" AVX2: SUPPORTED");
} else {
println!(" AVX2: NOT SUPPORTED");
}
if is_x86_feature_detected!("avx512f") {
println!(" AVX-512F: SUPPORTED");
} else {
println!(" AVX-512F: NOT SUPPORTED");
}
if is_x86_feature_detected!("avx512vnni") {
println!(" AVX-512 VNNI: SUPPORTED");
} else {
println!(" AVX-512 VNNI: NOT SUPPORTED");
}
}
let backend_str = format!("{:?}", backend);
assert!(!backend_str.is_empty());
}
#[test]
#[cfg(target_arch = "x86_64")]
fn test_f201_avx2_large_vector_path() {
if !is_x86_feature_detected!("avx2") {
println!("SKIP: AVX2 not available on this machine");
return;
}
let in_dim = 512;
let out_dim = 16;
let bytes_per_row = (in_dim / 32) * 18;
let weight_data = vec![0u8; out_dim * bytes_per_row];
let activations = vec![1.0f32; in_dim];
let result = fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim);
assert!(
result.is_ok(),
"Large vector matvec should succeed with AVX2"
);
println!("F201: AVX2 4-block path executed for {} elements", in_dim);
}
#[test]
#[cfg(target_arch = "x86_64")]
fn test_f202_avx2_small_vector_path() {
if !is_x86_feature_detected!("avx2") {
println!("SKIP: AVX2 not available");
return;
}
let in_dim = 128;
let out_dim = 8;
let bytes_per_row = (in_dim / 32) * 18;
let weight_data = vec![0u8; out_dim * bytes_per_row];
let activations = vec![1.0f32; in_dim];
let result = fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim);
assert!(result.is_ok());
println!("F202: AVX2 2-block path executed for {} elements", in_dim);
}
#[test]
fn test_f203_simd_faster_than_scalar_q4_0() {
let in_dim = 256;
let out_dim = 256;
let bytes_per_row = (in_dim / 32) * 18;
let iterations = 100;
let rounds = 5;
let weight_data: Vec<u8> = (0..out_dim * bytes_per_row)
.map(|i| (i % 256) as u8)
.collect();
let activations: Vec<f32> = (0..in_dim).map(|i| (i as f32) / 100.0).collect();
let (q8_scales, q8_quants) = crate::quantize::quantize_activations_q8_0(&activations);
let measure_scalar = || {
let start = Instant::now();
for _ in 0..iterations {
let mut sum = 0.0f32;
for row in 0..out_dim {
let row_start = row * bytes_per_row;
let row_data = &weight_data[row_start..row_start + bytes_per_row];
sum += fused_q4_0_q8_0_dot_scalar(row_data, &q8_scales, &q8_quants, in_dim);
}
std::hint::black_box(sum);
}
start.elapsed()
};
let measure_simd = || {
let start = Instant::now();
for _ in 0..iterations {
let result = fused_q4_0_q8_0_parallel_matvec(
&weight_data,
&activations,
in_dim,
out_dim,
)
.expect("test value should be present");
std::hint::black_box(result);
}
start.elapsed()
};
let _ = measure_scalar();
let _ = measure_simd();
let scalar_time = (0..rounds)
.map(|_| measure_scalar())
.min()
.expect("rounds >= 1");
let simd_time = (0..rounds)
.map(|_| measure_simd())
.min()
.expect("rounds >= 1");
let speedup = scalar_time.as_nanos() as f64 / simd_time.as_nanos() as f64;
println!("F203: Q4_0 Performance Falsification (best-of-{rounds})");
println!(" Scalar (min): {scalar_time:?}");
println!(" SIMD (min): {simd_time:?}");
println!(" Speedup: {speedup:.2}x");
assert!(
speedup > 0.1,
"SIMD ({simd_time:?}) catastrophically slower than scalar ({scalar_time:?}), speedup={speedup:.2}x (best-of-{rounds})"
);
if speedup > 1.5 {
println!(" ✓ SIMD acceleration CORROBORATED (>{:.1}x)", 1.5);
} else if speedup > 1.0 {
println!(" ⚠ SIMD acceleration MARGINAL (<1.5x) - investigate");
} else {
println!(" ⚠ SIMD slower than scalar under runner load (speedup={speedup:.2}x)");
}
}
#[test]
fn test_f204_simd_performance_q8_0() {
let in_dim = 256;
let out_dim = 256;
let bytes_per_row = (in_dim / 32) * 34; let iterations = 100;
let weight_data: Vec<u8> = (0..out_dim * bytes_per_row)
.map(|i| (i % 256) as u8)
.collect();
let activations: Vec<f32> = (0..in_dim).map(|i| (i as f32) / 100.0).collect();
let (q8_scales, q8_quants) = crate::quantize::quantize_activations_q8_0(&activations);
let scalar_start = Instant::now();
for _ in 0..iterations {
let mut sum = 0.0f32;
for row in 0..out_dim {
let row_start = row * bytes_per_row;
let row_data = &weight_data[row_start..row_start + bytes_per_row];
sum += fused_q8_0_q8_0_dot_scalar(row_data, &q8_scales, &q8_quants, in_dim);
}
std::hint::black_box(sum);
}
let scalar_time = scalar_start.elapsed();
let simd_start = Instant::now();
for _ in 0..iterations {
let result =
fused_q8_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim).expect("test value should be present");
std::hint::black_box(result);
}
let simd_time = simd_start.elapsed();
let speedup = scalar_time.as_nanos() as f64 / simd_time.as_nanos() as f64;
println!("F204: Q8_0 Performance Analysis");
println!(" Scalar (raw dot): {:?}", scalar_time);
println!(" SIMD (with quant): {:?}", simd_time);
println!(" Ratio: {:.2}x", speedup);
if speedup < 1.0 {
println!(" NOTE: SIMD path includes activation quantization overhead");
println!(" Scalar test uses pre-quantized activations");
}
assert!(simd_time.as_nanos() > 0);
}
#[test]
fn test_f205_interleaved_q4k_simd_path() {
let num_superblocks = 4; let mut data = vec![0u8; num_superblocks * 144];
for sb in 0..num_superblocks {
let offset = sb * 144;
data[offset] = 0x00;
data[offset + 1] = 0x3C;
}
let interleaved = InterleavedQ4K::from_q4k(&data).expect("test value should be present");
let activations = vec![1.0f32; interleaved.num_values()];
let iterations = 1000;
let start = Instant::now();
for _ in 0..iterations {
let result = interleaved.dot(&activations).expect("test value should be present");
std::hint::black_box(result);
}
let elapsed = start.elapsed();
let ns_per_dot = elapsed.as_nanos() as f64 / iterations as f64;
let values_per_second = (interleaved.num_values() as f64) / (ns_per_dot / 1e9);
println!("F205: InterleavedQ4K dot performance");
println!(" Values: {}", interleaved.num_values());
println!(" Time per dot: {:.0} ns", ns_per_dot);
println!(" Throughput: {:.2} M values/sec", values_per_second / 1e6);
#[cfg(target_arch = "x86_64")]
if is_x86_feature_detected!("avx2") {
if values_per_second <= 10e6 {
eprintln!(
"[PERF WARNING] InterleavedQ4K dot: {:.2} M values/sec (target >10M)",
values_per_second / 1e6
);
}
}
}
#[test]
fn test_f206_simd_scalar_numerical_parity_q4_0() {
let in_dim = 256;
let num_blocks = in_dim / 32;
let bytes_per_row = num_blocks * 18;
let mut weight_data = vec![0u8; bytes_per_row];
for block in 0..num_blocks {
let block_start = block * 18;
weight_data[block_start] = 0x00;
weight_data[block_start + 1] = 0x3C;
for i in 2..18 {
weight_data[block_start + i] = 0x88;
}
}
let activations: Vec<f32> = (0..in_dim).map(|i| (i as f32) / 100.0).collect();
let (q8_scales, q8_quants) = crate::quantize::quantize_activations_q8_0(&activations);
let scalar_result = fused_q4_0_q8_0_dot_scalar(&weight_data, &q8_scales, &q8_quants, in_dim);
let simd_results =
fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, 1).expect("test value should be present");
let simd_result = simd_results[0];
println!("F206: Q4_0 SIMD/Scalar Numerical Parity");
println!(" Scalar: {}", scalar_result);
println!(" SIMD: {}", simd_result);
assert!(scalar_result.is_finite(), "Scalar result is not finite");
assert!(simd_result.is_finite(), "SIMD result is not finite");
let diff = (scalar_result - simd_result).abs();
let max_val = scalar_result.abs().max(simd_result.abs()).max(1e-10);
let rel_diff = diff / max_val;
println!(" Abs diff: {:.2e}", diff);
println!(" Rel diff: {:.2e}", rel_diff);
assert!(
rel_diff < 1e-3,
"SIMD and Scalar results diverge: scalar={}, simd={}, rel_diff={:.2e}",
scalar_result,
simd_result,
rel_diff
);
}
#[test]
fn test_f207_simd_scalar_numerical_parity_q8_0() {
let in_dim = 256;
let bytes_per_row = (in_dim / 32) * 34;
let weight_data: Vec<u8> = (0..bytes_per_row)
.map(|i| ((i * 17 + 13) % 256) as u8)
.collect();
let activations: Vec<f32> = (0..in_dim)
.map(|i| ((i as f32) * 0.01 - 1.28).sin())
.collect();
let (q8_scales, q8_quants) = crate::quantize::quantize_activations_q8_0(&activations);
let scalar_result = fused_q8_0_q8_0_dot_scalar(&weight_data, &q8_scales, &q8_quants, in_dim);
let simd_results =
fused_q8_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, 1).expect("test value should be present");
let simd_result = simd_results[0];
let diff = (scalar_result - simd_result).abs();
let rel_diff = diff / scalar_result.abs().max(1e-10);
println!("F207: Q8_0 SIMD/Scalar Numerical Parity");
println!(" Scalar: {}", scalar_result);
println!(" SIMD: {}", simd_result);
println!(" Rel diff: {:.2e}", rel_diff);
assert!(rel_diff < 1e-4, "Q8_0 SIMD and Scalar results diverge");
}
#[test]
fn test_f208_very_large_matrix() {
let in_dim = 4096;
let out_dim = 4096;
let bytes_per_row = (in_dim / 32) * 18;
let weight_data = vec![0u8; out_dim * bytes_per_row];
let activations = vec![0.1f32; in_dim];
let start = Instant::now();
let result = fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim);
let elapsed = start.elapsed();
assert!(result.is_ok());
let output = result.expect("test value should be present");
assert_eq!(output.len(), out_dim);
assert!(output.iter().all(|v| v.is_finite()));
let gflops = (2.0 * in_dim as f64 * out_dim as f64) / elapsed.as_secs_f64() / 1e9;
println!("F208: Large matrix {}x{}", out_dim, in_dim);
println!(" Time: {:?}", elapsed);
println!(" Throughput: {:.2} GFLOPS", gflops);
}
#[test]
fn test_f209_minimal_dimensions() {
let in_dim = 32;
let out_dim = 1;
let weight_data = vec![0u8; 18]; let activations = vec![1.0f32; in_dim];
let result = fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim);
assert!(result.is_ok());
assert_eq!(result.expect("test value should be present").len(), 1);
}
#[test]
fn test_f210_non_power_of_two() {
let in_dim = 96;
let out_dim = 17; let bytes_per_row = 3 * 18;
let weight_data = vec![0u8; out_dim * bytes_per_row];
let activations = vec![1.0f32; in_dim];
let result = fused_q4_0_q8_0_parallel_matvec(&weight_data, &activations, in_dim, out_dim);
assert!(result.is_ok());
assert_eq!(result.expect("test value should be present").len(), out_dim);
}