Skip to content

Commit 6927aef

Browse files
authored
[UR][Offload] Implement (most) kernel info queries (#19806)
Almost all of the required kernel info queries have been implemented. The only exception is `NUM_ARGS`, which isn't reported by liboffload, CUDA or HSA (the UR plugins return the *current* number of arguments, not the total). This test has been marked as a known failure and tests that use it as a placeholder value have been changed to use NAME.
1 parent 053fe90 commit 6927aef

File tree

3 files changed

+31
-12
lines changed

3 files changed

+31
-12
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ urKernelCreate(ur_program_handle_t hProgram, const char *pKernelName,
2929
return offloadResultToUR(Res);
3030
}
3131

32+
Kernel->Name = pKernelName;
33+
Kernel->Program = hProgram;
34+
3235
*phKernel = Kernel;
3336

3437
return UR_RESULT_SUCCESS;
@@ -44,6 +47,17 @@ UR_APIEXPORT ur_result_t UR_APICALL urKernelGetInfo(ur_kernel_handle_t hKernel,
4447
switch (propName) {
4548
case UR_KERNEL_INFO_REFERENCE_COUNT:
4649
return ReturnValue(hKernel->RefCount.load());
50+
case UR_KERNEL_INFO_FUNCTION_NAME:
51+
return ReturnValue(hKernel->Name.c_str());
52+
case UR_KERNEL_INFO_PROGRAM:
53+
return ReturnValue(hKernel->Program);
54+
case UR_KERNEL_INFO_CONTEXT:
55+
return ReturnValue(hKernel->Program->URContext);
56+
case UR_KERNEL_INFO_ATTRIBUTES:
57+
return ReturnValue("");
58+
case UR_KERNEL_INFO_NUM_ARGS:
59+
// This is unimplementable on liboffload (and AMD/Nvidia in general)
60+
[[fallthrough]];
4761
default:
4862
return UR_RESULT_ERROR_UNSUPPORTED_ENUMERATION;
4963
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,7 @@ struct ur_kernel_handle_t_ : RefCounted {
7878
};
7979

8080
ol_symbol_handle_t OffloadKernel;
81+
ur_program_handle_t Program;
8182
OffloadKernelArguments Args{};
83+
std::string Name;
8284
};

unified-runtime/test/conformance/kernel/urKernelGetInfo.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ TEST_P(urKernelGetInfoTest, SuccessFunctionName) {
2828
}
2929

3030
TEST_P(urKernelGetInfoTest, SuccessNumArgs) {
31+
// Not implementable on liboffload
32+
UUR_KNOWN_FAILURE_ON(uur::Offload{});
33+
3134
const ur_kernel_info_t property_name = UR_KERNEL_INFO_NUM_ARGS;
3235
size_t property_size = 0;
3336

@@ -245,40 +248,40 @@ TEST_P(urKernelGetInfoTest, InvalidEnumeration) {
245248

246249
TEST_P(urKernelGetInfoTest, InvalidSizeZero) {
247250
size_t property_size = 0;
248-
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS, 0, nullptr,
249-
&property_size));
251+
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME, 0,
252+
nullptr, &property_size));
250253

251254
std::vector<char> property_value(property_size);
252-
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS, 0,
255+
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME, 0,
253256
property_value.data(), nullptr),
254257
UR_RESULT_ERROR_INVALID_SIZE);
255258
}
256259

257260
TEST_P(urKernelGetInfoTest, InvalidSizeSmall) {
258261
size_t property_size = 0;
259-
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS, 0, nullptr,
260-
&property_size));
262+
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME, 0,
263+
nullptr, &property_size));
261264

262265
std::vector<char> property_value(property_size);
263-
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS,
266+
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME,
264267
property_value.size() - 1,
265268
property_value.data(), nullptr),
266269
UR_RESULT_ERROR_INVALID_SIZE);
267270
}
268271

269272
TEST_P(urKernelGetInfoTest, InvalidNullPointerPropValue) {
270273
size_t property_size = 0;
271-
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS, 0, nullptr,
272-
&property_size));
273-
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS,
274+
ASSERT_SUCCESS(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME, 0,
275+
nullptr, &property_size));
276+
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME,
274277
property_size, nullptr, nullptr),
275278
UR_RESULT_ERROR_INVALID_NULL_POINTER);
276279
}
277280

278281
TEST_P(urKernelGetInfoTest, InvalidNullPointerPropSizeRet) {
279-
ASSERT_EQ_RESULT(
280-
urKernelGetInfo(kernel, UR_KERNEL_INFO_NUM_ARGS, 0, nullptr, nullptr),
281-
UR_RESULT_ERROR_INVALID_NULL_POINTER);
282+
ASSERT_EQ_RESULT(urKernelGetInfo(kernel, UR_KERNEL_INFO_FUNCTION_NAME, 0,
283+
nullptr, nullptr),
284+
UR_RESULT_ERROR_INVALID_NULL_POINTER);
282285
}
283286

284287
TEST_P(urKernelGetInfoTest, KernelNameCorrect) {

0 commit comments

Comments
 (0)