]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commit
vulkan: Block-load Q3_K/Q6_K block data and subtract on 32b ints (#23056)
authorMatt Corallo <redacted>
Mon, 1 Jun 2026 09:46:48 +0000 (09:46 +0000)
committerGitHub <redacted>
Mon, 1 Jun 2026 09:46:48 +0000 (11:46 +0200)
commit19620004f59ecbbdcbdad0dfd742500f5971ea61
tree5406141a038cf847e5e4ff018c4ec1d2409bb7ee
parentf8c0a19d4608033ec8a942cdb8d65694aa18e8c7
vulkan: Block-load Q3_K/Q6_K block data and subtract on 32b ints (#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