Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e3364bd
Make floating-point atomics work on the LLVM back-end path
michel2323 Jul 21, 2026
33ed52a
onemkl tests: accept oneMKL 2025.2+
michel2323 Jul 21, 2026
b19a837
Test wtih JuliaGPU/OpenCL.jl#main
michel2323 Jul 30, 2026
2c339bc
Build against and run on the Intel GPU LTS stack
michel2323 Jun 23, 2026
311ad33
Work around strided mapreducedim! miscompiles on the LTS IGC
michel2323 Jun 23, 2026
6ac3ce2
Harden command-queue lifetime to prevent banned-context faults on free
michel2323 Jun 23, 2026
ca403f2
Root oneMKL FFT descriptor arrays across the C call
michel2323 Jun 23, 2026
d874565
Add an opt-in per-submission synchronize for the LTS dropped-tail bug
michel2323 Jun 23, 2026
4984942
Configure the Aurora LTS self-hosted CI runner
michel2323 Jun 23, 2026
0e07bc0
Gate the LTS workarounds behind a runtime ONEAPI_LTS flag (layers 1-2)
michel2323 Jun 23, 2026
c1eb0a2
Compat: SPIRVIntrsinics v1
michel2323 Jul 1, 2026
1842d4f
test: fix BFloat16 math test on the Aurora LTS stack
michel2323 Jul 6, 2026
54f5838
examples: skip bfloat16.jl on the Aurora LTS stack
michel2323 Jul 7, 2026
a848376
level-zero: fix sync-each-submission deadlock in kernel-execution test
michel2323 Jul 7, 2026
81a9de6
level-zero: share one env-bool parser across ONEAPI_* flags
michel2323 Jul 8, 2026
3b0b2e1
Register KA.priority! replacement queue in the queue registry
michel2323 Jul 8, 2026
a52984c
mapreduce: guard LTS strided-materialization fallback against host in…
michel2323 Jul 8, 2026
865100c
level-zero: bound the LTS queue-finalizer drain instead of waiting fo…
michel2323 Jul 8, 2026
012b004
mapreduce: document that mixed dims=(1,3) reductions need no workaround
michel2323 Jul 8, 2026
6f5eaa7
Restore SPIRV_LLVM_Backend_jll so the rolling stack can compile kernels
michel2323 Jul 8, 2026
c7365e5
Restore BFloat16 kernel support on the rolling stack
michel2323 Jul 8, 2026
3b63035
mkl: guard sparse setters against a stale oneAPI_Support_jll ABI
michel2323 Jul 8, 2026
745af1e
oneAPI: make in-process NEO discovery real, fix LD_LIBRARY_PATH comment
michel2323 Jul 8, 2026
3b1c5ad
mapreduce: size the coalesced LTS kernel via launch_configuration
michel2323 Jul 8, 2026
b792cdd
mapreduce: add exact-arithmetic regression test for strided mixed red…
michel2323 Jul 8, 2026
2bbefc0
Set default ONEAPI_LTS=0
michel2323 Jul 8, 2026
6de046c
Declare the atomic-float extensions on the rolling-stack path too
michel2323 Jul 22, 2026
b72843b
Default to the rolling driver stack; LTS deployments override externally
michel2323 Jul 22, 2026
4120fb0
CI: build the support library locally before running tests
michel2323 Jul 30, 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
33 changes: 32 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 @@ -36,7 +43,31 @@ jobs:
with:
version: ${{ matrix.julia-version }}
- uses: julia-actions/cache@v3
# Build liboneapi_support.so from deps/src rather than using the registered
# oneAPI_Support_jll artifact, which lags behind the wrappers in this branch.
# Writes LocalPreferences.toml (plus a copy in test/, for Pkg.jl#2500) pointing
# oneAPI_Support_jll at the locally-built library. Not continue-on-error: if this
# fails we would silently fall back to the JLL and test the wrong library.
- name: Build the oneAPI support library
timeout-minutes: 90
run: julia --color=yes --project=deps deps/build_local.jl
- name: Check the local support library is picked up
run: |
julia --color=yes --project=. -e '
using TOML, oneAPI_Support_jll
want = TOML.parsefile("LocalPreferences.toml")["oneAPI_Support_jll"]["liboneapi_support_path"]
got = oneAPI_Support_jll.liboneapi_support_path
@info "support library" want got
want == got || error("oneAPI_Support_jll is not using the locally-built library")'
- 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()'
7 changes: 7 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ 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"
Expand All @@ -47,6 +48,7 @@ PrecompileTools = "1"
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"
Expand All @@ -56,3 +58,8 @@ oneAPI_Support_jll = "0.9.2"

[extras]
libigc_jll = "94295238-5935-5bd7-bb0f-b00942e9bdd5"

[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/JuliaGPU/OpenCL.jl", rev = "main", 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