Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 95 additions & 49 deletions unified-runtime/source/adapters/offload/device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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});
}
Expand All @@ -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<ur_device_type_t *>(pPropValue);
auto olPropPtr = reinterpret_cast<ol_device_type_t *>(pPropValue);

// Need to explicitly map these types
switch (olInfo) {
case OL_DEVICE_INFO_TYPE: {
auto *urPropPtr = reinterpret_cast<ur_device_type_t *>(pPropValue);
auto *olPropPtr = reinterpret_cast<ol_device_type_t *>(pPropValue);

switch (*olPropPtr) {
case OL_DEVICE_TYPE_CPU:
Expand All @@ -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<ol_device_fp_capability_flags_t *>(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<ur_device_fp_capability_flags_t *>(pPropValue);
*urPropPtr = urValue;
}
default:
break;
}
}

Expand Down
6 changes: 6 additions & 0 deletions unified-runtime/source/adapters/offload/ur2offload.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading