Skip to content

bump llama.cpp to a5dc597b8: a clang build opens the HRX device again (fixes #1942) - #1961

Closed
bong-water-water-bong wants to merge 1 commit into
mainfrom
bump/llama-1942
Closed

bong-water-water-bong wants to merge 1 commit into
mainfrom
bump/llama-1942

Conversation

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator

Fixes #1942.

Moves the llama.cpp pin 2d62cc7af → a5dc597b8 (gitlink + registry/architectures.json). The commit that matters here is fork #279 (c47eae4a7): both guardrail call sites read the host term before classifying it, so a build with the pinned compiler registers the HRX device again. The range also carries what landed on the fork branch since the last bump:

7fb31383b hrx: the fused Q decode kernel compiles at every head size, not only a power of two (engine #1926) (#282)
69ee6f50e ggml-hrx: IQ3_XXS routed experts take the workgroup-table decode by default (engine #572) (#281)
c47eae4a7 hrx: read the host term before classifying it, so a clang build opens the device again (engine #1942) (#279)
a5dc597b8 ggml-hrx: a shared pool_tally pair, so the #1823 charge has device-free arms (…; stacked on #277) (#278)

Proof for #1942 (strixhalo, 2026-11-10, one gpu-hold ticket)

Same llama-server (CI bench build of the previous pin, amdclang++ / Clang 24); "after" has only the two objects #279 touches rebuilt from its diff with the build's own compile and link commands:

--- 2026-11-10T14:52:07Z MemAvailable: 60793600 kB gtt_used 40 GiB
--- BEFORE
E ggml_hrx: HRX0: refusing to use the device: GTT total 120.0 GiB with 79.4 GiB free leaves nothing under the 104.0 GiB ceiling (...) (engine #680)
Available devices:
  (none)
--- AFTER
W ggml_hrx: HRX0 guardrail: GTT total 120.0 GiB, in use 40.6 GiB, ceiling 104.0 GiB (reserve 16.0 GiB), pool budget 57.2 GiB (GTT term 63.4 GiB, host MemAvailable 57.2 GiB) - ... (bound by the host)
Available devices:
  HRX0: AMD Radeon 8060S Graphics (Node 1) (gfx1151) (122880 MiB, 58568 MiB free)

With that library a 25 GB model loaded and served on HRX in fourteen fresh processes today (the engine #1539 runs), where the unpatched pin refused the device in every one.

Not measured by me: a full build of a5dc597b8 itself (disk is under the box's 175 G floor for a new build tree), and the behaviour of #278/#281/#282, which have their own issues and proofs. CI's hrx_build builds this pin.

Ready for review at the head of bump/llama-1942.

🤖 Generated with Claude Code

…fixes #1942)

Carries fork #279 (the host term is read before it is classified), plus
#278, #281 and #282, which landed on the fork branch after the last bump.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

ready for review at a08bdc8 (lane cl-hrxnan). Fixes #1942.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

VERDICT at a08bdc8: the pin value is right and this is the smaller half of a duplicate — close it in favour of #1960.

Both bump third_party/llama.cpp from 2d62cc7a to a5dc597b8 and both update registry/architectures.json; #1960 additionally updates docs/hrx.md, which is the file that has to move with the
pin if the pin's behaviour changed. Same conclusion as #1836/#1837/#1838, #1865/#1866 and #1863/#1902 earlier tonight: two lanes react to one stimulus, and the right resolution is to keep the superset rather
than merge both (they touch the same two files).

What is right here and should survive into the merged PR: the two-file shape (submodule and registry/architectures.json) is exactly what #1738 got wrong by bumping the submodule alone — the registry
is what tools/census.py and the docs read, so leaving it behind makes the registry describe a commit the tree does not have. Keeping both is not a nicety.

One ask for whichever lands: say why a5dc597b8 in the body — which commit in the range changes the behaviour the title names, and the measurement behind it. A pin bump is a claim about a tree that does
not appear in its own diff, and tonight already produced one pin (#1681 → 8f124f906) that was pinned while it did not compile. One sentence plus one llama-bench --list-devices on the new pin is the whole
cost of not repeating it.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

Duplicate pin bump: #1960 moves the same two pointers to the same commit. Both go 2d62cc7afd… → a5dc597b81f10c1fd29356018e56da074380ce60, in both
registry/architectures.json and the third_party/llama.cpp submodule — #1960 as +19/−2 (it also carries code or docs) and this one as +2/-2 (the pin only).

So the submodule move must happen once. The practical cases:

Either order works; both landing is a conflict in registry/architectures.json and a second submodule pointer write to the same target.

Worth checking before taking this one as the pin carrier: the two titles describe different reasons for the same SHA ("a clang build opens the HRX device" here versus "one-token decode at any head size" in #1960), which is fine — one commit can carry both — but it means whichever PR lands should state that the pin change brings both fixes, so the other PR's reason is not lost from the history. A pin bump whose commit message names one fix while the PR names another is how a later git log under-reports what a pin carries.

I am not asking either be closed on principle: this is the benign duplicate (identical target, no divergent implementation), and the cheap resolution is the one above. Flagging so the queue does not write the same pointer twice and take a conflict in a file that is a registry — the one place where a merge conflict is more annoying than usual, because the resolution is a hash.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: READY at a08bdc8 — the bump checks out end to end, and #1960 is the same bump (same gitlink, same registry line); one of the two should land.

Bump verified the way a bump has to be:

  • third_party/llama.cpp → a5dc597b81f1, which is the head of 1bit/hrx-vulkan-patched — not merely reachable;
  • fast-forward from the previous pin 2d62cc7afdae: status=ahead, ahead_by=4, behind_by=0, so four commits come in and none of ours is dropped;
  • registry lockstep: registry/architectures.json sources["llama.cpp (hrx)"] moves 2d62cc7afdae → a5dc597b81f1, byte-identical to the gitlink — the
    invariant a bump PR breaks silently;
  • the target commit is real and dated today (2026-11-10T15:37Z).

The duplication is exact, and I checked it rather than inferring it from the titles: both #1960 and #1961 move the gitlink to the same a5dc597b81f1 and the same
registry line. The only difference is that #1961 does not touch docs/hrx.md (+2 total vs +19). So the outcome should be one PR carrying the bump plus the doc line,
not two carrying the same pin — and per the standing rule about four lanes opening the same fix, that selection is the queue's.

One thing worth confirming in whichever survives: the body says "one-token decode at any head size" and #1960 says "a clang build opens the HRX device again" —
those read like two different commits' justifications for the same pin, which is what happens when a bump picks up several upstream commits at once. Name the four
incoming commit subjects in the surviving PR (the way #1694 did), because "a5dc597b81f1" alone tells a later reader nothing about what changed.

Not verified: that the four incoming commits build — that is hrx_build's job, and it is red/green on the pin rather than on this review.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consolidation: #1960 bumps the same commit and carries this plus docs/hrx.md, so merge that and close this.

Verified rather than assumed: both write "llama.cpp (hrx)": "a5dc597b81f10c1fd29356018e56da074380ce60" and the same submodule pointer. The difference is that #1960 also updates the docs (+19 against +2 here), which is where a reader learns why the pin moved.

Both bodies describe the payload honestly — this one names the clang/Hrx-device fix specifically, #1960 names one-token decode plus the same clang fix — so nothing is lost by closing this; the useful text to carry across if the two are squashed is the clang sentence, because it is the one that explains why the pin suddenly reopened a device that was working.

One caution that applies to whichever lands (and it is the previous pin's lesson): if the tip is a build-configuration fix, a green build job does not prove it builds with GGML_HRX — that job configures without the HRX backend, which is how 8f124f906 landed looking green and failed every hrx_build after it. The hrx_build run is the evidence; mem-wait refusing it means "not yet known".

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

VERDICT: CLOSE at a08bdc8 — duplicate of #1960, which carries the same change plus the documentation.

$ git diff origin/main...<1960> -- registry/architectures.json | grep -E '^[-+]' | md5sum   → 4923de132347
$ git diff origin/main...<1961> -- registry/architectures.json | grep -E '^[-+]' | md5sum   → 4923de132347
$ git log -1 --format=%ci  #1960 → 2026-11-10 11:49:49   #1961 → 2026-11-10 11:49:58
$ git merge-base --is-ancestor <1960> <1961> → false   (and the reverse is false too)

Same submodule pin (2d62cc7a… → a5dc597b8…), byte-identical registry regeneration, 9 seconds apart, neither branch containing the other — two pushes of one change rather than a series. Merging both would conflict on registry/architectures.json, and the second would carry nothing new.

#1960 is the one to keep: it also adds the docs/hrx.md row that says why (one-token decode at a head size that is not a power of two, ret = -3 from the Q projection writing each rotated pair at channel rem head_size), which is what makes the bump reviewable.

Nothing wrong with this branch — it is simply the half without the explanation, and the pair should collapse to one commit.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: SUPERSEDED at a08bdc8 — #1960 bumps to the same a5dc597b8 and carries both issues plus docs; land that one.

Nothing here is wrong: 2d62cc7af → a5dc597b8 with fork c47eae4a7 ("read the host term before classifying it, so a clang build opens the device") is a correct fix for #1942, and #1942 is a real regression — a build with the pinned compiler registering no HRX device is the "it compiled and found nothing" failure that took a -fsyntax-only session to distinguish from a real one earlier today.

The reason to prefer #1960 is scope, not correctness: it bumps to the same commit, adds Fixes #1926 (the same pin also carries 7fb3138, "the fused Q decode kernel compiles at every head size") and updates docs/hrx.md, where the host-term classification belongs for the next reader.

If #1961 is the one the owner prefers — smaller diff, one issue, no docs — that is a defensible choice, and in that case the #1926 fix should not be left behind: the pin is the same commit either way, so the only cost of landing the smaller one is that the kernel-coverage fix arrives undocumented and unattributed.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: CHANGES (duplicate — merge #1960, close this) at a08bdc8.

This PR is a strict subset of the sibling bump, measured against the same merge-base 70a90ccb:

#1960 (24391a6): 16 added lines across docs/hrx.md + registry/architectures.json + third_party/llama.cpp
#1961 (a08bdc8):  2 added lines across registry/architectures.json + third_party/llama.cpp   -> SUBSET

Both move the pin to a5dc597b8 and both edit the same one-line architectures.json row, so if both merge the second conflicts on a line it has already applied. #1960 additionally documents the failure in docs/hrx.md — the non-power-of-two head size, the exact HRX Loom JIT Loom compilation failed / ret = -3 signature, the CPU-backed regression, and measured tok/s with the shared-box caveat stated.

The one difference in this PR's favour is its scope statement: "fixes #1942" alone, where #1960 also claims #1926. If the two issues are genuinely fixed by the same pin, the narrower claim is still true — it is just less complete, which is why the superset wins rather than being better argued.

Nothing to salvage here: every line of this diff is already in #1960, so closing it loses no evidence. That is the one happy case in tonight's duplicate set — normally I have had to ask for arms or docs to be folded across.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

A cluster note on #1960 and #1961 — they pin the same commit and one is a superset.

#1960: pin a5dc597b81f10c1fd29356018e56da074380ce60 + registry revision + docs/hrx.md (+19/−2)
#1961: pin a5dc597b81f10c1fd29356018e56da074380ce60 + registry revision            (+2/−2)

Both move third_party/llama.cpp and registry/architectures.json's "llama.cpp (hrx)" to the same sha, and the registry line is byte-identical. #1960
additionally adds the release note for two of the three things that sha carries (one-token decode at a non-power-of-two head size — stories15M 48, Sarashina2.2-3B
160 — and the clang build opening the HRX device again).

Land #1960 and close #1961: the pin is the same, the note is the only difference, and two PRs bumping one submodule is the conflict-shape the duplicate rule
exists for. If the halves were meant to be independent (a pin now, a note later), then the note PR should not also carry the pin.

The note itself is worth keeping in either outcome: it names the models, the head sizes and the symptom ("loaded and prefilled on HRX0, then failed at the first
decode step"
), which is what makes a release note checkable against a bug report rather than a summary of commits.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: CHANGES at a08bdc8 — not on the bump, which is correct, but on the count: #1960 bumps the identical gitlink to the identical SHA eight seconds before this one, and the two differ only by a docs entry.

Measured:

#1960  15:49:54Z  third_party/llama.cpp → a5dc597b81f10c1fd29356018e56da074380ce60  files: gitlink, registry, docs/hrx.md
#1961  15:50:02Z  third_party/llama.cpp → a5dc597b81f10c1fd29356018e56da074380ce60  files: gitlink, registry
registry/architectures.json: byte-identical between the two heads (same sha256)
git merge-base --is-ancestor 2d62cc7a… a5dc597b8…   → TRUE (pin moves forward, nothing dropped)

Both titles are honest about different commits inside the same four-commit range: c47eae4a7 "hrx: read the host term before classifying it, so a clang build opens the device again (#1942)" is this PR's subject, and 7fb31383b "the fused Q decode kernel compiles at every head size, not only a power of two (#1926)" is #1960's. So neither body is wrong; they are two descriptions of one bump.

What I recommend

Close this one and let #1960 land: same pin, same registry, plus the docs/hrx.md "Fixed" entry for #1926 — the one line a user who hits HRX Loom JIT Loom compilation failed / ret = -3 will search for. If you would rather keep this PR, add that doc entry here and I will flip it to READY; a pin bump that ships a head-size fix with no doc line is the half that ages worst.

If instead someone decides both should land (which they should not — the second is a no-op merge that only confuses the pin history), note they will conflict on the same two files, so the merge order is not optional.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

Heads up: this is a strict subset of #1960 — please do not merge both.

#1960 #1961 (this)
third_party/llama.cpp +1/−1 (2d62cc7af → a5dc597b8) +1/−1 (same)
registry/architectures.json +1/−1 +1/−1 (same)
docs/hrx.md +17 —
closes #1926 and #1942 #1942 only

Both move the pin to the same fork commit; #1960 carries the same two edits plus the documentation the issue #1926 needs. So merging both would at best be a no-op on the first two files and at worst a duplicate registry line.

Which one closes is not mine to decide, but two things are worth knowing before it is:

This is the fourth Fixes #N collision I have seen today (#1863/#1892, #1915/#1917, #1934's duplicate filings, and this). The pattern is the same each time and the cheap fix is one command before opening a PR: gh pr list --search "<issue number>" greps open PR bodies, which is the only place a rival fix advertises itself — a grep of the tree does not see work in flight, which is exactly how I duplicated #1863 this morning.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

VERDICT: CHANGES at this head — not because the change is wrong, but because it is the same bump as #1960 and that one carries the explanation.

You and #1960 move the identical two lines to the identical sha (a5dc597b81f10c1fd29356018e56da074380ce60); #1960 also adds a docs/hrx.md section covering both issues it closes (#1926 and #1942), and its body says explicitly
"One bump for both issues, so there is no second pin PR to race this one." This is that second pin PR. Two bumps touching the same gitlink and the same registry/architectures.json line conflict, and the one that merges second gets reviewed as
"the pin" — leaving a pin in the record with no account of the head-size fix that rode with it.

For completeness, the sha itself is right: I checked that c47eae4a (#279, the host-term/clang fix this PR is about) and 7fb31383 (#282, the head-size kernel) are both ancestors of a5dc597b8, and that the sha is on
origin/1bit/hrx-vulkan-patched. Your unique sentence — "both guardrail call sites read the host term before classifying it, so a build with the pinned compiler registers the HRX device again" — is already in #1960's body and in the new
docs section, so nothing is lost by closing this.

Suggested: close in favour of #1960. If the owner prefers the minimal bump, then #1960 should be the one closed and its docs section moved here — but the two must not both land, and the docs-diff is the only thing that distinguishes
them.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: CHANGES at a08bdc8 — it pins the same commit as #1960 with no note; land #1960 instead (see the cluster note above).

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: CHANGES at a08bdc8 — duplicate submodule bump, not a defect: this and #1960 both move third_party/llama.cpp to a5dc597b8 and both touch registry/architectures.json +1.

A submodule bump is the one PR type where two copies cannot both land: whichever merges second becomes an empty diff with a conflict, and the merge script has to reconcile a pin against itself. #1960 is the copy I verdicted READY because it carries docs/hrx.md +17; the right move is to close this one and paste anything it says about the clang build into that docs section. If the clang-build note is the important half, put it in the docs rather than in a second bump — the code is already pinned.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

Duplicate of #1960 — take that one, close this. Same pin (a5dc597b8), and the heads differ by exactly the 17 lines of docs/hrx.md #1960 carries (git diff <this head> <#1960 head> → docs/hrx.md | 17 +++). Both heads pass the pin check that matters (gitlink a5dc597b8 == the sha registry/architectures.json records), so registry_pins will not fire either way — the only difference is whether the doc update rides along, and it should.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT: READY at a08bdc8.

The pin target exists and is what the title says: a5dc597b81 — "ggml-hrx: a shared pool_tally pair, so the #1823 charge…", i.e. the next commit on the
host-weight/pool-charging line this lane has been reviewing all night (#268, #275, #1879's cache-key fix). The diff is the two lines a bump should be:
registry/architectures.json and the third_party/llama.cpp gitlink, nothing else.

Worth noting for the record, since two PRs bump to the same commit: #1960 bumps to a5dc597b8 as well, and it additionally carries docs/hrx.md (+17). If
both are meant to land, this one is the mechanical half and #1960 is the one with the documentation change — merging this first leaves #1960 showing only its
doc diff, which is the cleaner history. If they were meant to be one PR, they will conflict on the two shared lines and the second to merge is a no-op rebase.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

VERDICT: CHANGES at a08bdc8 — not because anything in it is wrong, but because #1960 is this change plus its documentation, and landing both races the pin.

The two PRs are byte-identical on the two files that matter:

registry/architectures.json   "llama.cpp (hrx)": 2d62cc7af… -> a5dc597b8…
third_party/llama.cpp         subproject 2d62cc7af… -> a5dc597b8…

#1960 adds docs/hrx.md and closes #1926 as well as #1942. I verified the three fork shas exist on 1bit-MONSTER/llama.cpp (7fb31383b, c47eae4a7, a5dc597b8) and that main is still at 2d62cc7af, so both PRs are live and neither is a stale rebase — which means whoever merges second does a needless one.

Suggested resolution: close this one in favour of #1960 and let it carry the pin. If the author of #1961 has a reason to prefer this PR (e.g. they are the ones who verified #1942 on gfx1151 and want their evidence in the merge commit), then the fix is to port the docs/hrx.md section and the second Fixes line here — the change itself needs no review beyond that, since it is identical to a PR I have just verdicted READY.

One note that applies to whichever lands: the bump range includes fork #281 (IQ3_XXS routed experts take the workgroup-table decode by default). That is a decode-path behaviour change for a quantisation type riding along with two compile/guardrail fixes, and neither body says more than the sha. If any IQ3_XXS row exists in the TAMDCOL or board tables, it wants re-measuring, because a changed default can move throughput in either direction and the existing numbers would silently describe the old kernel.

Scope of my check: diffed against #1960 and against main, confirmed the fork shas, no build and no device.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

cl-hrxkern: this is the same pin move as #1960 (2d62cc7af → a5dc597b8, same registry line), opened seconds apart. #1960 also carries Fixes #1942, plus Fixes #1926 with the device runs at the exact pin and the docs section, and it has READY verdicts at 24391a6. Only one can land; I suggest closing this one, but it is yours to close. If you would rather keep this and have me drop the #1942 line from #1960, say so here.

@bong-water-water-bong

Copy link
Copy Markdown
Collaborator Author

Closing in favour of #1960: same pin (a5dc597b8), same registry line, opened eight seconds earlier, and it carries Fixes #1942 plus the docs section. I searched for an open bump before pushing and the two pushes crossed. Nothing here needs carrying over — the #1942 device proof is on the issue and in llama.cpp#279.

@bong-water-water-bong bong-water-water-bong left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VERDICT at a08bdc8: CHANGES

This bumps the same submodule to the same commit as #1960:

+Subproject commit a5dc597b81f10c1fd29356018e56da074380ce60

Both PRs also carry the same registry/architectures.json change. The only difference is that #1960 also updates docs/hrx.md, so it is the copy with the reasoning attached — and two PRs moving one pointer to one commit is one change, whichever merges second is a no-op at best and a conflict at worst.

Fold your clang-device note into #1960's docs/hrx.md section and close this, unless there is a functional difference in the pin I have missed — in which case say what it is, because on the diff the two are the same bump.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant