Skip to content

Build the support library against oneAPI 2026.0.0.#582

Merged
maleadt merged 3 commits into
mainfrom
tb/toolkit-2026
Jun 17, 2026
Merged

Build the support library against oneAPI 2026.0.0.#582
maleadt merged 3 commits into
mainfrom
tb/toolkit-2026

Conversation

@maleadt

@maleadt maleadt commented Jun 17, 2026

Copy link
Copy Markdown
Member

Bump the Intel oneAPI toolkit (DPC++ compiler + oneMKL) used to build liboneapi_support from 2025.2.0 to 2026.0.0:

  • deps/build_local.jl: dpcpp_linux-64 / mkl-devel-dpcpp Conda packages
  • deps/Project.toml: oneAPI_Support_Headers_jll
  • test/onemkl.jl: minimum oneMKL version assertion

@github-actions

github-actions Bot commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Your PR requires formatting changes to meet the project's style guidelines.
Please consider running Runic (git runic main) to apply these changes.

Click here to view the suggested changes.
diff --git a/lib/mkl/fft.jl b/lib/mkl/fft.jl
index 745ff65..263b73b 100644
--- a/lib/mkl/fft.jl
+++ b/lib/mkl/fft.jl
@@ -98,9 +98,11 @@ function _create_descriptor(sz::NTuple{N,Int}, T::Type, complex::Bool) where {N}
     # without GC.@preserve the array can be collected first, leaving the descriptor
     # with garbage dimensions (commit then fails with FFT_INVALID_DESCRIPTOR).
     lengths = collect(Int64, sz)
-    st = GC.@preserve lengths (length(lengths) == 1 ?
-        onemklDftCreate1D(desc_ref, prec, dom, lengths[1]) :
-        onemklDftCreateND(desc_ref, prec, dom, length(lengths), pointer(lengths)))
+    st = GC.@preserve lengths (
+        length(lengths) == 1 ?
+            onemklDftCreate1D(desc_ref, prec, dom, lengths[1]) :
+            onemklDftCreateND(desc_ref, prec, dom, length(lengths), pointer(lengths))
+    )
     st == 0 || error("onemkl DFT create failed (status $st)")
     desc = desc_ref[]
     # Do not program descriptor scaling; we'll perform inverse normalization manually.
diff --git a/test/onemkl.jl b/test/onemkl.jl
index 9877440..7b83873 100644
--- a/test/onemkl.jl
+++ b/test/onemkl.jl
@@ -14,7 +14,7 @@ k = 13
 
 @testset "Version" begin
     version_onemkl = oneMKL.version()
-    @test version_onemkl ≥ v"2026.0.0"
+        @test version_onemkl ≥ v"2026.0.0"
 end
 
 ############################################################################################

Bump the Intel oneAPI toolkit (DPC++ compiler + oneMKL) that the local
support-library build compiles against from 2025.2.0 to 2026.0.0:

- deps/build_local.jl: dpcpp_linux-64 / mkl-devel-dpcpp Conda packages
- test/onemkl.jl: minimum oneMKL version assertion

CI rebuilds liboneapi_support locally (the wrappers postdate the 0.9.2
oneAPI_Support_jll build), so this exercises the new toolkit without
needing a registered JLL. The oneAPI_Support_jll / oneAPI_Support_Headers_jll
version bumps follow once Yggdrasil has built and registered them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
maleadt and others added 2 commits June 17, 2026 15:56
oneMKL 2026.0 changed a few DFT APIs that broke the support-library build:

- config_param::INPUT_STRIDES / OUTPUT_STRIDES were removed (deprecated
  since 2025 in favour of FWD_STRIDES / BWD_STRIDES). Map the legacy
  parameters onto their successors; the Julia layer only ever sets
  FWD/BWD strides, so this is behaviour-preserving.

- descriptor::get_value() now requires a pointer to the descriptor's real
  scalar type (float for single precision), so the double* path needs a
  precision-matched temporary that is widened for the C interface.

Also bump the baked-in ONEMKL_VERSION constants to 2026.0.0 so that
oneMKL.version() reports the toolkit the library was built against.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
_create_descriptor and the multi-dimensional plan constructors passed
pointer(lengths) / pointer(strides) to the oneMKL C wrappers without
keeping the arrays rooted across the ccall. oneMKL copies the data out
of those pointers, but the arrays could be collected first, leaving the
descriptor with garbage dimensions/strides.

This was latent (it happened to survive for square arrays) but oneMKL
2026.0 surfaces it deterministically: committing a multi-dimensional,
non-square descriptor fails with FFT_INVALID_DESCRIPTOR. Wrap the
affected ccalls in GC.@preserve.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 80.92%. Comparing base (8a688fd) to head (9147cc8).
⚠️ Report is 2 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #582      +/-   ##
==========================================
+ Coverage   80.82%   80.92%   +0.09%     
==========================================
  Files          48       48              
  Lines        3233     3234       +1     
