Skip to content

Commit 0c0882a

Browse files
committed
Merge branch 'master' into l1_axpy
2 parents bdd43a3 + d714a56 commit 0c0882a

File tree

5 files changed

+148
-2
lines changed

5 files changed

+148
-2
lines changed

deps/src/onemkl.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,52 @@ extern "C" void onemklCcopy(syclQueue_t device_queue, int64_t n, const float _Co
121121
reinterpret_cast<std::complex<float> *>(y), incy);
122122
}
123123

124+
extern "C" void onemklDamax(syclQueue_t device_queue, int64_t n, const double *x,
125+
int64_t incx, int64_t *result){
126+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result);
127+
status.wait();
128+
}
129+
extern "C" void onemklSamax(syclQueue_t device_queue, int64_t n, const float *x,
130+
int64_t incx, int64_t *result){
131+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result);
132+
status.wait();
133+
}
134+
extern "C" void onemklZamax(syclQueue_t device_queue, int64_t n, const double _Complex *x,
135+
int64_t incx, int64_t *result){
136+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n,
137+
reinterpret_cast<const std::complex<double> *>(x), incx, result);
138+
status.wait();
139+
}
140+
extern "C" void onemklCamax(syclQueue_t device_queue, int64_t n, const float _Complex *x,
141+
int64_t incx, int64_t *result){
142+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n,
143+
reinterpret_cast<const std::complex<float> *>(x), incx, result);
144+
status.wait();
145+
}
146+
147+
extern "C" void onemklDamin(syclQueue_t device_queue, int64_t n, const double *x,
148+
int64_t incx, int64_t *result){
149+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result);
150+
status.wait();
151+
}
152+
extern "C" void onemklSamin(syclQueue_t device_queue, int64_t n, const float *x,
153+
int64_t incx, int64_t *result){
154+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result);
155+
status.wait();
156+
}
157+
extern "C" void onemklZamin(syclQueue_t device_queue, int64_t n, const double _Complex *x,
158+
int64_t incx, int64_t *result){
159+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n,
160+
reinterpret_cast<const std::complex<double> *>(x), incx, result);
161+
status.wait();
162+
}
163+
extern "C" void onemklCamin(syclQueue_t device_queue, int64_t n, const float _Complex *x,
164+
int64_t incx, int64_t *result){
165+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n,
166+
reinterpret_cast<const std::complex<float> *>(x), incx, result);
167+
status.wait();
168+
}
169+
124170
// other
125171

126172
// oneMKL keeps a cache of SYCL queues and tries to destroy them when unloading the library.

deps/src/onemkl.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,24 @@ void onemklZcopy(syclQueue_t device_queue, int64_t n, const double _Complex *x,
5353
void onemklCcopy(syclQueue_t device_queue, int64_t n, const float _Complex *x,
5454
int64_t incx, float _Complex *y, int64_t incy);
5555

56+
void onemklDamax(syclQueue_t device_queue, int64_t n, const double *x, int64_t incx,
57+
int64_t *result);
58+
void onemklSamax(syclQueue_t device_queue, int64_t n, const float *x, int64_t incx,
59+
int64_t *result);
60+
void onemklZamax(syclQueue_t device_queue, int64_t n, const double _Complex *x, int64_t incx,
61+
int64_t *result);
62+
void onemklCamax(syclQueue_t device_queue, int64_t n, const float _Complex *x, int64_t incx,
63+
int64_t *result);
64+
65+
void onemklDamin(syclQueue_t device_queue, int64_t n, const double *x, int64_t incx,
66+
int64_t *result);
67+
void onemklSamin(syclQueue_t device_queue, int64_t n, const float *x, int64_t incx,
68+
int64_t *result);
69+
void onemklZamin(syclQueue_t device_queue, int64_t n, const double _Complex *x, int64_t incx,
70+
int64_t *result);
71+
void onemklCamin(syclQueue_t device_queue, int64_t n, const float _Complex *x, int64_t incx,
72+
int64_t *result);
73+
5674
void onemklDestroy();
5775
#ifdef __cplusplus
5876
}

