pub fn deinterleave_qg_split_qnorm(
gpu: &dyn GpuBackend,
kernel: KernelHandle,
data: DevicePtr,
q_out: DevicePtr,
q_norm_weight: DevicePtr,
num_tokens: u32,
num_heads: u32,
head_dim: u32,
stride: u32,
eps: f32,
stream: u64,
) -> Result<()>Expand description
2026-09-25: deinterleave_qg_split fused with the per-head Q RMS norm.
The gate goes to data[q_total..]; Q is normalized in shared memory and
written once, to q_out. q_norm_weight is [head_dim], shared by every
head, and applied as x * rms * (1 + w).