Supported Features#
This appendix presents the cuda-oxide feature matrix: every compiler capability, runtime API, and hardware feature along with its current support status. The data is drawn from the compiler/runtime sources and the test suite.
Legend: Full = tested and working, Partial = ships and works but has a known gap (called out in the row description), Planned = on the roadmap, N/A = not applicable or no identified need.
Compiler: Memory Model#
Feature |
Status |
Description |
|---|---|---|
HMM / Unified Memory Management |
Full |
GPU directly reads/writes host memory without |
Unified Struct ABI (no |
Full |
Device struct layout matches host exactly. The compiler queries rustc’s actual layout and reproduces it with explicit padding in LLVM IR. Works with |
Dynamic Layout Matching |
Full |
Compiler queries rustc’s |
Packed Layouts ( |
Partial |
Field addresses formed through a pointer ( |
Pointer Distance ( |
Full |
|
Volatile Load/Store |
Full |
|
Bulk Copy ( |
Full |
|
Compiler: Type System#
Feature |
Status |
Description |
|---|---|---|
Generics and Monomorphization |
Full |
Generic kernels and device functions with trait bounds. Monomorphized instances collected from rustc MIR. Const generics supported. |
Enums ( |
Full |
Full enum support including discriminant extraction and payload access. Pattern matching on enums works. |
Struct Construction and Field Access |
Full |
Struct literals, field access, pass-by-value and return values. User-defined structs supported without annotations. |
Array Types ( |
Full |
Static construction, constant- and runtime-index access. Array value constants (bare and nested) materialized. Mutable arrays auto-promoted to memory-backed. |
|
Full |
Generic SIMD register type with named accessors ( |
ABI Scalarization |
Full |
Slices are scalarized at kernel boundaries ( |
Array value constants support primitive leaves (integers, f16, f32,
f64), nested arrays, and tuples recursively composed of supported scalar,
enum, tuple, and zero-sized fields. Tuple element strides and field offsets
come from rustc layout, including internal and trailing padding; direct tuple
value constants use the same layout-aware decoder. Struct constants (direct
and promoted-by-reference) also read every field at its rustc layout offset,
so padded, reordered, #[repr(C)], and nested shapes decode correctly, and a
struct’s stored size is its padded size, which fixes the element stride for
arrays of padded structs inside constants. Pointer-free initialized union
constants are materialized from rustc’s evaluated storage image without
guessing an active field: initialized bytes are preserved, uninitialized
inactive bytes remain undef, and the byte image is transmuted into the
layout-exact union type. This includes direct unions, unions nested in tuple or
struct constants, runtime-indexed [U; N], and MaybeUninit<T> constants.
Bare arrays whose elements are recursively promotable structs use the same
immutable-device-global path as scalar and tuple tables, avoiding a per-thread
local table copy for read-only uses. Pointer-to-array constants such as
const R: &[Struct; N] = &TABLE use the same promoted global when every struct
field is recursively promotable and the converted storage size matches rustc’s
layout. Zero-byte over-aligned struct leaves (for example, repr(align(N)) ZSTs)
remain on the existing alignment-sensitive value path instead of this promotion
path. Arrays of packed structs whose element stride diverges from LLVM’s natural
layout remain unsupported as described above.
Thin pointer fields in array, tuple, and struct const values that relocate
to device statics are materialized via MirGlobalAllocOp per field, including
non-zero byte addends into a static (see struct_constant_provenance,
tuple_constant_provenance, tuple_array_provenance). Slice fat-pointer fields
in aggregate constants are also supported when their data pointer relocates to
a device static and the pointee is a same-element array-to-slice view. Their
literal usize length metadata is decoded independently, including non-zero
static byte addends and nested aggregate field offsets. Thin-pointer-only
union constants preserve the same relocation provenance, including non-zero
addends, by reconstructing one typed pointer carrier instead of transmuting
placeholder bytes. Pointer/integer overlapping unions, fat or nested pointer
storage in unions, over-aligned/padded pointer unions, unsupported fat-pointer
metadata, pointer-to-array union constants (&[U; N]), and pointer
relocations in device-global union initializers remain rejected.
Enum constants preserve payload relocations to device statics, including
non-zero byte addends. This includes niche-encoded Option<&T> and
direct-tagged enum layouts, both for direct thin-reference payloads and for
pointers nested inside tuple, struct, or array payload fields. Anonymous
promoted allocations remain unsupported, as does a relocation-carrying enum
constant nested inside another constant’s field.
Compiler: Closures#
Feature |
Status |
Description |
|---|---|---|
Move Closures ( |
Full |
Closures that capture by value. The whole closure struct is pushed as one byval kernel argument. |
Reference Closures ( |
Full |
Non-move closures that capture by reference. The closure struct (containing host pointers) still travels as one byval argument; the GPU reads through those pointers via HMM. |
Host-to-Device Closures |
Full |
Closures defined on host passed to generic kernels. Polynomial evaluation with captured coefficients tested. |
Device-Internal Closures |
Full |
Closures created and used entirely on device, including closures passed to device functions. |
Compiler: Control Flow#
Feature |
Status |
Description |
|---|---|---|
Match Expressions (integer switch) |
Full |
Multi-way match on integers. Generates chain of conditional branches. |
Match on Enums |
Full |
Pattern matching on |
For Loops (range, iterator, enumerate) |
Full |
Full iterator desugaring: range-based, |
While Loops / If-Else |
Full |
Baseline control flow fully supported. |
Break and Continue |
Full |
|
Loop Unroll Annotations |
Partial |
|
Monomorphization-Dead Branches |
Partial |
Branches that become dead after generic specialization (e.g. the const-false arm of |
Compiler: Arithmetic and Casting#
Feature |
Status |
Description |
|---|---|---|
64-bit Arithmetic |
Full |
Full 64-bit integer arithmetic including shifts, bitwise ops, and descriptor field packing. |
Type Casting (all kinds) |
Full |
IntToInt, IntToFloat, FloatToInt, FloatToFloat, Transmute (bitcast), PtrToPtr, PtrToInt, IntToPtr, pointer coercions. |
Packed bf16x2 FMA |
Full |
|
Compiler: Interop#
Feature |
Status |
Description |
|---|---|---|
Bi-directional LTOIR Support |
Full |
Rust kernels call CUDA C++ device functions and C++ calls Rust device functions. Via NVVM IR → libNVVM → LTOIR → nvJitLink. |
Device FFI ( |
Full |
|
MathDx FFI (cuFFTDx / cuBLASDx) |
Full |
cuFFTDx (8/16/32-point thread-level FFT), cuBLASDx (32x32x32 block-level GEMM) via LTOIR. |
Tile interop |
Experimental |
Inter-kernel interop works today: a cutile-rs Tile kernel and a cuda-oxide SIMT PTX kernel can run in one host process on the same CUDA stream over shared device tensors. Intra-kernel Tile interop is work in progress and tracked in #96. |
Cross-Crate Kernels |
Full |
Kernels and device functions defined in library crates with monomorphization at the binary crate use site. |
Compiler: Functions#
Feature |
Status |
Description |
|---|---|---|
|
Full |
Marks functions as GPU kernel entry points ( |
|
Full |
Device-side helper functions callable from kernels. |
Standalone |
Full |
Device functions compiled without any kernel present. Clean export names for C++ consumption. |
Multi-Kernel Modules |
Full |
Multiple |
Compiler: Compilation Pipeline#
Feature |
Status |
Description |
|---|---|---|
Unified Single-Source Compilation |
Full |
Host and device code in the same file. Custom rustc codegen backend intercepts codegen. No |
PTX Output |
Full |
Default output: Rust MIR → |
NVVM IR Output |
Full |
Selects LLVM 7 typed-pointer syntax for pre-Blackwell GPUs and opaque-pointer syntax for Blackwell and newer GPUs. The generated module is verified by libNVVM, and unsupported legacy operations produce a compile error. |
LTOIR Linking |
Full |
Device-side LTO via libNVVM and nvJitLink. |
Float Math Intrinsics (libdevice) |
Full |
Rust |
Pipeline Inspection |
Full |
|
PTX Inspect |
Full |
|
Local Clean |
Full |
|
Compute Sanitizer Wrapper |
Full |
|
cuda-gdb Source Debugging |
Full |
|
cuda-gdb Local / Argument Inspection |
Partial |
|
Compiler: Inline PTX#
Feature |
Status |
Description |
|---|---|---|
|
Partial |
CUDA inline PTX with |
Runtime Library: Safety#
Feature |
Status |
Description |
|---|---|---|
|
Full |
Bounds-checked parallel write output slice. |
|
Full |
Opaque, non-transferable witness. |
Proof-carrying static views |
Full |
A checked |
|
Full |
Checked, reusable launch geometry branded for the exact kernel. Raw |
|
Full |
Compile-time barrier lifecycle: |
Runtime Library: Atomics#
Feature |
Status |
Description |
|---|---|---|
Device-Scope Atomics |
Full |
|
Block-Scope Atomics |
Full |
|
System-Scope Atomics |
Full |
|
|
Full |
Standard library atomic types lowered to PTX |
Runtime Library: Thread and Synchronization#
Feature |
Status |
Description |
|---|---|---|
Thread/Block/Grid Intrinsics |
Full |
|
Block Synchronization |
Full |
|
Async Barriers (mbarrier) |
Full |
Hardware async barriers for Hopper+: init, arrive, test_wait, try_wait, inval. |
Cluster Synchronization |
Full |
|
Fence Operations |
Full |
|
Runtime Library: Warp#
Feature |
Status |
Description |
|---|---|---|
Warp Shuffle Operations |
Full |
|
Warp Vote Operations |
Full |
|
Lane/Warp ID |
Full |
|
Runtime Library: Cooperative Groups#
Feature |
Status |
Description |
|---|---|---|
Typed Group Handles |
Full |
|
Group Universal API |
Full |
|
Warp Tile Partitioning |
Full |
|
Warp Collectives |
Full |
|
Warp Reductions / Scans |
Full |
|
Block Reductions / Scans |
Full |
|
Cooperative Kernel Launch |
Full |
|
Runtime Library: Debug#
Feature |
Status |
Description |
|---|---|---|
|
Full |
Formatted GPU output with full format specifier support. Lowers to |
|
Full |
The no-message form calls |
Debug Intrinsics |
Full |
|
Runtime Library: Kernel Launch#
Feature |
Status |
Description |
|---|---|---|
|
Full |
Embedded module loading with typed sync/async arguments. Raw configuration methods are unsafe. |
|
Full |
Checked dimensionality, exact block shape, resources, capabilities, context, and kernel identity. |
|
Full |
Unsafe lower-level launch for runtime-loaded modules; requires |
|
Full |
Unsafe lower-level lazy launch; requires |
|
Full |
Occupancy hints: max threads per block, min blocks per SM. |
|
Full |
Compile-time cluster dimensions. Emits |
Runtime Library: TMA#
Feature |
Status |
Description |
|---|---|---|
TMA Bulk Tensor Copy (1D–5D) |
Full |
|
TMA Multicast |
Full |
Single TMA load broadcast to all CTAs in cluster. sm_100a for full multicast. |
TMA Commit/Wait Groups |
Full |
|
Not Yet Implemented#
Feature |
Status |
Notes |
|---|---|---|
Rust |
Planned |
Use |
FP8 / MX Data Types |
Planned |
Roadmap item for Blackwell. No architectural limitation. |
Dynamic Dispatch ( |
N/A |
Use generics with static dispatch. Haven’t found a real need for this. |
Heap Allocation ( |
N/A |
CUDA has a device-side heap ( |
|
N/A |
Use |
Panic / Unwinding |
N/A |
Panic paths exist in MIR but the compiler strips |
Standard Library ( |
N/A |
|
Texture Memory |
N/A |
Lower priority given TMA availability on Hopper+. |