pub fn cpu_int_dot_enabled() -> boolExpand description
Whether CPU Q8_0 / Q4_0 / Q4_K / Q5_K / Q6_K matvec should quantize the
activation to int8 and use the integer vec_dot path. Q4_K
additionally lazy-repacks into interleaved block_q4_Kx8 for 8-wide
GEMV; Q8_0 into block_q8_0x4 and Q4_0 into block_q4_0x4 for
4-wide GEMV.
Off by default as a library, and turned on by both binaries (see
ferrox_core::threads’s siblings in ferrox-cli/ferrox-server,
which set FERROX_CPU_INT_DOT=1 unless the caller already chose).
The split is deliberate: this is what llama.cpp’s CPU backend does
unconditionally – quantize the activation to Q8, run integer
vec_dot – and it is worth 28% of CPU decode on Host B
(Qwen2.5-0.5B Q8_0, -ngl 0 -t 6: 58.0 -> 80.5 tok/s). But it also
perturbs results below the f32 reference’s precision, and this
crate’s golden cross-validation against the independent NumPy
reference asserts exact agreement. So the inference product
defaults to fast and the library default stays reference-exact.