From 71c6a98386d9098c92fbd2234079d74216df14ec Mon Sep 17 00:00:00 2001 From: Stuart Adams Date: Tue, 9 Mar 2021 17:10:50 +0000 Subject: [PATCH 1/4] Implemented cuda_piextUSMEnqueueMemAdvise --- sycl/include/CL/sycl/detail/pi.h | 3 ++- sycl/plugins/cuda/pi_cuda.cpp | 27 ++++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/sycl/include/CL/sycl/detail/pi.h b/sycl/include/CL/sycl/detail/pi.h index b1003954f7a00..a8a3e847f7645 100644 --- a/sycl/include/CL/sycl/detail/pi.h +++ b/sycl/include/CL/sycl/detail/pi.h @@ -390,7 +390,8 @@ typedef enum { PI_COMMAND_TYPE_SVM_MEMCPY = CL_COMMAND_SVM_MEMCPY, PI_COMMAND_TYPE_SVM_MEMFILL = CL_COMMAND_SVM_MEMFILL, PI_COMMAND_TYPE_SVM_MAP = CL_COMMAND_SVM_MAP, - PI_COMMAND_TYPE_SVM_UNMAP = CL_COMMAND_SVM_UNMAP + PI_COMMAND_TYPE_SVM_UNMAP = CL_COMMAND_SVM_UNMAP, + PI_COMMAND_TYPE_MEMADVISE = 0x4207 } _pi_command_type; typedef enum { diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index 3b77736b95c1b..5415b4412f5eb 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -4449,9 +4449,30 @@ pi_result cuda_piextUSMEnqueueMemAdvise(pi_queue queue, const void *ptr, pi_event *event) { assert(queue != nullptr); assert(ptr != nullptr); - // TODO implement a mapping to cuMemAdvise once the expected behaviour - // of piextUSMEnqueueMemAdvise is detailed in the USM extension - return cuda_piEnqueueEventsWait(queue, 0, nullptr, event); + + pi_result result = PI_SUCCESS; + std::unique_ptr<_pi_event> event_ptr{nullptr}; + + try { + ScopedContext active(queue->get_context()); + + if (event) { + event_ptr = std::unique_ptr<_pi_event>( + _pi_event::make_native(PI_COMMAND_TYPE_MEMADVISE, queue)); + event_ptr->start(); + } + + result = PI_CHECK_ERROR(cuMemAdvise( + (CUdeviceptr)ptr, length, (CUmem_advise)advice, + queue->get_context()->get_device()->get())); + if (event) { + result = event_ptr->record(); + *event = event_ptr.release(); + } + } catch (pi_result err) { + result = err; + } + return result; } /// API to query information about USM allocated pointers From 92289120796e47c6697f44892094afcff98928d9 Mon Sep 17 00:00:00 2001 From: Stuart Adams Date: Tue, 16 Mar 2021 13:35:43 +0000 Subject: [PATCH 2/4] Fix formatting --- sycl/plugins/cuda/pi_cuda.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index 5415b4412f5eb..e5ca726e8e0ad 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -4462,9 +4462,9 @@ pi_result cuda_piextUSMEnqueueMemAdvise(pi_queue queue, const void *ptr, event_ptr->start(); } - result = PI_CHECK_ERROR(cuMemAdvise( - (CUdeviceptr)ptr, length, (CUmem_advise)advice, - queue->get_context()->get_device()->get())); + result = PI_CHECK_ERROR( + cuMemAdvise((CUdeviceptr)ptr, length, (CUmem_advise)advice, + queue->get_context()->get_device()->get())); if (event) { result = event_ptr->record(); *event = event_ptr.release(); From dbeb637259f322eed544071c4cc1ed8565504705 Mon Sep 17 00:00:00 2001 From: Stuart Adams Date: Mon, 12 Apr 2021 15:09:22 +0100 Subject: [PATCH 3/4] Removed PI_COMMAND_TYPE_MEMADVISE enumerator --- sycl/include/CL/sycl/detail/pi.h | 3 +-- sycl/plugins/cuda/pi_cuda.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/sycl/include/CL/sycl/detail/pi.h b/sycl/include/CL/sycl/detail/pi.h index a8a3e847f7645..b1003954f7a00 100644 --- a/sycl/include/CL/sycl/detail/pi.h +++ b/sycl/include/CL/sycl/detail/pi.h @@ -390,8 +390,7 @@ typedef enum { PI_COMMAND_TYPE_SVM_MEMCPY = CL_COMMAND_SVM_MEMCPY, PI_COMMAND_TYPE_SVM_MEMFILL = CL_COMMAND_SVM_MEMFILL, PI_COMMAND_TYPE_SVM_MAP = CL_COMMAND_SVM_MAP, - PI_COMMAND_TYPE_SVM_UNMAP = CL_COMMAND_SVM_UNMAP, - PI_COMMAND_TYPE_MEMADVISE = 0x4207 + PI_COMMAND_TYPE_SVM_UNMAP = CL_COMMAND_SVM_UNMAP } _pi_command_type; typedef enum { diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index e5ca726e8e0ad..d95c09cf745e4 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -4458,7 +4458,7 @@ pi_result cuda_piextUSMEnqueueMemAdvise(pi_queue queue, const void *ptr, if (event) { event_ptr = std::unique_ptr<_pi_event>( - _pi_event::make_native(PI_COMMAND_TYPE_MEMADVISE, queue)); + _pi_event::make_native(PI_COMMAND_TYPE_USER, queue)); event_ptr->start(); } From 5d90280f156c0bbb4db909402221166bdfe01a2b Mon Sep 17 00:00:00 2001 From: Stuart Adams Date: Tue, 13 Apr 2021 15:58:54 +0100 Subject: [PATCH 4/4] Catch all --- sycl/plugins/cuda/pi_cuda.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index d95c09cf745e4..cd6b808f9c599 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -4471,6 +4471,8 @@ pi_result cuda_piextUSMEnqueueMemAdvise(pi_queue queue, const void *ptr, } } catch (pi_result err) { result = err; + } catch (...) { + result = PI_ERROR_UNKNOWN; } return result; }