From 2c082b03d3587f22d138b152322a1fe0116b9004 Mon Sep 17 00:00:00 2001 From: Ross Brunton Date: Wed, 2 Jul 2025 17:07:39 +0100 Subject: [PATCH 1/2] [UR][Offload] Implement UR_DEVICE_INFO_MAX_WORK_ITEM_SIZES --- .../source/adapters/offload/device.cpp | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/unified-runtime/source/adapters/offload/device.cpp b/unified-runtime/source/adapters/offload/device.cpp index ebe0405b8917e..8ff5f3d53ddcd 100644 --- a/unified-runtime/source/adapters/offload/device.cpp +++ b/unified-runtime/source/adapters/offload/device.cpp @@ -43,6 +43,7 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet); ol_device_info_t olInfo; + bool isVec3{false}; switch (propName) { case UR_DEVICE_INFO_NAME: olInfo = OL_DEVICE_INFO_NAME; @@ -76,6 +77,10 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, return ReturnValue(uint32_t{1}); case UR_DEVICE_INFO_MAX_WORK_ITEM_DIMENSIONS: return ReturnValue(uint32_t{3}); + case UR_DEVICE_INFO_MAX_WORK_ITEM_SIZES: + olInfo = OL_DEVICE_INFO_MAX_WORK_GROUP_SIZE; + isVec3 = true; + break; // Unimplemented features case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS: case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT: @@ -93,6 +98,26 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; } + // OL dimensions are uint32_t while UR is size_t, so they need to be mapped + if (isVec3) { + if (pPropSizeRet) { + *pPropSizeRet = sizeof(size_t) * 3; + } + + if (pPropValue) { + ol_dimensions_t olVec; + size_t *urVec = reinterpret_cast(pPropValue); + OL_RETURN_ON_ERR(olGetDeviceInfo(hDevice->OffloadDevice, olInfo, + sizeof(olVec), &olVec)); + + urVec[0] = olVec.x; + urVec[1] = olVec.y; + urVec[2] = olVec.z; + } + + return UR_RESULT_SUCCESS; + } + if (pPropSizeRet) { OL_RETURN_ON_ERR( olGetDeviceInfoSize(hDevice->OffloadDevice, olInfo, pPropSizeRet)); From 1c30cb163e2ec9ee2d9afc9a6cf79b56f564e338 Mon Sep 17 00:00:00 2001 From: Ross Brunton Date: Tue, 15 Jul 2025 11:02:08 +0100 Subject: [PATCH 2/2] There's only one dimensions device info --- .../source/adapters/offload/device.cpp | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/unified-runtime/source/adapters/offload/device.cpp b/unified-runtime/source/adapters/offload/device.cpp index 8ff5f3d53ddcd..747eb97f39f7f 100644 --- a/unified-runtime/source/adapters/offload/device.cpp +++ b/unified-runtime/source/adapters/offload/device.cpp @@ -43,7 +43,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet); ol_device_info_t olInfo; - bool isVec3{false}; switch (propName) { case UR_DEVICE_INFO_NAME: olInfo = OL_DEVICE_INFO_NAME; @@ -77,29 +76,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, return ReturnValue(uint32_t{1}); case UR_DEVICE_INFO_MAX_WORK_ITEM_DIMENSIONS: return ReturnValue(uint32_t{3}); - case UR_DEVICE_INFO_MAX_WORK_ITEM_SIZES: - olInfo = OL_DEVICE_INFO_MAX_WORK_GROUP_SIZE; - isVec3 = true; - break; - // Unimplemented features - case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS: - case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT: - case UR_DEVICE_INFO_USM_POOL_SUPPORT: - case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP: - case UR_DEVICE_INFO_IMAGE_SUPPORT: - case UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT: - return ReturnValue(false); - case UR_DEVICE_INFO_USM_CROSS_SHARED_SUPPORT: - case UR_DEVICE_INFO_USM_DEVICE_SUPPORT: - case UR_DEVICE_INFO_USM_HOST_SUPPORT: - case UR_DEVICE_INFO_USM_SYSTEM_SHARED_SUPPORT: - return ReturnValue(uint32_t{0}); - default: - return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; - } - - // OL dimensions are uint32_t while UR is size_t, so they need to be mapped - if (isVec3) { + case UR_DEVICE_INFO_MAX_WORK_ITEM_SIZES: { + // OL dimensions are uint32_t while UR is size_t, so they need to be mapped if (pPropSizeRet) { *pPropSizeRet = sizeof(size_t) * 3; } @@ -107,7 +85,8 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, if (pPropValue) { ol_dimensions_t olVec; size_t *urVec = reinterpret_cast(pPropValue); - OL_RETURN_ON_ERR(olGetDeviceInfo(hDevice->OffloadDevice, olInfo, + OL_RETURN_ON_ERR(olGetDeviceInfo(hDevice->OffloadDevice, + OL_DEVICE_INFO_MAX_WORK_GROUP_SIZE, sizeof(olVec), &olVec)); urVec[0] = olVec.x; @@ -117,6 +96,22 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, return UR_RESULT_SUCCESS; } + // Unimplemented features + case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS: + case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT: + case UR_DEVICE_INFO_USM_POOL_SUPPORT: + case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP: + case UR_DEVICE_INFO_IMAGE_SUPPORT: + case UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT: + return ReturnValue(false); + case UR_DEVICE_INFO_USM_CROSS_SHARED_SUPPORT: + case UR_DEVICE_INFO_USM_DEVICE_SUPPORT: + case UR_DEVICE_INFO_USM_HOST_SUPPORT: + case UR_DEVICE_INFO_USM_SYSTEM_SHARED_SUPPORT: + return ReturnValue(uint32_t{0}); + default: + return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; + } if (pPropSizeRet) { OL_RETURN_ON_ERR(