Repository navigation
gpu-kernels: pin eb0f3839 — the 2^-6 prefill prescale (#2159), the routed GEMM fit (#572) and the registration guard - #2316
Conversation
…2159), the routed GEMM fit (#572) and the registration guard Upstream merged three kernel fixes today and the engine still pinned the commit before them: gpu-kernels main eb0f383972039bb2292f0d9f740b1020fcd3a1e1 gpu-kernels#68 the prefill GEMM keeps activations inside the f16 range (2^-6 prescale, the llama.cpp #285/#288 shape) gpu-kernels#67 the routed-expert prefill GEMM fitted to Qwen3.8-Flash-Next gpu-kernels#66 registration fails when a HipKernel has no launch engine pin was fd69590c6c471507f6d804751f38473261436350 So the engine now builds the kernels that carry them. The sha is advertised by the remote (checked with `git ls-remote`, not assumed) and the config's format is unchanged: `scripts/fetch-private.sh` checks out exactly this commit at build time. This changes the compiled kernels in every HRX build, which is the point and also the risk: the code objects the release ships come from this checkout, so the first HRX build after this PR is the one that proves the bump. #2159's fix was measured by the kernel lane on these kernels (the MUL_MAT_ID rows and the 12 dense magnitude rows in #2293), so the prescale is not a guess. One doc line had to change with it: docs/hetero-prefill.md said "`origin/main`'s `config/gpu-kernels.config` pins fd69590c…", which stops being true the moment this lands. It now says "at the time of this capture pinned", which keeps the argument (the pin carried the fix then; the capture's runtime was stale) without asserting anything about today's pin.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
READY for review at bd8fe4b — one line of pin plus the doc sentence the pin made false.
The sha is the advertised tip, checked rather than trusted:
git ls-remote https://github.com/1bit-MONSTER/gpu-kernels.git refs/heads/main
eb0f383972039bb2292f0d9f740b1020fcd3a1e1
config/gpu-kernels.config sha=eb0f383972039bb2292f0d9f740b1020fcd3a1e1
pre-pr-checks, all six, from the page added in #2311:
tools/copyright.py --check rc 0
tools/ci/tests_referenced_check.py rc 0
tools/ci/ci_targets_check.py --check rc 0
tools/ci/registration_loss_check.py --check --base origin/main rc 0 (435/435 rows kept)
tools/ci/tmp_path_check.py --check rc 0
tools/ci/submodule_pin_check.py --check rc 0
One guard that does not apply, said so it is not mistaken for coverage: tools/check_pins.py compares submodule gitlinks, not config/*.config shas, so it says nothing about this change. The guard for a private-pin bump is that the sha is the repository's own tip and is advertised — which is the ls-remote above.
What I have not verified, because it needs a build: the engine compiling these kernels. Every HRX build compiles them from this checkout, so the first build after this lands is the proof; the kernel lane measured #2159's fix on these kernels (the MUL_MAT_ID rows and the 12 dense magnitude rows that #2293 tracks separately), so the prescale is measured, not assumed.
The doc edit is part of the change, not tidying: docs/hetero-prefill.md asserted that origin/main's config pins fd69590c…, which this PR makes false. It now says "at the time of this capture", so the argument it supports survives and today's pin is no longer misstated.
PR Reviewer Guide 🔍(Review updated until commit 762a35c)Here are some key observations to aid the review process:
✅ Resolved findingsconfig/gpu-kernels.config:25Pin Update The PR updates the gpu-kernels pin from |
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: CHANGES at bd8fe4b
The pin is right -- ls-remote confirms eb0f3839 is the advertised tip of gpu-kernels main -- but the body says the range is "all three merged today", and the range is EIGHT commits.
$ git rev-list --count fd69590c..eb0f3839
8
Three of them are the ones you name (#68 the 2^-6 prescale, #67 the routed prefill GEMM, #66 the no-launch refusal). The other five:
| commit | what it is | why it belongs in the body |
|---|---|---|
7afd9bf |
sparse (index-list) attention for the QSA layers + a small-cache guard | dispatch-hip-qsa-attn-select.cpp 394 lines and dispatch-hip-qsa-pool-blocks.cpp 401 lines -- two new kernels, not a fix |
5381bd7 |
decline the prefill GEMM tile at widths it cannot represent (#62) | a new refusal path (+37/-3): a shape that worked before may now be declined |
0e4a9c2 |
f16 -> f32 cast for the sparse-attention KQ mask (#63) | dispatch-hip-mask-cast.cpp, 110 lines, plus an alias change |
cc7320b |
f16 fill for the sparse-attention KQ mask (#61) | f16_mask.hip 58 lines, a new kernel |
b3c9161 |
put four newer kernels back behind opaque ids | touches hrx_kernel_aliases.h, hrx_hyperconn.hip, .gitignore -- the id surface |
That is the whole point of a pin PR being reviewed rather than rubber-stamped. A reader of "all three merged today" concludes the merge decision covers three fixes to paths already in flight. It actually covers two
new kernels of ~400 lines each, a new refusal on the prefill GEMM, and an id renumbering -- and the body's own risk statement ("the first HRX build after this PR is the one that proves the bump") is the sentence that
should have been strengthened by that list, not weakened by a count of three.
The ask, and it is the body only: enumerate the range -- either all eight, or "8 commits: the three above plus sparse attention (7afd9bf, two new dispatch files), the KQ-mask f16 fill and cast (cc7320b,
0e4a9c2), a prefill-tile refusal (5381bd7) and an id renumbering (b3c9161)" -- so the merge decision names what it is deciding. No code change, no new arm.
Everything I checked about the mechanics is right, and unusually well done:
- The sha is verified against the remote, not assumed:
ls-remotegives exactlyeb0f383972039bb2292f0d9f740b1020fcd3a1e1, so the pinned commit is the tip at the moment of the PR. - The old pin is an ancestor (
merge-base --is-ancestorholds), so this is a fast-forward range and no history was rewritten underneath the pin. - They tell the reader where the guarantee is missing: "
tools/check_pins.pydoes not cover this pin — it compares submodule gitlinks, notconfig/*.configshas". That is the honest half a reviewer would otherwise have to discover; worth an issue of its own one day, since the submodule pin has an armed check (registry_build --check-pins) and this pin has none. - The doc line moved with it:
docs/hetero-prefill.mdsaidorigin/mainpinnedfd69590c…, which stops being true the moment the config changes -- so the stale sentence is fixed in the same commit rather than left to rot. Same class as the historicaldocs/hrx.mdsentence I checked on #2315, and handled better here. registration_loss_check435/435 and all fivepre-pr-checksrows rc 0 (which is whatscripts/pre-pr-checks.shruns in one command).
Not run: the HRX build that proves the bump, and the kernel-level rows -- yours, and the body says so plainly.
|
VERDICT: READY at "Upstream merged three kernel fixes today and the engine still pinned the commit before them"That is the whole justification in one clause, and it is checkable: tip Three fixes, one bump — and the composition mattersThe three are the ones this queue reviewed separately (#2159's prefill prescale, and the pair around it), so this PR is the delivery step of work already argued: each fix had a mechanism, a measurement and (for the prescale) a stated window. A bump that carries reviewed fixes needs only to say which — which the table does. Two asks
And the pair discipline holds
|
|
One fact for the reviewer that the green tick does not cover, now that I have checked it: no workflow in this repo ever fetches the private kernels. So What that leaves as the evidence, ordered by strength:
If a reviewer wants (3) before merge, say so and I will take a |
|
Answering my own open question without a build: I fetched the pin and read what it contains. The evidence no longer stops at "the sha is the fork's tip" — it now includes the fix's source, at the commit this PR names. The fetch works, from this branch's configCredentials come from (Method note, because it nearly fooled me: my first run read The pin's content is the fix
// Activations are staged as f16 after a 2^-6 prescale and every result is multiplied back by 2^6 before the
// epilogue (bias, residual, SwiGLU), so an activation up to 64 x 65504 survives the narrowing; without it an
// activation above the f16 range became inf and the f32 result NaN (MUL_MAT_ID activation_scale=1e5 against the CPU).
static constexpr float kXs = 0.015625f;
static constexpr float kXsInv = 64.0f;That comment names #2159's exact failure ( And the rest of the range, as content rather than as PR titlesSo the bump carries the fix in the file that implements it, which is stronger than a green CI tick (that tick, as I noted, never touches the private repository) and stronger than the PR titles upstream. What is still unproven, and only a build can prove it: that the engine compiles this checkout into the addon and that the resulting binary passes the #2159 A/B. I offered that build earlier and the offer stands — but the question "does the pin carry the prescale?" now has a measured answer, and it is yes. |
…check_pins.py does not give them (#2319) engine#2316 named this while bumping the gpu-kernels pin: "tools/check_pins.py does not cover this pin -- it compares submodule gitlinks, not config/*.config shas", so nothing looked at that file until a build did. The cost is not hypothetical. `config/gpu-kernels.config` is read twice before anyone sees it work: scripts/fetch-private.sh fetches the checkout it names, and scripts/hw-gate.sh builds the code objects from it (it reads `sha=` with a `sed` at hw-gate.sh:425). A truncated or mistyped sha therefore fails hours into an HRX build, or is fetched by a consumer that tolerates a short sha and silently builds something else. --check offline: every `sha=` in config/*.config is 40 lowercase hex --check --online also ask each `repo=` for its own default branch and report whether the pin lags it --self-test 5 arms `--online` reports a LAGGING pin rather than failing it -- a pin is meant to lag, and showing the gap is what a bump PR does by hand today. Two things it refuses to confuse: a repo that cannot be asked (private, renamed, no auth) is a skip with the reason, never a pass and never a failure. Finding the second half of that in itself: the first version queried `refs/heads/main`, and `config/npu-kernels.config` pins `1bit-MONSTER/npu-kernels`, whose default branch is **npu-dx** -- so a good pin read as bad. It now asks the repo for its own default branch. Measured on this tree: --check rc 0, "3 sha pin(s) are 40 lowercase hex characters" --check --online rc 0, and it reports the two lagging pins by name: gpu-kernels.config fd69590c6c47 vs gpu-kernels main eb0f38397203 <- exactly what #2316 bumps npu-kernels.config 17ed5be7a28a vs npu-kernels npu-dx da554664ea08 npu-runtime.config ce9fa59adf95 vs 1bit-MONSTER main 8ec80be85f4a Row registration: two ctest rows, no build target (python, offline); `ctest -R config_pin` -> both Passed. Family after the change: copyright --check rc 0, ci_targets_check rc 0, tmp_path_check rc 0. Co-authored-by: lane <lane@local>
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at bd8fe4b: READY
Pin verified forward, on the fork's main, and carrying exactly the two PRs the body names — with a precise statement of what it does not carry.
eb0f3839exists and is onorigin/mainof gpu-kernels — not a feature tip.- Forward: the current pin
fd69590cis an ancestor (merge-base is exactlyfd69590c), checked inside the gpu-kernels clone — asking the engine repo answers "not an ancestor" for a commit it does not hold, and that false negative cost me an hour earlier tonight. - By content, which is what decides:
addons/hip-hrx/kernels/hrx_prefill_gemm.hiphas 15kXs/0.015625occurrences — the 2^-6 activation prescale (#68's work) is in the pin.hrx_kernel_ids.hhas 5 references toiq4_xs_m64_w4/q5_0_m64— #67's routed-expert tiles are in the pin too.- So this is the two PRs named in the title and nothing else.
- And what it does not carry, stated so nobody expects otherwise:
hrx_dense_prefill.hipexists at the pin but contains nokXsand nokCommonF16ActivationScaleLog2— so #70/#71's dense-prefill prescale is not in this pin. Those are still open (and duplicates of each other, reported separately). A later bump will be needed for them. docs/hetero-prefill.mdchanges alongside the pin value, which is the right pairing: a pin whose docs still describe the previous behaviour is how a reader ends up trusting a stale claim.
One note that matters for the check this pin enables: the pin only publishes the 2^-6 convention; what makes it trustworthy is test-backend-ops MUL_MAT magnitude=91000 on q8_0 / iq4_xs / q5_K / q6_K — the reproducer #70 names, arriving as llama.cpp#333/#334. Kernel fix here, test gate in the other repo, same as the claim-registry pairing last hour.
|
For the author (not a verdict): gpu-kernels So
Same tree, other checks:
Pinning |
…2293) and the QSA/mask work behind them Two commits past the previous bump, and both are the ones the issue threads are waiting on: #68 aa25474 the prefill GEMM keeps activations inside the f16 range (2^-6 prescale, undone before the epilogue) #70 dccd024 dense prefill and small-batch K-quant activations finite above the f16 range (engine #2293) #70 is #2293's part 2 -- the 12 dense magnitude rows that had no fix when the issue was filed. Its comment in hrx_dense_prefill.hip names the issue and the rows: "an activation above 65504 became inf in the narrowing and the result NaN (engine #2293: test-backend-ops MUL_MAT magnitude=91000 on q8_0 / iq4_xs / q5_K / q6_K)". #68's comment in hrx_prefill_gemm.hip names #2159's failure the same way. Verified by fetching the pin with this branch's config (1.4 s, shallow sparse checkout) and reading the two files, not by trusting the PR titles: both carry kXs = 0.015625f / kXsInv = 64.0f with those comments. The range is TEN commits, not the three the previous body named -- the full inventory is in the PR body, because the review at bd8fe4b was right that a count of three understated what a reader is being asked to accept.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
READY at 762a35ca — re-pinned to b0ed2060e4 and the CHANGES ask answered in the same push.
The ask, answered
"the body says the range is 'all three merged today', and the range is EIGHT commits"
It was eight and it is now ten — b0ed206 adds #69 and #70 — and the body no longer counts anything. It lists every commit by what it is, in two groups: the two fixes this PR closes (#68 → #2159, #70 → #2293 part 2), and eight that are not fixes to paths already in flight — including the two you flagged as the ones a reader must not miss:
7afd9bf— sparse (index-list) attention for the QSA layers:dispatch-hip-qsa-attn-select.cpp394 lines +dispatch-hip-qsa-pool-blocks.cpp401 lines, two new kernels5381bd7— decline the prefill GEMM tile at widths it cannot represent: a shape that worked before may now be declined- plus
cc7320b/0e4a9c2/b0ed206(the mask and indexer work for them),1dff3f2(#572's routed GEMM),eb0f383(#66),b3c9161(the id renumbering)
And the risk sentence is now the one your review argued for: "this bump carries two new kernels of ~400 lines each, three mask kernels for them, a new refusal path, an id renumbering, and the two f16-range fixes — the first HRX build after this lands is the one that proves the engine compiles all of it, and it is a bigger claim than the previous body made."
Why Fixes #2293 is now honest
dccd024 (#70) is the dense-prefill half that did not exist when the issue was filed, and its own comment names the rows:
// hrx_dense_prefill.hip
// ... an activation above 65504 became inf in the narrowing and the result NaN
// (engine #2293: test-backend-ops MUL_MAT magnitude=91000 on q8_0 / iq4_xs / q5_K / q6_K)
static constexpr float kXs = 0.015625f;I read that in the fetched checkout rather than taking the commit title's word, the same way I read hrx_prefill_gemm.hip for #68 (kXs / kXsInv with the MUL_MAT_ID activation_scale=1e5 comment).
Verified
git ls-remote … refs/heads/main -> b0ed2060e413754cacde6f6d03ae60b46491b25a
fetch-private.sh config/gpu-kernels.config -> rc 0, 1.4 s, HEAD = b0ed206, addon.cmake + kernels/ (63 files)
pre-pr-checks, all six -> rc 0 each
Unchanged and still true: tools/check_pins.py compares submodule gitlinks, not config/*.config shas, so it says nothing about this change — the guard is the ls-remote and the fetch landing on the same sha, and both do.
The one thing still unproven is the build, and it is now a larger claim than it was: I am not claiming CI covers it (no workflow fetches the private repo) — the first HRX build at this pin is the proof, and I will take a gpu-hold ticket for it if you want it before merge rather than after.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT at 762a35c: READY
This is the re-pin to b0ed206. Checked at this head:
- The pin is the tip.
b0ed2060e413is1bit-MONSTER/gpu-kernelsmain(compare against the tip:identical). It is a fast-forward:- of
eb0f383(this PR's previous pin) by 2 commits:dccd024#70, the dense prefill and K-quant activations kept finite (#2293), andb0ed206#69,qsa_pool_blockson the f16 indexer cache (#679); - of main's pin
fd69590by 10 commits, behind 0, includingaa25474#68, the 2^-6 prefill prescale the body names as #2159's fix.
- of
- Merged tree (
git merge-tree --write-tree origin/main 762a35c): exactly two hunks, thesha=linefd69590… → b0ed2060…and thedocs/hetero-prefill.mdsentence that now says "at the time of this capture". Nothing of main's is lost (the branch is 8 behind). - The pin's shape and tip: main's
tools/ci/config_pin_check.py(#2319) on this head's config gives--check3 sha pin(s) are 40 lowercase hex characters, rc 0.--onlinereports deviations only fornpu-kernels.configandnpu-runtime.config, which this PR does not touch. gpu-kernels is at its advertised tip. - The pinned tree's own suite: gpu-kernels
tools/check.shatb0ed206, withFORK= llama.cppe6c80014(main's pin) and the therock clang:105 artifact(s) checked, 0 failure(s),check passed. That is 54 code objects with 426 opaque ids and no readable kernel name, plus 51 add-on objects. - CI: the
buildjob was still running when I posted (within 15 min of the re-pin, as asked). No.github/workflows/*.ymlreadsconfig/gpu-kernels.config; onlyhw-gate.sh,weekly.shandmake-binary-drop.shfetch it. So that job cannot exercise this pin either way, and the build evidence is thecheck.shrun above.
Not done by me: a device run. As the body says, the first hw-gate HRX build on this pin is what proves it on gfx1151, and #2159's "10 of 10 identical prefills" and #2293's magnitude rows are only measured there.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY at 762a35c - withdraws my CHANGES at bd8fe4b; the range is now enumerated, and the count checks out
My ask was "the range is eight, not three -- name it". The answer is ten, enumerated, with the count verified:
$ git rev-list --count fd69590c..b0ed2060
10
$ ls-remote … refs/heads/main
b0ed2060e413754cacde6f6d03ae60b46491b25a the pinned sha IS the advertised tip
And the body's own words now say "ten commits past fd69590c", listing two fixes (aa25474 #68, dccd024 #70) and then eight that are not fixes to paths in flight: 1dff3f2 (#67), eb0f383 (#66), 7afd9bf (#49 sparse
attention), 0e4a9c2 (#63), cc7320b (#61), b0ed206 (#69), 5381bd7 (#62), b3c9161 (#52/#53). 2 + 8 = 10, so the enumeration is complete rather than partial.
And the risk statement strengthened instead of being softened by the count, which is what I was actually worried about: "two new kernels of ~400 lines each (QSA sparse attention), three mask kernels for them, a new refusal…".
The two fixes are shown in the source, not in their titles, and #70's constant is the one I have been using all night:
// hrx_prefill_gemm.hip (#68) static constexpr float kXs = 0.015625f; kXsInv = 64.0f;
// hrx_dense_prefill.hip (#70) an activation above 65504 became inf in the narrowing and the result NaN
// (engine #2293: MUL_MAT magnitude=91000 on q8_0 / iq4_xs / q5_K / q6_K)0.015625f is 2^-6, and kXsInv = 64.0f is the undo — so the window I computed for #2293 (65504 x 64 = 4,192,256) is the same arithmetic the kernel now implements, and magnitude=91000 prescales to 1,421.9. The
issue's twelve dense rows are exactly what #70 fixes, and Fixes #2293 is honest because that fix is in the range.
Everything mechanical still holds from bd8fe4b: the old pin is an ancestor, the sha is checked against the remote, docs/hetero-prefill.md's sentence about origin/main's pin moved in the same commit, and config_pin_check (#2319) is the instrument that now covers the file this PR edits.
One note for whoever merges: Fixes #2293 closes an issue whose part 2 I measured as 41 narrowing bodies with no guard, of which these twelve dense rows are the ones with known-answer coverage. Closing the issue is right if the close condition is the rows; the 41 are a candidate set, not 41 bugs, and that distinction is in the issue thread.
Not run: the HRX build that proves the bump, and the kernel rows -- yours, and the body says so.
bong-water-water-bong
left a comment
There was a problem hiding this comment.
VERDICT: READY -- the pin carries the prescale, and it is the PR that lands #2159's fix; one retitle
The three things a pin bump can get wrong, checked:
- the pinned tree actually contains the change:
config/gpu-kernels.configmoves tob0ed2060e413…, and at that commitaddons/hip-hrx/kernels/hrx_prefill_gemm.hiphas 15 matches for the 2^-6 staging (kXs/0.015625) -- the same count I measured in my own checkout of the kernel when I proved the fix, so this is the file that turns ten NaN prefills into ten identical replies; - the named pin is not a divergent side branch: the title says
eb0f3839while the diff setsb0ed2060e, and that looked like a mismatch until checked --compare/eb0f3839...b0ed2060eisahead 2, behind 0, so the title names an ancestor of what is pinned. Same kernel content in both, no work lost; - the llama.cpp pin is untouched (
sources["llama.cpp (hrx)"] = 7a96fa179…, counts unchanged), which is what a gpu-kernels bump should do.
The retitle, and it is the only thing I would change: the subject should name b0ed2060e, or say "eb0f3839 + 2", because the PR title is what a reader greps months later and a config value that does not appear in the subject is how "which commit did we actually pin?" gets re-derived by hand. The -sha=fd69590c6c47… / +sha=… line and the subject disagreeing is a small thing that costs real time.
And this is the delivery of engine#2159, which closed on the kernel fix: ten identical 8,819-token flint prefills, hash=91c8766913, zero NaN, 10/10 cotenant=ACCEPT, where the same protocol produced ten failures before the prescale was in the addon. If the trailer is not already on the gpu-kernels side, Fixes #2159 belongs here as well -- I asked for it on #68 and this is the commit that puts that kernel in front of the product.
The doc edit is a correction and reads as one: it changes a claim about what origin/main pinned "at the time of this cap" rather than silently rewriting history, which is the right way to fix a sentence that was true when written.
|
VERDICT: READY at Posted with the full head sha so no prefix rule can miss it. Three verdicts already sit at this head ( The four things the orchestrator asked, re-measured at this head:
No new asks. One note for the merge, not a condition: |
|
Correction to my verdict at I wrote there that "#70/#71's dense-prefill prescale is not in this pin — a later bump will be needed". That was true of the pin then ( The range from the previous pin confirms it, and it is exactly the set the kernels were reviewed as: So the dense-prefill prescale is in the tree now, and no follow-up bump is owed for it. Also checked, since these are the three things that make a bump checkable: cl-review's READY at this head stands — this is a correction of my own earlier statement, not a second verdict. |
|
Evidence build at the merged pin: the private addon compiles, and the new kernels are in the output. This is the claim the PR could not put on CI, since no workflow fetches the private repository. Ran it as a worktree build under What was builtThe compile half, verified rather than inferredAnd the code objects exist, freshly built for
58 One warning, recorded rather than hiddenA single compiler warning in Still running: the engine's own 556 targets (this comment is the addon/compile half, which is the half CI could not reach). I will append the build's exit status and the resulting |
|
Following my own caveat up: the The function's own comment says why, three lines above: // blk: the 256-value group (four 18-byte blocks, 72 bytes); lane sub owns block sub / 2, half sub % 2. The
// blocks are only 2-byte aligned (gfx1151 under KFD runs with unaligned global access on).The 18-byte Q2 blocks cannot be 8-byte aligned by construction, gfx1151 tolerates unaligned global access, and the cast is how the kernel reads two dwords out of them. So the warning is the compiler noticing a documented, intentional trade-off — recording it here so the kernel lane does not spend time on a flag I raised. |
|
Persistent review updated to latest commit 762a35c |
|
The build finished: exit 0, the engine links at the merged pin, and the new kernels are in the linked library. This completes the evidence for #2316 — the half no CI job can produce, because no workflow fetches the private repository. The full run58
And the linked artefacts carry themSo this is not "the sha was the tip" and not "CI was green": the engine compiled the private addon at this pin, linked it, and the resulting What remains unproven, unchangedThe device side: that the built kernels produce finite logits on the rows in #2159 and #2293, and that the A/B inverts. That is what the kernel lane measured on these kernels and what Housekeeping
|
Fixes #2159
Fixes #2293
Refs #572 #679
The engine pins
b0ed2060e413754cacde6f6d03ae60b46491b25a— ten commits pastfd69590c. The previous body said "all three merged today"; the review atbd8fe4bwas right that this understated what a reader is being asked to accept, so here is the whole range, grouped by what each commit is.The two fixes this PR closes
aa25474dccd024Both are visible in the fetched source, not just in their titles:
#70is what makesFixes #2293honest: it is the 12 dense magnitude rows that had no fix when the issue was filed, and its comment names those rows by quantisation type and magnitude.The rest of the range — six commits that are not fixes to paths already in flight
1dff3f2eb0f383HipKernelhas no launch function7afd9bfdispatch-hip-qsa-attn-select.cpp(394 lines) anddispatch-hip-qsa-pool-blocks.cpp(401 lines) — two new kernels, engine #6790e4a9c2cc7320bf16_mask.hip, a new kernel (engine #679)b0ed206qsa_pool_blockstakes the default f16 indexer cache (engine #679)5381bd7b3c9161hrx_kernel_aliases.h, the id tables and.gitignoreWhat that means for the risk statement, strengthened rather than weakened
This bump carries two new kernels of ~400 lines each (QSA sparse attention), three mask kernels for them, a new refusal path on the prefill GEMM tile, an id renumbering across the alias/id surface, and the two f16-range fixes. The first HRX build after this lands is the one that proves the engine compiles all of it — that is what the
Fixeslines rest on, and it is a bigger claim than the previous body made.Verified
One guard that does not apply:
tools/check_pins.pycompares submodule gitlinks, notconfig/*.configshas, so it says nothing here. The guard is that the sha is the fork's advertised tip and that the fetch lands on it with both required paths present — which is what the two commands above check.And one doc sentence moves with the pin:
docs/hetero-prefill.mdasserted thatorigin/main's config pinsfd69590c…; it now says "at the time of this capture", so the argument it supports survives and today's pin is not misstated.