Skip to content

Add native library calls and provider-owned input tracking - #1566

Draft
tpn wants to merge 34 commits into
NVIDIA:mainfrom
tpn:codex/coop-interop-o03
Draft

tpn wants to merge 34 commits into
NVIDIA:mainfrom
tpn:codex/coop-interop-o03

Conversation

@tpn

@tpn tpn commented Oct 20, 2026 •

Copy link
Copy Markdown

Rust libraries need to specialize native device code for the concrete types and extents used by a kernel. This adds an unsafe native-library marker: ordinary Cargo compilation discovers typed calls through helpers, invokes the native provider, and carries block and scratch requirements into launch preparation. Cargo tracks provider, header and environment inputs for rebuilds.

Generic registration getters instantiate associated constants with their concrete type arguments. The example handles one and four items per thread without consumer-written linker arguments. Participation, pointer validity and scratch reuse remain the unsafe caller’s responsibility. This version integrates upstream Rust 1.99.1 support and repairs the affected fixture lockfiles while preserving the provider contract.

Validation: affected host tests and strict checks; fresh integration review; exact-revision ordinary Git and fresh HTTPS installs with automatic backend selection; generic/literal executable-code, ABI and resource comparisons; and the HTTPS-built GPU example checking 1,920 values. The affected locked dependency graphs pass. Published-head CI and broader CuTe runtime coverage are separate.

Review scope: Files changed includes prerequisites #1559, #1560 and #1562–#1564. A narrow base requires a maintainer-created upstream prerequisite branch or prerequisite landing. The provider implementation and generic-getter correction show the original owning changes separately. NVIDIA/cccl#12088 supplies the coordinated provider adapter; safe collective checking has its own PR.

tpn added 20 commits October 19, 2026 21:30
Use Cargo target names for standalone emit-ltoir artifacts. Bind the
compiler and reader to the same intermediate directory when invoked
from a Cargo workspace member.

Signed-off-by: Trent Nelson <trent@trent.me>
Accept ordered external LTO files when materializing embedded cubins.
Include their content in the codegen fingerprint and verify owned bytes
before linking through the existing finalizer. Preserve inputs that
overlap generated output paths and diagnose unresolved device symbols.

Add a standalone CUDA FFI example and a native regression script.

Signed-off-by: Trent Nelson <trent@trent.me>
Reuse existing example dependency pins and classify external LTO as
an FFI fixture. Run its linking regression in native sweeps and verify
relocatable debug output in the existing full-debug route.

Signed-off-by: Trent Nelson <trent@trent.me>
Preserve exact geometry and fixed dynamic shared-memory requirements
through artifact loading so preparation can select and validate the
compiled allocation. Keep artifact writers and readers on one in-tree
implementation while preserving legacy bundles without launch facts.

Signed-off-by: Trent Nelson <trent@trent.me>
Combine the reviewed compiler prerequisites for native library calls.
Keep the external LTO fixture on the shared in-tree artifact implementation.

Signed-off-by: Trent Nelson <trent@trent.me>
Use the reviewed Cargo target and output-directory correction in the
combined compiler prerequisite tree.

Signed-off-by: Trent Nelson <trent@trent.me>
Resolve concrete registration functions and scalar argument types during
device compilation, then invoke the native provider and link its owned
LTO output through the ordinary artifact finalizer.

Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Carry the convergence marker through private dependency metadata and
emit it on each marked LLVM declaration before native optimization.
Deduplicate repeated extern symbols while rejecting incompatible
signatures and convergence requirements.

Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
@copy-pr-bot

copy-pr-bot Bot commented Oct 20, 2026

Copy link
Copy Markdown

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@nihalpasham nihalpasham added cuda-oxide SIMT programming model: rustc backend, cargo oxide, cuda-device, cuda-host, book codegen Device code-generation pipeline (Rust MIR to IR to PTX) cargo-oxide The `cargo oxide` subcommand and build automation device-apis User-facing device-side and kernel-authoring APIs (cuda-device, cuda-macros) interop Interop with external compilers / frontends enhancement New feature or request labels Oct 21, 2026
@nihalpasham nihalpasham added the Depends Blocked on another PR/issue or an upstream dependency label Oct 21, 2026
tpn added 14 commits October 21, 2026 21:54
Instantiate a registration getter constant with its concrete function
arguments before reading the registration text. Exercise the existing
raw native calls through a generic associated-constant getter.

Signed-off-by: Trent Nelson <trent@trent.me>
Carry the provider branch onto the upstream shared-host v0.5 source.
Refresh the launch-facts example lockfile for the four local packages
so the merged example workspace resolves with --locked.

Signed-off-by: Trent Nelson <trent@trent.me>
Keep both standalone native examples locked to the local v0.5 host
packages after the upstream integration. Third-party dependencies and
all dependency edges are unchanged.

Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>
Signed-off-by: Trent Nelson <trent@trent.me>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cargo-oxide The `cargo oxide` subcommand and build automation codegen Device code-generation pipeline (Rust MIR to IR to PTX) cuda-oxide SIMT programming model: rustc backend, cargo oxide, cuda-device, cuda-host, book Depends Blocked on another PR/issue or an upstream dependency device-apis User-facing device-side and kernel-authoring APIs (cuda-device, cuda-macros) enhancement New feature or request interop Interop with external compilers / frontends

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants