pub fn conv1d_update_l2norm_strided(
gpu: &dyn GpuBackend,
kernel: KernelHandle,
conv_state: DevicePtr,
input: DevicePtr,
weight: &DenseWeight,
output: DevicePtr,
d_inner: u32,
d_conv: u32,
batch_size: u32,
qk_channels: u32,
head_dim: u32,
l2_eps: f32,
input_stride: u32,
output_stride: u32,
stream: u64,
) -> Result<()>Expand description
2026-09-25: Conv1d update + SiLU + L2 norm for batch_size decode
sequences in one launch, with FP32 output
(causal_conv1d_update_l2norm_f32_strided). The input and output row
strides are separate arguments because the concurrent-decode input rows
are the QKVZ projection’s, qkvz_size apart, while the output rows are
d_inner apart; a kernel that used d_inner for both would read sequence
b >= 1 from the wrong row.
conv_state keeps the (b * d_inner + ch) * d_conv layout, so the caller
must have checked that the sequences’ pool slots are contiguous.