Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ef0827e
Add ONEAPI_MEMORY_LIMIT to budget device memory across processes
michel2323 Jul 21, 2026
cb9ee32
Harden the test suite for memory-constrained GPUs
michel2323 Jul 21, 2026
fe9e95c
Make floating-point atomics work on the LLVM back-end path
michel2323 Jul 21, 2026
a38644f
onemkl tests: accept oneMKL 2025.2+
michel2323 Jul 21, 2026
337db0a
Merge branch 'fix-atomics-main' into validate-main-stack
michel2323 Jul 21, 2026
4438561
Build against and run on the Intel GPU LTS stack
michel2323 Jun 23, 2026
916f1e5
Work around strided mapreducedim! miscompiles on the LTS IGC
michel2323 Jun 23, 2026
9521e79
Harden command-queue lifetime to prevent banned-context faults on free
michel2323 Jun 23, 2026
b23d6b2
Root oneMKL FFT descriptor arrays across the C call
michel2323 Jun 23, 2026
ff5fe3d
Add an opt-in per-submission synchronize for the LTS dropped-tail bug
michel2323 Jun 23, 2026
318847e
Configure the Aurora LTS self-hosted CI runner
michel2323 Jun 23, 2026
75349da
Gate the LTS workarounds behind a runtime ONEAPI_LTS flag (layers 1-2)
michel2323 Jun 23, 2026
7f53f32
Compat: SPIRVIntrsinics v1
michel2323 Jul 1, 2026
874789c
test: fix BFloat16 math test on the Aurora LTS stack
michel2323 Jul 6, 2026
cc6a38b
examples: skip bfloat16.jl on the Aurora LTS stack
michel2323 Jul 7, 2026
ced6b43
level-zero: fix sync-each-submission deadlock in kernel-execution test
michel2323 Jul 7, 2026
0ea6efb
level-zero: share one env-bool parser across ONEAPI_* flags
michel2323 Jul 8, 2026
aff9f1d
Register KA.priority! replacement queue in the queue registry
michel2323 Jul 8, 2026
b6aa24f
mapreduce: guard LTS strided-materialization fallback against host in…
michel2323 Jul 8, 2026
5224bd3
level-zero: bound the LTS queue-finalizer drain instead of waiting fo…
michel2323 Jul 8, 2026
a145078
mapreduce: document that mixed dims=(1,3) reductions need no workaround
michel2323 Jul 8, 2026
33d6f77
Restore SPIRV_LLVM_Backend_jll so the rolling stack can compile kernels
michel2323 Jul 8, 2026
11d800a
Restore BFloat16 kernel support on the rolling stack
michel2323 Jul 8, 2026
7225496
mkl: guard sparse setters against a stale oneAPI_Support_jll ABI
michel2323 Jul 8, 2026
6fde199
oneAPI: make in-process NEO discovery real, fix LD_LIBRARY_PATH comment
michel2323 Jul 8, 2026
26ed8e1
mapreduce: size the coalesced LTS kernel via launch_configuration
michel2323 Jul 8, 2026
bd8c70f
mapreduce: add exact-arithmetic regression test for strided mixed red…
michel2323 Jul 8, 2026
534fdd1
Set default ONEAPI_LTS=0
michel2323 Jul 8, 2026
f298063
Declare the atomic-float extensions on the rolling-stack path too
michel2323 Jul 22, 2026
ddaa418
Default to the rolling driver stack; LTS deployments override externally
michel2323 Jul 22, 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()'
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/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