From 0fe5f60335d98df89c35e6a7908733adc0c7fe53 Mon Sep 17 00:00:00 2001 From: Callum Fare Date: Wed, 10 Jul 2024 12:55:56 +0100 Subject: [PATCH] [UR] Bump UR and implement changes to bindless image handle types --- sycl/include/sycl/detail/pi.h | 8 ++-- sycl/plugins/cuda/pi_cuda.cpp | 5 ++- sycl/plugins/hip/pi_hip.cpp | 5 ++- sycl/plugins/level_zero/pi_level_zero.cpp | 5 ++- sycl/plugins/native_cpu/pi_native_cpu.cpp | 5 ++- sycl/plugins/opencl/pi_opencl.cpp | 10 +++-- sycl/plugins/unified_runtime/CMakeLists.txt | 4 +- sycl/plugins/unified_runtime/pi2ur.hpp | 45 ++++++++++--------- .../unified_runtime/pi_unified_runtime.cpp | 5 ++- sycl/source/detail/bindless_images.cpp | 15 ++++--- sycl/unittests/helpers/PiMockPlugin.hpp | 3 +- 11 files changed, 63 insertions(+), 47 deletions(-) diff --git a/sycl/include/sycl/detail/pi.h b/sycl/include/sycl/detail/pi.h index 8ead3c6f355e8..47d53b276a580 100644 --- a/sycl/include/sycl/detail/pi.h +++ b/sycl/include/sycl/detail/pi.h @@ -199,9 +199,10 @@ // 16.56 Replaced piextUSMEnqueueMemset with piextUSMEnqueueFill // 16.57 Added mappings to UR launch properties extension // (piextEnqueueKernelLaunchCustom) +// 16.57 Added context parameter to piextMemImageGetInfo #define _PI_H_VERSION_MAJOR 16 -#define _PI_H_VERSION_MINOR 57 +#define _PI_H_VERSION_MINOR 58 #define _PI_STRING_HELPER(a) #a #define _PI_CONCAT(a, b) _PI_STRING_HELPER(a.b) @@ -3100,13 +3101,14 @@ __SYCL_EXPORT pi_result piextMemImageCopy( /// API to query an image memory handle for specific properties. /// +/// \param context is the handle to the context /// \param mem_handle is the handle to the image memory /// \param param_name is the queried info name /// \param param_value is the returned query value /// \param param_value_size_ret is the returned query value size __SYCL_EXPORT pi_result piextMemImageGetInfo( - const pi_image_mem_handle mem_handle, pi_image_info param_name, - void *param_value, size_t *param_value_size_ret); + const pi_context context, const pi_image_mem_handle mem_handle, + pi_image_info param_name, void *param_value, size_t *param_value_size_ret); /// [DEPRECATED] This function is deprecated in favor of /// `piextImportExternalMemory` diff --git a/sycl/plugins/cuda/pi_cuda.cpp b/sycl/plugins/cuda/pi_cuda.cpp index 92d1eb4e4c825..7c0f62b1f1e71 100644 --- a/sycl/plugins/cuda/pi_cuda.cpp +++ b/sycl/plugins/cuda/pi_cuda.cpp @@ -446,11 +446,12 @@ __SYCL_EXPORT pi_result piextMemSampledImageHandleDestroy( return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/plugins/hip/pi_hip.cpp b/sycl/plugins/hip/pi_hip.cpp index 671df35c30ac4..52008bd2e6d0c 100644 --- a/sycl/plugins/hip/pi_hip.cpp +++ b/sycl/plugins/hip/pi_hip.cpp @@ -449,11 +449,12 @@ __SYCL_EXPORT pi_result piextMemSampledImageHandleDestroy( return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/plugins/level_zero/pi_level_zero.cpp b/sycl/plugins/level_zero/pi_level_zero.cpp index daff872067f86..fc3805135c9e3 100644 --- a/sycl/plugins/level_zero/pi_level_zero.cpp +++ b/sycl/plugins/level_zero/pi_level_zero.cpp @@ -458,11 +458,12 @@ __SYCL_EXPORT pi_result piextMemSampledImageHandleDestroy( return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/plugins/native_cpu/pi_native_cpu.cpp b/sycl/plugins/native_cpu/pi_native_cpu.cpp index 4e61f0a9da031..3d786fe71f248 100644 --- a/sycl/plugins/native_cpu/pi_native_cpu.cpp +++ b/sycl/plugins/native_cpu/pi_native_cpu.cpp @@ -453,11 +453,12 @@ __SYCL_EXPORT pi_result piextMemSampledImageHandleDestroy( return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/plugins/opencl/pi_opencl.cpp b/sycl/plugins/opencl/pi_opencl.cpp index e3345d4cb5237..66074630c5f3b 100644 --- a/sycl/plugins/opencl/pi_opencl.cpp +++ b/sycl/plugins/opencl/pi_opencl.cpp @@ -430,10 +430,12 @@ pi_result piextMemSampledImageHandleDestroy(pi_context Context, return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, - pi_image_info ParamName, void *ParamValue, - size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, + pi_image_info ParamName, + void *ParamValue, + size_t *ParamValueSizeRet) { + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/plugins/unified_runtime/CMakeLists.txt b/sycl/plugins/unified_runtime/CMakeLists.txt index f9866d0b34f07..ed3247adc6a3a 100644 --- a/sycl/plugins/unified_runtime/CMakeLists.txt +++ b/sycl/plugins/unified_runtime/CMakeLists.txt @@ -99,14 +99,14 @@ if(SYCL_PI_UR_USE_FETCH_CONTENT) CACHE PATH "Path to external '${name}' adapter source dir" FORCE) endfunction() - set(UNIFIED_RUNTIME_REPO "https://github.com/oneapi-src/unified-runtime.git") + set(UNIFIED_RUNTIME_REPO "https://github.com/callumfare/unified-runtime.git") # commit 9d3bce6ad92e6f0a4af0139f9744584b5a402827 # Merge: e0775441 1c9c2d0b # Author: Kenneth Benzie (Benie) # Date: Tue Jul 9 15:57:44 2024 +0100 # Merge pull request #1822 from JackAKirk/cuda-cubemap-driver-fix # [cuda][bindless_images][2025.0 req] Fix for cuda < 11.6 support. - set(UNIFIED_RUNTIME_TAG 9d3bce6ad92e6f0a4af0139f9744584b5a402827) + set(UNIFIED_RUNTIME_TAG fe7c7191de1d4a1c010adbb78f91e48264c0b4b4) fetch_adapter_source(level_zero ${UNIFIED_RUNTIME_REPO} diff --git a/sycl/plugins/unified_runtime/pi2ur.hpp b/sycl/plugins/unified_runtime/pi2ur.hpp index 522df8cb40d91..b40af2354790a 100644 --- a/sycl/plugins/unified_runtime/pi2ur.hpp +++ b/sycl/plugins/unified_runtime/pi2ur.hpp @@ -5080,8 +5080,8 @@ inline pi_result piextMemImageAllocate(pi_context Context, pi_device Device, ur_image_desc_t UrDesc{}; pi2urImageDesc(ImageFormat, ImageDesc, &UrFormat, &UrDesc); - ur_exp_image_mem_handle_t *UrRetMem = - reinterpret_cast(RetMem); + ur_exp_image_mem_native_handle_t *UrRetMem = + reinterpret_cast(RetMem); HANDLE_ERRORS(urBindlessImagesImageAllocateExp(UrContext, UrDevice, &UrFormat, &UrDesc, UrRetMem)); @@ -5100,14 +5100,14 @@ inline pi_result piextMemUnsampledImageCreate(pi_context Context, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); - auto UrImgMem = reinterpret_cast(ImgMem); + auto UrImgMem = reinterpret_cast(ImgMem); ur_image_format_t UrFormat{}; ur_image_desc_t UrDesc{}; pi2urImageDesc(ImageFormat, ImageDesc, &UrFormat, &UrDesc); - ur_exp_image_handle_t *UrRetHandle = - reinterpret_cast(RetHandle); + ur_exp_image_native_handle_t *UrRetHandle = + reinterpret_cast(RetHandle); HANDLE_ERRORS(urBindlessImagesUnsampledImageCreateExp( UrContext, UrDevice, UrImgMem, &UrFormat, &UrDesc, UrRetHandle)); @@ -5125,15 +5125,15 @@ inline pi_result piextMemSampledImageCreate( auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); - auto UrImgMem = reinterpret_cast(ImgMem); + auto UrImgMem = reinterpret_cast(ImgMem); ur_image_format_t UrFormat{}; ur_image_desc_t UrDesc{}; pi2urImageDesc(ImageFormat, ImageDesc, &UrFormat, &UrDesc); auto UrSampler = reinterpret_cast(Sampler); - ur_exp_image_handle_t *UrRetHandle = - reinterpret_cast(RetHandle); + ur_exp_image_native_handle_t *UrRetHandle = + reinterpret_cast(RetHandle); HANDLE_ERRORS(urBindlessImagesSampledImageCreateExp( UrContext, UrDevice, UrImgMem, &UrFormat, &UrDesc, UrSampler, @@ -5258,9 +5258,9 @@ inline pi_result piextMemMipmapGetLevel(pi_context Context, pi_device Device, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); - auto UrMipMem = reinterpret_cast(MipMem); - ur_exp_image_mem_handle_t *UrRetMem = - reinterpret_cast(RetMem); + auto UrMipMem = reinterpret_cast(MipMem); + ur_exp_image_mem_native_handle_t *UrRetMem = + reinterpret_cast(RetMem); HANDLE_ERRORS(urBindlessImagesMipmapGetLevelExp(UrContext, UrDevice, UrMipMem, Level, UrRetMem)); @@ -5276,7 +5276,7 @@ inline pi_result piextMemImageFree(pi_context Context, pi_device Device, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); auto UrMemoryHandle = - reinterpret_cast(MemoryHandle); + reinterpret_cast(MemoryHandle); HANDLE_ERRORS( urBindlessImagesImageFreeExp(UrContext, UrDevice, UrMemoryHandle)); @@ -5292,7 +5292,7 @@ inline pi_result piextMemMipmapFree(pi_context Context, pi_device Device, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); auto UrMemoryHandle = - reinterpret_cast(MemoryHandle); + reinterpret_cast(MemoryHandle); HANDLE_ERRORS( urBindlessImagesMipmapFreeExp(UrContext, UrDevice, UrMemoryHandle)); @@ -5367,10 +5367,9 @@ inline pi_result piextMemUnsampledImageHandleDestroy(pi_context Context, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); - auto UrHandle = reinterpret_cast(Handle); HANDLE_ERRORS(urBindlessImagesUnsampledImageHandleDestroyExp( - UrContext, UrDevice, UrHandle)); + UrContext, UrDevice, Handle)); return PI_SUCCESS; } @@ -5383,7 +5382,7 @@ inline pi_result piextMemSampledImageHandleDestroy(pi_context Context, auto UrContext = reinterpret_cast(Context); auto UrDevice = reinterpret_cast(Device); - auto UrHandle = reinterpret_cast(Handle); + auto UrHandle = reinterpret_cast(Handle); HANDLE_ERRORS(urBindlessImagesSampledImageHandleDestroyExp( UrContext, UrDevice, UrHandle)); @@ -5412,16 +5411,18 @@ static void pi2urImageInfoFlags(const pi_image_info PiFlags, } } -inline pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +inline pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - auto UrMemHandle = reinterpret_cast(MemHandle); + auto UrMemHandle = reinterpret_cast(MemHandle); + auto UrContext = reinterpret_cast(Context); ur_image_info_t UrParamName{}; pi2urImageInfoFlags(ParamName, &UrParamName); - HANDLE_ERRORS(urBindlessImagesImageGetInfoExp(UrMemHandle, UrParamName, - ParamValue, ParamValueSizeRet)); + HANDLE_ERRORS(urBindlessImagesImageGetInfoExp( + UrContext, UrMemHandle, UrParamName, ParamValue, ParamValueSizeRet)); if (ParamName == pi_image_info::PI_IMAGE_INFO_FORMAT && ParamValue) { pi_image_format PiFormat; @@ -5549,8 +5550,8 @@ inline pi_result piextMemMapExternalArray(pi_context Context, pi_device Device, pi2urImageDesc(ImageFormat, ImageDesc, &UrFormat, &UrDesc); auto UrMemHandle = reinterpret_cast(MemHandle); - ur_exp_image_mem_handle_t *UrRetMem = - reinterpret_cast(RetMem); + ur_exp_image_mem_native_handle_t *UrRetMem = + reinterpret_cast(RetMem); HANDLE_ERRORS(urBindlessImagesMapExternalArrayExp( UrContext, UrDevice, &UrFormat, &UrDesc, UrMemHandle, UrRetMem)); diff --git a/sycl/plugins/unified_runtime/pi_unified_runtime.cpp b/sycl/plugins/unified_runtime/pi_unified_runtime.cpp index b75a5abd60327..6506700b80a95 100644 --- a/sycl/plugins/unified_runtime/pi_unified_runtime.cpp +++ b/sycl/plugins/unified_runtime/pi_unified_runtime.cpp @@ -1381,11 +1381,12 @@ __SYCL_EXPORT pi_result piextMemSampledImageHandleDestroy( return pi2ur::piextMemSampledImageHandleDestroy(Context, Device, Handle); } -__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_image_mem_handle MemHandle, +__SYCL_EXPORT pi_result piextMemImageGetInfo(pi_context Context, + pi_image_mem_handle MemHandle, pi_image_info ParamName, void *ParamValue, size_t *ParamValueSizeRet) { - return pi2ur::piextMemImageGetInfo(MemHandle, ParamName, ParamValue, + return pi2ur::piextMemImageGetInfo(Context, MemHandle, ParamName, ParamValue, ParamValueSizeRet); } diff --git a/sycl/source/detail/bindless_images.cpp b/sycl/source/detail/bindless_images.cpp index a02fa47a0139c..efc3df2471936 100644 --- a/sycl/source/detail/bindless_images.cpp +++ b/sycl/source/detail/bindless_images.cpp @@ -802,15 +802,18 @@ __SYCL_EXPORT sycl::range<3> get_image_range(const image_mem_handle memHandle, Plugin->call( - memHandle.raw_handle, PI_IMAGE_INFO_WIDTH, &Width, nullptr); + CtxImpl->getHandleRef(), memHandle.raw_handle, PI_IMAGE_INFO_WIDTH, + &Width, nullptr); Plugin->call( - memHandle.raw_handle, PI_IMAGE_INFO_HEIGHT, &Height, nullptr); + CtxImpl->getHandleRef(), memHandle.raw_handle, PI_IMAGE_INFO_HEIGHT, + &Height, nullptr); Plugin->call( - memHandle.raw_handle, PI_IMAGE_INFO_DEPTH, &Depth, nullptr); + CtxImpl->getHandleRef(), memHandle.raw_handle, PI_IMAGE_INFO_DEPTH, + &Depth, nullptr); return {Width, Height, Depth}; } @@ -834,7 +837,8 @@ get_image_channel_type(const image_mem_handle memHandle, Plugin->call( - memHandle.raw_handle, PI_IMAGE_INFO_FORMAT, &PIFormat, nullptr); + CtxImpl->getHandleRef(), memHandle.raw_handle, PI_IMAGE_INFO_FORMAT, + &PIFormat, nullptr); image_channel_type ChannelType = sycl::detail::convertChannelType(PIFormat.image_channel_data_type); @@ -920,7 +924,8 @@ get_image_num_channels(const image_mem_handle memHandle, Plugin->call( - memHandle.raw_handle, PI_IMAGE_INFO_FORMAT, &PIFormat, nullptr); + CtxImpl->getHandleRef(), memHandle.raw_handle, PI_IMAGE_INFO_FORMAT, + &PIFormat, nullptr); image_channel_order Order = sycl::detail::convertChannelOrder(PIFormat.image_channel_order); diff --git a/sycl/unittests/helpers/PiMockPlugin.hpp b/sycl/unittests/helpers/PiMockPlugin.hpp index 24a33ee98d97b..40d93907da0aa 100644 --- a/sycl/unittests/helpers/PiMockPlugin.hpp +++ b/sycl/unittests/helpers/PiMockPlugin.hpp @@ -608,7 +608,8 @@ inline pi_result mock_piextMemImageCopy( return PI_SUCCESS; } -inline pi_result mock_piextMemImageGetInfo(const pi_image_mem_handle mem_handle, +inline pi_result mock_piextMemImageGetInfo(const pi_context context, + const pi_image_mem_handle mem_handle, pi_image_info param_name, void *param_value, size_t *param_value_size_ret) {