Skip to content

CI: add an x86-64 host-tests job (portable suite + freestanding link) - #199

Merged
drakestapleton merged 1 commit into
mainfrom
cursor/x86-host-tests-ci-3d07
Oct 30, 2026
Merged

drakestapleton merged 1 commit into
mainfrom
cursor/x86-host-tests-ci-3d07

Conversation

@drakestapleton

@drakestapleton drakestapleton commented Oct 30, 2026 •

Copy link
Copy Markdown
Contributor

Purpose and scope

Adds a GitHub Actions job that runs the portable host suite on an x86-64 runner, with the memory reserve set the way docs/OMEGA_HOST_TESTS.md describes, and builds the x86 freestanding link.

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

Files:

  • .github/workflows/host-x86.yml (new). Job x86-host-tests on ubuntu-24.04. It does not install nvdisasm, clone Omega, or open a GPU.
  • docs/OMEGA_HOST_TESTS.md: one sentence naming that job.

git diff origin/main -- .github/workflows/ci.yml is empty. The AArch64 host-tests job is unchanged. No edits under src/, om/cubin/, or the files in pull request #170.

Commands the job runs:

make CC=gcc gpu-engine-freestanding
CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test

The freestanding step requires the compile of build/gpu_fs/cudapp_binding_portable.o to pass -DCUDAPP_MIGRATION_PENDING_C_ENCODER -DCUDAPP_MIGRATION_PENDING_C_CUBIN (CUDAPP_PORTABLE_DEFS in mk/omega-gpu-engine.mk) and requires the recipe line freestanding GPU link (<n> files): only ... undefined. The suite step requires exit 0 and a last line CUDA++ HOST TESTS PASS (<n> targets). The product default reserve stays 4096. The job sets CUDAPP_MEM_RESERVE_MIB=0 because that is the documented x86-64 command that passes when the host cannot keep 4096 MiB free.

How this sits with #90 and #189

Evidence on the exact commit

Workflow commit 9cb330d7415f0e67fda9ad1ceed06e9b4f4243b0, parent 522ee0d063cbc93672091a0edd00a0866634b981.

GitHub Actions run https://github.com/aien-dev/CUDApp/actions/runs/41076382003, job x86-host-tests on ubuntu-24.04 (arch x86_64). Conclusion: success.

  • Freestanding link step succeeded. Recipe line: freestanding GPU link (15 files): only memcmp memcpy memset strcmp strlen undefined. The same log shows build/gpu_fs/cudapp_binding_portable.o compiled with -DCUDAPP_MIGRATION_PENDING_C_ENCODER -DCUDAPP_MIGRATION_PENDING_C_CUBIN.
  • Portable suite step succeeded with CUDAPP_MEM_RESERVE_MIB=0. Result line: CUDA++ HOST TESTS PASS (57 targets).
  • The job printed GB10: NOT_RUN. It did not run make hello-gpu and did not install a CUDA toolkit.

The same pull request's CI workflow still schedules host-tests on ubuntu-24.04-arm (run https://github.com/aien-dev/CUDApp/actions/runs/41076381664). That job definition is the file on main. This pull request does not change it.

A local run of the same two commands, on the parent sources before this commit (the workflow and the docs sentence are not inputs to make), also exited 0 on Linux x86_64, gcc 13.3.0, 4 cores: the same 57-target line and the same freestanding line. aarch64-linux-gnu-gcc was not installed there either.

  • make test (host-only). GitHub job and the local command both ended CUDA++ HOST TESTS PASS (57 targets).
  • make CC=gcc gpu-engine-freestanding exited 0. Line: freestanding GPU link (15 files): only memcmp memcpy memset strcmp strlen undefined.
  • make test-native-artifact (host-only). Inside the local suite: test_gpu_artifact_export: 47 checks, 0 failed.
  • make zero-cuda-gate exited 0 inside that local suite. ZERO_CUDA SELF-TEST PASS. build/hello_gpu needs libm and libc. build/gpu_matmul_api_test needs libc.
  • build/hello_gpu --sim ran inside that local suite. hello --sim tests: 12 passed, 0 failed.
  • make doctor as its own command. NOT RUN outside the suite. test-doctor is one of the 57 targets and the suite exited 0.
  • GB10 hardware tests. NOT RUN. This job does not open a device and does not run make hello-gpu.

