Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
f39c959
cuda-core: safe element casts require AnyBitPattern; bool is DeviceCopy
elibol Oct 13, 2026
37c540e
Merge main into bool and element-cast safety fix
elibol Oct 21, 2026
f42ed4f
Fix atomic buffer representation and zeroed initialization safety
elibol Oct 21, 2026
787e241
Refresh remaining SIMT example locks for bytemuck
elibol Oct 21, 2026
228652d
Align DeviceCopy derive diagnostics with the validity contract
elibol Oct 21, 2026
2788c6c
fix: enforce Tile argument contracts and pinned host alignment
elibol Oct 21, 2026
98c023d
ci: validate interop stack against the v0.5.0 API boundary
elibol Oct 21, 2026
70f5676
refactor(cuda-core): share host handles and allocations across Tile a…
elibol Oct 21, 2026
f0f61e2
fix(cuda-core): complete context migration in Tile consumers
elibol Oct 21, 2026
8002432
docs: order shared host imports consistently
elibol Oct 21, 2026
80d9e7a
refactor: share the async host runtime across Tile and SIMT
elibol Oct 21, 2026
fcfe932
fix(cuda-async): bound the GEMM output scalar for shared launches
elibol Oct 21, 2026
a9f81c5
fix(cuda-macros): marshal async slice arguments through the shared la…
elibol Oct 21, 2026
eec8776
fix(cuda-core): preserve shared read access on empty and peeled Devic…
nihalpasham Oct 22, 2026
c68eee0
fix(cuda-async,cuda-host): preserve concurrent read permissions on De…
nihalpasham Oct 22, 2026
9718b43
fix(cutile): retain source origins for generated code and host checks…
elibol Oct 22, 2026
08b9d85
fix(cutile): retain source origins for generated code and host checks…
elibol Oct 22, 2026
b8c263e
ci: validate pull requests targeting release branches
elibol Oct 22, 2026
8d24ed9
Merge remote-tracking branch 'fork/main' into fix/bool-device-copy-an…
elibol Oct 22, 2026
282eeb1
fix(cuda-core): count allocation views independently of leases
elibol Oct 22, 2026
bb0e891
fix(cutile): separate tensor aliases from completion leases
elibol Oct 22, 2026
f7fa559
Merge branch 'fix/bool-device-copy-anybitpattern-casts' into refactor…
elibol Oct 22, 2026
d52fbce
Merge branch 'refactor/shared-cuda-core' into refactor/shared-cuda-async
elibol Oct 22, 2026
edfe8d5
Merge branch 'refactor/shared-cuda-async' into release/v0.5.0-host-de…
elibol Oct 22, 2026
0143af5
chore: prepare shared host and Tile crates for v0.5.0 (#1614)
elibol Oct 22, 2026
19205d2
Merge v0.5.0 version baseline from main
elibol Oct 22, 2026
36f9072
Merge updated DeviceCopy prerequisite after version bump
elibol Oct 22, 2026
6d311cb
Merge updated shared core prerequisite after version bump
elibol Oct 22, 2026
1dc2e01
Merge current host stack with main version baseline
elibol Oct 22, 2026
927d462
Add the cute-rs preview: CuTe kernels in Rust for sm_100a and sm_120a…
nihalpasham Oct 23, 2026
93dd507
Merge current main and reconcile CuTe dependency lockfiles
elibol Oct 23, 2026
47042a8
Merge current main and migrate CuTe consumers to shared core
elibol Oct 23, 2026
52dccfe
Merge updated core prerequisite with CuTe integration
elibol Oct 23, 2026
c80633a
Refresh release integration with current host stack
elibol Oct 23, 2026
b811b70
fix(async): restore caller-managed async_on lifetimes
elibol Oct 23, 2026
038c82d
Integrate restored async_on lifetimes for v0.5.0
elibol Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 2 additions & 1 deletion .github/workflows/book.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ on:
# only ever built after merge, so a PR that broke it could not be caught by
# review or by CI.
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- 'cuda-oxide/cuda-oxide-book/**'
- 'cutile-rs/cutile-book/**'
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,20 @@ on:
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/**'
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- 'cuda-oxide/**'
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
Expand Down
27 changes: 17 additions & 10 deletions .github/workflows/clippy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
working-directory: cuda-oxide
run: cargo clippy --workspace --all-targets -- -D warnings

# `rustc-codegen-cuda` and each example under examples/ are their own
# `rustc-codegen-cuda`, the standard and CuTe examples, and CuTe models have
# standalone workspaces (the codegen backend is swapped in via
# RUSTFLAGS, so they can't live in the root [workspace]). That's 60+
# cargo invocations from different workspace roots. By default each
Expand All @@ -60,18 +60,25 @@ jobs:
working-directory: cuda-oxide/crates/rustc-codegen-cuda
run: cargo clippy --all-targets -- -D warnings

- name: Run clippy (rustc-codegen-cuda examples)
- name: Run clippy (standard and CuTe examples and models)
env:
CUDA_TOOLKIT_PATH: ${{ steps.cuda-toolkit.outputs.CUDA_PATH }}
CARGO_TARGET_DIR: ${{ runner.temp }}/clippy-shared-target
run: |
set -e
for ex in cuda-oxide/crates/rustc-codegen-cuda/examples/*/; do
if [ ! -f "$ex/Cargo.toml" ]; then continue; fi
name=$(basename "$ex")
echo "::group::clippy: $name"
(cd "$ex" && cargo clippy --all-targets -- -D warnings)
echo "::endgroup::"
example_roots=(
cuda-oxide/crates/rustc-codegen-cuda/examples
cuda-oxide/cute-rs-preview/examples
cuda-oxide/cute-rs-preview/models
)
for example_root in "${example_roots[@]}"; do
for ex in "$example_root"/*/; do
if [ ! -f "$ex/Cargo.toml" ]; then continue; fi
name=$(basename "$ex")
echo "::group::clippy: $name"
(cd "$ex" && cargo clippy --all-targets -- -D warnings)
echo "::endgroup::"
done
done

# The loop above is one level deep. A few examples nest a second
Expand All @@ -97,11 +104,11 @@ jobs:
grep -q "\"${sub}\""; then
continue
fi
echo "::group::clippy: ${dir#cuda-oxide/crates/rustc-codegen-cuda/examples/}"
echo "::group::clippy: ${dir#cuda-oxide/}"
(cd "${dir}" && cargo clippy --locked --all-targets -- -D warnings)
echo "::endgroup::"
done < <(
find cuda-oxide/crates/rustc-codegen-cuda/examples -mindepth 3 -name Cargo.toml \
find "${example_roots[@]}" -mindepth 3 -name Cargo.toml \
-not -path '*/target/*' | sort
)

Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ on:
- '**/*.sh'
- '**/*.py'
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- '**/*.rs'
- '**/Cargo.toml'
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/cutile-rs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
Expand Down Expand Up @@ -288,7 +289,7 @@ jobs:

- name: Native f16 DeviceCopy
working-directory: ${{ github.workspace }}
run: cargo test -p cuda-core --features f16 --test simt_device_copy_impls
run: cargo test -p cuda-core --features f16 --test device_copy_impls

- name: loom model check (interleavings + weak memory)
working-directory: ${{ github.workspace }}
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ on:
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/**'
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- 'cuda-oxide/**'
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/examples-compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,20 @@ on:
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
- '.github/workflows/**'
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- 'cuda-oxide/**'
- 'cuda-bindings/**'
- 'cuda-core/**'
- 'cuda-core-derive/**'
- 'cuda-repr/**'
- 'cuda-async/**'
- 'Cargo.toml'
- 'Cargo.lock'
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/fmt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,17 @@ jobs:
run: cargo fmt --all -- --check
working-directory: cuda-oxide/crates/cuda-macros/tests/device-only

- name: Check example crate formatting
- name: Check example and model crate formatting
run: |
set -euo pipefail
# `cargo fmt --all` also formats local path dependencies. Running it
# per example repeatedly reformats the large shared workspaces.
shopt -s globstar nullglob
manifests=(cuda-oxide/crates/rustc-codegen-cuda/examples/**/Cargo.toml)
manifests=(
cuda-oxide/crates/rustc-codegen-cuda/examples/**/Cargo.toml
cuda-oxide/cute-rs-preview/examples/**/Cargo.toml
cuda-oxide/cute-rs-preview/models/**/Cargo.toml
)
((${#manifests[@]} > 0))
for manifest in "${manifests[@]}"; do
example_dir="$(dirname "$manifest")"
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/naming-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ on:
- 'cuda-oxide/scripts/check-reserved-prefixes.sh'
- '.github/workflows/naming-guard.yml'
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]
paths:
- 'cuda-oxide/crates/**'
- 'cuda-oxide/scripts/check-reserved-prefixes.sh'
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/status-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ on:
push:
branches: [main]
pull_request:
branches: [main]
# Include release PRs and stacks targeting prerequisite copy-pr-bot mirrors.
branches: [main, "release/v*", "pull-request/[0-9]+"]

# Each commit on main gets its own group, so it starts at once. Any other ref
# still shares one group and cancels the older run.
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,18 @@ jobs:
- package: dialect-mir
- package: dialect-nvvm
- package: mir-importer
# CuTe types, semantic IR, and MLIR export need no CUDA toolkit.
# Facade macro tests also compile host metadata via cuda-host.
- package: cute-layout
- package: cute-rs
needs_cuda: true
- package: ctm-rs
needs_cuda: true
- package: ctm-rs
test_args: --all-targets --features host
needs_cuda: true
- package: dialect-cute
- package: cuda-oxide-mlir-export
# Includes a real llc -> ptxas spine-kernel validation.
- package: cuda-oxide-codegen
needs_cuda: true
Expand Down
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ Run `nix develop` from the relevant component.
notice plus `Apache-2.0`, in the form shown under "License Headers" in
`CONTRIBUTING.md`. Preserve existing and third-party notices.
`cuda-oxide/scripts/check-spdx-headers.sh` enforces the policy.
- **Create new branches from the user's fork of this repository.** Synchronize
the fork's `main` with upstream before branching. For stacked work, base the
next branch on the preceding feature branch in that same fork.
- **Never push to the canonical upstream repository, `NVIDIA/cuda-rust`.
Treat it as read-only.** Branch and push to a fork. Before pushing, run
`git remote -v` and confirm the push remote is a fork of the base, comparing
Expand Down
35 changes: 31 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ members = [
"cuda-core",
"cuda-core-derive",
"cuda-async",
# no_std representation contracts shared by host and device crates.
"cuda-repr",
]
# Nested workspaces. Without these, Cargo treats crates under them as part of
# this workspace and `edition.workspace = true` in cuda-device (etc.) looks at
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ cuda-rust/
├── cuda-bindings/ runtime — CUDA driver API bindings
├── cuda-core/ runtime — contexts, streams, memory, modules, events, launch
├── cuda-core-derive/ runtime — derive macros for cuda-core
├── cuda-repr/ shared no_std host/device representation contracts
├── cuda-async/ runtime — lazy ops, futures, streams, graphs
├── cuda-oxide/ SIMT model — compiler, device crates, cuda-oxide-book
└── cutile-rs/ Tile model — compiler, tile crates, cutile-book
Expand Down
6 changes: 3 additions & 3 deletions cuda-async/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cuda-async"
version = "0.4.0"
version = "0.5.0"
edition = "2021"
rust-version = "1.89"
license = "Apache-2.0"
Expand All @@ -11,9 +11,9 @@ description = "Safe Async CUDA support via Async Rust."

[dependencies]
# Sibling paths, not the root workspace entries; see cuda-core/Cargo.toml.
cuda-core = { version = "=0.4.0", path = "../cuda-core" }
cuda-core = { version = "=0.5.0", path = "../cuda-core" }
rustc-hash = "2.0"
cuda-bindings = { version = "=0.4.0", path = "../cuda-bindings" }
cuda-bindings = { version = "=0.5.0", path = "../cuda-bindings" }
half = { version = "2" }
futures = "0.3"
anyhow = "1"
Expand Down
Loading
Loading