pub fn dense_mm_bf16(
gpu: &dyn GpuBackend,
k: &DenseMmKernels,
a: DevicePtr,
b: DevicePtr,
c: DevicePtr,
m: usize,
n: usize,
kk: usize,
stream: u64,
) -> Result<()>Expand description
2026-09-25: C[M, N] = A[M, K] @ B[N, K]^T, BF16 in and out, output row
stride N, dispatched on M: dense_gemv_bf16 at M == 1,
dense_gemv_bf16_batchm at 2..=DENSE_GEMV_BATCHM_MAX_M, and the tile
GEMM otherwise or when the chosen GEMV kernel is missing.
batchm reads the weight once for all M rows. Each of its rows follows
dense_gemv_bf16’s K order and reduction (gb10 kernels), so the two GEMV
arms give the same bits per row; the tile GEMM accumulates in a different
order.