Skip to content

Try the release 2025.2.0 of oneAPI #511

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
LocalPreferences.toml
Manifest.toml
deps/onemkl_blas.cpp
deps/onemkl_blas.h
deps/onemkl_lapack.cpp
deps/onemkl_lapack.h
deps/onemkl_sparse.cpp
deps/onemkl_sparse.h
2 changes: 1 addition & 1 deletion deps/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@ oneAPI_Level_Zero_Headers_jll = "f4bc562b-d309-54f8-9efb-476e56f0410d"
oneAPI_Support_Headers_jll = "24f86df5-245d-5634-a4cc-32433d9800b3"

[compat]
oneAPI_Support_Headers_jll = "=2025.1.0"
oneAPI_Support_Headers_jll = "=2025.2.0"
2 changes: 1 addition & 1 deletion deps/build_local.jl
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,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=2025.1.0", "mkl-devel-dpcpp=2025.1.0"], conda_dir)
Conda.add(["dpcpp_linux-64=2025.2.0", "mkl-devel-dpcpp=2025.2.0"], conda_dir)

Conda.list(conda_dir)

Expand Down
2 changes: 1 addition & 1 deletion deps/generate_helpers.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
non_parametric_routines = ["init_matrix_handle", "release_matrix_handle", "set_matrix_property",
"init_matmat_descr", "release_matmat_descr", "set_matmat_data", "get_matmat_data", "matmat",
"omatcopy", "sort_matrix", "optimize_gemv", "optimize_trmv", "optimize_trsv", "optimize_trsm",
"omatcopy", "sort_matrix", "optimize_gemv", "optimize_gemm", "optimize_trmv", "optimize_trsv", "optimize_trsm",
"init_omatconvert_descr", "release_omatconvert_descr", "init_omatadd_descr", "release_omatadd_descr",
"omatconvert_buffer_size", "omatconvert_analyze", "omatconvert_get_nnz", "omatconvert",
"omatadd_buffer_size", "omatadd_analyze", "omatadd_get_nnz"]
Expand Down
1 change: 1 addition & 0 deletions deps/generate_interfaces.jl
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ function generate_headers(library::String, filename::Vector{String}, output::Str
# The routine "optimize_trsm" has two versions.
suffix = ""
(name_routine == "optimize_trsm") && occursin("columns", header) && (suffix = "_advanced")
(name_routine == "optimize_gemm") && occursin("columns", header) && (suffix = "_advanced")
name_routine ("set_csr_data", "set_coo_data") && occursin("int64_t", header) && (suffix = "_64")
occursin("batch", name_routine) && !occursin("**", header) && (suffix = "_strided")

Expand Down
10 changes: 10 additions & 0 deletions deps/src/onemkl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4038,6 +4038,16 @@ extern "C" int onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo
return 0;
}

extern "C" int onemklXsparse_optimize_gemm(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t A) {
auto status = oneapi::mkl::sparse::optimize_gemm(device_queue->val, convert(opA), (oneapi::mkl::sparse::matrix_handle_t) A, {});
return 0;
}

extern "C" int onemklXsparse_optimize_gemm_advanced(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opB, matrix_handle_t A, int64_t columns) {
auto status = oneapi::mkl::sparse::optimize_gemm(device_queue->val, convert(layout_val), convert(opA), convert(opB), (oneapi::mkl::sparse::matrix_handle_t) A, columns, {});
return 0;
}