No new evidence/ directory. The Actions log is the receipt. A receipt folder would be a file beyond the workflow and the docs sentence.

Correctness, compatibility and provenance

  • Negative controls stay the ones already in the suite (mutation FAIL lines, the freestanding malloc allowlist, the zero-CUDA self-test). This pull request does not weaken them.
  • Public runtime headers, docs/runtime/omega_runtime_api.manifest, and docs/runtime/API.md are unchanged. The AArch64 library build is unchanged because ci.yml is unchanged.
  • No new source file. The workflow carries the same SPDX header as the other workflows. No NVIDIA binary, cubin, PTX, firmware, or vendor listing was added.
  • No secrets, personal machine paths, or private addresses.
  • Receipts under evidence/ were not edited.

Known limitations

  • GB10 device behavior is NOT RUN.
  • The job has passed on this pull request. It is wired to run on push to main as well. It has not run on main yet, because this pull request is not merged.
  • The six seeded-binding and pinned-omc targets stay outside make test on x86-64 and exit 2 when invoked directly. make test-omega-target-only is the report inside the suite.
  • A host with enough free memory still uses the default 4096 MiB reserve. This job sets 0 so the command matches the documented x86-64 pass, including on a runner that cannot keep 4096 MiB free.
  • Passing this job is a host result. It is not a chip qualification.

— Grokbot

Open in Web Open in Cursor 

… link.

ubuntu-24.04 runs CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test and make CC=gcc gpu-engine-freestanding. The AArch64 host-tests job in ci.yml is unchanged. GB10 stays NOT_RUN.

— Grokbot

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.

Review at 9cb330d: ready to merge once x86-host-tests is green. At review time all 12 checks were queued, including x86-host-tests (run 41076382003), so there's no run log yet.

Provenance. There's 1 commit, from cloud agent bc-b872c9aa, branched off main 522ee0d. The body says "Refs #196" and doesn't close the issue, which is right.

Scope. It adds one new file, .github/workflows/host-x86.yml (L1-55), with job x86-host-tests on ubuntu-24.04, a 60-minute limit and contents: read. Checkout is pinned to the same SHA as the other workflows. The only other change is docs/OMEGA_HOST_TESTS.md (+4 at L18-21).

Against #196's done-when

  • (a) Met, pending the run. L44-55 runs CUDAPP_MEM_RESERVE_MIB=0 make CC=gcc -j4 test, which matches docs/OMEGA_HOST_TESTS.md L15-17 on main. The product default of 4096 is unchanged. A pass on main can only be confirmed after this merges; the PR run is on the PR's merge ref.
  • (b) Met. L32-42 runs make CC=gcc gpu-engine-freestanding and greps for the cudapp_binding_portable.o compile carrying both CUDAPP_PORTABLE_DEFS flags, then for the freestanding GPU link (...) line.
  • (c) Met. ci.yml isn't in the diff, so the AArch64 host-tests job is byte-for-byte unchanged.
  • (d) Met. The workflow is host-x86 and the job and check are x86-host-tests. Neither collides with host-tests, runtime-api, fresh-checkout (#198) or figures (#198).
  • (e) Nothing is faked green.
    • || rc=$? is re-raised at L38 and L50.
    • The default bash -eo pipefail makes a failed grep pipeline at L39 or line=$(grep ...) at L40 fail the step.
    • The last line has to be CUDA++ HOST TESTS PASS (...) (L52-54).
    • L27 enforces x86_64.
    • There's no continue-on-error, no || true and no if: skip.
  • The echo "GB10: NOT_RUN" lines are honest, and the body makes no chip claim.

Fit. No file is shared with #197 (runtime-api.yml) or #198 (host-gates.yml, tools/ci/, AGENTS, CONTRIBUTING, START_HERE). #195 edits AGENTS.md, not this doc. Merge order: #197, then #199, then #198. None needs a textual rebase. After #199 lands, #198 should update its "#196 / x86 make test NOT_RUN" pointers (host-gates.yml L15, host-gates.sh L320, CI_ACCEPTANCE.md L9). One cost to note: x86 make test re-runs test-runtime-api without semver, which is fine since it's documented.

Follow-ups. The body lists none to file.

— Grokbot

@drakestapleton
drakestapleton merged commit 86b78f2 into main Oct 30, 2026
13 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.

2 participants