Skip to content

Commit f30a6a2

Browse files
Add memcpy_async method
1 parent 0a35e9c commit f30a6a2

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
@@ -86,6 +86,7 @@ cdef public api class SyclQueue (_SyclQueue) [
8686
cpdef void wait(self)
8787
cdef DPCTLSyclQueueRef get_queue_ref(self)
8888
cpdef memcpy(self, dest, src, size_t count)
89+
cpdef SyclEvent memcpy_async(self, dest, src, size_t count)
8990
cpdef prefetch(self, ptr, size_t count=*)
9091
cpdef mem_advise(self, ptr, size_t count, int mem)
9192
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
@@ -934,6 +934,29 @@ cdef class SyclQueue(_SyclQueue):
934934
with nogil: DPCTLEvent_Wait(ERef)
935935
DPCTLEvent_Delete(ERef)
936936

937+
cpdef SyclEvent memcpy_async(self, dest, src, size_t count):
938+
cdef void *c_dest
939+
cdef void *c_src
940+
cdef DPCTLSyclEventRef ERef = NULL
941+
942+
if isinstance(dest, _Memory):
943+
c_dest = <void*>(<_Memory>dest).memory_ptr
944+
else:
945+
raise TypeError("Parameter `dest` should have type _Memory.")
946+
947+
if isinstance(src, _Memory):
948+
c_src = <void*>(<_Memory>src).memory_ptr
949+
else:
950+
raise TypeError("Parameter `src` should have type _Memory.")
951+
952+
ERef = DPCTLQueue_Memcpy(self._queue_ref, c_dest, c_src, count)
953+
if (ERef is NULL):
954+
raise RuntimeError(
955+
"SyclQueue.memcpy operation encountered an error"
956+
)
957+
958+
return SyclEvent._create(ERef)
959+
937960
cpdef prefetch(self, mem, size_t count=0):
938961
cdef void *ptr
939962
cdef DPCTLSyclEventRef ERef = NULL

0 commit comments

Comments
 (0)