Skip to content

Commit 99ad2f9

Browse files
rafbielsbb-ur
authored andcommitted
Implement more device info properties (#19833)
The liboffload olGetDeviceInfo functionality was extended with additional properties in llvm/llvm-project#152533. Implement retrieving these properties in the UR Offload adapter. Also map all the error codes that may be returned by olGetDeviceInfo to the corresponding UR error codes.
1 parent ad5cbb7 commit 99ad2f9

2 files changed

Lines changed: 101 additions & 49 deletions

File tree

source/adapters/offload/device.cpp

Lines changed: 95 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,71 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
6262
case UR_DEVICE_INFO_VENDOR:
6363
olInfo = OL_DEVICE_INFO_VENDOR;
6464
break;
65+
case UR_DEVICE_INFO_VENDOR_ID:
66+
olInfo = OL_DEVICE_INFO_VENDOR_ID;
67+
break;
6568
case UR_DEVICE_INFO_DRIVER_VERSION:
6669
olInfo = OL_DEVICE_INFO_DRIVER_VERSION;
6770
break;
6871
case UR_DEVICE_INFO_PLATFORM:
6972
return ReturnValue(hDevice->Platform);
7073
break;
74+
case UR_DEVICE_INFO_MAX_COMPUTE_UNITS:
75+
case UR_DEVICE_INFO_NUM_COMPUTE_UNITS:
76+
olInfo = OL_DEVICE_INFO_NUM_COMPUTE_UNITS;
77+
break;
78+
case UR_DEVICE_INFO_SINGLE_FP_CONFIG:
79+
olInfo = OL_DEVICE_INFO_SINGLE_FP_CONFIG;
80+
break;
81+
case UR_DEVICE_INFO_HALF_FP_CONFIG:
82+
olInfo = OL_DEVICE_INFO_HALF_FP_CONFIG;
83+
break;
84+
case UR_DEVICE_INFO_DOUBLE_FP_CONFIG:
85+
olInfo = OL_DEVICE_INFO_DOUBLE_FP_CONFIG;
86+
break;
87+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_CHAR:
88+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR:
89+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR;
90+
break;
91+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_SHORT:
92+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT:
93+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT;
94+
break;
95+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_INT:
96+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT:
97+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT;
98+
break;
99+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_LONG:
100+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG:
101+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG;
102+
break;
103+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_FLOAT:
104+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT:
105+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT;
106+
break;
107+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_DOUBLE:
108+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE:
109+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE;
110+
break;
111+
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_HALF:
112+
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_HALF:
113+
olInfo = OL_DEVICE_INFO_NATIVE_VECTOR_WIDTH_HALF;
114+
break;
115+
case UR_DEVICE_INFO_MAX_CLOCK_FREQUENCY:
116+
olInfo = OL_DEVICE_INFO_MAX_CLOCK_FREQUENCY;
117+
break;
118+
case UR_DEVICE_INFO_MEMORY_CLOCK_RATE:
119+
olInfo = OL_DEVICE_INFO_MEMORY_CLOCK_RATE;
120+
break;
121+
case UR_DEVICE_INFO_ADDRESS_BITS:
122+
olInfo = OL_DEVICE_INFO_ADDRESS_BITS;
123+
break;
124+
case UR_DEVICE_INFO_MAX_MEM_ALLOC_SIZE:
125+
olInfo = OL_DEVICE_INFO_MAX_MEM_ALLOC_SIZE;
126+
break;
127+
case UR_DEVICE_INFO_GLOBAL_MEM_SIZE:
128+
olInfo = OL_DEVICE_INFO_GLOBAL_MEM_SIZE;
129+
break;
71130
case UR_DEVICE_INFO_USM_DEVICE_SUPPORT:
72131
case UR_DEVICE_INFO_USM_HOST_SUPPORT:
73132
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,
164223
}
165224
return UR_RESULT_SUCCESS;
166225
}
167-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_CHAR: {
168-
return ReturnValue(1u);
169-
}
170-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_SHORT: {
171-
return ReturnValue(1u);
172-
}
173-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_INT: {
174-
return ReturnValue(1u);
175-
}
176-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_LONG: {
177-
return ReturnValue(1u);
178-
}
179-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_FLOAT: {
180-
return ReturnValue(1u);
181-
}
182-
case UR_DEVICE_INFO_PREFERRED_VECTOR_WIDTH_DOUBLE: {
183-
return ReturnValue(1u);
184-
}
185-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_CHAR: {
186-
return ReturnValue(1u);
187-
}
188-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_SHORT: {
189-
return ReturnValue(1u);
190-
}
191-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_INT: {
192-
return ReturnValue(1u);
193-
}
194-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_LONG: {
195-
return ReturnValue(1u);
196-
}
197-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_FLOAT: {
198-
return ReturnValue(1u);
199-
}
200-
case UR_DEVICE_INFO_NATIVE_VECTOR_WIDTH_DOUBLE: {
201-
return ReturnValue(1u);
202-
}
203-
case UR_DEVICE_INFO_SINGLE_FP_CONFIG:
204-
case UR_DEVICE_INFO_DOUBLE_FP_CONFIG: {
205-
// This minimal set of flags will at least signal to sycl that we support
206-
// the basic FP types.
207-
ur_device_fp_capability_flags_t SupportedFlags =
208-
UR_DEVICE_FP_CAPABILITY_FLAG_INF_NAN |
209-
UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST;
210-
return ReturnValue(SupportedFlags);
211-
}
212226
case UR_DEVICE_INFO_AVAILABLE: {
213227
return ReturnValue(ur_bool_t{true});
214228
}
@@ -229,10 +243,12 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
229243
if (pPropValue) {
230244
OL_RETURN_ON_ERR(
231245
olGetDeviceInfo(hDevice->OffloadDevice, olInfo, propSize, pPropValue));
232-
// Need to explicitly map this type
233-
if (olInfo == OL_DEVICE_INFO_TYPE) {
234-
auto urPropPtr = reinterpret_cast<ur_device_type_t *>(pPropValue);
235-
auto olPropPtr = reinterpret_cast<ol_device_type_t *>(pPropValue);
246+
247+
// Need to explicitly map these types
248+
switch (olInfo) {
249+
case OL_DEVICE_INFO_TYPE: {
250+
auto *urPropPtr = reinterpret_cast<ur_device_type_t *>(pPropValue);
251+
auto *olPropPtr = reinterpret_cast<ol_device_type_t *>(pPropValue);
236252

237253
switch (*olPropPtr) {
238254
case OL_DEVICE_TYPE_CPU:
@@ -244,6 +260,36 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
244260
default:
245261
break;
246262
}
263+
break;
264+
}
265+
case OL_DEVICE_INFO_SINGLE_FP_CONFIG:
266+
case OL_DEVICE_INFO_HALF_FP_CONFIG:
267+
case OL_DEVICE_INFO_DOUBLE_FP_CONFIG: {
268+
auto olValue =
269+
*reinterpret_cast<ol_device_fp_capability_flags_t *>(pPropValue);
270+
ur_device_fp_capability_flags_t urValue{0};
271+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_CORRECTLY_ROUNDED_DIVIDE_SQRT)
272+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_CORRECTLY_ROUNDED_DIVIDE_SQRT;
273+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST)
274+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_NEAREST;
275+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_ZERO)
276+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_ZERO;
277+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_INF)
278+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_ROUND_TO_INF;
279+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_INF_NAN)
280+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_INF_NAN;
281+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_DENORM)
282+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_DENORM;
283+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_FMA)
284+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_FMA;
285+
if (olValue & OL_DEVICE_FP_CAPABILITY_FLAG_SOFT_FLOAT)
286+
urValue |= UR_DEVICE_FP_CAPABILITY_FLAG_SOFT_FLOAT;
287+
auto *urPropPtr =
288+
reinterpret_cast<ur_device_fp_capability_flags_t *>(pPropValue);
289+
*urPropPtr = urValue;
290+
}
291+
default:
292+
break;
247293
}
248294
}
249295

source/adapters/offload/ur2offload.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ inline ur_result_t offloadResultToUR(ol_result_t Result) {
2424
return UR_RESULT_ERROR_INVALID_NULL_POINTER;
2525
case OL_ERRC_UNSUPPORTED:
2626
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
27+
case OL_ERRC_INVALID_ENUMERATION:
28+
return UR_RESULT_ERROR_INVALID_ENUMERATION;
29+
case OL_ERRC_INVALID_SIZE:
30+
return UR_RESULT_ERROR_INVALID_SIZE;
31+
case OL_ERRC_INVALID_DEVICE:
32+
return UR_RESULT_ERROR_INVALID_DEVICE;
2733
case OL_ERRC_INVALID_BINARY:
2834
return UR_RESULT_ERROR_INVALID_BINARY;
2935
// Returned whenever a kernel can't be found

0 commit comments

Comments
 (0)