diff --git a/unified-runtime/source/adapters/offload/device.cpp b/unified-runtime/source/adapters/offload/device.cpp index 1c026de27936b..c9bb6df9224a0 100644 --- a/unified-runtime/source/adapters/offload/device.cpp +++ b/unified-runtime/source/adapters/offload/device.cpp @@ -62,12 +62,71 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, case UR_DEVICE_INFO_VENDOR: olInfo = OL_DEVICE_INFO_VENDOR; break; + case UR_DEVICE_INFO_VENDOR_ID: + olInfo = OL_DEVICE_INFO_VENDOR_ID; + break; case UR_DEVICE_INFO_DRIVER_VERSION: olInfo = OL_DEVICE_INFO_DRIVER_VERSION; break; case UR_DEVICE_INFO_PLATFORM: return ReturnValue(hDevice->Platform); break; + case UR_DEVICE_INFO_MAX_COMPUTE_UNITS: + case UR_DEVICE_INFO_NUM_COMPUTE_UNITS: + olInfo = OL_DEVICE_INFO_NUM_COMPUTE_UNITS; + break; + case UR_DEVICE_INFO_SINGLE_FP_CONFIG: + olInfo = OL_DEVICE_INFO_SINGLE_FP_CONFIG; + break; + case UR_DEVICE_INFO_HALF_FP_CONFIG: + olInfo = OL_DEVICE_INFO_HALF_FP_CONFIG; + break; + case UR_DEVICE_INFO_DOUBLE_FP_CONFIG: + olInfo = OL_DEVICE_INFO_DOUBLE_FP_CONFIG; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_CHAR: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_SHORT: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_INT: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_LONG: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_FLOAT: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_DOUBLE: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE; + break; + case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_HALF: + case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_HALF: + olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_HALF; + break; + case UR_DEVICE_INFO_MAX_CLOCK_FREQUENCY: + olInfo = OL_DEVICE_INFO_MAX_CLOCK_FREQUENCY; + break; + case UR_DEVICE_INFO_MEMORY_CLOCK_RATE: + olInfo = OL_DEVICE_INFO_MEMORY_CLOCK_RATE; + break; + case UR_DEVICE_INFO_ADDRESS_BITS: + olInfo = OL_DEVICE_INFO_ADDRESS_BITS; + break; + case UR_DEVICE_INFO_MAX_MEM_ALLOC_SIZE: + olInfo = OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE; + break; + case UR_DEVICE_INFO_GLOBAL_MEM_SIZE: + olInfo = OL_DEVICE_INFO_GLOBAL_MEM_SIZE; + break; case UR_DEVICE_INFO_USM_DEVICE_SUPPORT: case UR_DEVICE_INFO_USM_HOST_SUPPORT: case UR_DEVICE_INFO_USM_SINGLE_SHARED_SUPPORT: @@ -164,51 +223,6 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, } return UR_RESULT_SUCCESS; } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_CHAR: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_SHORT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_INT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_LONG: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_FLOAT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_DOUBLE: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE: { - return ReturnValue(1u); - } - case UR_DEVICE_INFO_SINGLE_FP_CONFIG: - case UR_DEVICE_INFO_DOUBLE_FP_CONFIG: { - // This minimal set of flags will at least signal to sycl that we support - // the basic FP types. - ur_device_fp_capability_flags_t SupportedFlags = - UR_DEVICE_FP_CAPABILITY_FLAG_INF_NAN | - UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST; - return ReturnValue(SupportedFlags); - } case UR_DEVICE_INFO_AVAILABLE: { return ReturnValue(ur_bool_t{true}); } @@ -229,10 +243,12 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, if (pPropValue) { OL_RETURN_ON_ERR( olGetDeviceInfo(hDevice->OffloadDevice, olInfo, propSize, pPropValue)); - // Need to explicitly map this type - if (olInfo == OL_DEVICE_INFO_TYPE) { - auto urPropPtr = reinterpret_cast(pPropValue); - auto olPropPtr = reinterpret_cast(pPropValue); + + // Need to explicitly map these types + switch (olInfo) { + case OL_DEVICE_INFO_TYPE: { + auto *urPropPtr = reinterpret_cast(pPropValue); + auto *olPropPtr = reinterpret_cast(pPropValue); switch (*olPropPtr) { case OL_DEVICE_TYPE_CPU: @@ -244,6 +260,36 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice, default: break; } + break; + } + case OL_DEVICE_INFO_SINGLE_FP_CONFIG: + case OL_DEVICE_INFO_HALF_FP_CONFIG: + case OL_DEVICE_INFO_DOUBLE_FP_CONFIG: { + auto olValue = + *reinterpret_cast(pPropValue); + ur_device_fp_capability_flags_t urValue{0}; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_CORRECTLY_ROUNDED_DIVIDE_SQRT) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_CORRECTLY_ROUNDED_DIVIDE_SQRT; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_ZERO) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_ZERO; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_INF) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_INF; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_INF_NAN) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_INF_NAN; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_DENORM) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_DENORM; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_FMA) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_FMA; + if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_SOFT_FLOAT) + urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_SOFT_FLOAT; + auto *urPropPtr = + reinterpret_cast(pPropValue); + *urPropPtr = urValue; + } + default: + break; } } diff --git a/unified-runtime/source/adapters/offload/ur2offload.hpp b/unified-runtime/source/adapters/offload/ur2offload.hpp index 201b6e3b5670e..c11fea3c75443 100644 --- a/unified-runtime/source/adapters/offload/ur2offload.hpp +++ b/unified-runtime/source/adapters/offload/ur2offload.hpp @@ -24,6 +24,12 @@ inline ur_result_t offloadResultToUR(ol_result_t Result) { return UR_RESULT_ERROR_INVALID_NULL_POINTER; case OL_ERRC_UNSUPPORTED: return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION; + case OL_ERRC_INVALID_ENUMERATION: + return UR_RESULT_ERROR_INVALID_ENUMERATION; + case OL_ERRC_INVALID_SIZE: + return UR_RESULT_ERROR_INVALID_SIZE; + case OL_ERRC_INVALID_DEVICE: + return UR_RESULT_ERROR_INVALID_DEVICE; case OL_ERRC_INVALID_BINARY: return UR_RESULT_ERROR_INVALID_BINARY; // Returned whenever a kernel can't be found