Skip to content

Commit c4dff8f

Browse files
Add memcpy_async method
1 parent 99201d7 commit c4dff8f

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

dpctl/_sycl_queue.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ cdef public api class SyclQueue (_SyclQueue) [
8888
cpdef void wait(self)
8989
cdef DPCTLSyclQueueRef get_queue_ref(self)
9090
cpdef memcpy(self, dest, src, size_t count)
91+
cpdef SyclEvent memcpy_async(self, dest, src, size_t count)
9192
cpdef prefetch(self, ptr, size_t count=*)
9293
cpdef mem_advise(self, ptr, size_t count, int mem)
9394
cpdef SyclEvent submit_barrier(self, dependent_events=*)

dpctl/_sycl_queue.pyx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -947,6 +947,29 @@ cdef class SyclQueue(_SyclQueue):
947947
with nogil: DPCTLEvent_Wait(ERef)
948948
DPCTLEvent_Delete(ERef)
949949

950+
cpdef SyclEvent memcpy_async(self, dest, src, size_t count):
951+
cdef void *c_dest
952+
cdef void *c_src
953+
cdef DPCTLSyclEventRef ERef = NULL
954+
955+
if isinstance(dest, _Memory):
956+
c_dest = <void*>(<_Memory>dest).memory_ptr
957+
else:
958+
raise TypeError("Parameter `dest` should have type _Memory.")
959+
960+
if isinstance(src, _Memory):
961+
c_src = <void*>(<_Memory>src).memory_ptr
962+
else:
963+
raise TypeError("Parameter `src` should have type _Memory.")
964+
965+
ERef = DPCTLQueue_Memcpy(self._queue_ref, c_dest, c_src, count)
966+
if (ERef is NULL):
967+
raise RuntimeError(
968+
"SyclQueue.memcpy operation encountered an error"
969+
)
970+
971+
return SyclEvent._create(ERef)
972+
950973
cpdef prefetch(self, mem, size_t count=0):
951974
cdef void *ptr
952975
cdef DPCTLSyclEventRef ERef = NULL

0 commit comments

Comments
 (0)