Skip to content

Commit e46f6ff

Browse files
Implemented SyclQueue.prefetch, SyclQueue.mem_advise
1 parent 5df0bf6 commit e46f6ff

File tree

4 files changed

+38
-6
lines changed

4 files changed

+38
-6
lines changed

dpctl/_backend.pxd

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ cdef extern from "dppl_sycl_queue_interface.h":
177177
cdef void DPPLQueue_Wait (const DPPLSyclQueueRef QRef)
178178
cdef void DPPLQueue_Memcpy (const DPPLSyclQueueRef Q,
179179
void *Dest, const void *Src, size_t Count)
180+
cdef void DPPLQueue_Prefetch (const DPPLSyclQueueRef Q,
181+
const void *Src, size_t Count)
182+
cdef void DPPLQueue_MemAdvise (const DPPLSyclQueueRef Q,
183+
const void *Src, size_t Count, int Advice)
180184

181185

182186
cdef extern from "dppl_sycl_queue_manager.h":

dpctl/_sycl_core.pxd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ cdef class SyclQueue:
117117
list lS=*, list dEvents=*)
118118
cpdef void wait (self)
119119
cdef DPPLSyclQueueRef get_queue_ref (self)
120-
cpdef memcpy (self, dest, src, int count)
120+
cpdef memcpy (self, dest, src, size_t count)
121+
cpdef prefetch (self, ptr, size_t count=*)
122+
cpdef mem_advise (self, ptr, size_t count, int mem)
121123

122124

123125
cpdef SyclQueue get_current_queue()

dpctl/_sycl_core.pyx

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -541,22 +541,48 @@ cdef class SyclQueue:
541541
cpdef void wait (self):
542542
DPPLQueue_Wait(self._queue_ref)
543543

544-
cpdef memcpy (self, dest, src, int count):
544+
cpdef memcpy (self, dest, src, size_t count):
545545
cdef void *c_dest
546546
cdef void *c_src
547547

548548
if isinstance(dest, Memory):
549549
c_dest = <void*>(<Memory>dest).memory_ptr
550550
else:
551-
raise TypeError("Parameter dest should be Memory.")
551+
raise TypeError("Parameter dest should have type Memory.")
552552

553553
if isinstance(src, Memory):
554554
c_src = <void*>(<Memory>src).memory_ptr
555555
else:
556-
raise TypeError("Parameter src should be Memory.")
556+
raise TypeError("Parameter src should have type Memory.")
557557

558558
DPPLQueue_Memcpy(self._queue_ref, c_dest, c_src, count)
559559

560+
cpdef prefetch (self, mem, size_t count=0):
561+
cdef void *ptr
562+
563+
if isinstance(mem, Memory):
564+
ptr = <void*>(<Memory>mem).memory_ptr
565+
else:
566+
raise TypeError("Parameter mem should have type Memory")
567+
568+
if (count <=0 or count > self.nbytes):
569+
count = self.nbytes
570+
571+
DPPLQueue_Prefetch(self._queue_ref, ptr, count)
572+
573+
cpdef mem_advise (self, mem, size_t count, int advice):
574+
cdef void *ptr
575+
576+
if isinstance(mem, Memory):
577+
ptr = <void*>(<Memory>mem).memory_ptr
578+
else:
579+
raise TypeError("Parameter mem should have type Memory")
580+
581+
if (count <=0 or count > self.nbytes):
582+
count = self.nbytes
583+
584+
DPPLQueue_MemAdvise(self._queue_ref, ptr, count, advice)
585+
560586

561587
cdef class _SyclRTManager:
562588
''' Wrapper for the C API's sycl queue manager interface.

dpctl/tests/test_sycl_queue_memcpy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,13 +61,13 @@ def test_memcpy_type_error(self):
6161
q.memcpy(None, mobj, 3)
6262

6363
self.assertEqual(type(cm.exception), TypeError)
64-
self.assertEqual(str(cm.exception), "Parameter dest should be Memory.")
64+
self.assertEqual(str(cm.exception), "Parameter dest should have type Memory.")
6565

6666
with self.assertRaises(TypeError) as cm:
6767
q.memcpy(mobj, None, 3)
6868

6969
self.assertEqual(type(cm.exception), TypeError)
70-
self.assertEqual(str(cm.exception), "Parameter src should be Memory.")
70+
self.assertEqual(str(cm.exception), "Parameter src should have type Memory.")
7171

7272

7373
if __name__ == "__main__":

0 commit comments

Comments
 (0)