Skip to content

Commit 80f7fcb

Browse files
committed
Merge branch 'master' into l1_nrm2
2 parents 872fa11 + d714a56 commit 80f7fcb

File tree

5 files changed

+143
-2
lines changed

5 files changed

+143
-2
lines changed

deps/src/onemkl.cpp

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

134+
extern "C" void onemklDamax(syclQueue_t device_queue, int64_t n, const double *x,
135+
int64_t incx, int64_t *result){
136+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result);
137+
status.wait();
138+
}
139+
extern "C" void onemklSamax(syclQueue_t device_queue, int64_t n, const float *x,
140+
int64_t incx, int64_t *result){
141+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result);
142+
status.wait();
143+
}
144+
extern "C" void onemklZamax(syclQueue_t device_queue, int64_t n, const double _Complex *x,
145+
int64_t incx, int64_t *result){
146+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n,
147+
reinterpret_cast<const std::complex<double> *>(x), incx, result);
148+
status.wait();
149+
}
150+
extern "C" void onemklCamax(syclQueue_t device_queue, int64_t n, const float _Complex *x,
151+
int64_t incx, int64_t *result){
152+
auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n,
153+
reinterpret_cast<const std::complex<float> *>(x), incx, result);
154+
status.wait();
155+
}
156+
157+
extern "C" void onemklDamin(syclQueue_t device_queue, int64_t n, const double *x,
158+
int64_t incx, int64_t *result){
159+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result);
160+
status.wait();
161+
}
162+
extern "C" void onemklSamin(syclQueue_t device_queue, int64_t n, const float *x,
163+
int64_t incx, int64_t *result){
164+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result);
165+
status.wait();
166+
}
167+
extern "C" void onemklZamin(syclQueue_t device_queue, int64_t n, const double _Complex *x,
168+
int64_t incx, int64_t *result){
169+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n,
170+
reinterpret_cast<const std::complex<double> *>(x), incx, result);
171+
status.wait();
172+
}
173+
extern "C" void onemklCamin(syclQueue_t device_queue, int64_t n, const float _Complex *x,
174+
int64_t incx, int64_t *result){
175+
auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n,
176+
reinterpret_cast<const std::complex<float> *>(x), incx, result);
177+
status.wait();
178+
}
179+
134180
// other
135181

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

deps/src/onemkl.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,25 @@ void onemklZcopy(syclQueue_t device_queue, int64_t n, const double _Complex *x,
5757
int64_t incx, double _Complex *y, int64_t incy);
5858
void onemklCcopy(syclQueue_t device_queue, int64_t n, const float _Complex *x,
5959
int64_t incx, float _Complex *y, int64_t incy);
60+
61+
void onemklDamax(syclQueue_t device_queue, int64_t n, const double *x, int64_t incx,
62+
int64_t *result);
63+
void onemklSamax(syclQueue_t device_queue, int64_t n, const float *x, int64_t incx,
64+
int64_t *result);
65+
void onemklZamax(syclQueue_t device_queue, int64_t n, const double _Complex *x, int64_t incx,
66+
int64_t *result);
67+
void onemklCamax(syclQueue_t device_queue, int64_t n, const float _Complex *x, int64_t incx,
68+
int64_t *result);
69+
70+
void onemklDamin(syclQueue_t device_queue, int64_t n, const double *x, int64_t incx,
71+
int64_t *result);
72+
void onemklSamin(syclQueue_t device_queue, int64_t n, const float *x, int64_t incx,
73+
int64_t *result);
74+
void onemklZamin(syclQueue_t device_queue, int64_t n, const double _Complex *x, int64_t incx,
75+
int64_t *result);
76+
void onemklCamin(syclQueue_t device_queue, int64_t n, const float _Complex *x, int64_t incx,
77+
int64_t *result);
78+
6079
void onemklDestroy();
6180
#ifdef __cplusplus
6281
}

lib/mkl/libonemkl.jl

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,43 @@ function onemklCcopy(device_queue, n, x, incx, y, incy)
9191
x::ZePtr{ComplexF32}, incx::Int64,
9292
y::ZePtr{ComplexF32}, incy::Int64)::Cvoid
9393
end
94+
95+
function onemklSamax(device_queue, n, x, incx, result)
96+
@ccall liboneapi_support.onemklSamax(device_queue::syclQueue_t, n::Int64,
97+
x::ZePtr{Cfloat}, incx::Int64, result::ZePtr{Int64})::Cvoid
98+
end
99+
100+
function onemklDamax(device_queue, n, x, incx, result)
101+
@ccall liboneapi_support.onemklDamax(device_queue::syclQueue_t, n::Int64,
102+
x::ZePtr{Cdouble}, incx::Int64, result::ZePtr{Int64})::Cvoid
103+
end
104+
105+
function onemklCamax(device_queue, n, x, incx, result)
106+
@ccall liboneapi_support.onemklCamax(device_queue::syclQueue_t, n::Int64,
107+
x::ZePtr{ComplexF32}, incx::Int64,result::ZePtr{Int64})::Cvoid
108+
end
109+
110+
function onemklZamax(device_queue, n, x, incx, result)
111+
@ccall liboneapi_support.onemklZamax(device_queue::syclQueue_t, n::Int64,
112+
x::ZePtr{ComplexF64}, incx::Int64, result::ZePtr{Int64})::Cvoid
113+
end
114+
115+
function onemklSamin(device_queue, n, x, incx, result)
116+
@ccall liboneapi_support.onemklSamin(device_queue::syclQueue_t, n::Int64,
117+
x::ZePtr{Cfloat}, incx::Int64, result::ZePtr{Int64})::Cvoid
118+
end
119+
120+
function onemklDamin(device_queue, n, x, incx, result)
121+
@ccall liboneapi_support.onemklDamin(device_queue::syclQueue_t, n::Int64,
122+
x::ZePtr{Cdouble}, incx::Int64, result::ZePtr{Int64})::Cvoid
123+
end
124+
125+
function onemklCamin(device_queue, n, x, incx, result)
126+
@ccall liboneapi_support.onemklCamin(device_queue::syclQueue_t, n::Int64,
127+
x::ZePtr{ComplexF32}, incx::Int64,result::ZePtr{Int64})::Cvoid
128+
end
129+
130+
function onemklZamin(device_queue, n, x, incx, result)
131+
@ccall liboneapi_support.onemklZamin(device_queue::syclQueue_t, n::Int64,
132+
x::ZePtr{ComplexF64}, incx::Int64, result::ZePtr{Int64})::Cvoid
133+
end

lib/mkl/wrappers.jl

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

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

5891
# level 3
5992

test/onemkl.jl

Lines changed: 5 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
@@ -19,5 +17,10 @@ k = 13
1917
# Test nrm2 primitive
2018
@test testf(norm, rand(T,m))
2119
end
20+
# testing oneMKL max and min
21+
a = convert.(T, [1.0, 2.0, -0.8, 5.0, 3.0])
22+
ca = oneArray(a)
23+
@test BLAS.iamax(a) == oneMKL.iamax(ca)
24+
@test oneMKL.iamin(ca) == 3
2225
end # level 1 testset
2326
end

0 commit comments

Comments
 (0)