lib/mkl/libonemkl.jl

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,43 @@ function onemklCcopy(device_queue, n, x, incx, y, incy)
8181
x::ZePtr{ComplexF32}, incx::Int64,
8282
y::ZePtr{ComplexF32}, incy::Int64)::Cvoid
8383
end
84+
85+
function onemklSamax(device_queue, n, x, incx, result)
86+
@ccall liboneapi_support.onemklSamax(device_queue::syclQueue_t, n::Int64,
87+
x::ZePtr{Cfloat}, incx::Int64, result::ZePtr{Int64})::Cvoid
88+
end
89+
90+
function onemklDamax(device_queue, n, x, incx, result)
91+
@ccall liboneapi_support.onemklDamax(device_queue::syclQueue_t, n::Int64,
92+
x::ZePtr{Cdouble}, incx::Int64, result::ZePtr{Int64})::Cvoid
93+
end
94+
95+
function onemklCamax(device_queue, n, x, incx, result)
96+
@ccall liboneapi_support.onemklCamax(device_queue::syclQueue_t, n::Int64,
97+
x::ZePtr{ComplexF32}, incx::Int64,result::ZePtr{Int64})::Cvoid
98+
end
99+
100+
function onemklZamax(device_queue, n, x, incx, result)
101+
@ccall liboneapi_support.onemklZamax(device_queue::syclQueue_t, n::Int64,
102+
x::ZePtr{ComplexF64}, incx::Int64, result::ZePtr{Int64})::Cvoid
103+
end
104+
105+
function onemklSamin(device_queue, n, x, incx, result)
106+
@ccall liboneapi_support.onemklSamin(device_queue::syclQueue_t, n::Int64,
107+
x::ZePtr{Cfloat}, incx::Int64, result::ZePtr{Int64})::Cvoid
108+
end
109+
110+
function onemklDamin(device_queue, n, x, incx, result)
111+
@ccall liboneapi_support.onemklDamin(device_queue::syclQueue_t, n::Int64,
112+
x::ZePtr{Cdouble}, incx::Int64, result::ZePtr{Int64})::Cvoid
113+
end
114+
115+
function onemklCamin(device_queue, n, x, incx, result)
116+
@ccall liboneapi_support.onemklCamin(device_queue::syclQueue_t, n::Int64,
117+
x::ZePtr{ComplexF32}, incx::Int64,result::ZePtr{Int64})::Cvoid
118+
end
119+
120+
function onemklZamin(device_queue, n, x, incx, result)
121+
@ccall liboneapi_support.onemklZamin(device_queue::syclQueue_t, n::Int64,
122+
x::ZePtr{ComplexF64}, incx::Int64, result::ZePtr{Int64})::Cvoid
123+
end

lib/mkl/wrappers.jl

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,39 @@ for (fname, elty) in
5656
end
5757
end
5858

59+
## iamax
60+
for (fname, elty) in
61+
((:onemklDamax,:Float64),
62+
(:onemklSamax,:Float32),
63+
(:onemklZamax,:ComplexF64),
64+
(:onemklCamax,:ComplexF32))
65+
@eval begin
66+
function iamax(x::oneStridedArray{$elty})
67+
n = length(x)
68+
queue = global_queue(context(x), device(x))
69+
result = oneArray{Int64}([0]);
70+
$fname(sycl_queue(queue), n, x, stride(x, 1), result)
71+
return Array(result)[1]+1
72+
end
73+
end
74+
end
75+
76+
## iamin
77+
for (fname, elty) in
78+
((:onemklDamin,:Float64),
79+
(:onemklSamin,:Float32),
80+
(:onemklZamin,:ComplexF64),
81+
(:onemklCamin,:ComplexF32))
82+
@eval begin
83+
function iamin(x::StridedArray{$elty})
84+
n = length(x)
85+
result = oneArray{Int64}([0]);
86+
queue = global_queue(context(x), device(x))
87+
$fname(sycl_queue(queue),n, x, stride(x, 1), result)
88+
return Array(result)[1]+1
89+
end
90+
end
91+
end
5992

6093
# level 3
6194

test/onemkl.jl

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ using oneAPI.oneMKL
44
using LinearAlgebra
55

66
m = 20
7-
n = 35
8-
k = 13
97

108
############################################################################################
119
@testset "level 1" begin
@@ -22,5 +20,16 @@ k = 13
2220
alpha = rand(T,1)
2321
@test testf(axpy!, alpha[1], rand(T,m), rand(T,m))
2422
end
23+
24+
A = oneArray(rand(T, m))
25+
B = oneArray{T}(undef, m)
26+
oneMKL.copy!(m,A,B)
27+
@test Array(A) == Array(B)
28+
29+
# testing oneMKL max and min
30+
a = convert.(T, [1.0, 2.0, -0.8, 5.0, 3.0])
31+
ca = oneArray(a)
32+
@test BLAS.iamax(a) == oneMKL.iamax(ca)
33+
@test oneMKL.iamin(ca) == 3
2534
end # level 1 testset
2635
end

0 commit comments

Comments
 (0)