From 0805aa9b335e519d84dc36c6812a8d63e8fe1b61 Mon Sep 17 00:00:00 2001 From: Ruyman Reyes Date: Fri, 8 May 2020 11:34:53 +0000 Subject: [PATCH 1/2] [SYCL][CUDA] Missing return event on map/unmap Signed-off-by: Ruyman Reyes --- sycl/plugins/cuda/pi_cuda.cpp | 16 +++++++++++++++- sycl/test/scheduler/DataMovement.cpp | 3 --- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index af15743438da8..f044bdcdd87a7 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -3359,6 +3359,13 @@ pi_result cuda_piEnqueueMemBufferMap(pi_queue command_queue, pi_mem buffer, ret_err = cuda_piEnqueueMemBufferRead( command_queue, buffer, blocking_map, offset, size, hostPtr, num_events_in_wait_list, event_wait_list, retEvent); + } else { + if (retEvent) { + auto new_event = + _pi_event::make_native(PI_COMMAND_TYPE_MEM_BUFFER_MAP, command_queue); + new_event->record(); + *retEvent = new_event; + } } return ret_err; @@ -3372,7 +3379,7 @@ pi_result cuda_piEnqueueMemUnmap(pi_queue command_queue, pi_mem memobj, pi_uint32 num_events_in_wait_list, const pi_event *event_wait_list, pi_event *retEvent) { - pi_result ret_err = PI_INVALID_OPERATION; + pi_result ret_err = PI_SUCCESS; assert(mapped_ptr != nullptr); assert(memobj != nullptr); @@ -3385,6 +3392,13 @@ pi_result cuda_piEnqueueMemUnmap(pi_queue command_queue, pi_mem memobj, command_queue, memobj, true, memobj->get_map_offset(mapped_ptr), memobj->get_size(), mapped_ptr, num_events_in_wait_list, event_wait_list, retEvent); + } else { + if (retEvent) { + auto new_event = _pi_event::make_native(PI_COMMAND_TYPE_MEM_BUFFER_UNMAP, + command_queue); + new_event->record(); + *retEvent = new_event; + } } memobj->unmap(mapped_ptr); diff --git a/sycl/test/scheduler/DataMovement.cpp b/sycl/test/scheduler/DataMovement.cpp index 62319e35ccea8..b2a3c33ba1a63 100644 --- a/sycl/test/scheduler/DataMovement.cpp +++ b/sycl/test/scheduler/DataMovement.cpp @@ -1,6 +1,3 @@ -// XFAIL: cuda -// TODO: Fix accidential error return when unmapping read-only memory objects. -// // RUN: %clangxx -fsycl -fsycl-targets=%sycl_triple -I %sycl_source_dir %s -o %t.out -g // RUN: %CPU_RUN_PLACEHOLDER %t.out // RUN: %GPU_RUN_PLACEHOLDER %t.out From 35811a6151c666dc6902b90fbbb2ff8555e487ad Mon Sep 17 00:00:00 2001 From: Ruyman Reyes Date: Fri, 8 May 2020 14:25:14 +0000 Subject: [PATCH 2/2] Addressing feedback from reviewers Signed-off-by: Ruyman Reyes --- sycl/plugins/cuda/pi_cuda.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index f044bdcdd87a7..8a4d9540334a4 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -2867,11 +2867,9 @@ pi_result cuda_piEnqueueEventsWait(pi_queue command_queue, } if (event) { - auto new_event = - _pi_event::make_native(PI_COMMAND_TYPE_MARKER, command_queue); - new_event->start(); - new_event->record(); - *event = new_event; + *event = _pi_event::make_native(PI_COMMAND_TYPE_MARKER, command_queue); + (*event)->start(); + (*event)->record(); } return PI_SUCCESS; @@ -3281,7 +3279,6 @@ pi_result cuda_piEnqueueMemBufferFill(pi_queue command_queue, pi_mem buffer, return PI_ERROR_UNKNOWN; } } - /// \TODO Not implemented in CUDA, requires untie from OpenCL pi_result cuda_piEnqueueMemImageRead( pi_queue command_queue, pi_mem image, pi_bool blocking_read, @@ -3361,10 +3358,9 @@ pi_result cuda_piEnqueueMemBufferMap(pi_queue command_queue, pi_mem buffer, num_events_in_wait_list, event_wait_list, retEvent); } else { if (retEvent) { - auto new_event = + *retEvent = _pi_event::make_native(PI_COMMAND_TYPE_MEM_BUFFER_MAP, command_queue); - new_event->record(); - *retEvent = new_event; + (*retEvent)->record(); } } @@ -3394,10 +3390,9 @@ pi_result cuda_piEnqueueMemUnmap(pi_queue command_queue, pi_mem memobj, retEvent); } else { if (retEvent) { - auto new_event = _pi_event::make_native(PI_COMMAND_TYPE_MEM_BUFFER_UNMAP, - command_queue); - new_event->record(); - *retEvent = new_event; + *retEvent = _pi_event::make_native(PI_COMMAND_TYPE_MEM_BUFFER_UNMAP, + command_queue); + (*retEvent)->record(); } }