Skip to content
Merged
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 deps/generate_interfaces.jl
Original file line number Diff line number Diff line change
Expand Up @@ -492,6 +492,12 @@ headers_epilogue = read("onemkl_epilogue.h", String)
write(io, headers_epilogue)
close(io)

# Add the version of oneMKL in src/onemkl.h
headers_onemkl = read("src/onemkl.h", String)
version_onemkl = pkgversion(oneAPI_Support_Headers_jll)
headers_onemkl = replace(headers_onemkl, "void onemkl_version" => "const int64_t ONEMKL_VERSION_MAJOR = $(version_onemkl.major);\nconst int64_t ONEMKL_VERSION_MINOR = $(version_onemkl.minor);\nconst int64_t ONEMKL_VERSION_PATCH = $(version_onemkl.patch);\nvoid onemkl_version")
write("src/onemkl.h", headers_onemkl)

# Generate "src/onemkl.cpp"
generate_cpp("blas", blas, "onemkl_blas.cpp", pattern="§")
generate_cpp("lapack", lapack, "onemkl_lapack.cpp", pattern="§")
Expand Down
8 changes: 8 additions & 0 deletions deps/onemkl_prologue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@ oneapi::mkl::sparse::omatadd_alg convert(onemklOmataddAlg val) {
}
}

// version
extern "C" void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch) {
*major = ONEMKL_VERSION_MAJOR;
*minor = ONEMKL_VERSION_MINOR;
*patch = ONEMKL_VERSION_PATCH;
return;
}

// gemm
// https://spec.oneapi.io/versions/1.0-rev-1/elements/oneMKL/source/domains/blas/gemm.html
class gemmBatchInfo {
Expand Down
2 changes: 2 additions & 0 deletions deps/onemkl_prologue.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ typedef struct omatconvert_descr *omatconvert_descr_t;
struct omatadd_descr;
typedef struct omatadd_descr *omatadd_descr_t;

void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch);

int onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,
onemklTranspose transb, int64_t *m,
int64_t *n, int64_t *k, uint16_t *alpha,
Expand Down
8 changes: 8 additions & 0 deletions deps/src/onemkl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,14 @@ oneapi::mkl::sparse::omatadd_alg convert(onemklOmataddAlg val) {
}
}

// version
extern "C" void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch) {
*major = ONEMKL_VERSION_MAJOR;
*minor = ONEMKL_VERSION_MINOR;
*patch = ONEMKL_VERSION_PATCH;
return;
}

// gemm
// https://spec.oneapi.io/versions/1.0-rev-1/elements/oneMKL/source/domains/blas/gemm.html
class gemmBatchInfo {
Expand Down
5 changes: 5 additions & 0 deletions deps/src/onemkl.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@ typedef struct omatconvert_descr *omatconvert_descr_t;
struct omatadd_descr;
typedef struct omatadd_descr *omatadd_descr_t;

const int64_t ONEMKL_VERSION_MAJOR = 2025;
const int64_t ONEMKL_VERSION_MINOR = 2;
const int64_t ONEMKL_VERSION_PATCH = 0;
void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch);

int onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,
onemklTranspose transb, int64_t *m,
int64_t *n, int64_t *k, uint16_t *alpha,
Expand Down
2 changes: 1 addition & 1 deletion lib/level-zero/libze.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using CEnum
using CEnum: CEnum, @cenum

# outlined functionality to avoid GC frame allocation
@noinline function throw_api_error(res)
Expand Down
8 changes: 8 additions & 0 deletions lib/mkl/oneMKL.jl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,14 @@ include("linalg.jl")
include("interfaces.jl")
include("fft.jl")

function version()
major = Ref{Int64}()
minor = Ref{Int64}()
patch = Ref{Int64}()
onemkl_version(major, minor, patch)
return VersionNumber(major[], minor[], patch[])
end

function band(A::StridedArray, kl, ku)
m, n = size(A)
AB = zeros(eltype(A),kl+ku+1,n)
Expand Down
7 changes: 6 additions & 1 deletion lib/support/liboneapi_support.jl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using CEnum
using CEnum: CEnum, @cenum

mutable struct syclPlatform_st end

Expand Down Expand Up @@ -204,6 +204,11 @@ mutable struct omatadd_descr end

const omatadd_descr_t = Ptr{omatadd_descr}

function onemkl_version(major, minor, patch)
@ccall liboneapi_support.onemkl_version(major::Ptr{Int64}, minor::Ptr{Int64},
patch::Ptr{Int64})::Cvoid
end

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
5 changes: 5 additions & 0 deletions test/onemkl.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ m = 20
n = 35
k = 13

@testset "Version" begin
version_onemkl = oneMKL.version()
@test version_onemkl ≥ v"2025.2.0"
end

############################################################################################
@testset "level 1" begin
@testset for T in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])
Expand Down