Dequantized values still in the ROTATED domain (bf16) — the deferred-
inverse-FWHT read path. Attention over V is linear in V, so
InvFWHT(Σᵢ wᵢ·v̂ᵢ) = Σᵢ wᵢ·InvFWHT(v̂ᵢ): sdpa may run on these directly
and the caller un-rotates the attention OUTPUT once per query row
(unrotateValues) instead of un-rotating every cached token per step —
vllm-metal's deferred-V trick, O(q·d log d) instead of O(T·d log d).
Not bit-identical to the eager path (reduction order differs); both are
valid decodes of the same cache bytes.
Dequantized values still in the ROTATED domain (bf16) — the deferred- inverse-FWHT read path. Attention over V is linear in V, so InvFWHT(Σᵢ wᵢ·v̂ᵢ) = Σᵢ wᵢ·InvFWHT(v̂ᵢ): sdpa may run on these directly and the caller un-rotates the attention OUTPUT once per query row (unrotateValues) instead of un-rotating every cached token per step — vllm-metal's deferred-V trick, O(q·d log d) instead of O(T·d log d). Not bit-identical to the eager path (reduction order differs); both are valid decodes of the same cache bytes.