==========================================
+ Hits         2613     2617       +4     
+ Misses        620      617       -3     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@maleadt maleadt merged commit 71eda5d into main Jun 17, 2026
5 checks passed
@maleadt maleadt deleted the tb/toolkit-2026 branch June 17, 2026 19:32
michel2323 added a commit that referenced this pull request Jun 24, 2026
Aurora ships the Intel "LTS" GPU software stack rather than the rolling
release that upstream oneAPI.jl targets. Pin the whole toolchain to it:

  - JLLs: NEO_LTS_jll =25.18.33578, oneAPI_Level_Zero_Loader_LTS_jll
    =1.24, oneAPI_Level_Zero_Headers_LTS_jll, libigc_LTS_jll, and the
    oneMKL 2025.3.1 support library. lib/level-zero/oneL0.jl aliases the
    *_LTS_jll packages back to their canonical names so the rest of the
    code is unchanged.
  - Keep the SPIR-V Translator (SPIRV_LLVM_Translator_jll 21,
    SPIRVIntrinsics 0.5). The LTS NEO/IGC runtime does not accept the
    output of upstream's LLVM SPIR-V back-end (#491), so revert the
    back-end switch in src/compiler/compilation.jl, src/oneAPI.jl and
    src/utils.jl and restore the explicit SPIR-V extension list.
  - Regenerate the oneMKL C bindings against 2025.3.1 (deps/src/onemkl.*,
    lib/support/liboneapi_support.jl, deps/generate_interfaces.jl) and
    fix the sparse CSR argument types (ZePtr/onemklIndex) in the
    regenerated bindings and res/support.toml. Stay on oneMKL 2025.3.1,
    declining the upstream oneAPI 2026.0.0 migration (#582).
  - Prepend NEO's libze_intel_gpu directory to LD_LIBRARY_PATH in
    __init__ so libsycl's bundled ze_lib finds the driver by path when
    no system NEO is installed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
michel2323 added a commit that referenced this pull request Jul 2, 2026
Aurora ships the Intel "LTS" GPU software stack rather than the rolling
release that upstream oneAPI.jl targets. Pin the whole toolchain to it:

  - JLLs: NEO_LTS_jll =25.18.33578, oneAPI_Level_Zero_Loader_LTS_jll
    =1.24, oneAPI_Level_Zero_Headers_LTS_jll, libigc_LTS_jll, and the
    oneMKL 2025.3.1 support library. lib/level-zero/oneL0.jl aliases the
    *_LTS_jll packages back to their canonical names so the rest of the
    code is unchanged.
  - Keep the SPIR-V Translator (SPIRV_LLVM_Translator_jll 21,
    SPIRVIntrinsics 0.5). The LTS NEO/IGC runtime does not accept the
    output of upstream's LLVM SPIR-V back-end (#491), so revert the
    back-end switch in src/compiler/compilation.jl, src/oneAPI.jl and
    src/utils.jl and restore the explicit SPIR-V extension list.
  - Regenerate the oneMKL C bindings against 2025.3.1 (deps/src/onemkl.*,
    lib/support/liboneapi_support.jl, deps/generate_interfaces.jl) and
    fix the sparse CSR argument types (ZePtr/onemklIndex) in the
    regenerated bindings and res/support.toml. Stay on oneMKL 2025.3.1,
    declining the upstream oneAPI 2026.0.0 migration (#582).
  - Prepend NEO's libze_intel_gpu directory to LD_LIBRARY_PATH in
    __init__ so libsycl's bundled ze_lib finds the driver by path when
    no system NEO is installed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
michel2323 added a commit that referenced this pull request Jul 7, 2026
Aurora ships the Intel "LTS" GPU software stack rather than the rolling
release that upstream oneAPI.jl targets. Pin the whole toolchain to it:

  - JLLs: NEO_LTS_jll =25.18.33578, oneAPI_Level_Zero_Loader_LTS_jll
    =1.24, oneAPI_Level_Zero_Headers_LTS_jll, libigc_LTS_jll, and the
    oneMKL 2025.3.1 support library. lib/level-zero/oneL0.jl aliases the
    *_LTS_jll packages back to their canonical names so the rest of the
    code is unchanged.
  - Keep the SPIR-V Translator (SPIRV_LLVM_Translator_jll 21,
    SPIRVIntrinsics 0.5). The LTS NEO/IGC runtime does not accept the
    output of upstream's LLVM SPIR-V back-end (#491), so revert the
    back-end switch in src/compiler/compilation.jl, src/oneAPI.jl and
    src/utils.jl and restore the explicit SPIR-V extension list.
  - Regenerate the oneMKL C bindings against 2025.3.1 (deps/src/onemkl.*,
    lib/support/liboneapi_support.jl, deps/generate_interfaces.jl) and
    fix the sparse CSR argument types (ZePtr/onemklIndex) in the
    regenerated bindings and res/support.toml. Stay on oneMKL 2025.3.1,
    declining the upstream oneAPI 2026.0.0 migration (#582).
  - Prepend NEO's libze_intel_gpu directory to LD_LIBRARY_PATH in
    __init__ so libsycl's bundled ze_lib finds the driver by path when
    no system NEO is installed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant