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

RequirementMinimum
Julia1.11
NVIDIA driver580 (CUDA 13)
Compute capability8.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:

ArchitectureCompute capabilityMinimum bytecode
Blackwell≥ 10.0v13.1
Hopper9.0v13.3
Ampere / Ada8.0 – 8.9v13.2
older< 8.0unsupported

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

FeatureNotes
Float8_E8M0FNUElement type, used as an MX block scale
atan2

Requires v13.3

FeatureNotes
Float4_E2M1FNElement type
ct.muladd_scaledAlso requires Blackwell
muladd(a, b, acc; fast_acc=true)FP8 inputs only; only takes effect on Hopper
exp with approximate roundingct.@fpmode rounding_mode=ct.Rounding.Approx
ct.atomic_store_*View-based atomic reductions
Atomic add on BFloat16Also 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 != shapeEqual shape and step work at v13.1
num_worker_warps compiler option
Whole-tile reinterpretBetween element types of differing width
Conversion to Float8_E8M0FNURoundToZero or RoundUp; some source types require v13.4

Requires v13.4

FeatureNotes
ct.insertReplace a non-overlapping sub-tile
check_bounds=falseOn ct.load and ct.store only; on ct.gather/ct.scatter it merely skips the bounds mask
ct.Intrinsics.powiInteger exponents through cuda_tile.fpowi
Directed float conversion roundingRoundToZero, RoundDown, RoundUp, or RoundNearestTiesAway; supported pairs vary
Programmatic dependent launchAlso requires Hopper (sm_90) or newer

Features by architecture

FeatureRequirementBehaviour otherwise
ct.muladd_scaledBlackwell (≥ sm_100)Error
Atomic add on BFloat16Hopper (≥ sm_90)Error
fast_acc=trueHopper (sm_90)Silently ignored
Programmatic dependent launchHopper (≥ 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.