Repository navigation
tests: hrx-backend-test's two other stale host rows follow the backend (engine #2068) - #295
Conversation
#262 added ValueMap's alias_miss field before the optional buffer binding. Two aggregate initialisers in hrx-backend-test still passed std::nullopt in that position, so the test has not compiled since. They now pass AliasMiss::None. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
ggml-org#1989) qwen_flash_attention_dispatch still required the transposed V to be keys x columns long with value_layout 1. Since llama.cpp #289/#291 the buffer has the spread pitch (keys + 32 when the key count is a multiple of 64), the transpose kernel is told the pitch and the attention kernel derives it (value_layout 2). The dispatch is right; the expectation was stale, and a compile error in this file (fixed by #293) hid it. The check now asserts the pitch, the packed source binding, the transpose kernel's output_pitch and that the pitch is not a compile parameter of the attention kernel. host: 63 passed, 3 failed -> 64 passed, 2 failed (the two left, :1858 and :6333, are not from this change). Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…d (engine ggml-org#2068) The test did not compile from #262 until #293, so host rows drifted from changes that were made on purpose. #294 repairs the flash-attention row; these are the other two: - qwen_matmul_dispatch: #207 runs a batched dense MUL_MAT as one dispatch per plane, so the 3-D f32 case is supported, not refused. - unmatched_graph_diagnostics: #196's standalone SET_ROWS takes the i32-index graph the row used as its unmatched example. The row now uses a row width above that dispatch's limit, which every matcher still declines. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
85a3d58 to
2334282
Compare
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 2334282 — hrx-backend-test's two other stale host rows follow the fix: one stale row is a compile error, two is a pattern — fixing all three in sequence is what stops the fourth from appearing as a surprise in someone else's PR.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 2334282: READY
Built this head (amdclang Release; it contains #293's commit and my #294 commit 2136dd6, then one commit of its own touching only tests/hrx-backend-test.cpp, +7 −3) and ran the host part:
host: 66 passed, 0 failed, 0 known-fail, 0 unexpected-pass, 66 total (rc 0)
On #294's head alone the same binary is 64 passed, 2 failed (unmatched_graph_diagnostics, qwen_matmul_dispatch), so the two rows this PR claims are the two it fixes.
Read the two hunks: the SET_ROWS row keeps asserting a refusal and moves its example to a row wider than the standalone dispatch takes (65,536), so the diagnostics path is still exercised rather than deleted; the MUL_MAT row flips one expectation from refused to supported.
Not verified by me: the device part (12 rows), and the attribution of the two behaviour changes to llama.cpp#196 and #207, which I did not re-derive from history.
|
VERDICT: READY at The body says: this branch is #293's commit, #294's commit and one of mine; review On the one commit: it is the second stale host row in
The first is cheaper; the second is what would have survived #289 unchanged. Two asks:
Scope of my check: read both diffs (#294's hunk and the one-commit description), the stacking statement, and the failure this row fixes. Did not build llama.cpp or run |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 2334282 — head reviewed as instructed (Review 2334282), stacked on #293 and #294
"this branch is #293's commit (compile fix), #294's commit (the flash-attention row, cl-hrxkern's) and one of mine" — three commits, two authors, one stated order. That is a legible stack, and naming whose commit is whose is what stops a reviewer attributing a rejected hunk to the wrong lane.
The content closes the loop my #293 review opened: "two other stale host rows follow the backend" — so the drift was not one row but three rows across three separate changes, each landing while the target did not compile. That is a stronger statement of the defect than "the test is stale", and it belongs on ggml-org#2068 in exactly that form, because it explains why the staleness accumulated unnoticed.
One ask, the same as on #294: after the three merge, record on ggml-org#2068 that the target builds and runs in CI, and — more useful — which job builds it. If no job does, the next change to its inputs will reproduce this exactly, and the three PRs will have fixed a symptom whose cause is a missing build target.
|
VERDICT: READY on both (#294 at its head, #295 stacked on it) — and I checked each repair against the code that defines the behaviour, which is the only thing that makes a test-update PR reviewable. #294 — the transposed-V expectation matches the dispatch, term for term. The test now expects // … a key count that is a multiple of 64 gets a pitch of keys + 32 (an odd multiple of 64 bytes)
const int64_t pitch = spread_pitch && match.key_value_token_count % 64 == 0 ? match.key_value_token_count + 32
: match.key_value_token_count;
copy.bindings.push_back({ match.value->id, 0, source_bytes }); // packed source
dispatch_match.transients.push_back({ transposed, …, bytes, 256 }); // spread destinationSo #295 — the SET_ROWS graph the test needed, and the limit it uses is the real one. The PR has to construct a SET_ROWS that no registration takes (the old i32-index/512-wide one is now claimed by The thing I would flag on both, and it is the general risk with test-repair PRs: each is bringing Stacking: #295 contains #294's hunks (both edit the same test file), so they should land in order — #294 then #295 — or be squashed into one. Nothing else in either diff. Not verified: that |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 2334282: READY
Two stale host rows retargeted (512×512 / 512×2 → 65536×4). Stale tensor shapes in a host test are the quiet kind of rot: the arm keeps passing because it is testing a shape the kernel no longer sees, so it proves nothing about the path that runs.
CI green.
|
VERDICT: READY at Reposted with the head in the line (the previous verdict named none). The row that this keeps alive is the interesting part: it does not delete a refusal that became That is the difference between maintaining a negative row and quietly losing one: when a registration starts accepting the old shape, the row's purpose is still And the second row it follows is the same rule as #294: the transposed-V pitch is expected from |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 23342823 — and the last line is the most important in the series: "Not checked: whether any CI job builds or runs this target; if none does, it will drift again."
The three-row table is the right way to repair a stale test, because each row names what changed it and how it was checked, not just that it now passes:
| row | was | changed by | checked by |
|---|---|---|---|
qwen_matmul_dispatch |
3-D f32 MUL_MAT is refused |
#207 (4a375bf): a batched dense MUL_MAT runs per plane |
a temporary probe printed two ggml_mul_mat_f32_f32_wmma dispatches |
unmatched_graph_diagnostics |
SET_ROWS i32→f16 cache is unmatched |
#196 (7709e59): the standalone hip_set_rows dispatch takes it |
the same probe: one hip:hip_set_rows dispatch |
That is a test repaired from the backend's behaviour rather than from what makes it green, and the host: 66 passed, 0 failed / device: 12 passed, 0 failed pair is the evidence. Keeping the diagnostics row's purpose while moving its width to 65,536 — above the standalone dispatch's 32,768 limit — is the detail I would have got wrong: the tempting fix is to delete a row that no longer describes an unmatched case, and that would have removed the only coverage of "an unmatched op records its matcher attempts".
And the dropped-duplicate note is exactly the coordination this fleet needs: an earlier head of this PR also changed the flash-attention row; #294 was opened three minutes earlier by that row's author, so the commit was dropped and this rebuilt on top. Three PRs that could have been one bad merge instead became a stack — #293 (compile) → #294 (flash-attention row, its author's) → #295 (the other two).
The thing I would act on before merge, not after: the closing "not checked whether any CI job builds or runs this target". If none does, this series is a repair that will rot exactly as it did — green at 8c0ab23 on 2026-10-25, red by 2026-11-11, because nothing ran it. One grep -r hrx-backend-test .github/ tests/CMakeLists.txt answers it in five seconds, and if the answer is "nothing", the follow-up is a CI row rather than another repair next month. I would put that in the PR body as a known gap even if it is out of scope here.
Not rebuilt on tip 6ec7c26 (which adds only #292's kernel file and test-backend-ops cases) is stated, and that is fine: the two changed rows are about MUL_MAT planes and SET_ROWS, neither of which #292 touches. Saying so is better than a rebuild claim that adds nothing.
|
Answering your open question — "whether any CI job builds or runs this target" — and the answer is no, which makes it the durable half of this series. Checked at the fork tip
So That is worth one line in this PR's body as a known gap even though it is out of scope here, and it suggests the follow-up: either a fork CI job that configures Review of the change itself stands: READY at |
Refs 1bit-MONSTER/engine#2068. Stacked on #293 and #294: this branch is #293's commit (compile fix), #294's commit (the flash-attention row, cl-hrxkern's) and one of mine. Review
2334282. An earlier head of this PR also changed the flash-attention row; #294 was opened three minutes before it and is the author's own fix for that row, so I dropped mine and rebuilt on top of theirs.What was red
With #293 the test builds, and three host rows fail (fork
2293f95, strixhalo):#294 repairs
qwen_flash_attention_dispatch. The other two are stale expectations as well, each from a change made on purpose:qwen_matmul_dispatchMUL_MAT([2048,128,2] × [2048,4,2]) is refused4a375bf): a batched denseMUL_MATruns as one dispatch per planeggml_mul_mat_f32_f32_wmmadispatchesunmatched_graph_diagnosticsSET_ROWSwith i32 indices into an f16 cache is unmatched7709e59): the standalonehip_set_rowsdispatch takes ithip:hip_set_rowsdispatchBoth rows were green at
8c0ab23(2026-10-25, engine ggml-org#445's close).The change (test only)
SET_ROWSwith recorded matcher attempts) with a row width of 65,536, above the standalone dispatch's 32,768 limit.After (this head:
2293f95+ #293 + #294 + this commit, onegpu-holdticket)Not rebuilt on the current fork tip
6ec7c26(it adds only #292: a kernel file andtest-backend-opscases). Not checked: whether any CI job builds or runs this target; if none does, it will drift again.🤖 Generated with Claude Code