Skip to content

Commit b6707c2

Browse files
authored
[NATIVECPU] urEnqueueUSMMemcpy2D implementation added (#20002)
This makes at least the following `e2e` tests pass on NativeCPU: ``` SYCL :: USM/memops2d/copy2d_device_to_device.cpp SYCL :: USM/memops2d/copy2d_device_to_dhost.cpp SYCL :: USM/memops2d/copy2d_device_to_host.cpp SYCL :: USM/memops2d/copy2d_device_to_shared.cpp SYCL :: USM/memops2d/copy2d_dhost_to_device.cpp SYCL :: USM/memops2d/copy2d_dhost_to_dhost.cpp SYCL :: USM/memops2d/copy2d_dhost_to_host.cpp SYCL :: USM/memops2d/copy2d_dhost_to_shared.cpp SYCL :: USM/memops2d/copy2d_host_to_device.cpp SYCL :: USM/memops2d/copy2d_host_to_dhost.cpp SYCL :: USM/memops2d/copy2d_host_to_host.cpp SYCL :: USM/memops2d/copy2d_host_to_shared.cpp SYCL :: USM/memops2d/copy2d_shared_to_device.cpp SYCL :: USM/memops2d/copy2d_shared_to_dhost.cpp SYCL :: USM/memops2d/copy2d_shared_to_host.cpp SYCL :: USM/memops2d/copy2d_shared_to_shared.cpp SYCL :: USM/memops2d/fill2d.cpp SYCL :: USM/memops2d/memcpy2d_device_to_device.cpp SYCL :: USM/memops2d/memcpy2d_device_to_dhost.cpp SYCL :: USM/memops2d/memcpy2d_device_to_host.cpp SYCL :: USM/memops2d/memcpy2d_device_to_shared.cpp SYCL :: USM/memops2d/memcpy2d_dhost_to_device.cpp SYCL :: USM/memops2d/memcpy2d_dhost_to_dhost.cpp SYCL :: USM/memops2d/memcpy2d_dhost_to_host.cpp SYCL :: USM/memops2d/memcpy2d_dhost_to_shared.cpp SYCL :: USM/memops2d/memcpy2d_host_to_device.cpp SYCL :: USM/memops2d/memcpy2d_host_to_dhost.cpp SYCL :: USM/memops2d/memcpy2d_host_to_host.cpp SYCL :: USM/memops2d/memcpy2d_host_to_shared.cpp SYCL :: USM/memops2d/memcpy2d_shared_to_device.cpp SYCL :: USM/memops2d/memcpy2d_shared_to_dhost.cpp SYCL :: USM/memops2d/memcpy2d_shared_to_host.cpp SYCL :: USM/memops2d/memcpy2d_shared_to_shared.cpp SYCL :: USM/memops2d/memset2d.cpp ```
1 parent 2c7b9fc commit b6707c2

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

unified-runtime/source/adapters/native_cpu/enqueue.cpp

100755100644
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -639,13 +639,23 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMFill2D(
639639
}
640640

641641
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
642-
ur_queue_handle_t /*hQueue*/, bool /*blocking*/, void * /*pDst*/,
643-
size_t /*dstPitch*/, const void * /*pSrc*/, size_t /*srcPitch*/,
644-
size_t /*width*/, size_t /*height*/, uint32_t /*numEventsInWaitList*/,
645-
const ur_event_handle_t * /*phEventWaitList*/,
646-
ur_event_handle_t * /*phEvent*/) {
647-
648-
DIE_NO_IMPLEMENTATION;
642+
ur_queue_handle_t hQueue, bool blocking, void *pDst, size_t dstPitch,
643+
const void *pSrc, size_t srcPitch, size_t width, size_t height,
644+
uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
645+
ur_event_handle_t *phEvent) {
646+
return withTimingEvent(
647+
UR_COMMAND_USM_MEMCPY_2D, hQueue, numEventsInWaitList, phEventWaitList,
648+
phEvent,
649+
[width, height, srcPitch, dstPitch, pDst, pSrc]() {
650+
for (size_t h = 0, Src_ind = 0, Dst_ind = 0; h < height;
651+
h++, Src_ind += srcPitch, Dst_ind += dstPitch) {
652+
int8_t &d_mem = ur_cast<int8_t *>(pDst)[Dst_ind];
653+
const int8_t &s_mem = ur_cast<const int8_t *>(pSrc)[Src_ind];
654+
std::memcpy(&d_mem, &s_mem, width);
655+
}
656+
return UR_RESULT_SUCCESS;
657+
},
658+
blocking);
649659
}
650660

651661
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueDeviceGlobalVariableWrite(

0 commit comments

Comments
 (0)