Compatibility
cuTile.jl emits Tile IR bytecode, which tileiras compiles for a specific GPU architecture. Feature availability therefore depends on two independent things: the bytecode version in use, and the compute capability of the device. This page collects both.
For what Tile IR itself guarantees across versions, see the specification's stability chapter.
Baseline requirements
| Requirement | Minimum |
|---|---|
| Julia | 1.11 |
| NVIDIA driver | 580 (CUDA 13) |
| Compute capability | 8.0 (Ampere) |
CUDA.jl must be imported to launch kernels; it supplies the CUDA toolkit artifacts, including tileiras.
Bytecode versions
cuTile.jl can emit bytecode versions v13.1 through v13.4. By default it probes the tileiras binary in use and emits the newest version that binary accepts; the bytecode_version preference selects a version accepted by that binary. cuTile rejects preferences unsupported by either the package or the selected tileiras. cuTile.versioninfo() reports what will be used.
Each architecture has a minimum bytecode version below which Tile IR is not supported at all:
| Architecture | Compute capability | Minimum bytecode |
|---|---|---|
| Blackwell | ≥ 10.0 | v13.1 |
| Hopper | 9.0 | v13.3 |
| Ampere / Ada | 8.0 – 8.9 | v13.2 |
| older | < 8.0 | unsupported |
cuTile checks this at launch and reports an error naming both the detected version and the requirement.
Features by bytecode version
Everything not listed here works at v13.1.
Requires v13.2
| Feature | Notes |
|---|---|
Float8_E8M0FNU | Element type, used as an MX block scale |
atan2 |
Requires v13.3
| Feature | Notes |
|---|---|
Float4_E2M1FN | Element type |
ct.muladd_scaled | Also requires Blackwell |
muladd(a, b, acc; fast_acc=true) | FP8 inputs only; only takes effect on Hopper |
exp with approximate rounding | ct.@fpmode rounding_mode=ct.Rounding.Approx |
ct.atomic_store_* | View-based atomic reductions |
Atomic add on BFloat16 | Also requires Hopper (sm_90) or newer |
| Sparse views | @view a[tile_of_indices, ...], consumed by ct.load/ct.store |
StepRange views | @view a[i:s:j, :] |
eachtile with step != shape | Equal shape and step work at v13.1 |
num_worker_warps compiler option | |
Whole-tile reinterpret | Between element types of differing width |
Conversion to Float8_E8M0FNU | RoundToZero or RoundUp; some source types require v13.4 |
Requires v13.4
| Feature | Notes |
|---|---|
ct.insert | Replace a non-overlapping sub-tile |
check_bounds=false | On ct.load and ct.store only; on ct.gather/ct.scatter it merely skips the bounds mask |
ct.Intrinsics.powi | Integer exponents through cuda_tile.fpowi |
| Directed float conversion rounding | RoundToZero, RoundDown, RoundUp, or RoundNearestTiesAway; supported pairs vary |
| Programmatic dependent launch | Also requires Hopper (sm_90) or newer |
Features by architecture
| Feature | Requirement | Behaviour otherwise |
|---|---|---|
ct.muladd_scaled | Blackwell (≥ sm_100) | Error |
Atomic add on BFloat16 | Hopper (≥ sm_90) | Error |
fast_acc=true | Hopper (sm_90) | Silently ignored |
| Programmatic dependent launch | Hopper (≥ sm_90) | Error |
fast_acc is the exception to the pattern: it is a throughput hint rather than a capability, so on architectures where it does nothing, it is accepted and ignored rather than rejected. It is still an error to pass it with non-FP8 inputs on any architecture.
API stability
Symbols are marked public or exported when they are intended for use; anything else is internal, and will change without a deprecation cycle.