Files
qdrant/lib/quantization
Arnaud Gourlay 27672b8011 [AI] Speed up TurboQuant Hadamard rotation by ~3x (#9660)
* Speed up TurboQuant Hadamard rotation by ~3x

Profiling apply_inverse showed 44% of cycles in the Fisher-Yates swap
replay (serial LCG plus a 64-bit modulo per element), not in the WHT.

- Materialize the shared permutations as index maps once in
  HadamardRotation::new; each apply-time permutation becomes a flat
  gather pass ping-ponging between the vector and a thread-local
  scratch buffer. The replay path stays as the cfg(test) parity oracle.
- Fuse consecutive WHT outer butterfly stage pairs (h, 2h) into one
  pass over the array (AVX2), halving memory traffic for h >= 16.
- Fuse the normalization multiply into the transform's final-stage
  stores (wht_dispatch_scaled), removing the separate normalize pass.

Output is bit-identical on all paths: pinned by the existing
struct-vs-replay and SIMD-vs-scalar bit-equal tests plus a new
wht_dispatch_scaled parity test. NEON is unchanged.

Criterion hadamard bench (Zen 5): apply 2.8-3.7x faster across dims
128-4096 (1024: 6.98us -> 2.03us), apply_inverse 2.8-3.5x
(1024: 6.10us -> 2.05us).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Address review: harden gather contract, small-dim parity, grow-only scratch

- Mark gather_permuted as unsafe fn: the get_unchecked justification relied
  on a caller invariant (map indices in range) that the signature did not
  surface; document it as a # Safety contract instead.
- Add dims 5 and 50 to static_rotation_matches_struct_and_roundtrips to pin
  the map path against the replay oracle on degenerate chunk splits.
- Make the thread-local gather scratch grow-only, so threads alternating
  between dims no longer shrink and re-zero the buffer on every call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* Hard-assert input length in apply/apply_inverse

Fail fast at the public boundary: with debug_assert only, a release
build would WHT-normalize a wrong-length slice before the gather's
hard length asserts panic. Flagged by CodeRabbit.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:39:12 +02:00
..
2026-07-07 14:53:15 +02:00
2025-07-03 14:09:12 +02:00
2026-04-28 10:02:28 +02:00