CUDA and Tile IR compatibility#
A kernel needs both a supported Tile IR version and a compatible target GPU. The tables below come from the same requirements registry used by the compiler, bytecode writer, launch guard, and example/test prerequisites.
The version is the emitted Tile IR version, not the version reported by
cuDriverGetVersion. We ask the selected tileiras which formats it accepts
and choose the newest one our writer also supports. Older assemblers without
--list-versions are checked by compiling a small representative kernel.
An explicit CUTILE_BYTECODE_VERSION must be supported; we do not downgrade it.
CUTILE_TILEIRAS_PATH takes precedence over the toolkit directory. A newer
driver does not make an older assembler understand newer bytecode.
Feature |
13.2 |
13.3 |
13.4 |
Target requirement |
|---|---|---|---|---|
baseline Tile IR |
Yes |
Yes |
Yes |
|
alloca |
— |
Yes |
Yes |
Any supported target |
pack/unpack |
— |
Yes |
Yes |
Any supported target |
block-scaled MMA |
— |
Yes |
Yes |
|
gather_scatter_view |
— |
Yes |
Yes |
Any supported target |
strided_view |
— |
Yes |
Yes |
Any supported target |
atomic_red_view_tko |
— |
Yes |
Yes |
Any supported target |
insert |
— |
— |
Yes |
Any supported target |
fpowi |
— |
— |
Yes |
Any supported target |
GDC tokens |
— |
— |
Yes |
Any supported target |
memory_fence_alias_tko |
— |
— |
Yes |
Any supported target |
i4 |
— |
Yes |
Yes |
Any supported target |
f8E4M3FN/f8E5M2 |
Yes |
Yes |
Yes |
|
f8E8M0FNU |
Yes |
Yes |
Yes |
|
f4E2M1FN |
— |
Yes |
Yes |
|
f8E5M3FNU |
— |
— |
Yes |
|
cuda_tile.mmaf_scaled with f8E5M3FNU scales |
— |
— |
Yes |
|
ptr_attr |
— |
— |
Yes |
Any supported target |
rounding_mode=nearest_away |
— |
— |
Yes |
Any supported target |
ftof additional rounding modes (type-dependent) |
— |
— |
Yes |
Any supported target |
ftoi.saturating |
— |
— |
Yes |
Any supported target |
inbounds=true |
— |
— |
Yes |
Any supported target |
mmaf.fast_acc |
— |
Yes |
Yes |
Any supported target |
exp.rounding_mode (non-approximate) |
— |
Yes |
Yes |
Any supported target |
module.producer |
— |
Yes |
Yes |
Any supported target |
global.constant |
— |
Yes |
Yes |
Any supported target |
global.symbol_visibility |
— |
Yes |
Yes |
Any supported target |
num_worker_warps_per_cta |
— |
Yes |
Yes |
Any supported target |
num_cta_in_cga greater than 1 |
Yes |
Yes |
Yes |
|
num_worker_warps_per_cta restricted to 4 or 8 |
— |
— |
Yes |
Any supported target |
bf16 atomic add |
— |
Yes |
Yes |
|
return inside loop |
— |
— |
Yes |
Any supported target |
target sm_90 |
— |
Yes |
Yes |
|
target sm_107 |
— |
— |
Yes |
|
programmatic dependent launch |
— |
— |
Yes |
|
Target |
Minimum emitted Tile IR version |
|---|---|
|
13.2 |
|
13.2 |
|
13.2 |
|
13.2 |
|
13.2 |
|
13.3 |
|
13.2 |
|
13.2 |
|
13.4 |
|
13.2 |
|
13.2 |
|
13.2 |
Requirements combine. For example, FP4 packing needs both the pack/unpack
operations and the FP4 element type. A Hopper target requires Tile IR 13.3
even when the operations themselves were available earlier.
Architecture numbers are not a feature hierarchy: sm_120 supports NVFP4,
but not scaled MMA using f8E5M3FNU scales. Operand types, shapes and attribute
values still have to satisfy the operation’s verifier. In particular,
num_worker_warps_per_cta accepts 1, 2, 4, 8, 16 or 32 in 13.3, and only 4
or 8 in 13.4.
PDL additionally needs the driver’s cuLaunchKernelEx entry point. Optional
host APIs are resolved at runtime; their availability is separate from the
device IR requirements. See the PDL launch contract.
The driver/toolkit combination must meet NVIDIA’s CUDA compatibility rules. We do not impose a blanket driver-version-at-least-toolkit-version check.
Keeping the tables current#
Requirements live in cutile-ir/src/requirements.rs, based on the
versioned Tile IR specification.
When changing them, print the README and reference tables with:
cargo run -p cutile-ir --example feature_matrix
The documented_matrices_match_the_registry test checks both checked-in tables.
CPU tests exercise the requirements without a driver; assembler CI covers
13.2 and 13.3, with a 13.4 lane enabled when its image is configured.
Examples report unsupported prerequisites as SKIP; discovery, compilation,
and execution errors remain failures.