Skip to content

Commit 2d100c5

Browse files
authored
Cleanup redundant code (#139)
* Cleanup redundant code * Adhering to contributing guideline * Change import Co-authored-by: reazul.hoque <reazul.hoque@intel.com>
1 parent 4100a81 commit 2d100c5

File tree

7 files changed

+204
-223
lines changed

7 files changed

+204
-223
lines changed

numba_dppy/dpctl_functions.py

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,31 @@
22
from numba.core.typing import signature
33

44

5-
class _DPCTL_FUNCTIONS:
6-
@classmethod
7-
def dpctl_get_current_queue(cls):
8-
ret_type = types.voidptr
9-
sig = signature(ret_type)
10-
return types.ExternalFunction("DPCTLQueueMgr_GetCurrentQueue", sig)
11-
12-
@classmethod
13-
def dpctl_malloc_shared(cls):
14-
ret_type = types.voidptr
15-
sig = signature(ret_type, types.int64, types.voidptr)
16-
return types.ExternalFunction("DPCTLmalloc_shared", sig)
17-
18-
@classmethod
19-
def dpctl_queue_memcpy(cls):
20-
ret_type = types.void
21-
sig = signature(
22-
ret_type, types.voidptr, types.voidptr, types.voidptr, types.int64
23-
)
24-
return types.ExternalFunction("DPCTLQueue_Memcpy", sig)
25-
26-
@classmethod
27-
def dpctl_free_with_queue(cls):
28-
ret_type = types.void
29-
sig = signature(ret_type, types.voidptr, types.voidptr)
30-
return types.ExternalFunction("DPCTLfree_with_queue", sig)
5+
def dpctl_get_current_queue():
6+
ret_type = types.voidptr
7+
sig = signature(ret_type)
8+
return types.ExternalFunction("DPCTLQueueMgr_GetCurrentQueue", sig)
9+
10+
11+
def dpctl_malloc_shared():
12+
ret_type = types.voidptr
13+
sig = signature(ret_type, types.int64, types.voidptr)
14+
return types.ExternalFunction("DPCTLmalloc_shared", sig)
15+
16+
17+
def dpctl_queue_memcpy():
18+
ret_type = types.void
19+
sig = signature(ret_type, types.voidptr, types.voidptr, types.voidptr, types.int64)
20+
return types.ExternalFunction("DPCTLQueue_Memcpy", sig)
21+
22+
23+
def dpctl_free_with_queue():
24+
ret_type = types.void
25+
sig = signature(ret_type, types.voidptr, types.voidptr)
26+
return types.ExternalFunction("DPCTLfree_with_queue", sig)
27+
28+
29+
get_current_queue = dpctl_get_current_queue()
30+
malloc_shared = dpctl_malloc_shared()
31+
queue_memcpy = dpctl_queue_memcpy()
32+
free_with_queue = dpctl_free_with_queue()

numba_dppy/dpnp_glue/dpnp_linalgimpl.py

Lines changed: 81 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@
55
import numba_dppy.dpnp_glue as dpnp_lowering
66
from numba.core.extending import overload, register_jitable
77
import numpy as np
8-
from numba_dppy.dpctl_functions import _DPCTL_FUNCTIONS
8+
from numba_dppy import dpctl_functions
99

1010

1111
@overload(stubs.dpnp.eig)
1212
def dpnp_eig_impl(a):
1313
name = "eig"
1414
dpnp_lowering.ensure_dpnp(name)
15-
dpctl_functions = dpnp_ext._DPCTL_FUNCTIONS()
1615

1716
ret_type = types.void
1817
"""
@@ -26,16 +25,11 @@ def dpnp_eig_impl(a):
2625
sig = signature(ret_type, types.voidptr, types.voidptr, types.voidptr, types.intp)
2726
dpnp_eig = dpnp_ext.dpnp_func("dpnp_" + name, [a.dtype.name, "NONE"], sig)
2827

29-
get_sycl_queue = dpctl_functions.dpctl_get_current_queue()
30-
allocate_usm_shared = dpctl_functions.dpctl_malloc_shared()
31-
copy_usm = dpctl_functions.dpctl_queue_memcpy()
32-
free_usm = dpctl_functions.dpctl_free_with_queue()
33-
3428
res_dtype = np.float64
3529
if a.dtype == types.float32:
3630
res_dtype = np.float32
3731

38-
def dpnp_eig_impl(a):
32+
def dpnp_impl(a):
3933
n = a.shape[-1]
4034
if a.shape[-2] != n:
4135
msg = "Last 2 dimensions of the array must be square."
@@ -49,34 +43,37 @@ def dpnp_eig_impl(a):
4943
if n == 0:
5044
return (wr, vr)
5145

52-
sycl_queue = get_sycl_queue()
53-
a_usm = allocate_usm_shared(a.size * a.itemsize, sycl_queue)
54-
copy_usm(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
46+
sycl_queue = dpctl_functions.get_current_queue()
47+
a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue)
48+
dpctl_functions.queue_memcpy(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
5549

56-
wr_usm = allocate_usm_shared(wr.size * wr.itemsize, sycl_queue)
57-
vr_usm = allocate_usm_shared(vr.size * vr.itemsize, sycl_queue)
50+
wr_usm = dpctl_functions.malloc_shared(wr.size * wr.itemsize, sycl_queue)
51+
vr_usm = dpctl_functions.malloc_shared(vr.size * vr.itemsize, sycl_queue)
5852

5953
dpnp_eig(a_usm, wr_usm, vr_usm, n)
6054

61-
copy_usm(sycl_queue, wr.ctypes, wr_usm, wr.size * wr.itemsize)
62-
copy_usm(sycl_queue, vr.ctypes, vr_usm, vr.size * vr.itemsize)
55+
dpctl_functions.queue_memcpy(
56+
sycl_queue, wr.ctypes, wr_usm, wr.size * wr.itemsize
57+
)
58+
dpctl_functions.queue_memcpy(
59+
sycl_queue, vr.ctypes, vr_usm, vr.size * vr.itemsize
60+
)
6361

64-
free_usm(a_usm, sycl_queue)
65-
free_usm(wr_usm, sycl_queue)
66-
free_usm(vr_usm, sycl_queue)
62+
dpctl_functions.free_with_queue(a_usm, sycl_queue)
63+
dpctl_functions.free_with_queue(wr_usm, sycl_queue)
64+
dpctl_functions.free_with_queue(vr_usm, sycl_queue)
6765

6866
dpnp_ext._dummy_liveness_func([wr.size, vr.size])
6967

7068
return (wr, vr)
7169

72-
return dpnp_eig_impl
70+
return dpnp_impl
7371

7472

7573
@overload(stubs.dpnp.matmul)
7674
@overload(stubs.dpnp.dot)
7775
def dpnp_dot_impl(a, b):
7876
dpnp_lowering.ensure_dpnp("dot")
79-
dpctl_functions = dpnp_ext._DPCTL_FUNCTIONS()
8077

8178
ret_type = types.void
8279
"""
@@ -100,11 +97,6 @@ def dpnp_dot_impl(a, b):
10097
types.intp,
10198
)
10299

