diff --git a/sycl/include/CL/sycl/detail/pi.h b/sycl/include/CL/sycl/detail/pi.h index 3ab941823e603..9d0669eb6494d 100644 --- a/sycl/include/CL/sycl/detail/pi.h +++ b/sycl/include/CL/sycl/detail/pi.h @@ -1560,6 +1560,9 @@ typedef enum : pi_bitfield { PI_MEM_ALLOC_FLAGS = CL_MEM_ALLOC_FLAGS_INTEL } _pi_usm_mem_properties; +// Flag is used for piProgramUSMEnqueuePrefetch. PI_USM_MIGRATION_TBD0 is a +// placeholder for future developments and should not change the behaviour of +// piProgramUSMEnqueuePrefetch typedef enum : pi_bitfield { PI_USM_MIGRATION_TBD0 = (1 << 0) } _pi_usm_migration_flags; diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index 528c10c708569..601f7bf8ce8e5 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -4595,16 +4595,16 @@ pi_result cuda_piextUSMEnqueuePrefetch(pi_queue queue, const void *ptr, pi_uint32 num_events_in_waitlist, const pi_event *events_waitlist, pi_event *event) { + + // flags is currently unused so fail if set + if (flags != 0) + return PI_INVALID_VALUE; assert(queue != nullptr); assert(ptr != nullptr); CUstream cuStream = queue->get(); pi_result result = PI_SUCCESS; std::unique_ptr<_pi_event> event_ptr{nullptr}; - // TODO implement handling the flags once the expected behaviour - // of piextUSMEnqueuePrefetch is detailed in the USM extension - assert(flags == 0u); - try { ScopedContext active(queue->get_context()); result = cuda_piEnqueueEventsWait(queue, num_events_in_waitlist, diff --git a/sycl/plugins/hip/pi_hip.cpp b/sycl/plugins/hip/pi_hip.cpp index d5019a234d30c..1d14ff64b9241 100644 --- a/sycl/plugins/hip/pi_hip.cpp +++ b/sycl/plugins/hip/pi_hip.cpp @@ -4432,16 +4432,15 @@ pi_result hip_piextUSMEnqueuePrefetch(pi_queue queue, const void *ptr, const pi_event *events_waitlist, pi_event *event) { + // flags is currently unused so fail if set + if (flags != 0) + return PI_INVALID_VALUE; assert(queue != nullptr); assert(ptr != nullptr); hipStream_t hipStream = queue->get(); pi_result result = PI_SUCCESS; std::unique_ptr<_pi_event> event_ptr{nullptr}; - // TODO implement handling the flags once the expected behaviour - // of piextUSMEnqueuePrefetch is detailed in the USM extension - assert(flags == 0u); - try { ScopedContext active(queue->get_context()); result = hip_piEnqueueEventsWait(queue, num_events_in_waitlist, diff --git a/sycl/plugins/level_zero/pi_level_zero.cpp b/sycl/plugins/level_zero/pi_level_zero.cpp index 054e7306aec9e..027ccdf09bb29 100644 --- a/sycl/plugins/level_zero/pi_level_zero.cpp +++ b/sycl/plugins/level_zero/pi_level_zero.cpp @@ -6633,7 +6633,9 @@ pi_result piextUSMEnqueuePrefetch(pi_queue Queue, const void *Ptr, size_t Size, pi_uint32 NumEventsInWaitList, const pi_event *EventWaitList, pi_event *Event) { - PI_ASSERT(!(Flags & ~PI_USM_MIGRATION_TBD0), PI_INVALID_VALUE); + + // flags is currently unused so fail if set + PI_ASSERT(Flags == 0, PI_INVALID_VALUE); PI_ASSERT(Queue, PI_INVALID_QUEUE); PI_ASSERT(Event, PI_INVALID_EVENT); diff --git a/sycl/plugins/opencl/pi_opencl.cpp b/sycl/plugins/opencl/pi_opencl.cpp index fb05ceca94b32..59c62716b1845 100644 --- a/sycl/plugins/opencl/pi_opencl.cpp +++ b/sycl/plugins/opencl/pi_opencl.cpp @@ -1012,7 +1012,10 @@ pi_result piextUSMEnqueuePrefetch(pi_queue queue, const void *ptr, size_t size, pi_event *event) { (void)ptr; (void)size; - (void)flags; + + // flags is currently unused so fail if set + if (flags != 0) + return PI_INVALID_VALUE; return cast(clEnqueueMarkerWithWaitList( cast(queue), num_events_in_waitlist, diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index d8d4a05c4b75c..55fb5ec681b46 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -698,7 +698,7 @@ void MemoryManager::prefetch_usm(void *Mem, QueueImplPtr Queue, size_t Length, } else { const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( - Queue->getHandleRef(), Mem, Length, PI_USM_MIGRATION_TBD0, + Queue->getHandleRef(), Mem, Length, _pi_usm_migration_flags(0), DepEvents.size(), DepEvents.data(), &OutEvent); } }