A matched three-arm matrix put the question directly: stock ROCm and stock Vulkan built from the same llama.cpp commit, plus a community Vulkan fork, one model, depths 0 to 131,072, medians over fresh-process repetitions with the page cache dropped between them clm-0050. Vulkan led in every cell — both prefill (reading the prompt in) and decode (generating new tokens). The widely-quoted counter-claim, ROCm ahead 3.5x at 65k depth, was measured on an RDNA2 V620 — a different GPU family — and inverts here: at 65k on gfx1151 the same comparison reads Vulkan +20% prefill, +19.5% decode. Backend verdicts do not transfer across GPU families.
Quantised KV redraws the map rather than shifting it. Stock Vulkan's prefill collapses (-26% to -32% against its own f16) even as its decode gains; stock ROCm's decode craters with depth (-35.1% at 131k) — the same unpatched-build failure already measured and patched on another model; and the fork rescues the collapse completely while extending the decode gain, landing on the best long-context configuration measured on this chip: 42.5 tok/s at 131,072, at roughly half the KV memory clm-0051.
The scope line matters as much as the verdict. Every cell so far is one model — an hd256 mixture-of-experts, where the fork's own documentation predicts smaller gains than other head sizes — and the fork arm bundles a newer Mesa driver, so its edge over stock Vulkan is not single-variable clm-0051. Nor is the lead a law of the silicon: with a BF16 flash-attention patch applied, prefill inverts to ROCm +46.9% at 32k with bf16 KV, and at shallow depth every backend gap collapses toward noise clm-0046. A backend can also be fast and wrong — one community Vulkan build measured 24% faster while emitting garbage output clm-0014 — which is why every throughput series here sits behind an output-sanity guard. Treat any backend number that arrives without its depth, KV type and build hash as unusable.