Skip to content

Commit 0377e42

Browse files
authored
[UR][Offload] Small test fixes for CTS (#18680)
This patch fixes a lot of small issues in order to boost the CTS pass rate. Specifically: * A number of optional entry points have been created with a stub entry point that just returns UNSUPPORTED. * Some trivial `getInfo` queries have been implemented. * Some `getInfo` queries advertise absent features as "not supported". * Trying to run `urEnqueueKernelLaunch` with dimensions greater than 1 fails gracefully. * `urPlatformGetApiVersion` returns the actual API version. * `OL_ERRC_NOT_FOUND` is mapped to `UR_RESULT_ERROR_INVALID_KERNEL_NAME`. * A conformance test has been updated to accept the Offload enum. Note that something marked unsupported here does not imply that it will never be supported; it just isn't supported in the current version.
1 parent 2b558a0 commit 0377e42

12 files changed

Lines changed: 295 additions & 32 deletions

File tree

unified-runtime/source/adapters/offload/adapter.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,19 @@ UR_APIEXPORT ur_result_t UR_APICALL urAdapterGetInfo(ur_adapter_handle_t,
101101
return ReturnValue(UR_BACKEND_OFFLOAD);
102102
case UR_ADAPTER_INFO_REFERENCE_COUNT:
103103
return ReturnValue(Adapter.RefCount.load());
104+
case UR_ADAPTER_INFO_VERSION:
105+
return ReturnValue(1);
104106
default:
105107
return UR_RESULT_ERROR_INVALID_ENUMERATION;
106108
}
107109

108110
return UR_RESULT_SUCCESS;
109111
}
112+
113+
UR_APIEXPORT ur_result_t UR_APICALL urAdapterGetLastError(ur_adapter_handle_t,
114+
const char **,
115+
int32_t *) {
116+
// This only needs to write out the error if another entry point has returned
117+
// "ADAPTER_SPECIFIC", which we never do
118+
return UR_RESULT_SUCCESS;
119+
}

unified-runtime/source/adapters/offload/context.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,28 @@ UR_APIEXPORT ur_result_t UR_APICALL urContextCreate(
2323
return UR_RESULT_SUCCESS;
2424
}
2525

26+
UR_APIEXPORT ur_result_t UR_APICALL
27+
urContextGetInfo(ur_context_handle_t hContext, ur_context_info_t propName,
28+
size_t propSize, void *pPropValue, size_t *pPropSizeRet) {
29+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
30+
31+
switch (propName) {
32+
case UR_CONTEXT_INFO_NUM_DEVICES:
33+
return ReturnValue(uint32_t{1});
34+
case UR_CONTEXT_INFO_DEVICES:
35+
return ReturnValue(&hContext->Device, 1);
36+
case UR_CONTEXT_INFO_REFERENCE_COUNT:
37+
return ReturnValue(hContext->RefCount.load());
38+
case UR_CONTEXT_INFO_USM_MEMCPY2D_SUPPORT:
39+
case UR_CONTEXT_INFO_USM_FILL2D_SUPPORT:
40+
return ReturnValue(false);
41+
default:
42+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
43+
}
44+
45+
return UR_RESULT_SUCCESS;
46+
}
47+
2648
UR_APIEXPORT ur_result_t UR_APICALL
2749
urContextRetain(ur_context_handle_t hContext) {
2850
hContext->RefCount++;
@@ -36,3 +58,20 @@ urContextRelease(ur_context_handle_t hContext) {
3658
}
3759
return UR_RESULT_SUCCESS;
3860
}
61+
62+
UR_APIEXPORT ur_result_t UR_APICALL
63+
urContextGetNativeHandle(ur_context_handle_t, ur_native_handle_t *) {
64+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
65+
}
66+
67+
UR_APIEXPORT ur_result_t UR_APICALL urContextCreateWithNativeHandle(
68+
ur_native_handle_t, ur_adapter_handle_t, uint32_t,
69+
const ur_device_handle_t *, const ur_context_native_properties_t *,
70+
ur_context_handle_t *) {
71+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
72+
}
73+
74+
UR_APIEXPORT ur_result_t UR_APICALL urContextSetExtendedDeleter(
75+
ur_context_handle_t, ur_context_extended_deleter_t, void *) {
76+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
77+
}