103-
get_sycl_queue = dpctl_functions.dpctl_get_current_queue()
104-
allocate_usm_shared = dpctl_functions.dpctl_malloc_shared()
105-
copy_usm = dpctl_functions.dpctl_queue_memcpy()
106-
free_usm = dpctl_functions.dpctl_free_with_queue()
107-
108100
res_dtype = np.float64
109101
if a.dtype == types.int32 and b.dtype == types.int32:
110102
res_dtype = np.int32
@@ -144,30 +136,36 @@ def dpnp_dot_impl(a, b):
144136
dpnp_func = dpnp_ext.dpnp_func("dpnp_matmul", [a.dtype.name, "NONE"], sig)
145137

146138
def dot_2_mm(a, b):
147-
sycl_queue = get_sycl_queue()
139+
sycl_queue = dpctl_functions.get_current_queue()
148140

149141
m, k = a.shape
150142
_k, n = b.shape
151143

152144
if _k != k:
153145
raise ValueError("Incompatible array sizes for np.dot(a, b)")
154146

155-
a_usm = allocate_usm_shared(a.size * a.itemsize, sycl_queue)
156-
copy_usm(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
147+
a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue)
148+
dpctl_functions.queue_memcpy(
149+
sycl_queue, a_usm, a.ctypes, a.size * a.itemsize
150+
)
157151

