Repository navigation
D3D12 backend v0.4.1 - faster generation and speculative decoding on the MTT S80
D3D12 backend v0.4.1 - faster generation and speculative decoding on the MTT S80
Windows x64, DirectX 12. Same base as v0.4.0 (llama.cpp master caa8191, 2026-10-26).
What is new
- Dense IQ models on the Moore Threads MTT S80 decode 2.5x faster. Qwen3.8-27B UD-IQ3_XXS: generation 1.77 -> 4.37 t/s (tg128), prompt 14.7 -> 19.3 t/s (pp512).
New single-column kernels for IQ3_XXS / IQ3_S / IQ2_*, IQ codebooks in groupshared memory, 8 threads per row on Moore Threads, K-quants in the big prompt tile. - Batches of 2-4 tokens decode each weight once. Before, a 2-token batch cost as much as 2 single tokens. Qwen3.8-27B on the S80: pp2 4.75 -> 6.40 t/s, pp4 5.03 -> 8.64 t/s.
This is what makes speculative decoding pay off: with the model's MTP head (mtp-Qwen3.8-27B-Q4_0.gguf, unsloth/Qwen3.8-27B-GGUF folder MTP) and
--spec-type draft-mtp --spec-draft-n-max 3 --spec-draft-p-min 0.75, generation is about 6.1 t/s instead of 4.4 t/s on the S80 (measured with llama-speculative-simple, 256 tokens, greedy).
Also faster on other GPUs: Radeon AI PRO R9700 pp4 +44-51 %, Intel Iris Xe pp4 8.2 -> 15.6 t/s (Ministral-3-3B Q6_K). - AMD discrete GPUs: matvec threads per row chosen by weight type (IQ 8, others 32): glm-4-9b IQ2_M generation 68.0 -> 79.6 t/s on the R9700.
Switches (all default on, for A/B tests): GGML_D3D12_MV_NC=0 (one dispatch per column again), GGML_D3D12_MV_PERCOL=0, GGML_D3D12_MM_TPR=<n>.
Tested
- MTT S80: every shipped exe of this zip (llama-server, llama-cli, llama-mtmd-cli, llama-completion, llama-perplexity, llama-bench, test-backend-ops), PPL qwen2.5-0.5b 17.29, LFM2-24B-A2B and Qwen3.8-27B benches.
- Intel Iris Xe: test-backend-ops of this zip, 13 op groups (MUL_MAT 2520/2520, MUL_MAT_ID 1107/1107, ...).
- Radeon AI PRO R9700: MUL_MAT / MUL_MAT_ID of the same source (test build).
Not tested: the other GPUs of the backend (Zhaoxin, Lisuan) - please report problems.