]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commit
Optimize MOE GEMV kernel for BS > 1. (llama/20905)
authorGaurav Garg <redacted>
Sun, 29 Mar 2026 16:35:18 +0000 (22:05 +0530)
committerGeorgi Gerganov <redacted>
Thu, 30 Apr 2026 08:28:57 +0000 (11:28 +0300)
commit6b67c918797be49d4c9e67eda05efd490f8e123d
treed76bb7db9ac7b19bb35c54221d27b931098116e6
parent9e96d390f7dc63544ebbdafe36902879c217104a
Optimize MOE GEMV kernel for BS > 1. (llama/20905)

* Optimize MOE GEMV kernel for BS > 1.

The previous MOE kernel for BS > 1 had too many thread blocks (nrows_x, nchannels_dst, ncols_dst), with very little work per block. block of (32, 4) was doing inner dot product for a single row.

New mul_mat_vec_q_moe kernel is dedicated for MoE multi-token kernel with grid (ceil(nrows_x/rpb), nchannels_dst), block (warp_size, ncols_dst). Each warp handles two rows independently with warp-level reduction only (no shared memory sync).

This change doesn't increase any compilation time as a single template instance is needed per type. This also simplifies the original GEMV kernel and gets rid of `is_multi_token_id` specialization.

* Remove em-dashes

* Cherry-pick changes from @am17an PR https://github.com/ggml-org/llama.cpp/pull/20885 to enable small_k optimization only for cases where it benefits

Increase max batch size for MMVQ kernels for MUL_MAT_ID to 8

* Make the max batch size for MOE GEMV kernel configurable based on GPU arch and datatype

---------

Co-authored-by: Aman Gupta <redacted>
ggml/src/ggml-cuda/ggml-cuda.cu
ggml/src/ggml-cuda/mmvq.cu
ggml/src/ggml-cuda/mmvq.cuh