]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commit
vulkan: Block-load Q3_K/Q6_K block data and subtract on 32b ints (llama/23056)
authorMatt Corallo <redacted>
Mon, 1 Jun 2026 09:46:48 +0000 (09:46 +0000)
committerGeorgi Gerganov <redacted>
Mon, 8 Jun 2026 11:36:36 +0000 (14:36 +0300)
commit982533fc0c38dabc6f7fa9155b7e33e5f565e223
treeceb9530e0236e76405ead104eef62001e32d787b
parentaea93ada610cf565e0585dfe2822cd4a2206a488
vulkan: Block-load Q3_K/Q6_K block data and subtract on 32b ints (llama/23056)

Q2_K/Q3_K/Q6_K do much better when using MMVQ on Intel BMG even
though they're only 2-byte aligned, and Q3_K still wins on
NVIDIA as well.

mesa isn't all that great at coalescing back-to-back loads from
alternating arrays, so we force it instead. Further, we can do
subtraction directly on a full int32_t rather than an i8vec4
with bit twiddling because the high bit is always free to start.

On Intel BMG on mesa, the switch to MMVQ provides an immediate
~57% perf increase in tg128 for unsloth/Qwen3.5-9B-GGUF:Q3_K and
~78% perf increase in tg128 for unsloth/Qwen3.5-9B-GGUF:Q6_K.

The futher switch to block loads leads to a ~24% perf increase in
tg128 for unsloth/Qwen3.5-9B-GGUF:Q3_K and a ~48% perf increase in
tg128 for unsloth/Qwen3.5-9B-GGUF:Q6_K.

Finally, Xe2 wins on MMVQ even for small k, so we take the NVIDIA
override for K quants on Xe2 as well.
ggml/src/ggml-vulkan/ggml-vulkan.cpp
ggml/src/ggml-vulkan/vulkan-shaders/mul_mat_vecq_funcs.glsl