158-
b_usm = allocate_usm_shared(b.size * b.itemsize, sycl_queue)
159-
copy_usm(sycl_queue, b_usm, b.ctypes, b.size * b.itemsize)
152+
b_usm = dpctl_functions.malloc_shared(b.size * b.itemsize, sycl_queue)
153+
dpctl_functions.queue_memcpy(
154+
sycl_queue, b_usm, b.ctypes, b.size * b.itemsize
155+
)
160156

161157
out = np.empty((m, n), dtype=res_dtype)
162-
out_usm = allocate_usm_shared(out.size * out.itemsize, sycl_queue)
158+
out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue)
163159

164160
dpnp_func(a_usm, b_usm, out_usm, m, n, k)
165161

166-
copy_usm(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize)
162+
dpctl_functions.queue_memcpy(
163+
sycl_queue, out.ctypes, out_usm, out.size * out.itemsize
164+
)
167165

168-
free_usm(a_usm, sycl_queue)
169-
free_usm(b_usm, sycl_queue)
170-
free_usm(out_usm, sycl_queue)
166+
dpctl_functions.free_with_queue(a_usm, sycl_queue)
167+
dpctl_functions.free_with_queue(b_usm, sycl_queue)
168+
dpctl_functions.free_with_queue(out_usm, sycl_queue)
171169

172170
dpnp_ext._dummy_liveness_func([a.size, b.size, out.size])
173171

@@ -178,7 +176,7 @@ def dot_2_mm(a, b):
178176
dpnp_func = dpnp_ext.dpnp_func("dpnp_matmul", [a.dtype.name, "NONE"], sig)
179177

180178
def dot_2_mv(a, b):
181-
sycl_queue = get_sycl_queue()
179+
sycl_queue = dpctl_functions.get_current_queue()
182180

183181
m, k = a.shape
184182
(_n,) = b.shape
@@ -187,22 +185,28 @@ def dot_2_mv(a, b):
187185
if _n != k:
188186
raise ValueError("Incompatible array sizes for np.dot(a, b)")
189187

190-
a_usm = allocate_usm_shared(a.size * a.itemsize, sycl_queue)
191-
copy_usm(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
188+
a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue)
189+
dpctl_functions.queue_memcpy(
190+
sycl_queue, a_usm, a.ctypes, a.size * a.itemsize
191+
)
192192

193-
b_usm = allocate_usm_shared(b.size * b.itemsize, sycl_queue)
194-
copy_usm(sycl_queue, b_usm, b.ctypes, b.size * b.itemsize)
193+
b_usm = dpctl_functions.malloc_shared(b.size * b.itemsize, sycl_queue)
194+
dpctl_functions.queue_memcpy(
195+
sycl_queue, b_usm, b.ctypes, b.size * b.itemsize
196+
)
195197

196198
out = np.empty((m,), dtype=res_dtype)
197-
out_usm = allocate_usm_shared(out.size * out.itemsize, sycl_queue)
199+
out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue)
198200

199201
dpnp_func(a_usm, b_usm, out_usm, m, n, k)
200202

201-
copy_usm(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize)
203+
dpctl_functions.queue_memcpy(
204+
sycl_queue, out.ctypes, out_usm, out.size * out.itemsize
205+
)
202206

203-
free_usm(a_usm, sycl_queue)
204-
free_usm(b_usm, sycl_queue)
205-
free_usm(out_usm, sycl_queue)
207+
dpctl_functions.free_with_queue(a_usm, sycl_queue)
208+
dpctl_functions.free_with_queue(b_usm, sycl_queue)
209+
dpctl_functions.free_with_queue(out_usm, sycl_queue)
206210

207211
dpnp_ext._dummy_liveness_func([a.size, b.size, out.size])
208212

@@ -213,30 +217,36 @@ def dot_2_mv(a, b):
213217
dpnp_func = dpnp_ext.dpnp_func("dpnp_matmul", [a.dtype.name, "NONE"], sig)
214218

215219
def dot_2_vm(a, b):
216-
sycl_queue = get_sycl_queue()
220+
sycl_queue = dpctl_functions.get_current_queue()
217221

218222
(m,) = a.shape
219223
k, n = b.shape
220224

221225
if m != k:
222226
raise ValueError("Incompatible array sizes for np.dot(a, b)")
223227

