strix-llama new branch: prompt processing +21–54% over Vulkan and up to 2.7× over stock ROCm kernel at 128k, same outputs quality
Mirrored from r/LocalLLaMA for archival readability. Support the source by reading on the original site.
I've been tuning llama.cpp on my Strix Halo box (Radeon 8060S, 128 GB) and the numbers are good enough to share. It's a branch called rdna35-perf on top of halo-box/strix-llama.cpp, a llama.cpp fork aimed at Strix Halo:
https://github.com/asf0/strix-llama.cpp/tree/rdna35-perf (10 commits, ROCm/HIP only)
TL;DR
- Prompt processing: 21–54% faster than Vulkan, and 8–174% faster than stock ROCm. The lead over ROCm grows with context, because stock ROCm flash attention falls off hard at depth.
- Generation: ties Vulkan on the dense 27B. On the MoE and the 2B it's 2–3% behind Vulkan at short context and within 1% from 64k up. 5–29% faster than stock ROCm.
- Quality: outputs stay closer to stock ROCm than Vulkan's do, and perplexity is unchanged.
| Model | PP vs Vulkan (0k → 128k) | PP vs stock ROCm (0k → 128k) | TG vs Vulkan (0k → 128k) |
|---|---|---|---|
| Qwen3.6 35B-A3B (MoE) | +54% → +36% | +38% → +88% | −3% → 0% |
| Qwen3.8 27B (dense) | +38% → +25% | +8% → +174% | 0% → 0% |
| Qwen3.5 2B (dense) | +21% → +34% | +9% → +87% | −3% → 0% |
Results
llama-bench, Q8_0 weights, q8_0 KV cache, flash attention on, tok/s. "Depth" is how many tokens are already in the KV cache when the test runs. Vulkan and ROCm are the same strix-llama.cpp master that rdna35-perf is built on.
Qwen3.6 35B-A3B (MoE, ub 4096)
| Test | Depth | Vulkan | ROCm | rdna35-perf | vs Vulkan | vs ROCm |
|---|---|---|---|---|---|---|
| pp4096 | 0 | 2625 | 2935 | 4045 | +54% | +38% |
| pp4096 | 8k | 2304 | 2430 | 3452 | +50% | +42% |
| pp4096 | 16k | 2065 | 1966 | 3004 | +45% | +53% |
| pp4096 | 32k | 1716 | 1460 | 2388 | +39% | +64% |
| pp4096 | 64k | 1279 | 959 | 1695 | +32% | +77% |
| pp4096 | 128k | 786 | 568 | 1068 | +36% | +88% |
| tg64 | 0 | 58.2 | 52.3 | 56.3 | −3% | +8% |
| tg64 | 8k | 56.1 | 50.4 | 54.3 | −3% | +8% |
| tg64 | 16k | 54.6 | 48.5 | 53.2 | −3% | +10% |
| tg64 | 32k | 51.8 | 45.3 | 50.7 | −2% | +12% |
| tg64 | 64k | 47.1 | 39.7 | 46.4 | −1% | +17% |
| tg64 | 128k | 39.9 | 32.2 | 39.9 | 0% | +24% |
Qwen3.8 27B (dense, ub 2048)
| Test | Depth | Vulkan | ROCm | rdna35-perf | vs Vulkan | vs ROCm |
|---|---|---|---|---|---|---|
| pp2048 | 0 | 484 | 614 | 666 | +38% | +8% |
| pp2048 | 8k | 442 | 542 | 611 | +38% | +13% |
| pp2048 | 16k | 421 | 476 | 575 | +37% | +21% |
| pp2048 | 32k | 385 | 348 | 513 | +33% | +47% |
| pp2048 | 64k | 326 | 204 | 422 | +29% | +107% |
| pp2048 | 128k | 250 | 114 | 312 | +25% | +174% |
| tg64 | 0 | 8.0 | 7.6 | 8.0 | 0% | +5% |
| tg64 | 8k | 7.9 | 7.4 | 7.9 | 0% | +7% |
| tg64 | 16k | 7.8 | 7.2 | 7.8 | 0% | +9% |
| tg64 | 32k | 7.6 | 6.8 | 7.6 | 0% | +12% |
| tg64 | 64k | 7.3 | 6.2 | 7.3 | 0% | +18% |
| tg64 | 128k | 6.8 | 5.2 | 6.7 | 0% | +29% |
Qwen3.5 2B (dense, ub 2048)
| Test | Depth | Vulkan | ROCm | rdna35-perf | vs Vulkan | vs ROCm |
|---|---|---|---|---|---|---|
| pp2048 | 0 | 6481 | 7179 | 7852 | +21% | +9% |
| pp2048 | 8k | 5618 | 6253 | 7158 | +27% | +14% |
| pp2048 | 16k | 5000 | 5172 | 6611 | +32% | +28% |
| pp2048 | 32k | 4155 | 3888 | 5580 | +34% | +44% |
| pp2048 | 64k | 3220 | 2597 | 4277 | +33% | +65% |
| pp2048 | 128k | 2160 | 1547 | 2886 | +34% | +87% |
| tg64 | 0 | 99.3 | 91.5 | 96.8 | −3% | +6% |
| tg64 | 8k | 95.9 | 88.2 | 93.2 | −3% | +6% |
| tg64 | 16k | 92.9 | 84.5 | 91.4 | −2% | +8% |
| tg64 | 32k | 88.3 | 79.1 | 87.1 | −1% | +10% |
| tg64 | 64k | 79.5 | 69.2 | 79.2 | 0% | +14% |
| tg64 | 128k | 67.6 | 56.2 | 67.7 | 0% | +21% |
f16 KV gives the same picture: PP 20–56% faster than Vulkan and up to +171% over stock ROCm at 128k, TG within −3% / +2% of Vulkan.
Quality
rdna35-perf changes kernels, so I checked it doesn't change outputs: KL divergence against stock ROCm on wikitext-2 (6 × 4096-token chunks), plus perplexity at 32k context.
| Model | KLD vs stock ROCm (Vulkan / rdna35-perf) | Same top token (Vulkan / rdna35-perf) | PPL @ 32k (Vulkan / ROCm / rdna35-perf) |
|---|---|---|---|
| Qwen3.6 35B-A3B | 0.0038 / 0.0018 | 97.8% / 98.5% | 6.028 / 6.023 / 6.024 |
| Qwen3.8 27B | 0.0066 / 0.0013 | 98.9% / 99.7% | 6.003 / 6.004 / 6.007 |
| Qwen3.5 2B | 0.0008 / 0.0001 | 98.6% / 99.5% | 10.046 / 10.049 / 10.049 |
rdna35-perf is closer to stock ROCm than Vulkan is, and perplexity is the same across all three builds.
What changed
- Flash attention kernel for RDNA3.5 (
fattn-rdna35). This is the biggest win and the reason long-context PP holds up.GGML_FA_RDNA35=0turns it off if you want to compare. - Prefill GEMM tuning for the quantized matmuls.
- MoE: routing helper, fused reduction + residual, grouped mat-vec for speculative-decoding verify batches.
- Gated DeltaNet (the linear-attention layers in Qwen3.5/3.6/3.8): fused SiLU-gated output norm and fused decode.
- Decode: plain mat-vec for rows longer than 4096 (this closed the 27B decode gap to Vulkan), plus decode fusions for the Qwen3.6 MoE.
- Misc: HIP graphs off by default on RDNA3.5 (slower here), a faster penalties sampler, host-side prefill for Qwen3.5/3.6 with a draft model, and DFlash drafts read target features in place on the GPU.
I have only tried those 3 models so far.
[link] [comments]
More from r/LocalLLaMA
-
The AI race: China's open-weight models trail US closed models by just 7 months
Oct 14
-
Anthropic Executive Says Open-Source AI Models Are Higher Risk
Oct 14
-
ComfyUI v0.40.0 released
Oct 14
-
So this is how they do it --> RTX 5090, once a consumer gaming card, is now on smugglers’ menu alongside cigarettes
Oct 14
Discussion (0)
Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.
Sign in →No comments yet. Sign in and be the first to say something.