unified-runtime/source/adapters/offload/device.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,22 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceGetInfo(ur_device_handle_t hDevice,
7171
return ReturnValue(UR_DEVICE_USM_ACCESS_CAPABILITY_FLAG_ACCESS);
7272
case UR_DEVICE_INFO_BUILD_ON_SUBDEVICE:
7373
return ReturnValue(false);
74+
case UR_DEVICE_INFO_REFERENCE_COUNT:
75+
// Devices are never allocated or freed
76+
return ReturnValue(uint32_t{1});
77+
// Unimplemented features
78+
case UR_DEVICE_INFO_PROGRAM_SET_SPECIALIZATION_CONSTANTS:
79+
case UR_DEVICE_INFO_GLOBAL_VARIABLE_SUPPORT:
80+
case UR_DEVICE_INFO_USM_POOL_SUPPORT:
81+
case UR_DEVICE_INFO_COMMAND_BUFFER_SUPPORT_EXP:
82+
case UR_DEVICE_INFO_IMAGE_SUPPORT:
83+
case UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT:
84+
return ReturnValue(false);
85+
case UR_DEVICE_INFO_USM_CROSS_SHARED_SUPPORT:
86+
case UR_DEVICE_INFO_USM_DEVICE_SUPPORT:
87+
case UR_DEVICE_INFO_USM_HOST_SUPPORT:
88+
case UR_DEVICE_INFO_USM_SYSTEM_SHARED_SUPPORT:
89+
return ReturnValue(uint32_t{0});
7490
default:
7591
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
7692
}
@@ -151,3 +167,19 @@ UR_APIEXPORT ur_result_t UR_APICALL urDeviceSelectBinary(
151167
// No image can be loaded for the given device
152168
return UR_RESULT_ERROR_INVALID_BINARY;
153169
}
170+
171+
UR_APIEXPORT ur_result_t UR_APICALL
172+
urDeviceGetNativeHandle(ur_device_handle_t, ur_native_handle_t *) {
173+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
174+
}
175+
176+
UR_APIEXPORT ur_result_t UR_APICALL urDeviceCreateWithNativeHandle(
177+
ur_native_handle_t, ur_adapter_handle_t,
178+
const ur_device_native_properties_t *, ur_device_handle_t *) {
179+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
180+
}
181+
182+
UR_APIEXPORT ur_result_t UR_APICALL
183+
urDeviceGetGlobalTimestamps(ur_device_handle_t, uint64_t *, uint64_t *) {
184+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
185+
}

unified-runtime/source/adapters/offload/enqueue.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueKernelLaunch(
3030
(void)pGlobalWorkOffset;
3131
(void)pLocalWorkSize;
3232

33-
assert(workDim == 1);
33+
if (workDim == 1) {
34+
std::cerr
35+
<< "UR Offload adapter only supports 1d kernel launches at the moment";
36+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
37+
}
3438

3539
ol_kernel_launch_size_args_t LaunchArgs;
3640
LaunchArgs.Dimensions = workDim;
@@ -59,3 +63,15 @@ UR_APIEXPORT ur_result_t UR_APICALL urEnqueueKernelLaunch(
5963
}
6064
return UR_RESULT_SUCCESS;
6165
}
66+
67+
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMFill2D(
68+
ur_queue_handle_t, void *, size_t, size_t, const void *, size_t, size_t,
69+
uint32_t, const ur_event_handle_t *, ur_event_handle_t *) {
70+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
71+
}
72+
73+
UR_APIEXPORT ur_result_t UR_APICALL urEnqueueUSMMemcpy2D(
74+
ur_queue_handle_t, bool, void *, size_t, const void *, size_t, size_t,
75+
size_t, uint32_t, const ur_event_handle_t *, ur_event_handle_t *) {
76+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
77+
}

unified-runtime/source/adapters/offload/event.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,31 @@
1414
#include "event.hpp"
1515
#include "ur2offload.hpp"
1616

