Skip to content

Commit e65d81e

Browse files
committed
Enable Hopper on CUDA 13.3
1 parent 4a3cc60 commit e65d81e

2 files changed

Lines changed: 42 additions & 15 deletions

File tree

src/launch.jl

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,33 @@ function probe_max_bytecode_version()
290290
"($(join(reverse(SUPPORTED_BYTECODE_VERSIONS), ", "))); last log:\n$last_log")
291291
end
292292

293+
"""
294+
tile_ir_requirement(cap::VersionNumber) -> Union{Tuple{String,VersionNumber}, Nothing}
295+
296+
The architecture-family name and the minimum bytecode version Tile IR requires
297+
on a device of compute capability `cap`, or `nothing` if Tile IR is not
298+
supported on that capability at all. Pure (no device access) so the gate logic
299+
in [`check_tile_ir_support`] can be unit-tested without a GPU.
300+
"""
301+
function tile_ir_requirement(cap::VersionNumber)
302+
if cap >= v"10.0" # Blackwell
303+
return ("Blackwell", v"13.1")
304+
elseif cap >= v"9.0" # Hopper
305+
return ("Hopper", v"13.3")
306+
elseif cap >= v"8.0" # Ampere / Ada
307+
return ("Ampere/Ada", v"13.2")
308+
else
309+
return nothing
310+
end
311+
end
312+
293313
"""
294314
check_tile_ir_support()
295315
296316
Validate that the current `tileiras` toolkit supports Tile IR on the active
297317
device. Returns the bytecode version cuTile should emit for this device
298318
(per [`bytecode_version`]), provided it meets the device's minimum
299-
requirement (Blackwell ≥ v13.1, Ampere/Ada ≥ v13.2).
319+
requirement (Blackwell ≥ v13.1, Hopper ≥ v13.3, Ampere/Ada ≥ v13.2).
300320
"""
301321
function check_tile_ir_support()
302322
if tileiras_override === nothing && !CUDA_Compiler_jll.is_available()
@@ -310,23 +330,16 @@ function check_tile_ir_support()
310330

311331
cap = capability(dev)
312332
sm_str = format_sm_arch(cap)
313-
if cap >= v"10.0" # Blackwell
314-
if ver < v"13.1"
315-
@error "Tile IR on Blackwell ($sm_str) requires bytecode ≥ v13.1, detected v$ver"
316-
return nothing
317-
end
318-
elseif cap >= v"9.0" # Hopper — not supported
319-
@error "Tile IR is not supported on Hopper ($sm_str)"
320-
return nothing
321-
elseif cap >= v"8.0" # Ampere / Ada
322-
if ver < v"13.2"
323-
@error "Tile IR on Ampere/Ada ($sm_str) requires bytecode ≥ v13.2, detected v$ver"
324-
return nothing
325-
end
326-
else
333+
req = tile_ir_requirement(cap)
334+
if req === nothing
327335
@error "Tile IR is not supported on compute capability $cap ($sm_str)"
328336
return nothing
329337
end
338+
arch, min_ver = req
339+
if ver < min_ver
340+
@error "Tile IR on $arch ($sm_str) requires bytecode ≥ v$min_ver, detected v$ver"
341+
return nothing
342+
end
330343

331344
return ver
332345
end

test/types.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,20 @@ end
182182
@test_throws ArgumentError cuTile.format_sm_arch(v"10.0.1")
183183
end
184184

185+
@testset "tile_ir_requirement" begin
186+
# Blackwell (sm_100+) requires bytecode ≥ v13.1
187+
@test cuTile.tile_ir_requirement(v"10.0") == ("Blackwell", v"13.1")
188+
@test cuTile.tile_ir_requirement(v"12.1") == ("Blackwell", v"13.1")
189+
# Hopper (sm_90) requires bytecode ≥ v13.3
190+
@test cuTile.tile_ir_requirement(v"9.0") == ("Hopper", v"13.3")
191+
# Ampere / Ada (sm_80..sm_89) requires bytecode ≥ v13.2
192+
@test cuTile.tile_ir_requirement(v"8.0") == ("Ampere/Ada", v"13.2")
193+
@test cuTile.tile_ir_requirement(v"8.9") == ("Ampere/Ada", v"13.2")
194+
# Pre-Ampere is unsupported
195+
@test cuTile.tile_ir_requirement(v"7.5") === nothing
196+
@test cuTile.tile_ir_requirement(v"7.0") === nothing
197+
end
198+
185199
@testset "@compiler_options validation" begin
186200
# Invalid num_ctas (not power of 2) should throw at definition time
187201
@test_throws "num_ctas must be" @eval function _test_bad_ctas(a::ct.TileArray{Float32,1})

0 commit comments

Comments
 (0)