From 8ca8eaf6a4da033b6b39ecca8fb264e83800ee15 Mon Sep 17 00:00:00 2001 From: Vyncint Ng Date: Tue, 22 Sep 2026 14:45:50 +0700 Subject: [PATCH] chore(pins): cuda-oxide b0f961df and reconverge 0.7.0 Its own commit, every site, per CONTRIBUTING section 9 -- the policy is every site or not at all, and 2.0.0 did four of six. check-pins.sh lists seven reconverge sites, three cuda-oxide sites and three nightly sites, and now says they all agree. reconverge 0.7.0 is why this bump matters rather than being routine. Before it, a cluster- or grid-wide barrier under a guard that is only block-uniform produced no findings at all, so the gate this product is built on could not see that class -- and 2.2.1 shipped with a reconverge that could not. Verified at the new set rather than assumed. `just gate` passes all three gate tests, and `just prune` over the whole corpus returns the same verdicts as before, including reduce-flip's 3 clean / 8 refused, which is the known-flip split the README quotes. The new analyzer changes what it can see and does not change what this corpus is told. Signed-off-by: Vyncint Ng --- .github/workflows/gpu.yml | 4 ++-- .github/workflows/pins.yml | 4 ++-- .github/workflows/prune.yml | 4 ++-- CHANGELOG.md | 20 ++++++++++++++++++++ CONTRIBUTING.md | 2 +- action/README.md | 4 ++-- action/action.yml | 2 +- corpus/README.md | 2 +- crates/launchbound-build/src/compile.rs | 2 +- docs/LIMITATIONS.md | 2 +- docs/research-baseline.md | 2 +- rust-toolchain.toml | 4 ++-- 12 files changed, 36 insertions(+), 16 deletions(-) diff --git a/.github/workflows/gpu.yml b/.github/workflows/gpu.yml index e846aa2..52d6c7e 100644 --- a/.github/workflows/gpu.yml +++ b/.github/workflows/gpu.yml @@ -90,7 +90,7 @@ concurrency: env: PINNED_TOOLCHAIN: nightly-2026-08-28 - RECONVERGE_VERSION: "0.6.0" + RECONVERGE_VERSION: "0.7.0" jobs: # Prune and compile on a plain runner, exactly as `stage` is designed to be @@ -112,7 +112,7 @@ jobs: with: persist-credentials: false repository: NVlabs/cuda-oxide - ref: 26754ae52c26c097dc1c465a1e42c4c5d05a3d40 + ref: b0f961df3af0ff140b3b006fa2b6750b71f43f62 path: cuda-oxide - name: Install pinned toolchain working-directory: launchbound diff --git a/.github/workflows/pins.yml b/.github/workflows/pins.yml index 5b29d46..c9f7101 100644 --- a/.github/workflows/pins.yml +++ b/.github/workflows/pins.yml @@ -26,9 +26,9 @@ concurrency: # The lockstep pin set. A pin bump updates these values (and # rust-toolchain.toml) in its own commit. env: - CUDA_OXIDE_PIN: 26754ae52c26c097dc1c465a1e42c4c5d05a3d40 + CUDA_OXIDE_PIN: b0f961df3af0ff140b3b006fa2b6750b71f43f62 CUDA_OXIDE_REPO: NVlabs/cuda-oxide - RECONVERGE_PIN: v0.6.0 + RECONVERGE_PIN: v0.7.0 RECONVERGE_REPO: vyncint/reconverge jobs: diff --git a/.github/workflows/prune.yml b/.github/workflows/prune.yml index 0cd6987..8b5fcdd 100644 --- a/.github/workflows/prune.yml +++ b/.github/workflows/prune.yml @@ -23,7 +23,7 @@ concurrency: # pins.yml issue body lists every site. env: PINNED_TOOLCHAIN: nightly-2026-08-28 - RECONVERGE_VERSION: "0.6.0" + RECONVERGE_VERSION: "0.7.0" jobs: gate: @@ -40,7 +40,7 @@ jobs: with: persist-credentials: false repository: NVlabs/cuda-oxide - ref: 26754ae52c26c097dc1c465a1e42c4c5d05a3d40 + ref: b0f961df3af0ff140b3b006fa2b6750b71f43f62 path: cuda-oxide - name: Install pinned toolchain working-directory: launchbound diff --git a/CHANGELOG.md b/CHANGELOG.md index e53d727..507c039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,26 @@ change measured timings are marked `bench:`. ## [Unreleased] +### Changed + +- **The lockstep pin set moves: cuda-oxide `b0f961df`, reconverge `0.7.0`, + nightly unchanged** (#70). Its own commit across every site + `scripts/check-pins.sh` lists, because the policy is "every site or not at + all" and 2.0.0 did four of six. + + reconverge 0.7.0 is the release that matters here rather than a routine + bump. Before it, a cluster- or grid-wide barrier under a guard that is only + *block*-uniform produced no findings at all — so the gate this product is + built on could not see that class, and 2.2.1 shipped with a reconverge that + could not. + + Verified at the new set rather than assumed: `just gate` passes all three + gate tests — the most important in this repository — and `just prune` over + the whole corpus returns **the same verdicts**, including `reduce-flip`'s + 3 clean / 8 refused, which is the known-flip split the README quotes. The + new analyzer changes what it can see and does not change what this corpus + is told. + ### Added - **A dispatchable workflow that re-runs the CUDA path.** Nothing automated diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b94c921..0d8543b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -190,7 +190,7 @@ The `pins.yml` workflow reports upstream movement by opening an issue; it never bumps anything. It runs every Monday, and reports a toolchain move as its own line — a channel change means reconverge must be rebuilt, which commit churn does not. Current pins: nightly-2026-08-28, -cuda-oxide 26754ae5, reconverge 0.6.0 (installed from crates.io). +cuda-oxide b0f961df, reconverge 0.7.0 (installed from crates.io). ## 10. License diff --git a/action/README.md b/action/README.md index b5c14b5..c8286dd 100644 --- a/action/README.md +++ b/action/README.md @@ -29,7 +29,7 @@ jobs: - uses: actions/checkout@v4 with: repository: NVlabs/cuda-oxide - ref: 26754ae52c26c097dc1c465a1e42c4c5d05a3d40 + ref: b0f961df3af0ff140b3b006fa2b6750b71f43f62 path: cuda-oxide - name: Safety gate @@ -63,7 +63,7 @@ the gate specializes per candidate. | `cc` | — | target compute capability, e.g. `"8.6"` (required; verdicts do not transfer across parts) | | `fail-on` | `tool-error` | `never`, `refused`, or `tool-error` | | `version` | `latest` | launchbound-cli release to install | -| `reconverge-version` | `0.6.0` | reconverge release from crates.io — moves in lockstep with `toolchain` | +| `reconverge-version` | `0.7.0` | reconverge release from crates.io — moves in lockstep with `toolchain` | | `toolchain` | `nightly-2026-08-28` | the nightly that built that reconverge | | `summary` | `"true"` | write the verdict table to the job summary | diff --git a/action/action.yml b/action/action.yml index 9893291..01bc190 100644 --- a/action/action.yml +++ b/action/action.yml @@ -51,7 +51,7 @@ inputs: reconverge-driver). Must be built by the toolchain below — the pins move together. required: false - default: "0.6.0" + default: "0.7.0" toolchain: description: >- The pinned nightly that matches reconverge-version; the pair moves diff --git a/corpus/README.md b/corpus/README.md index a2cfa0a..4e367da 100644 --- a/corpus/README.md +++ b/corpus/README.md @@ -34,5 +34,5 @@ Every kernel is a **standalone, device-only lib crate**: ```bash git clone https://github.com/NVlabs/cuda-oxide ../cuda-oxide # sibling of this repo -git -C ../cuda-oxide checkout 26754ae5 # the pinned commit +git -C ../cuda-oxide checkout b0f961df # the pinned commit ``` diff --git a/crates/launchbound-build/src/compile.rs b/crates/launchbound-build/src/compile.rs index 876e059..5b3fa40 100644 --- a/crates/launchbound-build/src/compile.rs +++ b/crates/launchbound-build/src/compile.rs @@ -173,7 +173,7 @@ fn is_missing_subcommand(stderr: &str) -> bool { /// asserts this constant against `rust-toolchain.toml` and the workflows, /// because drift between recorded pins is the failure this repository keeps /// hitting. -pub const CUDA_OXIDE_PIN: &str = "26754ae52c26c097dc1c465a1e42c4c5d05a3d40"; +pub const CUDA_OXIDE_PIN: &str = "b0f961df3af0ff140b3b006fa2b6750b71f43f62"; /// What to say when `cargo oxide` is not installed. fn missing_oxide_message() -> String { diff --git a/docs/LIMITATIONS.md b/docs/LIMITATIONS.md index 45de568..4973e7b 100644 --- a/docs/LIMITATIONS.md +++ b/docs/LIMITATIONS.md @@ -8,7 +8,7 @@ set, and the corpus decided identically ([research-baseline](research-baseline.m ## The gate inherits reconverge's limits, wholesale -A clean gate is **not a proof of correctness**. `reconverge` (v0.6.0) is +A clean gate is **not a proof of correctness**. `reconverge` (v0.7.0) is summary-based and interprocedural, handles reducible control flow only, cannot evaluate non-literal masks, and puts data races entirely out of scope. Its own documentation is the authority; launchbound adds no analysis diff --git a/docs/research-baseline.md b/docs/research-baseline.md index 270b2c0..afd293f 100644 --- a/docs/research-baseline.md +++ b/docs/research-baseline.md @@ -15,7 +15,7 @@ Measured 2026-08-20. | tier-1 guest | Apple `container` 1.2.0, **native arm64** Ubuntu 24.04 (no Docker, no Rosetta — operator requirement), CUDA toolkit 13.2 (sbsa), LLVM 21.1.8, container `cuda-oxide-dev` | | tier-2 box | AWS `g5.xlarge` spot @ **$0.364/hr**, us-east-2c, **NVIDIA A10G** (`sm_86`, cc 8.6), driver 595.71.05, CUDA 13.2 (V13.2.51), LLVM 21.1.8 — chosen over the T4 by the operator; barely above T4 spot ($0.335/hr) | | pinned toolchain | `nightly-2026-04-03` (`rustc 1.96.0-nightly (55e86c996 2026-04-02)`) | -| reconverge | `cargo-reconverge 0.1.11` (built at `~/Projects/reconverge/target/release`) — **the version these measurements were taken with**. The gate has since moved to 0.3.0, 0.4.0, 0.5.0 and (in 2.2.0) 0.6.0; each move was verified to admit the identical set — see the two comparison sections below. This row records the conditions of *these* measurements and is deliberately not updated. | +| reconverge | `cargo-reconverge 0.1.11` (built at `~/Projects/reconverge/target/release`) — **the version these measurements were taken with**. The gate has since moved to 0.3.0, 0.4.0, 0.5.0, (in 2.2.0) 0.6.0 and (in 2.3.0) 0.7.0; each move was verified to admit the identical set — see the two comparison sections below. This row records the conditions of *these* measurements and is deliberately not updated. | | cuda-oxide | checkout `50d07314eb8b7d5ec821ba02b0048a753c20dd4e` — the tree synced to the box (the box AMI's own stale clone reports `e28248c1`, but `./gpu sync` replaces the working tree and excludes `.git`, so the synced tree is what compiled) | | subject kernels | `s0-reduce` (device-only lib crate, dep `cuda-device` only, containing the README's known-flip reduction); cuda-oxide examples `vecadd` (small) and `tiled_gemm` (large) | | evidence logs | `~/Projects/cuda-oxide/.gpu-evidence/20260820T{071248,071807,071959}Z.log` | diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 1a02996..85ad69b 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -5,8 +5,8 @@ # # Current lockstep set: # nightly nightly-2026-08-28 -# cuda-oxide 26754ae52c26c097dc1c465a1e42c4c5d05a3d40 -# reconverge v0.6.0 +# cuda-oxide b0f961df3af0ff140b3b006fa2b6750b71f43f62 +# reconverge v0.7.0 [toolchain] channel = "nightly-2026-08-28" components = ["rustfmt", "clippy"]