Skip to content

Make the portable host suite run from a fresh x86-64 checkout - #192

Merged
drakestapleton merged 8 commits into
mainfrom
cursor/reproducible-host-suite-8957
Oct 30, 2026
Merged

drakestapleton merged 8 commits into
mainfrom
cursor/reproducible-host-suite-8957

Conversation

@drakestapleton

@drakestapleton drakestapleton commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Purpose and scope

A fresh x86-64 checkout could not build the host suite. src/omega_blackwell_engine.c emitted unguarded dsb sy, and tests/omega/run.sh assumed a sibling compiler at $HOME/workspace/omega-osc-cubin.

make test is now the portable suite on x86-64 and on AArch64. It needs no NVIDIA tool and no sibling checkout. Target-only checks name their requirement and exit 2. Production AArch64 ordering stays dsb sy.

Refs #15. This pull request does not close the issue.

What landed:

  • nvrm/cpu_barrier.h. AArch64 executes dsb sy. Any other host executes __atomic_thread_fence(__ATOMIC_SEQ_CST). nvrm_cpu_relax is yield on AArch64 and a compiler barrier elsewhere. The publication barrier is a real fence on both hosts.
  • Production Blackwell open, and the direct vector and matmul entries, return ENOTSUP and the text requires AArch64 Linux on a non-AArch64 host. They do not call the driver. A translation unit built with OMEGA_BLACKWELL_HOST_SIMULATOR keeps the simulator path. Simulator and mutation builds set that macro. The x86-64 architecture-guard binary does not. On AArch64, make test-omega-arch-guard prints NOT_RUN and does not build that binary.
  • On a non-AArch64 host the library links src/cudapp_binding_portable.c and compiles the C encoder and the C cubin writer (CUDAPP_MIGRATION_PENDING_C_ENCODER, CUDAPP_MIGRATION_PENDING_C_CUBIN). src/cudapp_om_units.c and src/cudapp_freest_units.c are unchanged and are not assembled. omega_native_revision and omega_native_epoch follow the freestanding units. Every other seeded entry returns status 34 and does not write its result. That path is how the portable suite produces instruction words and cubin images. It is a run of the C bodies. It is not a run of bw_enc_sm121.om or cubin_elf.om, and it is not a pass of the .om versus C differential.
  • On x86-64 these targets exit 2 and are outside make test: test-om-encoder, test-om-cubin, test-gpu-native-runtime, test-om-spec-encoder, test-portable-receipts, test-model-capacity. make test-omega-target-only prints the same lines and exits 0. That exit is the report. On AArch64 those six targets stay inside make test.
  • The OSC compiler is OMEGA_OSC_COMPILER_DIR or the directory argument of tests/omega/run.sh. There is no $HOME default. The checkout must be clean and must be source commit 1accb93164ce68a2ac2e2c680acf54782f260d62. Missing compiler, missing slice, and a wrong pin each print a specific diagnostic. make test-omega-slices is outside make test.
  • On x86-64, GNU make's built-in CC=cc is replaced with gcc when CC was not set. An explicit CC= still wins. On AArch64, CC ?= gcc leaves make's built-in CC=cc in place.
  • The freestanding x86-64 build converts fp32 to fp16 with omega_fp32_to_fp16_rne, so the link does not call libgcc __truncsfhf2. AArch64 keeps the hardware cast.

Docs that separate the portable commands from the target-only ones: docs/OMEGA_HOST_TESTS.md, README.md, AGENTS.md, docs/START_HERE.md, CONTRIBUTING.md, AUDIT_SCOPE.md.

The seeded .om replacement of this shell runner remains #52. This pull request does not do that migration, and it does not include the CI work tracked by #90.

Open pull request #170 also edits barrier call sites and several of these makefiles for an Ampere port. This branch does not take that port. Expect conflicts in nvrm/nvrm.c, m16/, and the makefiles if both land.

ADR 0043 Decision 0

Shared-file edits are build and portability guards. aarch64-linux-gnu-gcc 13.3.0 cross-compiled each edited C file from this tree and from main 78fea51d6f8859ec8cc5e5561295fd5583b92c19 with the production flags and without CUDAPP_PORTABLE_DEFS or OMEGA_BLACKWELL_HOST_SIMULATOR. Every object in evidence/HOST-X86-20261030/aarch64-objects.tsv is byte-identical. GB10 runs stay NOT RUN. Commit 1b2ca5c does not edit those C files. With uname -m forced to aarch64, CC stays cc, the portable defs stay empty, and the binding sources stay the two generated units.

