Skip to content

Commit 27b474d

Browse files
Added test for as_usm_memory
This test checks for conformance to __sycl_usm_array_interface__ spect from Wiki
1 parent 5a5170b commit 27b474d

File tree

1 file changed

+61
-9
lines changed

1 file changed

+61
-9
lines changed

dpctl/tests/test_sycl_usm.py

Lines changed: 61 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import dpctl
2525
from dpctl.memory import MemoryUSMDevice, MemoryUSMHost, MemoryUSMShared
26+
from dpctl.memory import as_usm_memory
2627

2728
from ._helper import has_cpu, has_gpu, has_sycl_platforms
2829

@@ -249,18 +250,21 @@ def setUp(self):
249250

250251

251252
class View:
252-
def __init__(self, buf, shape, strides, offset):
253-
self.buffer = buf
254-
self.shape = shape
255-
self.strides = strides
256-
self.offset = offset
253+
def __init__(self, buf, shape, strides, offset, syclobj=None):
254+
self.buffer_ = buf
255+
self.shape_ = shape
256+
self.strides_ = strides
257+
self.offset_ = offset
258+
self.syclobj_ = syclobj
257259

258260
@property
259261
def __sycl_usm_array_interface__(self):
260-
sua_iface = self.buffer.__sycl_usm_array_interface__
261-
sua_iface["offset"] = self.offset
262-
sua_iface["shape"] = self.shape
263-
sua_iface["strides"] = self.strides
262+
sua_iface = self.buffer_.__sycl_usm_array_interface__
263+
sua_iface["offset"] = self.offset_
264+
sua_iface["shape"] = self.shape_
265+
sua_iface["strides"] = self.strides_
266+
if self.syclobj_:
267+
sua_iface["syclobj"] = self.syclobj_
264268
return sua_iface
265269

266270

@@ -330,5 +334,53 @@ def test_suai_non_contig_2D(self):
330334
self.assertTrue(np.array_equal(res, expected_res))
331335

332336

337+
class TestAsUSMMemory(unittest.TestCase):
338+
def _with_constructor(self, buffer_cls):
339+
try:
340+
buf = buffer_cls(64)
341+
except Exception:
342+
self.SkipTest("{} could not be allocated".format(buffer_cls.__name__))
343+
# reuse queue from buffer's SUAI
344+
v = View(buf, shape=(64,), strides=(1,), offset=0)
345+
m = as_usm_memory(v)
346+
self.assertTrue(m.get_usm_type() == buf.get_usm_type())
347+
self.assertTrue(m._pointer == buf._pointer)
348+
self.assertTrue(m.sycl_device == buf.sycl_device)
349+
# Use SyclContext
350+
v = View(buf, shape=(64,), strides=(1,), offset=0, syclobj=buf.sycl_context)
351+
m = as_usm_memory(v)
352+
self.assertTrue(m.get_usm_type() == buf.get_usm_type())
353+
self.assertTrue(m._pointer == buf._pointer)
354+
self.assertTrue(m.sycl_device == buf.sycl_device)
355+
# Use queue capsule
356+
v = View(buf, shape=(64,), strides=(1,), offset=0, syclobj=buf._queue._get_capsule())
357+
m = as_usm_memory(v)
358+
self.assertTrue(m.get_usm_type() == buf.get_usm_type())
359+
self.assertTrue(m._pointer == buf._pointer)
360+
self.assertTrue(m.sycl_device == buf.sycl_device)
361+
# Use context capsule
362+
v = View(buf, shape=(64,), strides=(1,), offset=0, syclobj=buf.sycl_context._get_capsule())
363+
m = as_usm_memory(v)
364+
self.assertTrue(m.get_usm_type() == buf.get_usm_type())
365+
self.assertTrue(m._pointer == buf._pointer)
366+
self.assertTrue(m.sycl_device == buf.sycl_device)
367+
# Use filter string
368+
v = View(buf, shape=(64,), strides=(1,), offset=0, syclobj=buf.sycl_device.filter_string)
369+
m = as_usm_memory(v)
370+
self.assertTrue(m.get_usm_type() == buf.get_usm_type())
371+
self.assertTrue(m._pointer == buf._pointer)
372+
self.assertTrue(m.sycl_device == buf.sycl_device)
373+
374+
375+
def test_from_device(self):
376+
self._with_constructor(MemoryUSMDevice)
377+
378+
def test_from_shared(self):
379+
self._with_constructor(MemoryUSMShared)
380+
381+
def test_from_host(self):
382+
self._with_constructor(MemoryUSMHost)
383+
384+
333385
if __name__ == "__main__":
334386
unittest.main()

0 commit comments

Comments
 (0)