feat(kernels): grouped GEMM for decode batches 2..32 — one launch, no weight copies
External bench feedback: at bs>1 the weight-bound projections run as
separate GEMMs (SGLang/vLLM use merged gate|up and qkv weights), and the
gap to SGLang grows with batch (81% at bs=1 -> 66% at bs=32). Add a
weight-streaming grouped GEMM: one launch covers up to four original
weight matrices (each element read exactly once, activation tile in
shared memory, fp32 accumulation), so the launch structure of a merged
GEMM is achieved without copying or reordering weights — preserving the
read-original-Parameters contract for live-weight co-location.
Entry points: triple_gemm (q/k/v), quad_gemm (GDN in_proj, concat
output), dual_gemm_silu_mul (MLP with silu(g)*u epilogue). Dispatched
for decode batches 2..32 alongside the existing b=1 GEMV path; larger
batches stay on cuBLAS composite.
Signed-off-by: Guokai Ma <guokai.ma@intel.com>