extern "C" int onemklXsparse_optimize_trsm(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A) {
auto status = oneapi::mkl::sparse::optimize_trsm(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, {});
return 0;
Expand Down
7 changes: 7 additions & 0 deletions deps/src/onemkl.h
Original file line number Diff line number Diff line change
Expand Up @@ -2842,6 +2842,13 @@ int onemklXsparse_optimize_trmv(syclQueue_t device_queue, onemklUplo uplo_val, o
int onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose
opA, onemklDiag diag_val, matrix_handle_t A);

int onemklXsparse_optimize_gemm(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t
A);

int onemklXsparse_optimize_gemm_advanced(syclQueue_t device_queue, onemklLayout layout_val,
onemklTranspose opA, onemklTranspose opB,
matrix_handle_t A, int64_t columns);

int onemklXsparse_optimize_trsm(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose
opA, onemklDiag diag_val, matrix_handle_t A);

Expand Down
12 changes: 12 additions & 0 deletions lib/mkl/wrappers_sparse.jl
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,18 @@ for (fname, elty) in ((:onemklSsparse_gemm, :Float32),
end
end

function sparse_optimize_gemm!(trans::Char, A::oneSparseMatrixCSR)
queue = global_queue(context(A.nzVal), device(A.nzVal))
onemklXsparse_optimize_gemm(sycl_queue(queue), trans, A.handle)
return A
end

function sparse_optimize_gemm!(trans::Char, transB::Char, nrhs::Int, A::oneSparseMatrixCSR)
queue = global_queue(context(A.nzVal), device(A.nzVal))
onemklXsparse_optimize_gemm_advanced(sycl_queue(queue), 'C', trans, transB, A.handle, nrhs)
return A
end

for (fname, elty) in ((:onemklSsparse_symv, :Float32),
(:onemklDsparse_symv, :Float64),
(:onemklCsparse_symv, :ComplexF32),
Expand Down
52 changes: 52 additions & 0 deletions lib/support/liboneapi_support.jl
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,14 @@ end
ONEMKL_MATMAT_REQUEST_FINALIZE = 8
end

@cenum onemklOmatconvertAlg::UInt32 begin
ONEMKL_OMATCONVERT_DEFAULT_ALG = 0
end

@cenum onemklOmataddAlg::UInt32 begin
ONEMKL_OMATADD_DEFAULT_ALG = 0
end

mutable struct matrix_handle end

const matrix_handle_t = Ptr{matrix_handle}
Expand All @@ -188,6 +196,14 @@ mutable struct matmat_descr end

const matmat_descr_t = Ptr{matmat_descr}

mutable struct omatconvert_descr end

const omatconvert_descr_t = Ptr{omatconvert_descr}

mutable struct omatadd_descr end

const omatadd_descr_t = Ptr{omatadd_descr}

function onemklHgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,
beta, c, ldc, group_count, group_size)
@ccall liboneapi_support.onemklHgemm_batch(device_queue::syclQueue_t,
Expand Down Expand Up @@ -6596,6 +6612,26 @@ function onemklXsparse_release_matmat_descr(p_desc)
@ccall liboneapi_support.onemklXsparse_release_matmat_descr(p_desc::Ptr{matmat_descr_t})::Cint
end

function onemklXsparse_init_omatconvert_descr(device_queue, p_descr)
@ccall liboneapi_support.onemklXsparse_init_omatconvert_descr(device_queue::syclQueue_t,
p_descr::Ptr{omatconvert_descr_t})::Cint
end

function onemklXsparse_release_omatconvert_descr(device_queue, descr)
@ccall liboneapi_support.onemklXsparse_release_omatconvert_descr(device_queue::syclQueue_t,
descr::omatconvert_descr_t)::Cint
end

function onemklXsparse_init_omatadd_descr(device_queue, p_omatadd_desc)
@ccall liboneapi_support.onemklXsparse_init_omatadd_descr(device_queue::syclQueue_t,
p_omatadd_desc::Ptr{omatadd_descr_t})::Cint
end

function onemklXsparse_release_omatadd_descr(device_queue, omatadd_desc)
@ccall liboneapi_support.onemklXsparse_release_omatadd_descr(device_queue::syclQueue_t,
omatadd_desc::omatadd_descr_t)::Cint
end

function onemklXsparse_omatcopy(device_queue, transpose_val, spMat_in, spMat_out)
@ccall liboneapi_support.onemklXsparse_omatcopy(device_queue::syclQueue_t,
transpose_val::onemklTranspose,
Expand Down Expand Up @@ -6658,6 +6694,22 @@ function onemklXsparse_optimize_trsv(device_queue, uplo_val, opA, diag_val, A)
A::matrix_handle_t)::Cint
end

function onemklXsparse_optimize_gemm(device_queue, opA, A)
@ccall liboneapi_support.onemklXsparse_optimize_gemm(device_queue::syclQueue_t,
opA::onemklTranspose,
A::matrix_handle_t)::Cint
end

function onemklXsparse_optimize_gemm_advanced(device_queue, layout_val, opA, opB, A,
columns)
@ccall liboneapi_support.onemklXsparse_optimize_gemm_advanced(device_queue::syclQueue_t,
layout_val::onemklLayout,
opA::onemklTranspose,
opB::onemklTranspose,
A::matrix_handle_t,
columns::Int64)::Cint
end

function onemklXsparse_optimize_trsm(device_queue, uplo_val, opA, diag_val, A)
@ccall liboneapi_support.onemklXsparse_optimize_trsm(device_queue::syclQueue_t,
uplo_val::onemklUplo,
Expand Down
1 change: 1 addition & 0 deletions test/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
libigc_jll = "94295238-5935-5bd7-bb0f-b00942e9bdd5"
oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b"
oneAPI_Support_jll = "b049733a-a71d-5ed3-8eba-7d323ac00b36"
1 change: 1 addition & 0 deletions test/onemkl.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1132,6 +1132,7 @@ end

alpha = rand(T)
beta = rand(T)
oneMKL.sparse_optimize_gemm!(transa, dA)
oneMKL.sparse_gemm!(transa, transb, alpha, dA, dB, beta, dC)
@test alpha * opa(A) * opb(B) + beta * C collect(dC)
end
Expand Down