Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5440241
Build against and run on the Intel GPU LTS stack
michel2323 Jun 23, 2026
9199940
Work around strided mapreducedim! miscompiles on the LTS IGC
michel2323 Jun 23, 2026
6aa93e0
Harden command-queue lifetime to prevent banned-context faults on free
michel2323 Jun 23, 2026
2adadbc
Root oneMKL FFT descriptor arrays across the C call
michel2323 Jun 23, 2026
5108b77
Add an opt-in per-submission synchronize for the LTS dropped-tail bug
michel2323 Jun 23, 2026
4fd200f
Configure the Aurora LTS self-hosted CI runner
michel2323 Jun 23, 2026
2dbe13f
Gate the LTS workarounds behind a runtime ONEAPI_LTS flag (layers 1-2)
michel2323 Jun 23, 2026
d0d3b09
Compat: SPIRVIntrsinics v1
michel2323 Jul 1, 2026
25d5236
Use SPIRVIntrinsics fork with fixes
michel2323 Jul 2, 2026
f158ea6
test: fix BFloat16 math test on the Aurora LTS stack
michel2323 Jul 6, 2026
299b6a4
examples: skip bfloat16.jl on the Aurora LTS stack
michel2323 Jul 7, 2026
0ddd27a
level-zero: fix sync-each-submission deadlock in kernel-execution test
michel2323 Jul 7, 2026
698c243
Project.toml: restore version 2.6.2 and GPUToolbox 3 compat
michel2323 Jul 8, 2026
e2d3a53
level-zero: share one env-bool parser across ONEAPI_* flags
michel2323 Jul 8, 2026
9b11a48
Register KA.priority! replacement queue in the queue registry
michel2323 Jul 8, 2026
bd3b19a
mapreduce: guard LTS strided-materialization fallback against host in…
michel2323 Jul 8, 2026
d3cf2da
level-zero: bound the LTS queue-finalizer drain instead of waiting fo…
michel2323 Jul 8, 2026
f1b6d45
mapreduce: document that mixed dims=(1,3) reductions need no workaround
michel2323 Jul 8, 2026
13dd61c
Restore SPIRV_LLVM_Backend_jll so the rolling stack can compile kernels
michel2323 Jul 8, 2026
30e5300
Restore BFloat16 kernel support on the rolling stack
michel2323 Jul 8, 2026
4374f68
mkl: guard sparse setters against a stale oneAPI_Support_jll ABI
michel2323 Jul 8, 2026
a784431
oneAPI: make in-process NEO discovery real, fix LD_LIBRARY_PATH comment
michel2323 Jul 8, 2026
e2ddd99
Project.toml: pin SPIRVIntrinsics [sources] to a commit SHA
michel2323 Jul 8, 2026
df6c1a4
mapreduce: size the coalesced LTS kernel via launch_configuration
michel2323 Jul 8, 2026
ac130ed
mapreduce: add exact-arithmetic regression test for strided mixed red…
michel2323 Jul 8, 2026
b32eeb2
Set default ONEAPI_LTS=0
michel2323 Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@ jobs:
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Pin each parallel test worker to a distinct GPU tile instead of
# oversubscribing device 0 (see test/runtests.jl).
ONEAPI_TEST_SPREAD_GPUS: '1'
ONEAPI_LTS: '1'
# Synchronize after every command-list submission to work around the
# Aurora LTS NEO dropped-tail corruption (see lib/level-zero/cmdlist.jl).
ONEAPI_SYNC_EACH_SUBMISSION: '1'
runs-on: [self-hosted, linux, X64]
strategy:
matrix:
Expand All @@ -38,5 +45,13 @@ jobs:
- uses: julia-actions/cache@v3
- uses: julia-actions/julia-buildpkg@latest
continue-on-error: true
- uses: julia-actions/julia-runtest@latest
# Disable AVX512-FP16 host codegen on the Aurora Sapphire Rapids nodes. Under concurrent
# oneMKL load the native AVX512-FP16 path silently miscomputes *host* Float16 (e.g. the
# GPUArrays `A .* B .+ c` broadcast reference), failing tests even though the GPU result
# is correct (single-process clean; MXCSR clean; only the native-FP16 path, not Float32).
# `-C native,-avx512fp16` routes Float16 through Float32 and propagates to the Pkg.test
# subprocess and its parallel workers via Base.julia_cmd(). `julia-runtest` cannot pass a
# cpu-target, so invoke Pkg.test() directly. See repro_bcast_mkl.jl.
- name: Run tests (AVX512-FP16 disabled)
continue-on-error: true
run: julia -C "native,-avx512fp16" --color=yes --project=. -e 'import Pkg; Pkg.test()'
19 changes: 13 additions & 6 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,19 @@ KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c"
LLVM = "929cbde3-209d-540e-8aea-75f648917ca0"
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
NEO_jll = "700fe977-ac61-5f37-bbc8-c6c4b2b6a9fd"
NEO_LTS_jll = "a724f90f-ce79-56dd-a1bd-b9de5a61085f"
Preferences = "21216c6a-2e73-6563-6e65-726566657250"
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
SPIRVIntrinsics = "71d1d633-e7e8-4a92-83a1-de8814b09ba8"
SPIRV_LLVM_Backend_jll = "4376b9bf-cff8-51b6-bb48-39421dff0d0c"
SPIRV_LLVM_Translator_jll = "4a5d46fc-d8cf-5151-a261-86b458210efb"
SPIRV_Tools_jll = "6ac6d60f-d740-5983-97d7-a4482c0689f4"
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
oneAPI_Level_Zero_Headers_jll = "f4bc562b-d309-54f8-9efb-476e56f0410d"
oneAPI_Level_Zero_Loader_jll = "13eca655-d68d-5b81-8367-6d99d727ab01"
oneAPI_Level_Zero_Headers_LTS_jll = "d79c0b2e-896c-561b-aab9-323701ec0314"
oneAPI_Level_Zero_Loader_LTS_jll = "f6e5cbb4-ba2a-56dc-92a2-9d66f5656ccd"
oneAPI_Support_jll = "b049733a-a71d-5ed3-8eba-7d323ac00b36"

[compat]
Expand All @@ -41,16 +42,22 @@ GPUCompiler = "1.6"
GPUToolbox = "0.1, 0.2, 0.3, 1, 3"
KernelAbstractions = "0.9.39"
LLVM = "6, 7, 8, 9"
NEO_jll = "=26.18.38308"
NEO_LTS_jll = "=25.18.33578"
Preferences = "1"
SPIRVIntrinsics = "1"
SPIRV_LLVM_Backend_jll = "22"
SPIRV_LLVM_Translator_jll = "21"
SPIRV_Tools_jll = "2025.4.0"
SpecialFunctions = "1.3, 2"
StaticArrays = "1"
julia = "1.10"
oneAPI_Level_Zero_Loader_jll = "1.29"
oneAPI_Level_Zero_Loader_LTS_jll = "=1.24"
oneAPI_Support_jll = "0.9.2"

[extras]
libigc_jll = "94295238-5935-5bd7-bb0f-b00942e9bdd5"
libigc_LTS_jll = "9a8258a1-e827-5686-bee9-144461246960"

[sources]
# Pin to a commit SHA, not the mutable `atomic-float-ops` branch head, so builds are
# reproducible and a force-push upstream cannot silently change what users resolve.
SPIRVIntrinsics = {url = "https://github.com/michel2323/OpenCL.jl", rev = "4257d4075162276d9985168923788490e4071e9e", subdir = "lib/intrinsics"}
6 changes: 3 additions & 3 deletions deps/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ Ninja_jll = "76642167-d241-5cee-8c94-7a494e8cb7b7"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
Preferences = "21216c6a-2e73-6563-6e65-726566657250"
Scratch = "6c6a2e73-6563-6170-7368-637461726353"
oneAPI_Level_Zero_Headers_jll = "f4bc562b-d309-54f8-9efb-476e56f0410d"
oneAPI_Support_Headers_jll = "24f86df5-245d-5634-a4cc-32433d9800b3"
oneAPI_Level_Zero_Headers_LTS_jll = "d79c0b2e-896c-561b-aab9-323701ec0314"
oneAPI_Support_Headers_LTS_jll = "0e9de0da-c0b6-5d6c-9871-5c996d414ca7"

[compat]
oneAPI_Support_Headers_jll = "=2025.2.0"
oneAPI_Support_Headers_LTS_jll = "=2025.3.1"
5 changes: 3 additions & 2 deletions deps/build_local.jl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ if haskey(ENV, "BUILDKITE")
run(`buildkite-agent annotate 'Using a locally-built support library; A bump of oneAPI_Support_jll is required before releasing this packages.' --style 'warning' --context 'ctx-deps'`)
end

using Scratch, Preferences, CMake_jll, Ninja_jll, oneAPI_Level_Zero_Headers_jll
using Scratch, Preferences, CMake_jll, Ninja_jll
import oneAPI_Level_Zero_Headers_LTS_jll as oneAPI_Level_Zero_Headers_jll

oneAPI = Base.UUID("8f75cd03-7ff8-4ecb-9b8f-daf728133b1b")

Expand Down Expand Up @@ -62,7 +63,7 @@ if !isfile(joinpath(conda_dir, "condarc-julia.yml"))
touch(joinpath(conda_dir, "conda-meta", "history"))
end
Conda.add_channel("https://software.repos.intel.com/python/conda/", conda_dir)
Conda.add(["dpcpp_linux-64=2026.0.0", "mkl-devel-dpcpp=2026.0.0"], conda_dir)
Conda.add(["dpcpp_linux-64=2025.3.1", "mkl-devel-dpcpp=2025.3.1"], conda_dir)

Conda.list(conda_dir)

Expand Down
26 changes: 24 additions & 2 deletions deps/generate_interfaces.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using oneAPI_Support_Headers_jll
import oneAPI_Support_Headers_LTS_jll as oneAPI_Support_Headers_jll

include("generate_helpers.jl")

Expand Down Expand Up @@ -337,12 +337,34 @@ function generate_headers(library::String, filename::Vector{String}, output::Str
end
end

# Dedup: when two signatures map to the same C function name (because MKL
# added an overload), keep the one with more parameters — typically the
# newer signature (e.g. set_csr_data gained an `nnz` arg in MKL 2025.3.1).
# Without this the generated onemkl.cpp has duplicate function definitions
# and won't compile.
_fn_name(h) = (pos = findfirst('(', h); strip(split(strip(h[1:pos-1]))[end]))
_param_cnt(h) = (pos = findfirst('(', h); ep = findnext(')', h, pos); count(==(','), h[pos+1:ep-1]) + 1)
keep_idx = Dict{String,Int}()
keep_pc = Dict{String,Int}()
for (i, sig) in enumerate(signatures)
(sig[2] in blacklist) && continue
fn = _fn_name(sig[1])
pc = _param_cnt(sig[1])
if !haskey(keep_idx, fn) || pc > keep_pc[fn]
keep_idx[fn] = i
keep_pc[fn] = pc
end
end
keep_set = Set(values(keep_idx))

path_oneapi_headers = joinpath(@__DIR__, output)
oneapi_headers = open(path_oneapi_headers, "w")

for (header, name_routine, version, type_routine, template) in signatures
for (i, (header, name_routine, version, type_routine, template)) in enumerate(signatures)
# Blacklist
(name_routine in blacklist) && continue
# Dedup
(i in keep_set) || continue

# Pass scalars (e.g. alpha/beta inputs) as references instead of values
for type in ("short", "float", "double", "float _Complex", "double _Complex")
Expand Down
Loading
Loading