Benchmarks · released 2026-10-24
hipfire 0.4.3 benchmarks
hipfire 0.4.3 leads with prefill speed for A3B models on the Radeon AI PRO R9700, with
the new qwen3.6:35b-a3b-mq4rs quant, and speeds up the Flash-Next prefill path on the R9700.
hipfire 0.4.3.1 moves A3B mq4rs decode onto the PM4 replay route. Every number below
names its card, fixture, method and date, and links its source. This page covers the 0.4.3 and 0.4.3.1
releases; the 0.4.2 and 0.4.1 numbers stay on their own pages.
Qwen3.6-35B-A3B · prefill on the R9700, 0.4.2.1 vs 0.4.3
Prefill tok/s on one Radeon AI PRO R9700 (gfx1201), measured 2026-10-24 in a single timing hold with the three
arms interleaved. Each cell is the median of 9 samples: 3 fresh
hipfire bench processes with --runs 3. “0.4.2” here is v0.4.2.1 (6b363a56a1ae), the latest
0.4.2 release.
| prefill tok/s | 0.4.2.1 mq4r | 0.4.3 mq4r | 0.4.3 mq4rs | mq4rs vs 0.4.2.1 mq4r | engine only (mq4r) | quant only (0.4.3) |
|---|---|---|---|---|---|---|
| pp512 | 3,292 | 3,332 | 11,589 | 3.52× | 1.01× | 3.48× |
| pp1024 | 3,248 | 3,607 | 15,718 | 4.84× | 1.11× | 4.36× |
| pp4096 | 2,886 | 3,737 | 19,828 | 6.87× | 1.29× | 5.31× |
| pp8192 | 2,488 | 3,615 | 20,035 | 8.05× | 1.45× | 5.54× |
| pp16384 | 1,957 | 3,561 | 18,545 | 9.47× | 1.82× | 5.21× |
Command: hipfire bench <model> --matrix --json --pp 512,1024,4096,8192,16384 --tg 1 --ctx 1 --runs 3 --warmups 1 --spec off, synthetic token ids. The new
qwen3.6:35b-a3b-mq4rs quant is where most of the gain comes from (3.5× to 5.5× over the same 0.4.3
engine on the old mq4r file). The 0.4.3 engine alone is 1.0× to 1.8× on mq4r and removes the 0.4.2 long-context
falloff (0.4.2.1 loses 41 % from pp512 to pp16384; 0.4.3 on mq4r does not fall off). Source:
v0.4.3 release notes, “Prefill perf comparison”.
Read this before comparing columns
Each version ran its default config, and the defaults differ. The 0.4.2.1 → 0.4.3 mq4r column is therefore “what a user gets from upgrading without changing the model file”, not a single-variable engine A/B.
| default | 0.4.2.1 mq4r | 0.4.3 mq4r | 0.4.3 mq4rs |
|---|---|---|---|
| KV (kv_mode=auto) | q8 K and V | fp8 | fp8 |
| prefill chunk | 512 rows | 8192 rows | 8192 rows |
| MoE prefill route | per-expert buffers | per-expert buffers | symmetric IU4 MoE (40 layers admitted by capability) |
The symmetric IU4 MoE prefill route is only admitted on the mq4rs file. Fast mq4rs prefill is gfx1201
only; on other GPUs the mq4rs file needs HIPFIRE_MOE_SYM_IU4=0 (about 5× slower prefill).
mq4rs file: hipfire-models/qwen3.6-35b-a3b, 18.7 GB, sha256
8806a742d558ebe43256010096cd82cfac3a20be5218ad56a3f74267db001894; the mq4r arms used the registry-pinned file, sha256
4685c140c46b1a6f31a0fd9053bf09d5faf1d2529d715b84794249b66cde0428. WikiText-2 KLD, same harness: 0.129 for mq4rs against
0.206 for mq4r. Decode was not compared here (--tg 1).
Late prefill steps on mq4rs (pp16000)
The last lever steps of the cycle, on qwen3.6-35b-a3b-d53.mq4rs only and not part of the table above:
pp16000 (two chunks, 8192 + 7808 rows), 3 fresh processes per arm, three separate same-session A/Bs.
| step | before | after | change |
|---|---|---|---|
| A/B 1 | 16,084.5 tok/s | 16,694.8 tok/s | +3.8 % |
| A/B 2 | 16,670.6 tok/s | 18,021.6 tok/s | +8.1 % |
| A/B 3 | 18,341.9 tok/s | 18,587.9 tok/s | +1.3 % |
The +15.6 % total is the sum of the three, not a single A/B; the card runs a few percent slower on some days than others. The routes are exact-gfx1201 defaults, byte-identical to the code they replace: KLD is unchanged on mq4rs (the four-corpus KLD sequence is byte-equal at every step). That does not hold for the asymmetric mq4r file: its WikiText-2 prefill KLD moves 0.2082 → 0.2115 (Δ +0.0034, CI95 [+0.0009, +0.0058]), inside the quality bar. Source: v0.4.3 release notes, “Detail” and Known issues.
Qwen3.6-35B-A3B mq4rs · decode on the R9700, 0.4.3 → 0.4.3.1
The symmetric-expert A3B file used to decode on the HIP graph. In 0.4.3.1 it takes the automatic PM4 replay
route on an exact gfx1201 card (one GPU, no drafter), the same default .mq4r already had. Output is
bit-exact against the HIP route. Nothing to configure; replay.backend = "hip" turns it off.
| decode tok/s · Radeon AI PRO R9700 (gfx1201) | HIP route (0.4.3) | PM4 replay (0.4.3.1) | change |
|---|---|---|---|
| tg128, ctx 128 | 157 | 232 | +48 % |
| tg128, ctx 8K | 146.6 | 217.0 | +48 % |
| 1024-token reasoning generation | 154 | 225.0 | +46 % |
Measured on a Radeon AI PRO R9700 with hipfire bench <model> --spec off --matrix --pp 128 --ctx 128,8192 --tg 128 --runs 3 --warmups 2, default config for both arms (the HIP arm set with
replay.backend = "hip"), 3 fresh processes per arm. Greedy ids are identical between the two routes on
prose, code, copy and 1024-token reasoning prompts, and the replay harness reports logits, KV and recurrent state
bit-equal. This changes the decode route only; prefill is unaffected (mq4rs prefill stays about 20K tok/s at
4K–8K prompts, as in 0.4.3). It does not apply to other GPUs. Source:
v0.4.3.1 release notes.
The 0.4.3.1 release notes' validation run reports tg128 at ctx 128 of
231.4 / 232.3 / 231.9 tok/s over 3 fresh processes, with the PM4
route bit-exact against the HIP route. --spec mtp now also loads on mq4rs, but the default stays AR
and an MTP-loaded request does not use PM4 replay.
Qwen3.8-Flash (Flash-Next) · prefill and decode on the R9700
Change-level campaigns from the 0.4.3 release notes, not a cumulative release matrix: each row names its card, fixture and arms. Numbers from different sessions are not chained.
| change | hardware and fixture | result |
|---|---|---|
| MQ6 INT8 prefill, now default on gfx1201 | One R9700 · Flash-Next · pp16384 at the 4096-row chunk · 3 fresh processes per arm | 4,720.5 → 4,899.3 tok/s (+3.8 %) against the previous F16 route · quality: paired KLD change within the +0.010 budget on both corpora; byte-identical to the INT8 HIP route |
| Compact forward scratch, now default on gfx1201 (4096-row chunk) | One Radeon AI PRO R9700 · split base qwen3.8-flash-next-base.mq4-xts · hipfire bench --matrix pp16384, tg128 and --spec auto · 3 fresh processes per arm · full vs compact scratch, both at the 4096-row chunk | Forward scratch 4,388 → 1,270 MiB; resident experts 6,948 → 8,234. pp16384 5,024 → 5,405 tok/s (+7.6 %); tg128 33.56 → 34.84 (+3.8 %); --spec auto prose 45.8 → 49.0 (+7.0 %), code 68.2 → 73.9 (+8.4 %) · quality: output byte-identical (KLD sequences, AR and MTP serve transcripts) |
| Default prefill chunk is now 16,384 rows on gfx1201: faster prefill, slower decode | One Radeon AI PRO R9700 · gptq3 monolith · pp16384, AR tg128 (synthetic random token ids, understates real-text decode) and --spec auto (fiction_lighthouse prose, humaneval_0_has_close_elements code) · 3 fresh processes per arm · 16,384-row vs 4096-row chunk, both with compact scratch | pp16384 5,405 → 6,431 tok/s (+19.0 %). Decode costs: AR tg128 34.88 → 33.11 (−5.1 %); --spec auto prose 49.1 → 44.3 (−9.8 %), code 73.7 → 66.1 (−10.3 %); resident experts 8,234 → 6,578. HIPFIRE_PREFILL_CHUNK_ROWS=4096 restores the old decode speed · quality: output byte-identical (KLD WT2 and code24, AR and MTP serve transcripts) |
| Four exact-kernel prefill waves W1–W4 (default-on) | One Radeon AI PRO R9700 · pp16384 at the 16,384-row chunk with compact scratch · 3 fresh processes per arm · each wave an interleaved same-session A/B | W1 5,506.8 → 5,926.1 (+7.6 %); W2 5,903.9 → 6,028.8 (+2.1 %); W3 6,037.2 → 6,385.5 (+5.8 %); W4 6,380.1 → 6,449.8 (+1.1 %). Measured in separate sessions, not chained into one total · quality: byte-identical kernels; shadow replay bit-exact |
Source: v0.4.3 release notes, “Headline numbers” rows 1–4 and Highlights. The 16,384-row
chunk is the default on gfx1201 under compact scratch; for short prompts with long generations set
HIPFIRE_PREFILL_CHUNK_ROWS=4096. With a 4096-row chunk the pass is limited by the PCIe expert stream
and the W1–W4 wins mostly hide. Opt-outs: HIPFIRE_MQ6_I8=0,
HIPFIRE_QWEN4_COMPACT_SCRATCH=0.
Expert hot set (on by default on gfx1201)
hipfire pull qwen3.8:flash-next fetches a 213 KB decode-routing sidecar and the load keeps the most-used
experts resident in VRAM (gfx1201 only). On real text it is worth +14 % to +26 % MTP decode
(fiction prose +14.4 %, glimmer coding prompt +26.3 %) and +7 % to +40 % plain AR,
with no prefill loss (pp16384 +0.5 %) and byte-identical output. The copy-heavy code edit under MTP
is the exception at −3.1 %. Fixture: one Radeon AI PRO R9700, split base with and without the expert hot-set sidecar, 16,384-row default chunk, q4 PLE rows, 128 tokens, 3 fresh processes per arm. Source:
v0.4.3 release notes, Highlights.
The release notes also publish this earlier on/off table, measured before the forward-scratch diet, the W1–W4 waves, the compact-scratch default and the 16,384-row chunk, and not re-measured on the final build. Treat it as a direction, not a current figure.
| measured on one R9700, earlier build | change |
|---|---|
| vs hot set off, prefill 8K and 16K | +18 % to +19 % |
| vs hot set off, short-context decode | −9.5 % |
| vs hot set off, pp512 | −6 % |
| vs v0.4.2.1, long prefill (2K / 8K / 16K) | +15 % to +23 % |
| vs v0.4.2.1, decode (ctx 128 to 20K) | −3 % to −11 % (worst at ctx 128) |
HIPFIRE_QWEN4_EXPERT_HOTSET=0 restores whole-layer placement. A phase-aware budget is planned for 0.4.4.
Source: v0.4.3 release notes, “Flash-Next on a single R9700”.
Strix Halo (gfx1151 + XDNA2) · Flash-Next 16K prefill
Client time to first token on a 16,355-token prompt, XDNA2 NPU trunk on, 3 fresh processes × 3
requests, all-9 median, engine commit 9d74311a53, measured 2026-10-23.
| measurement | tok/s |
|---|---|
| 0.4.3 all-9 median (2026-10-23) | 2,365.6 |
| 0.4.3 four steady requests (range) | 2,403–2,407 |
| process 1, requests 1–3 | 2,314.2 / 2,404.9 / 2,403.4 |
| process 2, requests 1–3 | 2,316.0 / 2,406.8 / 2,404.5 |
| process 3, requests 1–3 | 2,208.9 / 2,350.9 / 2,365.6 |
| v0.4.2 shipped tip (2026-10-14, an earlier measurement on the same prompt length; see the 0.4.2 page) | 2,386 |
The first request in each process runs slower than steady state; in this run the first requests were 2,314.2, 2,316.0 and 2,208.9 tok/s. The 0.4.2 and 0.4.3 figures are separate measurements, not a controlled A/B. The 0.4.3.1 release notes report that Strix Halo load, prefill and generate match v0.4.3. Source: v0.4.3 release notes, Headline numbers and Known issues; v0.4.3.1 release notes, Validation.
Strix Halo decode and speculation (contributor measurements)
These figures are the contributor's own (@fivetide) and were not re-measured on Strix Halo hardware for this release.
| change | result | PR |
|---|---|---|
| 27B DFlash with a Q8_0 lm_head | decodes 1.8× faster (the 16-row lm_head is 6× faster) | #908 |
| Flash-Next 8-request AR throughput | 53.7 → 75 tok/s aggregate (lane promotion, two-launch GDN lanes, PeaceMaker row kernels) | #909 |
| Flash-Next native-MTP decode | +6 % from PeaceMaker multi-column verify kernels | #930 |
| Flash-Next DFlash2, block 8, greedy | 42.5 → 52.0 tok/s (verifies only the draft's confident prefix) | #930 |
Other measured changes in 0.4.3
| change | hardware and fixture | result |
|---|---|---|
| Strix Halo GDN prefill NaN fix (repetitive prompts), final version | Strix Halo · 16K Flash-Next prefill · GDN chunk kernel time | first fix 372 → 611 ms (+238 ms of a 16K prefill); final version 364.6 ms, below v0.4.2 |
| Strix Halo F32 GatedDeltaNet state by default | Flash-Next · KLD against BF16 | KLD improves by 0.0068 (code) and 0.0118 (WikiText-2 subset); cost within ±2 %. Text can differ from 0.4.2.1 on gfx1151 |
| Flash-Next prefill on a narrow PCIe link (7900 XTX at x4, 7.09 GB/s) | 7900 XTX (gfx1100) · mq2 host experts · one timing hold, build d8865a16b | pp8192 265.1 → 931.9 tok/s (3.52×), at a cost of pp512 −14.4 % and decode −10.7 % |
| 7900 XTX layer-major S1 prefill path, base at pp16384 | 7900 XTX (gfx1100) · two fresh processes, six samples per arm · a single-session figure, not a release-matrix value | 1,738.9–1,750.2 tok/s (about 1.87× the earlier beta build) |
| Flash-Next load: expert-header page faults and CPU symmetry scan removed | Flash-Next load path (symmetry scan: gfx1201 compact-scratch default) | CPU symmetry scan 8 s warm / 229–310 s cold → 0.1 ms; load phase 177.9 s → under 0.25 s on the affected path |
| Default FA2 split-KV verifier on exact gfx1100 | 7900 XTX · contributor measurement (@HUSRCF, #894) | +13.6 % DFlash |
Source: v0.4.3 release notes, Highlights, § Strix Halo, § 7900 XTX and narrow PCIe links, Fixes. The 7900 XTX narrow-link rows have one hold of evidence.
New Flash-Next tiers: mq3-xts and mq2-xts
Smaller split-base Flash-Next files than the 125 GB mq4-xts. They load their per-token embedding rows
from a shared PLE sidecar (q4 29.1 GB, q8 54.4 GB). These tiers lose some quality against the default
mq4-xts; measured KLD per tier is on the model cards.
| tag | base size | download, q4 / q8 PLE | what it is | GPUs |
|---|---|---|---|---|
qwen3.8:flash-next-mq3-xts | 59.1 GB | ~88.2 / ~113.5 GB | 3-bit experts on 16,839 of 24,576 routed experts; the rest is the MQ4 XTS bytes | R9700, Strix Halo |
qwen3.8:flash-next-mq2-xts | 46.9 GB | ~76.0 / ~101.3 GB | 6,306 experts stay 4-bit; 18,270 are 2-bit (E8P) | 7900 XTX, R9700 |
qwen3.8:flash-next-mq2-xts-4500 | 44.5 GB | ~73.7 / ~98.9 GB | 4,500 experts stay 4-bit; 20,076 are 2-bit (E8P) | 7900 XTX, R9700 |
Example from the model card: mq2-xts (6,306 hot experts) decode on a 7900 XTX measures KLD 0.1966 on WikiText-2. KLD numbers are not comparable across tiers or against MQ4 without the card's scope notes. Strix Halo refuses the mq2 tiers cleanly in this release. Model cards: hipfire-models/qwen3.8-flash-next. Source: v0.4.3 release notes, “New Flash-Next model tiers”.
Reproduce it
# install hipfire (latest release), or pin one $ curl -L https://raw.githubusercontent.com/warpfront/hipfire/master/scripts/install.sh | bash $ curl -L https://raw.githubusercontent.com/warpfront/hipfire/master/scripts/install.sh | bash -s -- --tag v0.4.3.1 # A3B prefill and decode on a gfx1201 card (R9700) $ hipfire pull qwen3.6:35b-a3b-mq4rs $ hipfire bench qwen3.6:35b-a3b-mq4rs --matrix --json --pp 512,1024,4096,8192,16384 \ --tg 1 --ctx 1 --runs 3 --warmups 1 --spec off $ hipfire bench qwen3.6:35b-a3b-mq4rs --spec off --matrix --pp 128 --ctx 128,8192 \ --tg 128 --runs 3 --warmups 2
Each version's default config applies. Releases: v0.4.3 (CHANGELOG), v0.4.3.1 (CHANGELOG). Protocol: BENCHMARKS.md.
Known limits
- The A3B speed-up applies to files built with the symmetric expert recipe, which is
qwen3.6:35b-a3b-mq4rs. Fast mq4rs prefill is gfx1201 only, its router and lm_head are 4-bit, and--spec mtpis opt-in there (the default stays AR). - On the asymmetric
qwen3.6:35b-a3b-mq4rfile, 0.4.3 prefill numerics change slightly and greedy output can differ from 0.4.2 at near-ties. Users on the old mq4r should pull mq4rs. - Flash-Next on the R9700 prefills faster and decodes 5–10 % slower by default (16,384-row chunk); the earlier hot-set on/off table predates the final defaults.
- On Strix Halo, each process exit leaves about 80 GiB in the kernel TTM page pool, so a back-to-back reload can be refused until that memory frees; the fix is planned for 0.4.4. The first request in each process also runs slower than steady state.
- Several Strix Halo and 7900 XTX results are the contributors' own measurements and were not re-measured on that hardware for this release.
- Qwen3.8-27B
--spec mtpfailed to load on v0.4.3 and loads again in 0.4.3.1. - The PM4 replay decode speed-up does not apply to other GPUs, to MTP-loaded requests or to a drafter.
Source: v0.4.3 and v0.4.3.1 release notes, Known issues and Upgrade notes.