Pull requests / #3038

#3038 bench: community report, Radeon 890M (gfx1150) on 0.1.45: the shipped hipBLASLt table's A/B and the 17 exact switches' identity check

open · @zeriyoshi · 0 comments · View on GitHub

BenchmarksSetup & installServer & APIMulti-GPUAMD / HIPNVIDIA / CUDAModels & quantsSecurityDocumentation

Description

## Title
bench: community report, Radeon 890M (gfx1150) on 0.1.45: the shipped hipBLASLt table's A/B and the 17 exact switches' identity check

Issue: Follow-up to #1395 (and #1217)

## Summary

The two measurements asked for in #1395, on 0.1.45 (`477ac13`), Radeon 890M, AMD TheRock ROCm 7.14.1 for gfx1150
(hipBLASLt 100401). Results only, no engine change.

1. **The shipped table** (`tools/hip/gfx1150-hipblaslt-100401.txt`, as 0.1.41+ ship it) against plain hipBLAS: prompts
   read **1.54x / 1.72x / 1.74x faster** at 1K / 3.6K / 7K tokens, decode unchanged.
2. **The 17 exact switches** (gfx1151's exact defaults less `STRATA_HCD_EXACT`, the set `STRATA_EXPERIMENTAL_GFX1150=1`
   writes since #2147), all off against all on: the greedy token ids of 10 short prompts plus a 4K and a 20K prompt are
   **12 / 12 identical** on two models.

## What changed

- `bench/results/2026-10-18-community-gfx1150-0.1.45/` (new)
  - `README.md`: the rig, the method, the results and what was not tested
  - `runs.csv`: every run of the table A/B (13 runs)
  - `identity.csv`: every case of the identity check (sha-256 of each case's token ids, times, draft acceptance)
  - `calibrate.json`: `tools/calibrate.py`'s output on this machine
  - `strata-gfx1150.json`: the server config the runs started from
  - `scripts/strata_ident.py`: the identity check (starts the engine directly and saves the generated token ids)
- `bench/results/COMMUNITY.md`: one row for the new folder (the PR column reads `-`)
- `docs/COMMUNITY_BENCHMARKS.md`: one entry for the new folder

## Measurements

**1. The shipped table against plain hipBLAS.** GSQ-RCO IQ3_XXS, the 17 switches on both sides, a server restart per
run (cold prompt cache), one request at a time, the engine's own `strata serve: prompt` timings. Five rounds of the two
arms with the order alternating (H T, T H, ...) and the prompts of the 2026-10-07 README (a short chat three times, then
fresh document prompts of about 1K, 3.6K and 7K tokens); a third arm with `STRATA_HIP_WMMA=1` in the first three rounds
for reference.

| Prompt | plain hipBLAS | table | table + `STRATA_HIP_WMMA=1` (3 rounds, reference) |
|---|---:|---:|---:|
| 987-989 tokens | 95.4 tok/s | 147.0 (1.54x) | 152.2 |
| 3,562-3,564 tokens | 128.5 | 221.5 (1.72x) | 254.3 |
| 7,009-7,010 tokens | 132.8 | 231.6 (1.74x) | 277.2 |
| decode, short chat | 15.2 | 15.2 | 15.2 |

Medians; every round gave the same order and the spreads are within ±1.5%. Every table run logged
`prefill gemm: hipBLASLt tuning enabled (144 rows, gfx1150, version 100401)`.

**2. Identity check of the 17 switches.** `ATTN_LANECELL CVEC_FUSE EXPERT_V2 GDN_CONVL2 GDN_HEAD GDN_NOY GDN_PP=2
GDN_SPLIT LFUSE MMVF_ROWS PF_PAD PLE_BATCH Q6_PACKED Q8_PACKED QFUSE SH_STREAM TSUM` (all `STRATA_`), all off against all
on, both sides with the table and without `STRATA_HIP_WMMA`. The engine is started directly (`serve.server.StrataEngine`,
as `tools/calibrate.py` does); greedy, no thinking, MTP on, one request at a time in a fixed order: 10 short prompts
(128 tokens out), then a 4,024-token and a 20,024-token prompt (this checkout's `docs/*.md`, 64 tokens out). The
generated token ids are compared.

| Model | Runs | Result |
|---|---|---|
| GSQ-RCO IQ3_XXS | off, on, off, on | 12 / 12 identical off against on (both pairs), and each side identical to its repeat |
| OrcaRouter Qwen3.8-Flash-Next-Uncensored IQ3_XXS | off, on | 12 / 12 identical |

- The HIP ctest suite with the 17 set in the environment (and the table): the same results as without them (only
  `ple_parity` fails, as always: it needs `bench/micro`)
- Speed from the same runs: decode +0-3%, the 20K prompt +2-4%

**3. `tools/calibrate.py`** run by hand on this machine (setup does not offer it on AMD) finds nothing over its 3% bar:
every expert is in the GTT pool, so the PCIe share is flat. `STRATA_SH_STREAM=1` measured +2% and `--spec-min-p 0.7`
+1.2%.

## Extra Notes

- Machine: MINISFORUM N5 PRO, Ryzen AI 9 HX PRO 370, Radeon 890M (gfx1150, 16 CUs), 96 GB DDR5-5600, GTT 70 GiB;
  Proxmox VE 9.2 with kernel 7.0.14-24-pve, the engine in an unprivileged LXC container; engine 0.1.45 built by hand with
  `-DCMAKE_HIP_ARCHITECTURES=gfx1150`. ctest: 71 of 75 pass (the README lists the skips and the failure).
- `--kv-grow` reports "off" on HIP because `src/core/vmm.cpp` has no HIP path (`vmm_available()` is false);
  `docs/DETAILS.md` lists its conditions without saying it is CUDA only.
- Not tested: KL or task quality (`STRATA_HIP_WMMA` changes bits and is not part of the identity check), other ROCm
  versions (#2147's `gfx1150-hipblaslt-100500.txt` was not tried), setup itself (the configs are hand-written with the
  same `env` that setup writes), identity-check prompts past 20K tokens.
- **The identity check compares the generated token ids, not dumps.** If your gate needs more before the 17 switches can
  be a gfx1150 default (the 4K / 20K residual or first-window logits dumps, for example with `STRATA_DUMP_FIRST_LOGITS`,
  your own prompt set, longer prompts or other models), let me know and I will rerun it on this machine.

Related on this site

Quick links to related pages.