citable URL: https://halobench.com/records/clm-0050/ — this address never moves; the anchor /records/#clm-0050 keeps resolving
AMENDED 2026-08-14 — the rule below is PER-MODEL AND PER-PHASE, not fleet-wide; see the correction history and the amendment note. On gfx1151 at f16 KV, stock Vulkan beat stock ROCm in EVERY cell of a matched matrix measured on Qwen3.6-35B-A3B (one binary commit 3653e6d, depths 0 to 131,072): decode +19-21% at every depth, prefill +4% to +20% growing with depth to 65k. That finding was correct as measured and remains the reference case for this model. It does NOT generalise: the 2026-08-14 perf-matrix sweep found gpt-oss-120b's PREFILL inverts hard in ROCm's favour at depth — Vulkan −52% at d65536, −84% at d131072 (23.1 t/s vs ROCm's 144.3, tight across 3 reps) — while gpt-oss-120b's own DECODE still favours Vulkan (+10 to +16%), same direction as Qwen3.6-35B. Nemotron-3-Super is now a THIRD supporting data point rather than an absence: the OOM first recorded against it (twice, including at an expanded 122 GiB GTT ceiling) was a benchmarking-harness artifact of running stock ROCm under mmap on a model within ~40 GiB of the box's full memory, corrected 2026-08-14 — see clm-0053. On the identical binary with `--load-mode none`, Nemotron-3-Super UD-Q4_K_M at d32768 measures 244.05 pp / 16.43 tg (median of 3 post-reboot reps; an earlier single-rep check the same day landed within 2% at 248.79 pp / 16.39 tg) against Vulkan's own 139.8 pp / 17.56 tg at the same cell: ROCm +74.6% prefill, Vulkan +6.4% decode — the same prefill-favours-ROCm, decode-favours-Vulkan split gpt-oss-120b shows, now measured on a third architecture. The r/LocalLLaMA claim that ROCm leads Vulkan 3.5x at 65k depth — measured on an RDNA2 V620 — still inverts on gfx1151 for Qwen3.6-35B decode/prefill and for gpt-oss-120b decode, but NOT for gpt-oss-120b's own prefill, which is the live counter-example. The community fork (v0.6.1) over stock Vulkan remains a prefill-only win at f16 KV on Qwen3.6-35B: +13/+13/+1/+2.5/+16% by depth, decode unchanged (±1%), and no stride bug (41/41 layers on GPU, CPU utilisation identical to stock) — untested on the other two models.
corrections 2026-08-14: Original text ("stock Vulkan beats stock ROCm in EVERY cell") was true of its one-model matrix but read as a fleet-wide backend rule. The 2026-08-14 perf-matrix sweep (gpt-oss-120b, Nemotron-3-Super) falsified the fleet-wide reading: gpt-oss-120b prefill favours ROCm by a wide and growing margin at depth (opposite direction from Qwen3.6-35B and from gpt-oss-120b's own decode). Rule restated as per-model, per-phase. The original Qwen3.6-35B numbers are unchanged and correct; only the scope of the claim was wrong.
· 2026-08-14: The Nemotron-3-Super OOM behind this claim's first amendment ("favours Vulkan only in the degenerate sense") was itself a benchmarking-harness artifact, not a hardware limitation: the perf-matrix and perf-matrix-gtt120 llama-bench queues that produced run-0234/run-0235 never carried --load-mode none, so stock ROCm was benchmarked under mmap on a model within ~40 GiB of the box's full 122 GiB — full diagnosis in clm-0053. Re-run with --load-mode none on the identical binary, Nemotron-3-Super runs cleanly on ROCm (run-0236, run-0237: 244.05 pp / 16.43 tg, median of 3 post-reboot reps at d32768; an earlier single-rep check the same day, run-0243/run-0244, landed within 2% at 248.79 pp / 16.39 tg) and becomes a THIRD supporting data point for the per-model/per-phase rule rather than an absence: ROCm +74.6% prefill / Vulkan +6.4% decode against Vulkan's own run-0190/run-0191 (139.8 pp / 17.56 tg) — the same prefill-favours-ROCm, decode-favours-Vulkan split gpt-oss-120b shows. The per-model, per-phase rule itself is unchanged; only Nemotron's status in it moves from absent to confirming.
Note — the record's own working
METHOD — three arms, one model, matched flags. A = stock llama.cpp 3653e6d ROCm, B = stock 3653e6d Vulkan, C = fork v0.6.1 commit 3be50ccc2 with its bundled RADV 26.3.0-devel. Qwen3.6-35B-A3B UD-Q4_K_XL, fa on, pp1024/tg256, llama-bench defaults otherwise (-b 2048 / -ub 512), median of 3 fresh-process reps with page cache dropped between reps; 72/72 reps rc=0 across both KV matrices. One benign outlier rep in the matrix (median absorbs it).
f16 KV, pp/tg by depth:
| depth | A ROCm | B Vulkan | C fork | |---|---|---|---| | 0 | 1068.1 / 51.1 | 1110.5 / 61.6 | 1251.5 / 61.8 | | 4,096 | 962.6 / 49.7 | 1020.0 / 59.3 | 1149.5 / 59.9 | | 32,768 | 595.8 / 42.3 | 697.7 / 50.4 | 705.4 / 51.0 | | 65,536 | 412.5 / 36.4 | 495.1 / 43.5 | 507.3 / 43.9 | | 131,072 | 253.6 / 28.5 | 278.3 / 34.2 | 321.6 / 34.5 |
The counter-claim this answers: a r/LocalLLaMA report of ROCm leading 3.5x at 65k depth was measured on a V620 (RDNA2 — a different GPU family). At 65k on gfx1151 the same comparison reads Vulkan +20% prefill / +19.5% decode. Backend verdicts do not transfer across GPU families; this claim is scoped to gfx1151.
FORK ATTRIBUTION CAVEAT: arm C differs from arm B in two ways at once — the fork's kernels AND the newer bundled Mesa (RADV 26.3.0-devel vs system RADV). The d0/d4096 prefill edge is plausibly part-Mesa; the cells are not single-variable the way clm-0022's cherry-pick was. Decode being flat (±1%) at f16 is expected per the fork docs for an hd256 MoE — hd128 models are documented to gain more, so these fork deltas are a FLOOR, not the fork's headline. Single model tested; medium confidence until a second model (ideally hd128 dense) fills the matrix.
Stride-bug check: v0.6.1 shows no stride bug — 41/41 layers verified on GPU, CPU% identical to stock during runs. RELIABILITY COUNTERWEIGHT (2026-08-13): llama.cpp issue 25664 (open, field reports incl. Strix Halo) documents Vulkan/RADV DeviceLostError at ~80k context on this hardware class - our matrix ran clean to 131k, but a naive "switch to Vulkan" operational conclusion should carry this open issue until it resolves. CHALLENGER ON RECORD (2026-08-13): stew675's public rdna-boosts branch (kernel-fusion campaign, see clm-0044) claims to cut stock ROCm's decode deficit to ~3-5% and take prefill +36.5% past Vulkan with BF16 KV. Untested here; a rdna-boosts-vs-stock-Vulkan rerun of this matrix is queued.
AMENDMENT 2026-08-14 — the fleet-wide reading of this claim was wrong; the per-model reading above (everything through "rerun of this matrix is queued") was and remains correct. The 2026-08-14 perf-matrix sweep ran the same fa-on, pp1024/ tg256, 3-fresh-process-rep methodology against two more models, ROCm vs Vulkan, stock 3653e6d, f16 KV:
gpt-oss-120b, pp1024/tg256 by depth:
| depth | ROCm | Vulkan | Vulkan delta | |---|---|---|---| | 32,768 | 308.2 / 39.0 | 294.8 / 45.1 | pp −4.3% / tg +15.7% | | 65,536 | 226.7 / 33.0 | 108.8 / 36.6 | pp −52.0% / tg +10.7% | | 131,072 | 144.3 / 24.0 | 23.1 / 26.3 | pp −84.0% / tg +9.8% |
gpt-oss-120b's prefill does the OPPOSITE of Qwen3.6-35B's as depth grows: ROCm pulls further ahead at every depth measured, reaching a 6.2x lead at 131,072 (144.3 vs 23.1 t/s, medians of 3 reps each, tight — samples in run-0162/run-0180). Decode keeps the Qwen3.6-35B direction (Vulkan ahead, +10 to +16%), so the per-model reversal is prefill-specific, not a wholesale gpt-oss-120b exception — which is exactly why the rule has to be stated per-phase as well as per-model.
Nemotron-3-Super, stock ROCm f16 and q8_0, d32768: both OOM before producing a number (run-0234, run-0235; "HSA exception: BadAlloc" x93/x5 in the process stderr, but the kernel-level cause captured via journalctl -k at the same timestamps is "amdgpu: SVM mapping failed, exceeds resident system memory limit" — a host-RAM residency ceiling, not a GTT-window one: re-running at an expanded 122 GiB GTT ceiling did not rescue either cell). Vulkan completed both KV variants cleanly (matrix-medians.json on aihydra). Nemotron "favours Vulkan" only in the degenerate sense that ROCm could not run at all — this is a reliability finding, not a throughput comparison, and should not be read as a third data point for the fleet-wide direction either way.
CORRECTED RULE: backend advantage on gfx1151 is per-model AND per-phase. Qwen3.6- 35B's "Vulkan wins everywhere" result was real and is now the exception the rule has to explain, not the rule itself. A fleet verdict needs the phase named and the model named; "Vulkan is faster on this chip" is not a sentence this lab can stand behind without both.
SECOND AMENDMENT 2026-08-14 — the Nemotron paragraph directly above ("should not be read as a third data point... either way") is superseded. That OOM was traced to a benchmarking-harness defect, not the hardware: the perf-matrix and perf-matrix- gtt120 llama-bench queues never carried --load-mode none, so stock ROCm was benchmarked under mmap on a model (~82 GB of weights) within ~40 GiB of the box's full 122 GiB. Full mechanism, detection-lag numbers, and the mmap-vs-no-mmap throughput control on a model that fits are in clm-0053; the summary needed here is the corrected cell.
Nemotron-3-Super UD-Q4_K_M, stock ROCm 3653e6d, --load-mode none, d32768:
| rep | pp1024 | tg256 | |---|---|---| | single (pre-reboot check, run-0243/run-0244) | 248.788416 | 16.390674 | | median of 3 (post-reboot, run-0236/run-0237) | 244.051835 | 16.434903 |
The two checks agree within 2%. run-0236/run-0237 is the fully-backed N=3 record (stddev 3.76 pp / 0.03 tg across the 3 post-reboot reps) and is the one this claim quotes. Against Vulkan's own run-0190/run-0191 at the same cell (139.810384 pp / 17.559139 tg, median of 3, stock 3653e6d, mmap default — mmap is not a throughput confound for Vulkan or for any model that fits, per clm-0053's control pair), the ROCm figures read: pp +74.6%, tg −6.4%. (The single pre-reboot check alone would read +77.9%/−6.7% — the same conclusion, slightly noisier.) ROCm's prefill lead and Vulkan's decode lead put Nemotron-3-Super in the SAME prefill-favours-ROCm/decode-favours-Vulkan pattern as gpt-oss-120b, not the degenerate no-data case the first amendment recorded.
CORRECTED RULE, restated: the per-model, per-phase rule from the first amendment stands unchanged. What moves is Nemotron-3-Super's place in it — from "no data, reliability finding only" to a third model confirming the same phase split gpt-oss-120b showed. Three of three multi-model cells measured on gfx1151 now show prefill and decode capable of favouring opposite backends on the same model; no cell measured here has shown a backend win both phases at once except Qwen3.6-35B at f16 KV, which remains the outlier the rule exists to explain.