17+
UR_APIEXPORT ur_result_t UR_APICALL urEventGetInfo(ur_event_handle_t hKernel,
18+
ur_event_info_t propName,
19+
size_t propSize,
20+
void *pPropValue,
21+
size_t *pPropSizeRet) {
22+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
23+
24+
switch (propName) {
25+
case UR_EVENT_INFO_REFERENCE_COUNT:
26+
return ReturnValue(hKernel->RefCount.load());
27+
default:
28+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
29+
}
30+
31+
return UR_RESULT_SUCCESS;
32+
}
33+
34+
UR_APIEXPORT ur_result_t UR_APICALL urEventGetProfilingInfo(ur_event_handle_t,
35+
ur_profiling_info_t,
36+
size_t, void *,
37+
size_t *) {
38+
// All variants are optional
39+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
40+
}
41+
1742
UR_APIEXPORT ur_result_t UR_APICALL
1843
urEventWait(uint32_t numEvents, const ur_event_handle_t *phEventWaitList) {
1944
for (uint32_t i = 0; i < numEvents; i++) {
@@ -44,3 +69,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urEventRelease(ur_event_handle_t hEvent) {
4469
delete hEvent;
4570
return UR_RESULT_SUCCESS;
4671
}
72+
73+
UR_APIEXPORT ur_result_t UR_APICALL
74+
urEventGetNativeHandle(ur_event_handle_t, ur_native_handle_t *) {
75+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
76+
}
77+
78+
UR_APIEXPORT ur_result_t UR_APICALL urEventCreateWithNativeHandle(
79+
ur_native_handle_t, ur_context_handle_t,
80+
const ur_event_native_properties_t *, ur_event_handle_t *) {
81+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
82+
}

unified-runtime/source/adapters/offload/kernel.cpp

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,23 @@ urKernelCreate(ur_program_handle_t hProgram, const char *pKernelName,
3333
return UR_RESULT_SUCCESS;
3434
}
3535

36+
UR_APIEXPORT ur_result_t UR_APICALL urKernelGetInfo(ur_kernel_handle_t hKernel,
37+
ur_kernel_info_t propName,
38+
size_t propSize,
39+
void *pPropValue,
40+
size_t *pPropSizeRet) {
41+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
42+
43+
switch (propName) {
44+
case UR_KERNEL_INFO_REFERENCE_COUNT:
45+
return ReturnValue(hKernel->RefCount.load());
46+
default:
47+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
48+
}
49+
50+
return UR_RESULT_SUCCESS;
51+
}
52+
3653
UR_APIEXPORT ur_result_t UR_APICALL urKernelRetain(ur_kernel_handle_t hKernel) {
3754
hKernel->RefCount++;
3855
return UR_RESULT_SUCCESS;
@@ -77,3 +94,34 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelGetGroupInfo(
7794
}
7895
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
7996
}
97+
98+
UR_APIEXPORT ur_result_t UR_APICALL urKernelGetSubGroupInfo(
99+
ur_kernel_handle_t, ur_device_handle_t, ur_kernel_sub_group_info_t propName,
100+
size_t propSize, void *pPropValue, size_t *pPropSizeRet) {
101+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
102+
(void)propName;
103+
104+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
105+
}
106+
107+
UR_APIEXPORT ur_result_t UR_APICALL
108+
urKernelGetNativeHandle(ur_kernel_handle_t, ur_native_handle_t *) {
109+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
110+
}
111+
112+
UR_APIEXPORT ur_result_t UR_APICALL urKernelCreateWithNativeHandle(
113+
ur_native_handle_t, ur_context_handle_t, ur_program_handle_t,
114+
const ur_kernel_native_properties_t *, ur_kernel_handle_t *) {
115+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
116+
}
117+
118+
UR_APIEXPORT ur_result_t UR_APICALL urKernelSetSpecializationConstants(
119+
ur_kernel_handle_t, uint32_t, const ur_specialization_constant_info_t *) {
120+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
121+
}
122+
123+
UR_APIEXPORT ur_result_t UR_APICALL urKernelGetSuggestedLocalWorkSize(
124+
ur_kernel_handle_t, ur_queue_handle_t, uint32_t, const size_t *,
125+
const size_t *, size_t *) {
126+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
127+
}

unified-runtime/source/adapters/offload/platform.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ urPlatformGetInfo(ur_platform_handle_t hPlatform, ur_platform_info_t propName,
6060
return ReturnValue("FULL_PROFILE");
6161
case UR_PLATFORM_INFO_BACKEND:
6262
return ReturnValue(UR_BACKEND_OFFLOAD);
63+
case UR_PLATFORM_INFO_ADAPTER:
64+
return ReturnValue(&Adapter);
6365
break;
6466
default:
6567
return UR_RESULT_ERROR_INVALID_ENUMERATION;
@@ -96,3 +98,20 @@ urPlatformGetBackendOption(ur_platform_handle_t, const char *pFrontendOption,
9698
}
9799
return UR_RESULT_ERROR_INVALID_VALUE;
98100
}
101+
102+
UR_APIEXPORT ur_result_t UR_APICALL
103+
urPlatformGetNativeHandle(ur_platform_handle_t, ur_native_handle_t *) {
104+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
105+
}
106+
107+
UR_APIEXPORT ur_result_t UR_APICALL urPlatformCreateWithNativeHandle(
108+
ur_native_handle_t, ur_adapter_handle_t,
109+
const ur_platform_native_properties_t *, ur_platform_handle_t *) {
110+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
111+
}
112+
113+
UR_APIEXPORT ur_result_t UR_APICALL
114+
urPlatformGetApiVersion(ur_platform_handle_t, ur_api_version_t *pVersion) {
115+
*pVersion = UR_API_VERSION_CURRENT;
116+
return UR_RESULT_SUCCESS;
117+
}

unified-runtime/source/adapters/offload/program.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,21 @@ UR_APIEXPORT ur_result_t UR_APICALL urProgramBuildExp(ur_program_handle_t,
214214
return UR_RESULT_SUCCESS;
215215
}
216216

217+
UR_APIEXPORT ur_result_t UR_APICALL
218+
urProgramGetInfo(ur_program_handle_t hProgram, ur_program_info_t propName,
219+
size_t propSize, void *pPropValue, size_t *pPropSizeRet) {
220+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
221+
222+
switch (propName) {
223+
case UR_PROGRAM_INFO_REFERENCE_COUNT:
224+
return ReturnValue(hProgram->RefCount.load());
225+
default:
226+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
227+
}
228+
229+
return UR_RESULT_SUCCESS;
230+
}
231+
217232
UR_APIEXPORT ur_result_t UR_APICALL
218233
urProgramRetain(ur_program_handle_t hProgram) {
219234
hProgram->RefCount++;
@@ -232,3 +247,19 @@ urProgramRelease(ur_program_handle_t hProgram) {
232247

233248
return UR_RESULT_SUCCESS;
234249
}
250+
251+
UR_APIEXPORT ur_result_t UR_APICALL
252+
urProgramGetNativeHandle(ur_program_handle_t, ur_native_handle_t *) {
253+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
254+
}
255+
256+
UR_APIEXPORT ur_result_t UR_APICALL urProgramCreateWithNativeHandle(
257+
ur_native_handle_t, ur_context_handle_t,
258+
const ur_program_native_properties_t *, ur_program_handle_t *) {
259+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
260+
}
261+
262+
UR_APIEXPORT ur_result_t UR_APICALL urProgramSetSpecializationConstants(
263+
ur_program_handle_t, uint32_t, const ur_specialization_constant_info_t *) {
264+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
265+
}

unified-runtime/source/adapters/offload/queue.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,23 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueCreate(
3737
return UR_RESULT_SUCCESS;
3838
}
3939

40+
UR_APIEXPORT ur_result_t UR_APICALL urQueueGetInfo(ur_queue_handle_t hQueue,
41+
ur_queue_info_t propName,
42+
size_t propSize,
43+
void *pPropValue,
44+
size_t *pPropSizeRet) {
45+
UrReturnHelper ReturnValue(propSize, pPropValue, pPropSizeRet);
46+
47+
switch (propName) {
48+
case UR_QUEUE_INFO_REFERENCE_COUNT:
49+
return ReturnValue(hQueue->RefCount.load());
50+
default:
51+
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
52+
}
53+
54+
return UR_RESULT_SUCCESS;
55+
}
56+
4057
UR_APIEXPORT ur_result_t UR_APICALL urQueueRetain(ur_queue_handle_t hQueue) {
4158
hQueue->RefCount++;
4259
return UR_RESULT_SUCCESS;
@@ -57,3 +74,14 @@ UR_APIEXPORT ur_result_t UR_APICALL urQueueRelease(ur_queue_handle_t hQueue) {
5774
UR_APIEXPORT ur_result_t UR_APICALL urQueueFinish(ur_queue_handle_t hQueue) {
5875
return offloadResultToUR(olWaitQueue(hQueue->OffloadQueue));
5976
}
77+
78+
UR_APIEXPORT ur_result_t UR_APICALL urQueueGetNativeHandle(
79+
ur_queue_handle_t, ur_queue_native_desc_t *, ur_native_handle_t *) {
80+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
81+
}
82+
83+
UR_APIEXPORT ur_result_t UR_APICALL urQueueCreateWithNativeHandle(
84+
ur_native_handle_t, ur_context_handle_t, ur_device_handle_t,
85+
const ur_queue_native_properties_t *, ur_queue_handle_t *) {
86+
return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
87+
}

unified-runtime/source/adapters/offload/ur2offload.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ inline ur_result_t offloadResultToUR(ol_result_t Result) {
2323
return UR_RESULT_ERROR_INVALID_NULL_POINTER;
2424
case OL_ERRC_UNSUPPORTED:
2525
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
26+
// Returned whenever a kernel can't be found
27+
case OL_ERRC_NOT_FOUND:
28+
return UR_RESULT_ERROR_INVALID_KERNEL_NAME;
2629
default:
2730
return UR_RESULT_ERROR_UNKNOWN;
2831
}

0 commit comments

Comments
 (0)