224-
a_usm = allocate_usm_shared(a.size * a.itemsize, sycl_queue)
225-
copy_usm(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
228+
a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue)
229+
dpctl_functions.queue_memcpy(
230+
sycl_queue, a_usm, a.ctypes, a.size * a.itemsize
231+
)
226232

227-
b_usm = allocate_usm_shared(b.size * b.itemsize, sycl_queue)
228-
copy_usm(sycl_queue, b_usm, b.ctypes, b.size * b.itemsize)
233+
b_usm = dpctl_functions.malloc_shared(b.size * b.itemsize, sycl_queue)
234+
dpctl_functions.queue_memcpy(
235+
sycl_queue, b_usm, b.ctypes, b.size * b.itemsize
236+
)
229237

230238
out = np.empty((n,), dtype=res_dtype)
231-
out_usm = allocate_usm_shared(out.size * out.itemsize, sycl_queue)
239+
out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue)
232240

233241
dpnp_func(a_usm, b_usm, out_usm, m, n, k)
234242

235-
copy_usm(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize)
243+
dpctl_functions.queue_memcpy(
244+
sycl_queue, out.ctypes, out_usm, out.size * out.itemsize
245+
)
236246

237-
free_usm(a_usm, sycl_queue)
238-
free_usm(b_usm, sycl_queue)
239-
free_usm(out_usm, sycl_queue)
247+
dpctl_functions.free_with_queue(a_usm, sycl_queue)
248+
dpctl_functions.free_with_queue(b_usm, sycl_queue)
249+
dpctl_functions.free_with_queue(out_usm, sycl_queue)
240250

241251
dpnp_ext._dummy_liveness_func([a.size, b.size, out.size])
242252

@@ -250,30 +260,36 @@ def dot_2_vm(a, b):
250260
dpnp_func = dpnp_ext.dpnp_func("dpnp_dot", [a.dtype.name, "NONE"], sig)
251261

252262
def dot_2_vv(a, b):
253-
sycl_queue = get_sycl_queue()
263+
sycl_queue = dpctl_functions.get_current_queue()
254264

255265
(m,) = a.shape
256266
(n,) = b.shape
257267

258268
if m != n:
259269
raise ValueError("Incompatible array sizes for np.dot(a, b)")
260270

261-
a_usm = allocate_usm_shared(a.size * a.itemsize, sycl_queue)
262-
copy_usm(sycl_queue, a_usm, a.ctypes, a.size * a.itemsize)
271+
a_usm = dpctl_functions.malloc_shared(a.size * a.itemsize, sycl_queue)
272+
dpctl_functions.queue_memcpy(
273+
sycl_queue, a_usm, a.ctypes, a.size * a.itemsize
274+
)
263275

264-
b_usm = allocate_usm_shared(b.size * b.itemsize, sycl_queue)
265-
copy_usm(sycl_queue, b_usm, b.ctypes, b.size * b.itemsize)
276+
b_usm = dpctl_functions.malloc_shared(b.size * b.itemsize, sycl_queue)
277+
dpctl_functions.queue_memcpy(
278+
sycl_queue, b_usm, b.ctypes, b.size * b.itemsize
279+
)
266280

267281
out = np.empty(1, dtype=res_dtype)
268-
out_usm = allocate_usm_shared(out.size * out.itemsize, sycl_queue)
282+
out_usm = dpctl_functions.malloc_shared(out.size * out.itemsize, sycl_queue)
269283

270284
dpnp_func(a_usm, b_usm, out_usm, m)
271285

272-
copy_usm(sycl_queue, out.ctypes, out_usm, out.size * out.itemsize)
286+
dpctl_functions.queue_memcpy(
287+
sycl_queue, out.ctypes, out_usm, out.size * out.itemsize
288+
)
273289

274-
free_usm(a_usm, sycl_queue)
275-
free_usm(b_usm, sycl_queue)
276-
free_usm(out_usm, sycl_queue)
290+
dpctl_functions.free_with_queue(a_usm, sycl_queue)
291+
dpctl_functions.free_with_queue(b_usm, sycl_queue)
292+
dpctl_functions.free_with_queue(out_usm, sycl_queue)
277293

278294
dpnp_ext._dummy_liveness_func([a.size, b.size, out.size])
279295

0 commit comments

Comments
 (0)