Skip to content

Open the GB10: admit SM 0xa04 only with its PCI identity and the Blackwell-B class set - #246

Merged
aien-spark merged 2 commits into
mainfrom
fix/gb10-sm-admission
Nov 1, 2026
Merged

aien-spark merged 2 commits into
mainfrom
fix/gb10-sm-admission

Conversation

@aien-spark

@aien-spark aien-spark commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Why

Since #170 the GB10 cannot be opened: nvrm_open refuses it with unsupported SM 0xa04 or missing target classes. At driver 580.173.02 the GB10 reports the GR SM-version field as 10_04 (0xa04), and admission only accepted 12_01.

What changed

NVIDIA's ctrl2080gr.h:323-328 keeps 10_04 only "until 12_* is tested and validated", so 10_04 alone does not identify the GB10. The admission rule in seeded Omega (om/encoder/amp_runtime.om op 1) now accepts sm_121 when:

  • the field is 12_01, or
  • the field is 10_04 and the PCI identity is 0x10de:0x2e12 (the GB10).

The complete Blackwell-B class set is still required in both cases. nvrm/nvrm.c only passes the vendor constant and the PCI ids to Omega; no admission logic is in C.

The rule is the one in #251, which keeps it inside a much larger change. This PR is today's main plus that rule alone. The first version of this PR accepted any 10_04 device and conflicted with main; it has been replaced. Generated units come from om/units.sh with the pinned omc (2c824805…) and omega-bridge 3dc4a00e. The generated src/cudapp_om_amp_runtime.c is byte-identical to #251's. docs/PORT-AMPERE.md line references move with the edit.

Evidence

  • Host: make test-ampere-runtime PASS. The GB10 identity is admitted. A wrong device id, a wrong vendor id, a partial class set and the Ampere class set are refused.
  • GB10, scratch build of this head: build/hello_gpu PASS, 1048576 of 1048576 elements correct, 0 never written.
  • Negative control on the same chip: origin/main hello_gpu prints GPU not available (stage: nvrm_open: unsupported SM 0xa04 or missing target classes).

Not covered

No speed claim. No other GB10 kernels were run on this head.

Unblocks #254, which needs the device to open. After this lands, #251 should drop its copy of the rule when it rebases.

🤖 Generated with Claude Code

@aien-spark

Copy link
Copy Markdown
Contributor Author

Chip result (EXERCISED on GB10, not merged/qualified). spark-window 20261101T004827Z-b1ae7a, --gb10 exclusive --quiet none, 18091 and Flint down; window verdict: quiet machine. Head c5f6ec2d61e1da33919ff1c8ebb7668b286b15be, prebuilt from /tmp/prfix/c170-gb10fix.

Run rc Result
make hello-gpu 0 checked 1048576 of 1048576 elements: 0 wrong, 0 never written, PASS
gpu_elementwise_test --out 0 OMEGA_GPU_ELEMENTWISE_PASS, device_opens=1, 35 checks, 0 failed, mutants CAUGHT
gpu_attention_test --out 0 OMEGA_GPU_ATTENTION_PASS, device_opens=1, 219 checks, 0 failed
make hello-gpu-control (negative) 0 (target) binary exit 1, RED as it must (the one unwritten answer caught)
unfixed main tree (99ec266, #170) make hello-gpu 2 nvrm_open: unsupported SM 0xa04 or missing target classes, NOT_RUN

So the 0xA04 admission refusal on main reproduces on the chip, and this commit clears it with the Blackwell class check still in place. Host: make test rc 0 (74 targets), new test red on main/green here, two mutants caught.

Disclosure: one unauthorized pre-window run of make hello-gpu-control from this tree happened at 2026-11-01T00:45:25Z during another value-only window (one 1 MiB vecadd); it is not counted here.

Logs: /tmp/prfix/window-20261101T004827Z/ on the Spark. No labels added.

…l-B class set

At driver 580.173.02 the GB10 reports the GR SM-version field 10_04 (0xa04).
ctrl2080gr.h:323-328 keeps 10_04 only until its 12_* names are validated, so
10_04 alone does not identify sm_121. Seeded Omega op 1 now admits sm_121 for
12_01, or for 10_04 only with PCI 0x10de:0x2e12, and still requires the full
Blackwell-B class set. nvrm.c only marshals the vendor constant and PCI ids.

Rule taken from #251 (same four source files); this branch is today's main plus
that rule, with om/units.sh regenerated (pinned omc 2c824805, omega-bridge
3dc4a00e). Generated amp_runtime.c is byte-identical to #251's.

Host: make test-ampere-runtime PASS (GB10 admitted; wrong device, wrong vendor,
partial class set and Ampere classes refused).
GB10: build/hello_gpu PASS, 1048576/1048576 elements correct. Negative control:
origin/main hello_gpu refuses "unsupported SM 0xa04 or missing target classes".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@aien-spark
aien-spark force-pushed the fix/gb10-sm-admission branch from c5f6ec2 to b49ada2 Compare November 1, 2026 21:01
@aien-spark aien-spark changed the title Admit GB10 SM_VERSION 10_04 (0xa04) with the Blackwell-B class set Open the GB10: admit SM 0xa04 only with its PCI identity and the Blackwell-B class set Nov 1, 2026
Independent review of #246 found :749/:755 and :1058 off by a few lines.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Risk: medium. Approved. Cursor Security Agent passed with no findings that need human review; Bugbot was not present after the first poll and was skipped. The change is a bounded GB10 SM/PCI admission rule with negative-control tests, so it stays within the medium approval threshold.

Open in Web View Automation 

Sent by Cursor Approval Agent: Pull Request Router and Approver

@aien-spark
aien-spark merged commit dba5821 into main Nov 1, 2026
21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant