Skip to main content

ferrox_quant/repack/
mod.rs

1//! Interleaved Q4_K / Q5_K × Q8_K and Q8_0 × Q8 GEMV (llama.cpp repack layouts).
2//!
3//! - Q4_K: packs 8 rows into `block_q4_Kx8` (`make_block_q4_Kx8`).
4//! - Q5_K: packs 8 rows into `block_q5_Kx8` (`make_block_q5_Kx8`).
5//! - Q8_0: packs 4 rows into `block_q8_0x4` (`make_block_q8_0x4`) with
6//!   4-byte interleave for NEON SDOT `ggml_gemv_q8_0_4x4_q8_0`.
7//! - Q4_0: packs 4 rows into `block_q4_0x4` (`make_block_q4_0x4`) with
8//!   4-byte interleave + XOR `0x88888888` for `ggml_gemv_q4_0_4x4_q8_0`.
9//!
10//! Gated on `FERROX_CPU_INT_DOT`, which `ferrox` and `ferrox-server`
11//! turn on by default (`=0` opts out); off in the library so golden
12//! cross-validation stays reference-exact.
13
14mod common;
15mod q4_0x4;
16mod q4_kx8;
17mod q5_kx8;
18mod q6_kx8;
19mod q8_0x4;
20
21#[cfg(target_arch = "x86_64")]
22mod avx2;
23#[cfg(target_arch = "aarch64")]
24mod neon;
25
26#[cfg(test)]
27mod tests;
28
29pub use common::*;
30pub use q4_0x4::*;
31pub use q4_kx8::*;
32pub use q5_kx8::*;
33pub use q6_kx8::*;
34pub use q8_0x4::*;