Each new C file links the filed Omega extension proposal:

Main b4f0480 (#194) is merged here. drift on ba53e3b passed: DRIFT-GATE: PASS (754 GPU paths, omega 62d1d0d668f8, none moved away from CUDA++ since the baseline) (https://github.com/aien-dev/CUDApp/actions/runs/41070699255).

Evidence on the exact commit

Code commit 0d8084b26d6183ebac8f12861801aae733a4b67c. Receipt commit 00950065b48062ae48b8e890b7f3ad5215d184d2. ADR and drift note c96fc6010d6d2540e8dc10caf74723edaf1c2508. AArch64 arch-guard compile fix 1b2ca5c7be163f6c5b3aa7375d096089058f845c. Filed-issue links 6235ac1cd27edd34777aa156e8f94c462c878101. After that comment-only edit, the same AArch64 cross compile kept every hash in evidence/HOST-X86-20261030/aarch64-objects.tsv. Merge of main b4f0480 is 7e6abe3. Head ba53e3bd1f9380cb63b60935a0365194b8b1c20b. x86-64 CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test exited 0: CUDA++ HOST TESTS PASS (57 targets), including test-gpu-imadhi-rc and test-dagsim. AArch64 CI host-tests ended CUDA++ HOST TESTS PASS (62 targets) (https://github.com/aien-dev/CUDApp/actions/runs/41070699078). Linux 6.12.94+ x86_64, gcc 13.3.0, 4 cores. Receipt: evidence/HOST-X86-20261030/. /dev/nvidia* and /dev/aien-gpu were absent. No GPU device was opened.

  • make test (host-only). CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test exited 0. Last line: CUDA++ HOST TESTS PASS (55 targets). The same command with the default reserve exited 2 on this VM: the serving test refused a 741.9 MiB upload because 4.6 GiB was free and the runtime keeps 4.0 GiB free (CUDAPP_MEM_RESERVE_MIB=4096). The default was not changed. After the merge of main the same command exited 0 with CUDA++ HOST TESTS PASS (57 targets).
  • make test-native-artifact (host-only). Inside that suite: test_gpu_artifact_export: 47 checks, 0 failed.
  • make zero-cuda-gate exited 0. The CUDA probe is rejected. build/hello_gpu needs libm and libc. build/gpu_matmul_api_test needs libc.
  • build/hello_gpu --sim exited 0 and printed PASS. The suite's wrapper printed hello --sim tests: 12 passed, 0 failed. The program's existing ceiling sentence names a GB10 bandwidth figure; this run did not measure it.
  • make doctor exited 1 and printed NOT READY: 5 problems above. The kernel module, the three device nodes, and the PCI GPU are absent. That is the expected report. The doctor checks nodes with access and did not open one. Its seeded target-table row is NOT_RUN (pinned omc absent).
  • GB10 hardware tests. NOT RUN. This VM has no GB10 and no NVIDIA device node. make hello-gpu was not run.

Also inside the passing suite: engine simulator SUMMARY passed=334 failed=0; matmul bounds SUMMARY passed=6 failed=0; backend mutants 120 total, 107 killed, 13 survived as redundant, 0 survived as test gaps; barrier-contract: PASS including aarch64-linux-gnu-gcc cross compile emits dsb sy; binding-portable: PASS; omega-runner-test: PASS (missing harness, missing slice, wrong source pin); Blackwell open ENOTSUP and the fake driver was not entered.

make test-om-encoder alone exited 2 with the AArch64 NOT_RUN line. make test-omega-slices with no harness exited 2 and named the pin. make test-omega-target-only exited 0 after printing the refusals. After 1b2ca5c, make CC=gcc test-omega-arch-guard on this VM still exits 0 and prints the two ENOTSUP lines.

Host cross checks, labeled as such in the receipt, and not GB10 results:

  • qemu-aarch64 8.2.2 executed src/cudapp_freest_units.c (cross compiled with aarch64-linux-gnu-gcc 13.3.0). revision(0)=1, revision(1)=2, revision(UINT64_MAX)=0, epoch(0)=1, epoch(3)=4, epoch(UINT64_MAX)=UINT64_MAX, null or misaligned returns 32.
  • omega_fp32_to_fp16_rne matched gcc's _Float16 cast on 4294967296 inputs, 0 mismatches.

CI host-tests on ba53e3b (https://github.com/aien-dev/CUDApp/actions/runs/41070699078) is the native AArch64 make test. It exited 0. Last line: CUDA++ HOST TESTS PASS (62 targets). The count is 62 because AArch64 keeps the six target-only rows inside make test, plus test-gpu-imadhi-rc and test-dagsim. The x86-64 VM suite is 57. That run does not open a GPU.

Correctness, compatibility and provenance

  • Negative controls are in the suite: an unguarded dsb sy fixture must fail; a missing harness, a missing launch.osc, and a wrong source pin must fail; the architecture guard requires ENOTSUP and zero driver calls; the portable binding's other entries return 34 and leave the result unchanged.
  • Public runtime headers, docs/runtime/omega_runtime_api.manifest, and docs/runtime/API.md are unchanged. The AArch64 library still links the generated units and still executes dsb sy. On x86-64, production Blackwell open returns ENOTSUP where the previous tree failed to assemble. A host or simulator pass is not a chip qualification.
  • New source files are Apache-2.0 WITH LLVM-exception. tests/omega/run.sh keeps its existing Apache-2.0 header. No NVIDIA binary, cubin, PTX, firmware, or vendor listing was added.
  • No secrets, personal machine paths, or private addresses. The old receipt path under a home directory was not copied.
  • Receipts outside evidence/HOST-X86-20261030/ were not edited. That receipt records the filed issue URLs and the repeated object hashes.

Known limitations

  • GB10 device behavior is NOT RUN / hardware-unverified. The AArch64 object match is a cross compile. CI host-tests does not open a GPU.
  • The eight-slice gate is NOT RUN. gh api repos/aien-dev/omega-osc-cubin returned HTTP 404. Source pin 1accb93164ce68a2ac2e2c680acf54782f260d62 was not checked out. The historical AArch64 binary SHA-256 a007283780347dd4a4b024844dc0c81fc09e0926f27f83e50c07d42508886f23 was not re-measured.
  • The six seeded-binding and pinned-omc targets were not executed on the x86-64 VM. Their x86-64 result is exit 2. On AArch64 they stay inside make test, and CI host-tests is that run.
  • Passing make test on this VM required CUDAPP_MEM_RESERVE_MIB=0. A machine with enough free memory still uses the default 4096 MiB reserve.
  • drift is green on this head after the merge of Mirror omega 62d1d0d so the drift gate is green (Refs #193) #194. GB10 device behavior stays NOT RUN.
Open in Web Open in Cursor 

cursoragent and others added 2 commits October 30, 2026 12:12
A fresh x86-64 checkout was assembling unguarded AArch64 barriers and the seeded binding. Production AArch64 keeps dsb sy. The portable suite uses a seq_cst fence, refuses the Blackwell device with ENOTSUP, and links a stand-in plus the C encoder and cubin writer. The OSC compiler is an explicit pin, and target-only checks exit 2.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>
The suite passed under CUDAPP_MEM_RESERVE_MIB=0 on this VM. AArch64 native make test, the GB10 device path, and the eight-slice gate were not run.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>

@drakestapleton drakestapleton left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Triage at head 0095006: needs-changes. The idea is sound and the evidence is honestly labelled. Before merge, the red drift check and the overlap with #170 need answers.

State. Open, not a draft, base main (not stacked), mergeable but unstable. Checks: drift failed, and host-tests, runtime-api, one build and CodeQL c-cpp/python were still running. Everything else is green.

drift. The job log for run 41053836447 shows DRIFT-GATE: FAIL (7 of 739 GPU paths changed in omega 089e5b05350e and not in CUDA++). Of those paths only Makefile is touched here. The rest (src/omega_blackwell_codegen.h, tests/bw_warp_sim*.h, tests/gpu_imadhi_rc_test.c) are not. drift passed on main at 78fea51 at 06:45 CT, so this may be upstream omega movement, not this diff. Please re-run, or show that main fails the same way, before treating it as unrelated.

Overlap with #170 (3b6ca6f, held under ADR 0043/0044). 14 files: Makefile, README.md, m16/m16_concurrent.c, m16/m16_native.c, mk/om-cubin.mk, mk/om-encoder.mk, mk/omega-gpu-engine.mk, nvrm/nvrm.c, src/omega_blackwell_engine.c, src/omega_blackwell_matmul.c, src/omega_blackwell_submit.c, src/omega_gpu_elementwise_api.c, src/omega_gpu_platform_linux.c, tools/gpu_engine_backend_mutations.sh. The PR body already warns about this. Since #170 must be reworked under ADR 0044 anyway, landing #192 first looks like the lower-cost order. That is the maintainers' call.

ADR 0043 Decision 0 (aien-architecture-mv docs/adr/0043-gpu-stack-portable-top-thin-backend.md). This is not P2–P4 backend work: no new backend, ABI or backend/<target>/. It is build portability of the existing C stack, so I don't read it as gated code. It is not a "host-only experiment that touches no shared file" either: it edits shared driver and engine files (nvrm/nvrm.c, m16/*, src/omega_blackwell_{engine,submit,matmul}.c, src/omega_gpu_platform_linux.c). It also adds new C (nvrm/cpu_barrier.h, src/cudapp_binding_portable.c, 221 lines). The ADR's language rule asks that "any new C needs a missing-feature reason with an extension proposal filed, behind a migration-pending build switch." The CUDAPP_MIGRATION_PENDING_C_* switches are there. Please add the missing-feature reason and the extension-proposal reference for cudapp_binding_portable.c and cpu_barrier.h, and have an architecture owner confirm that Decision 0 doesn't apply.

ADR 0044. src/omega_cubin.c and om/cubin/cubin_elf.om are not modified. The x86-64 path only compiles the frozen C writer behind CUDAPP_MIGRATION_PENDING_C_CUBIN. That is consistent, and the body is clear that this is not a cubin_elf.om run or an .om↔C differential.

GPU claims. None are unsupported. GB10, native AArch64 and the eight-slice gate are all marked NOT RUN, and dsb sy is evidenced only by an aarch64 cross-compile. One caveat: make test passed only with CUDAPP_MEM_RESERVE_MIB=0, and with the default reserve it exits 2 (evidence/HOST-X86-20261030/default-reserve.txt). So "make test is now the portable suite" holds only on hosts with more than about 4.7 GiB free. Please state that in docs/OMEGA_HOST_TESTS.md.

To reach ready: drift green or shown pre-existing on main, pending checks green, the new-C reason and proposal reference added, and the reserve caveat documented.

— Grokbot

Copy link
Copy Markdown
Contributor Author

Architecture's ruling on ADR 0043:

ADR 0043 Decision 0 applies. OK before the gate only if the shared-file edits change nothing on GB10 (aarch64 build/receipts unchanged at head) and both new C files carry a missing-feature reason, a filed extension proposal and migration-pending. Otherwise split. (Architecture)

The frozen imported C stack in ADR 0043's Consequences includes nvrm/, m16/ and the omega_blackwell_{engine,submit} bypasses. So every edit to Makefile, mk/*, nvrm/nvrm.c, m16/*, src/omega_blackwell_{engine,submit,matmul}.c and omega_gpu_platform_linux.c must be a build or portability guard, with an unchanged aarch64 build, or re-run GB10 gate receipts, at head to prove it. If that can't be shown, split out the x86-64 host-suite parts that touch no shared file, and land the rest after the gate.

— Grokbot

The seven drift paths fail the same way on main against omega 089e5b05350e. AArch64 cross objects of the shared files match main. The default memory reserve still exits 2 on this VM, and the docs say so.

— Grokbot

Co-authored-by: Drake Stapleton <[email protected]>
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

Review answers are on c96fc6010d6d2540e8dc10caf74723edaf1c2508.

Drift. The seven paths fail the same way on CUDA++ main 78fea51d6f8859ec8cc5e5561295fd5583b92c19. tools/extract/drift.sh against omega-mv 089e5b05350ee61cc1439f17d3d3052a18a3e0a5 exits 1 on both trees and prints the same seven omega blobs (evidence/HOST-X86-20261030/drift-main-and-pr.txt). Main's green run 41050251136 used omega 4c60d6baf5f1, where Makefile was still the baseline blob 4e068c1de5026d2ac4f6c2463fbb4292e6c26ec0. Omega commit 089e5b05350e (2026-10-30T12:10:11Z, "Warp simulators refuse IMAD.HI.U32 with a register Rc") changed Makefile, src/omega_blackwell_codegen.h, the four tests/bw_warp_sim*.h files, and added tests/gpu_imadhi_rc_test.c. This branch does not touch those six sources. Main's Makefile blob c1c714d3 and this branch's ee85035 both differ from omega's new blob a42b2b1f, so the Makefile row is upstream too. drift will stay red until CUDA++ holds those bytes. This pull request does not import them.

ADR 0043. nvrm/cpu_barrier.h and src/cudapp_binding_portable.c each state the missing-feature reason and say the extension proposal is drafted, not yet filed on omega-mv. Drafts: evidence/HOST-X86-20261030/proposal-cpu-barrier.md and evidence/HOST-X86-20261030/proposal-binding-portable.md. The CUDAPP_MIGRATION_PENDING_C_ENCODER and CUDAPP_MIGRATION_PENDING_C_CUBIN switches stay. The binding file refuses to compile without one of those or BINDING_PORTABLE.

AArch64 objects. aarch64-linux-gnu-gcc 13.3.0 compiled the shared C files from this tree and from main 78fea51. Every object is byte-identical (evidence/HOST-X86-20261030/aarch64-objects.tsv): nvrm.o, m16_native.o, m16_concurrent.o, lifecycle_gates.o, submission_visibility_gates.o, omega_blackwell_engine.o, omega_blackwell_submit.o, omega_blackwell_matmul.o, freestanding matmul_fs.o, omega_gpu_platform_linux.o, omega_gpu_elementwise_api.o. With uname -m forced to aarch64, CC stays cc on this tree and on main. GB10 device runs stay NOT RUN.

Reserve. docs/OMEGA_HOST_TESTS.md, README.md, and the receipt now say this VM's make test passes only with CUDAPP_MEM_RESERVE_MIB=0 and exits 2 at the default 4096. The default is unchanged.

— Grokbot

…er. — Grokbot

Native AArch64 make test compiled tests/test_omega_blackwell_arch_guard.c
with -Werror. refuse_ok is only called on the non-AArch64 path, so the build
stopped at unused-function. The AArch64 target now prints NOT_RUN without
building that binary, and the helper is compiled only off AArch64.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

AArch64 make test on c96fc60 stopped in tests/test_omega_blackwell_arch_guard.c. refuse_ok is only called off AArch64, and -Werror=unused-function failed the compile (run https://github.com/aien-dev/CUDApp/actions/runs/41055132444).

1b2ca5c keeps that helper under #if !defined(__aarch64__). On AArch64, test-omega-arch-guard prints NOT_RUN and does not build the binary. On this x86-64 VM, make CC=gcc test-omega-arch-guard still prints the ENOTSUP lines and exits 0. aarch64-linux-gnu-gcc -Wall -Wextra -Werror -c of that test file exits 0. A make -n with uname -m forced to aarch64 shows only the shell script.

That Makefile edit is the test target only. With uname -m forced to aarch64, CC stays cc, CUDAPP_PORTABLE_DEFS stays empty, and the binding sources stay src/cudapp_om_units.c and src/cudapp_freest_units.c. The shared objects in evidence/HOST-X86-20261030/aarch64-objects.tsv stay byte-identical to main 78fea51; those C files were not edited in 1b2ca5c. GB10 stays NOT RUN.

drift remains the upstream failure against omega 089e5b05350e (the same seven paths as main). This commit changes the CUDA++ Makefile blob to 13ca78007340e4e01741f5a280fa1c176637dbda, which still does not equal omega's blob a42b2b1f4cd7ffb683d1f54cadbceebde45d5e15, so that row stays red for the same reason.

— Grokbot

@drakestapleton drakestapleton left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Re-check at head 1b2ca5c: needs-changes (one item left). Everything else from my review at 0095006 is resolved.

CI. 14 of 15 checks are green: host-tests, runtime-api, both builds, library, sim, hello-sim, om-units, sbom, audit-scanner and CodeQL. drift is red. That failure is upstream: main 78fea51 re-ran at 08:00 CT and also failed, with the same 7 paths against omega 089e5b05350e (Makefile, src/omega_blackwell_codegen.h, tests/bw_warp_sim{,_k,_pa,_tc}.h, tests/gpu_imadhi_rc_test.c). This PR's run 41058056845 prints the same lines. So it doesn't block this PR, but it has to be fixed on main.

#170 overlap. Still 14 files, the same list as before.

Architecture's Decision 0 conditions (the ruling quoted in the 12:17Z comment):

  • (a) aarch64 unchanged: met, by cross-compile. evidence/HOST-X86-20261030/aarch64-objects.tsv:2-12 lists 11 shared objects (nvrm.o, m16_*.o, omega_blackwell_{engine,submit,matmul}.o, matmul_fs.o, omega_gpu_platform_linux.o, omega_gpu_elementwise_api.o, both gate objects). Each is IDENTICAL by sha256 to main 78fea51. This is aarch64-linux-gnu-gcc on x86-64, not a native AArch64 build or a GB10 receipt. The 1b2ca5c change (tests/test_omega_blackwell_arch_guard.c under #if !defined(__aarch64__)) is test-only.
  • (b) New C files.
    • nvrm/cpu_barrier.h: the missing-feature reason is at L12-14. The draft proposal note is at L18-19 (proposal-cpu-barrier.md). The migration-pending switch is named at L15-17. The non-AArch64 body is selected by #if defined(__aarch64__) at L23. The header itself has no switch guard, and on AArch64 it is the production dsb sy path, which is fine because the objects are identical.
    • src/cudapp_binding_portable.c: the reason is at L7-9, the switches at L9-12, and the draft proposal note at L12-14. An #error at L30-31 stops the build unless CUDAPP_MIGRATION_PENDING_C_ENCODER, _C_CUBIN or BINDING_PORTABLE is defined.

Remaining item. Architecture's ruling asks for a filed extension proposal. Both files say "drafted, not yet filed on omega-mv", and the drafts are in evidence/ (proposal-cpu-barrier.md:17). Either file the two proposals on omega-mv and replace the evidence-path pointers with the issue links, or get Architecture to accept a drafted-not-filed note. Once that's done, I'd rank this ready-to-merge.

ADR 0044. src/omega_cubin.c and om/cubin/cubin_elf.om are still untouched.

GPU claims. GB10 and native AArch64 make test are still NOT RUN, and the PR labels them that way. The reserve caveat is now in docs/OMEGA_HOST_TESTS.md and README.md.

— Grokbot

@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

CI on 1b2ca5c: host-tests passed. Run https://github.com/aien-dev/CUDApp/actions/runs/41058056753 finished in 14m48s. Last line: CUDA++ HOST TESTS PASS (60 targets). The count is 60 because AArch64 keeps the six target-only rows inside make test. The x86-64 VM suite stays 55. The arch-guard line was x86-64 production refusal: NOT_RUN (this host is aarch64; the check runs on x86-64 Linux and does not open a device), and the log shows sh tests/omega/test-arch-guard.sh with no compile of that binary.

drift is still red: https://github.com/aien-dev/CUDApp/actions/runs/41058056845. DRIFT-GATE: FAIL (7 of 739 GPU paths changed in omega 089e5b05350e and not in CUDA++). The seven omega blobs are the same ones that fail on main 78fea51. Every other check on this head passed. GB10 stays NOT RUN.

— Grokbot

…okbot

nvrm/cpu_barrier.h points at omega-mv#939. src/cudapp_binding_portable.c
points at omega-mv#940. The evidence copies record the same URLs. The
comment edits do not change the AArch64 objects: the eleven hashes in
evidence/HOST-X86-20261030/aarch64-objects.tsv match again.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>

@drakestapleton drakestapleton left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Re-check at 6235ac1 (expected head, confirmed): ready-to-merge. The only red check is drift, which comes from upstream and is tracked in #193.

What changed since 1b2ca5c. One commit touching 5 files, all comments and docs:

  • In both new C files, the "drafted, not yet filed" line is now a link to the filed issue. The line count is unchanged.
  • The two proposal notes now say "Filed as …".
  • The evidence README gained a "Filed extension proposals" section (+9 lines).

There is no code change.

The filed proposals exist.

  • aien-dev/omega-mv#939, an open issue: "Seed a host CPU publication barrier: dsb sy on AArch64, a real fence elsewhere".
  • aien-dev/omega-mv#940, an open issue: "Emit a host-assembleable native binding, or keep a migration-pending portable stand-in".

Both were filed today. Neither is a PR.

ADR 0043 Decision 0, per Architecture's ruling: met.

  • (a) aarch64 unchanged. evidence/HOST-X86-20261030/aarch64-objects.tsv is not touched in this commit. The README's new section, L13 of the added hunk, records a re-run of the aarch64-linux-gnu-gcc 13.3.0 cross build: all 11 objects keep their SHA-256. The edits replace comment lines one for one, so no line numbers move. This is a cross-compile from an x86 host. Native AArch64 and GB10 are NOT_RUN, and nothing ran on the Spark.
  • (b) nvrm/cpu_barrier.h:
    • Reason: L12-14.
    • Switches: L14-17 (migration-pending, CUDAPP_MIGRATION_PENDING_C_ENCODER / _C_CUBIN).
    • Filed link: L18 (omega-mv#939), with the drafted text kept at L19.
    • The __aarch64__ split is at L23. As before, the switches are applied to the callers' compilation, not inside the header.
  • (b) src/cudapp_binding_portable.c:
    • Reason: L7-9.
    • Switches: L9-12.
    • Filed link: L13 (omega-mv#940), with the drafted text at L14.
    • #error guard: L30-31.

The item from my last re-check, proposals filed rather than only drafted, is now resolved.

CI. 14 of 15 checks are green: build ×2, library, host-tests, om-units, sim, hello-sim, runtime-api, sbom, audit-scanner, and CodeQL with Analyze for actions, python and c-cpp. The one failure is drift.

Drift, reported separately and not counted against #192.

  • This head's drift job (124083255422) reports DRIFT-GATE: FAIL (7 of 739 GPU paths changed in omega 62d1d0d668f8).
  • Main 78fea51's drift job at 08:00 CT (124075795636) fails against the same omega revision on the identical 7 paths, with identical blob SHAs: Makefile, src/omega_blackwell_codegen.h, tests/bw_warp_sim{,_k,_pa,_tc}.h, and tests/gpu_imadhi_rc_test.c (omega-only).
  • The only difference is the denominator, 739 vs 730, because this PR adds GPU-scoped paths. None of them drift.
  • #193 exists, but it is an open issue tracking this upstream drift, not a fix PR. Drift stays red on main until that work lands.

Still true. src/omega_cubin.c is untouched (ADR 0044). The 14-file overlap with #170 means one of the two will need a rebase after the other merges.

— Grokbot

cursoragent and others added 3 commits October 30, 2026 14:09
Bring in the drift fix from #194 (b4f0480). Keep both HOST_TESTS
additions: main's test-gpu-imadhi-rc and test-dagsim, and this
branch's portable omega targets, plus the x86 target-only filter.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>
…switches. — Grokbot

The x86-64 freestanding link uses src/cudapp_binding_portable.c and that
file refuses to compile unless CUDAPP_MIGRATION_PENDING_C_ENCODER or
CUDAPP_MIGRATION_PENDING_C_CUBIN is set. AArch64 still links
src/cudapp_freest_units.c, so the new rule is unused there.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>
…kbot

Both targets pass on this x86-64 host, so they stay out of
CUDAPP_TARGET_ONLY_TESTS. CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test
exited 0 and ended CUDA++ HOST TESTS PASS (57 targets). test-gpu-imadhi-rc
printed PASS for all four warp simulators. test-dagsim printed
dagsim_unit: 171 checks, 0 failed. GB10 stays NOT RUN.

Refs #15

Co-authored-by: Drake Stapleton <[email protected]>
@cursor

cursor Bot commented Oct 30, 2026

Copy link
Copy Markdown

Merged main b4f0480 (#194) into this branch with a merge commit. No rebase. Head is ba53e3bd1f9380cb63b60935a0365194b8b1c20b.

HOST_TESTS keeps both lists: this branch's portable omega targets and main's test-gpu-imadhi-rc and test-dagsim, then the x86 CUDAPP_TARGET_ONLY_TESTS filter.

test-gpu-imadhi-rc stays in the x86-64 suite. On this VM, CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test exited 0 and ended CUDA++ HOST TESTS PASS (57 targets). The four simulators each printed PASS for Rc=RZ, the encode, and the Rc=R6 refusal. test-dagsim printed dagsim_unit: 171 checks, 0 failed. Neither opens a device. GB10 stays NOT RUN.

drift passed: https://github.com/aien-dev/CUDApp/actions/runs/41070699255
DRIFT-GATE: PASS (754 GPU paths, omega 62d1d0d668f8, none moved away from CUDA++ since the baseline)

host-tests passed: https://github.com/aien-dev/CUDApp/actions/runs/41070699078
CUDA++ HOST TESTS PASS (62 targets)
The count is 62 on AArch64 because the six target-only rows stay inside make test. The log also has PASS bw_warp_sim.h and dagsim_unit: 171 checks, 0 failed.

— Grokbot

@drakestapleton drakestapleton left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Re-review at ba53e3bd1f9380cb63b60935a0365194b8b1c20b. Classification: ready-to-merge.

History. Merge 7e6abe3 has parents 6235ac1 (the previously reviewed head) and b4f0480 (main, #194). All 5 earlier branch commits are still in the history, so there was no force-push. Beyond the merge, #192 adds 2 commits, 5d186bb and ba53e3b. 7e6abe3...ba53e3b touches only mk/omega-gpu-engine.mk (+7) and docs/OMEGA_HOST_TESTS.md (+10). GitHub reports mergeable_state clean.

Checks at head (15/15 success).

  • drift: run 41070699255
  • ci run 41070699078: host-tests, om-units, sbom, audit-scanner
  • CodeQL: run 41070691805 (c-cpp, python, actions), "No new alerts"
  • hello-sim: 41070699119
  • library: 41070699710
  • sim: 41070699392
  • build: 41070699165 and 41070699231
  • runtime-api: 41070699216

HOST_TESTS (Makefile:418-431). Both sets of names are kept: this branch's test-omega-slice-runner test-omega-arch-guard test-omega-barrier-contract test-omega-binding-portable and main's test-gpu-imadhi-rc test-dagsim. After them, the filter-out $(CUDAPP_TARGET_ONLY_TESTS) runs, and only when that list is non-empty (x86). test-gpu-imadhi-rc and test-dagsim are not in CUDAPP_TARGET_ONLY_TESTS (Makefile:40), so they stay portable. Evidence: CI host-tests is native AArch64 only. The x86-64 pass (57 targets, dagsim 171 checks) is the author's VM receipt, and no CI job runs on x86.

New rule (mk/omega-gpu-engine.mk:147-152). It adds $(CUDAPP_PORTABLE_DEFS) when compiling cudapp_binding_portable.o. That object is in GPU_FS_OBJS only through CUDAPP_FS_BINDING:

  • x86: CUDAPP_FS_BINDING = src/cudapp_binding_portable.c (Makefile:37).
  • AArch64: it is src/cudapp_freest_units.c (Makefile:52) and CUDAPP_PORTABLE_DEFS is empty (Makefile:54). On AArch64 the new rule is never reached, and the freestanding units link unchanged.

The new commits don't touch the GB10/sm_121 path or any C source, so ADR 0043 Decision 0 (a) still holds. Note that CI never builds the x86 freestanding link (host-tests is AArch64), so this fix is exercised only on the author's VM.

GPU claims. GB10 is NOT_RUN. The AArch64 object match is cross-compile evidence and CI host-tests opens no device. The IMAD.HI "PASS for all four warp simulators" result is a host simulator run, not on-hardware evidence.

Merge. Nothing blocks the merge. #194 is already in via b4f0480. #195 should rebase after this and update its gcc/CC lines.

— Grokbot

@drakestapleton
drakestapleton merged commit 522ee0d into main Oct 30, 2026
15 checks passed
aien-spark pushed a commit that referenced this pull request Oct 31, 2026
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.

2 participants