Skip to content

Commit 8496d3b

Browse files
RossBruntonkbenzie
authored andcommitted
Improve testing for gfx1100 on OpenCL (#17747)
The driver I have at least has a number of issues, the largest of which is that it lacks an IR compiler. This updates tests so that they are skipped if required.
1 parent 0768122 commit 8496d3b

17 files changed

+104
-57
lines changed

test/conformance/context/urContextSetExtendedDeleter.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ UUR_INSTANTIATE_DEVICE_TEST_SUITE(urContextSetExtendedDeleterTest);
1414

1515
TEST_P(urContextSetExtendedDeleterTest, Success) {
1616
UUR_KNOWN_FAILURE_ON(uur::LevelZero{}, uur::LevelZeroV2{}, uur::NativeCPU{});
17+
// Segfault
18+
UUR_KNOWN_FAILURE_ON(uur::OpenCL{"gfx1100"});
1719

1820
bool called = false;
1921
{

test/conformance/enqueue/urEnqueueEventsWaitMultiDevice.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ void checkDevicesSupportSharedUSM(
2020
uur::GetDeviceUSMSingleSharedSupport(device, shared_usm_single));
2121
if (!shared_usm_single) {
2222
GTEST_SKIP() << "Shared USM is not supported by the device.";
23+
return;
2324
}
2425
}
2526
}
@@ -31,7 +32,7 @@ struct urEnqueueEventsWaitMultiDeviceTest
3132

3233
UUR_RETURN_ON_FATAL_FAILURE(uur::urMultiQueueMultiDeviceTest<2>::SetUp());
3334

34-
checkDevicesSupportSharedUSM(devices);
35+
UUR_RETURN_ON_FATAL_FAILURE(checkDevicesSupportSharedUSM(devices));
3536

3637
ptrs.resize(devices.size());
3738
for (size_t i = 0; i < devices.size(); i++) {
@@ -129,7 +130,7 @@ struct urEnqueueEventsWaitMultiDeviceMTTest
129130
UUR_RETURN_ON_FATAL_FAILURE(
130131
uur::urMultiQueueMultiDeviceTestWithParam<8,
131132
uur::BoolTestParam>::SetUp());
132-
checkDevicesSupportSharedUSM(devices);
133+
UUR_RETURN_ON_FATAL_FAILURE(checkDevicesSupportSharedUSM(devices));
133134

134135
ptrs.resize(devices.size());
135136
for (size_t i = 0; i < devices.size(); i++) {

test/conformance/enqueue/urEnqueueKernelLaunch.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -529,8 +529,9 @@ struct urEnqueueKernelLaunchMultiDeviceTest
529529

530530
uur::KernelsEnvironment::instance->LoadSource("foo", platform, il_binary);
531531

532-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
533-
platform, context, devices[0], *il_binary, nullptr, &program));
532+
UUR_RETURN_ON_FATAL_FAILURE(
533+
uur::KernelsEnvironment::instance->CreateProgram(
534+
platform, context, devices[0], *il_binary, nullptr, &program));
534535

535536
ASSERT_SUCCESS(urProgramBuild(context, program, nullptr));
536537
ASSERT_SUCCESS(urKernelCreate(program, kernelName.data(), &kernel));

test/conformance/enqueue/urEnqueueKernelLaunchAndMemcpyInOrder.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,10 @@ struct urMultiQueueLaunchMemcpyTest
6565
metadatas.empty() ? nullptr : metadatas.data()};
6666

6767
uur::raii::Program program;
68-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
69-
platform, context, devices[i], *il_binary, &properties,
70-
&programs[i]));
68+
UUR_RETURN_ON_FATAL_FAILURE(
69+
uur::KernelsEnvironment::instance->CreateProgram(
70+
platform, context, devices[i], *il_binary, &properties,
71+
&programs[i]));
7172

7273
UUR_ASSERT_SUCCESS_OR_UNSUPPORTED(
7374
urProgramBuild(context, programs[i], nullptr));

test/conformance/exp_command_buffer/fixtures.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,9 @@ struct TestKernel {
246246
UR_STRUCTURE_TYPE_PROGRAM_PROPERTIES, nullptr,
247247
static_cast<uint32_t>(Metadatas.size()),
248248
Metadatas.empty() ? nullptr : Metadatas.data()};
249-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
250-
Platform, Context, Device, *ILBinary, &Properties, &Program));
249+
UUR_RETURN_ON_FATAL_FAILURE(
250+
uur::KernelsEnvironment::instance->CreateProgram(
251+
Platform, Context, Device, *ILBinary, &Properties, &Program));
251252

252253
auto KernelNames =
253254
uur::KernelsEnvironment::instance->GetEntryPointNames(Name);

test/conformance/kernel/urKernelCreate.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ TEST_P(urMultiDeviceKernelCreateTest, WithProgramBuild) {
7474

7575
const ur_program_properties_t properties = {
7676
UR_STRUCTURE_TYPE_PROGRAM_PROPERTIES, nullptr, 0, nullptr};
77-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
78-
platform, context, devices[i], *il_binary, &properties, program.ptr()));
77+
UUR_RETURN_ON_FATAL_FAILURE(
78+
uur::KernelsEnvironment::instance->CreateProgram(
79+
platform, context, devices[i], *il_binary, &properties,
80+
program.ptr()));
7981

8082
ASSERT_SUCCESS(urProgramBuild(context, program.get(), nullptr));
8183
ASSERT_SUCCESS(
@@ -107,8 +109,10 @@ TEST_P(urMultiDeviceKernelCreateTest, WithProgramCompileAndLink) {
107109

108110
const ur_program_properties_t properties = {
109111
UR_STRUCTURE_TYPE_PROGRAM_PROPERTIES, nullptr, 0, nullptr};
110-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
111-
platform, context, devices[i], *il_binary, &properties, program.ptr()));
112+
UUR_RETURN_ON_FATAL_FAILURE(
113+
uur::KernelsEnvironment::instance->CreateProgram(
114+
platform, context, devices[i], *il_binary, &properties,
115+
program.ptr()));
112116

113117
ASSERT_SUCCESS(urProgramCompile(context, program.get(), nullptr));
114118

test/conformance/memory-migrate/urMemBufferMigrateAcrossDevices.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,10 @@ struct urMultiDeviceContextMemBufferTest : urMultiDeviceContextTest {
7171
static_cast<uint32_t>(metadatas.size()),
7272
metadatas.empty() ? nullptr : metadatas.data()};
7373
for (auto i = 0u; i < num_devices; ++i) {
74-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
75-
platform, context, devices[i], *il_binary, &properties,
76-
&programs[i]));
74+
UUR_RETURN_ON_FATAL_FAILURE(
75+
uur::KernelsEnvironment::instance->CreateProgram(
76+
platform, context, devices[i], *il_binary, &properties,
77+
&programs[i]));
7778
ASSERT_SUCCESS(urProgramBuild(context, programs[i], nullptr));
7879
auto kernel_names =
7980
uur::KernelsEnvironment::instance->GetEntryPointNames(program_name);

test/conformance/memory/urMemBufferPartition.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ TEST_P(urMemBufferPartitionTest, InvalidBufferSize) {
100100

101101
TEST_P(urMemBufferPartitionTest, InvalidValueCreateType) {
102102
UUR_KNOWN_FAILURE_ON(uur::LevelZero{}, uur::NativeCPU{});
103+
// Seems to report "success"
104+
UUR_KNOWN_FAILURE_ON(uur::OpenCL{"gfx1100"});
103105

104106
// create a read only buffer
105107
uur::raii::Mem ro_buffer = nullptr;

test/conformance/memory/urMemImageCreateWithImageFormatParam.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ TEST_P(urMemImageCreateTestWithImageFormatParam, Success) {
100100
UUR_KNOWN_FAILURE_ON(uur::NativeCPU{});
101101
// See https://github.com/oneapi-src/unified-runtime/issues/2638
102102
UUR_KNOWN_FAILURE_ON(uur::OpenCL{"Intel(R) UHD Graphics 770"});
103+
// Reports INVALID_IMAGE_FORMAT_DESCRIPTOR rather than
104+
// UNSUPPORTED_IMAGE_FORMAT
105+
UUR_KNOWN_FAILURE_ON(uur::OpenCL{"gfx1100"});
103106

104107
ur_image_channel_order_t channel_order = std::get<1>(GetParam()).channelOrder;
105108
ur_image_channel_type_t channel_type = std::get<1>(GetParam()).channelType;

test/conformance/program/urProgramCreateWithIL.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,17 @@ struct urProgramCreateWithILTest : uur::urContextTest {
3434
UUR_INSTANTIATE_DEVICE_TEST_SUITE(urProgramCreateWithILTest);
3535

3636
TEST_P(urProgramCreateWithILTest, Success) {
37-
UUR_KNOWN_FAILURE_ON(uur::CUDA{});
37+
UUR_KNOWN_FAILURE_ON(uur::CUDA{}, uur::OpenCL{"gfx1100"});
3838

3939
ur_program_handle_t program = nullptr;
40-
ASSERT_SUCCESS(urProgramCreateWithIL(context, il_binary->data(),
41-
il_binary->size(), nullptr, &program));
40+
UUR_ASSERT_SUCCESS_OR_UNSUPPORTED(urProgramCreateWithIL(
41+
context, il_binary->data(), il_binary->size(), nullptr, &program));
4242
ASSERT_NE(nullptr, program);
4343
ASSERT_SUCCESS(urProgramRelease(program));
4444
}
4545

4646
TEST_P(urProgramCreateWithILTest, SuccessWithProperties) {
47-
UUR_KNOWN_FAILURE_ON(uur::CUDA{});
47+
UUR_KNOWN_FAILURE_ON(uur::CUDA{}, uur::OpenCL{"gfx1100"});
4848

4949
std::string string = "test metadata";
5050
ur_program_metadata_value_t md_value_string;
@@ -80,7 +80,7 @@ TEST_P(urProgramCreateWithILTest, SuccessWithProperties) {
8080
static_cast<uint32_t>(metadatas.size()), metadatas.data()};
8181

8282
ur_program_handle_t program = nullptr;
83-
ASSERT_SUCCESS(urProgramCreateWithIL(
83+
UUR_ASSERT_SUCCESS_OR_UNSUPPORTED(urProgramCreateWithIL(
8484
context, il_binary->data(), il_binary->size(), &properties, &program));
8585
ASSERT_NE(nullptr, program);
8686
ASSERT_SUCCESS(urProgramRelease(program));
@@ -140,7 +140,8 @@ TEST_P(urProgramCreateWithILTest, InvalidBinary) {
140140
auto result = urProgramCreateWithIL(context, &binary, 5, nullptr, &program);
141141
// The driver is not required to reject the binary
142142
ASSERT_TRUE(result == UR_RESULT_ERROR_INVALID_BINARY ||
143-
result == UR_RESULT_SUCCESS);
143+
result == UR_RESULT_SUCCESS ||
144+
result == UR_RESULT_ERROR_COMPILER_NOT_AVAILABLE);
144145
}
145146

146147
TEST_P(urProgramCreateWithILTest, CompilerNotAvailable) {

test/conformance/program/urProgramLink.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,9 @@ struct urProgramLinkErrorTest : uur::urQueueTest {
103103
std::shared_ptr<std::vector<char>> il_binary{};
104104
UUR_RETURN_ON_FATAL_FAILURE(uur::KernelsEnvironment::instance->LoadSource(
105105
linker_error_program_name, platform, il_binary));
106-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
107-
platform, context, device, *il_binary, nullptr, &program));
106+
UUR_RETURN_ON_FATAL_FAILURE(
107+
uur::KernelsEnvironment::instance->CreateProgram(
108+
platform, context, device, *il_binary, nullptr, &program));
108109
ASSERT_SUCCESS(urProgramCompile(context, program, nullptr));
109110
}
110111

test/conformance/sampler/urSamplerCreate.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,13 @@ TEST_P(urSamplerCreateTestWithParam, Success) {
6363
const auto addr_mode = std::get<1>(param);
6464
const auto filter_mode = std::get<2>(param);
6565

66+
if (normalized == false &&
67+
(addr_mode == UR_SAMPLER_ADDRESSING_MODE_REPEAT ||
68+
addr_mode == UR_SAMPLER_ADDRESSING_MODE_MIRRORED_REPEAT)) {
69+
// Invalid value
70+
UUR_KNOWN_FAILURE_ON(uur::OpenCL{"gfx1100"});
71+
}
72+
6673
ur_sampler_desc_t sampler_desc{
6774
UR_STRUCTURE_TYPE_SAMPLER_DESC, /* stype */
6875
nullptr, /* pNext */

test/conformance/source/environment.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "ur_api.h"
1313
#include "ur_filesystem_resolved.hpp"
1414
#include "uur/checks.h"
15+
#include "uur/known_failure.h"
1516

1617
#ifdef KERNELS_ENVIRONMENT
1718
#include "kernel_entry_points.h"
@@ -279,34 +280,32 @@ void KernelsEnvironment::LoadSource(
279280
binary_out = std::move(binary_ptr);
280281
}
281282

282-
ur_result_t KernelsEnvironment::CreateProgram(
283+
void KernelsEnvironment::CreateProgram(
283284
ur_platform_handle_t hPlatform, ur_context_handle_t hContext,
284285
ur_device_handle_t hDevice, const std::vector<char> &binary,
285286
const ur_program_properties_t *properties, ur_program_handle_t *phProgram) {
287+
// Seems to not support an IR compiler
288+
std::tuple<ur_platform_handle_t, ur_device_handle_t> tuple{hPlatform,
289+
hDevice};
290+
UUR_KNOWN_FAILURE_ON_PARAM(tuple, uur::OpenCL{"gfx1100"});
291+
286292
ur_platform_backend_t backend;
287-
if (auto error =
288-
urPlatformGetInfo(hPlatform, UR_PLATFORM_INFO_BACKEND,
289-
sizeof(ur_platform_backend_t), &backend, nullptr)) {
290-
return error;
291-
}
293+
ASSERT_SUCCESS(urPlatformGetInfo(hPlatform, UR_PLATFORM_INFO_BACKEND,
294+
sizeof(ur_platform_backend_t), &backend,
295+
nullptr));
292296
if (backend == UR_PLATFORM_BACKEND_HIP ||
293297
backend == UR_PLATFORM_BACKEND_CUDA) {
294298
// The CUDA and HIP adapters do not support urProgramCreateWithIL so we
295299
// need to use urProgramCreateWithBinary instead.
296300
auto size = binary.size();
297301
auto data = binary.data();
298-
if (auto error = urProgramCreateWithBinary(
299-
hContext, 1, &hDevice, &size,
300-
reinterpret_cast<const uint8_t **>(&data), properties, phProgram)) {
301-
return error;
302-
}
302+
ASSERT_SUCCESS(urProgramCreateWithBinary(
303+
hContext, 1, &hDevice, &size, reinterpret_cast<const uint8_t **>(&data),
304+
properties, phProgram));
303305
} else {
304-
if (auto error = urProgramCreateWithIL(
305-
hContext, binary.data(), binary.size(), properties, phProgram)) {
306-
return error;
307-
}
306+
ASSERT_SUCCESS(urProgramCreateWithIL(hContext, binary.data(), binary.size(),
307+
properties, phProgram));
308308
}
309-
return UR_RESULT_SUCCESS;
310309
}
311310

312311
std::vector<std::string> KernelsEnvironment::GetEntryPointNames(

test/conformance/testing/include/uur/checks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ inline std::ostream &operator<<(std::ostream &out, const Result &result) {
3232

3333
#define UUR_RETURN_ON_FATAL_FAILURE(...) \
3434
__VA_ARGS__; \
35-
if (this->HasFatalFailure() || this->IsSkipped()) { \
35+
if (::testing::Test::HasFatalFailure() || ::testing::Test::IsSkipped()) { \
3636
return; \
3737
} \
3838
(void)0

test/conformance/testing/include/uur/environment.h

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,11 @@ struct KernelsEnvironment : DevicesEnvironment {
7171
void LoadSource(const std::string &kernel_name, ur_platform_handle_t platform,
7272
std::shared_ptr<std::vector<char>> &binary_out);
7373

74-
ur_result_t CreateProgram(ur_platform_handle_t hPlatform,
75-
ur_context_handle_t hContext,
76-
ur_device_handle_t hDevice,
77-
const std::vector<char> &binary,
78-
const ur_program_properties_t *properties,
79-
ur_program_handle_t *phProgram);
74+
void CreateProgram(ur_platform_handle_t hPlatform,
75+
ur_context_handle_t hContext, ur_device_handle_t hDevice,
76+
const std::vector<char> &binary,
77+
const ur_program_properties_t *properties,
78+
ur_program_handle_t *phProgram);
8079

8180
std::vector<std::string> GetEntryPointNames(std::string program);
8281

test/conformance/testing/include/uur/fixtures.h

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -396,8 +396,9 @@ struct urHostPipeTest : urQueueTest {
396396

397397
UUR_RETURN_ON_FATAL_FAILURE(uur::KernelsEnvironment::instance->LoadSource(
398398
"foo", platform, il_binary));
399-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
400-
platform, context, device, *il_binary, nullptr, &program));
399+
UUR_RETURN_ON_FATAL_FAILURE(
400+
uur::KernelsEnvironment::instance->CreateProgram(
401+
platform, context, device, *il_binary, nullptr, &program));
401402
}
402403

403404
void TearDown() override {
@@ -1233,8 +1234,9 @@ struct urProgramTest : urQueueTest {
12331234
UR_STRUCTURE_TYPE_PROGRAM_PROPERTIES, nullptr,
12341235
static_cast<uint32_t>(metadatas.size()),
12351236
metadatas.empty() ? nullptr : metadatas.data()};
1236-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
1237-
platform, context, device, *il_binary, &properties, &program));
1237+
UUR_RETURN_ON_FATAL_FAILURE(
1238+
uur::KernelsEnvironment::instance->CreateProgram(
1239+
platform, context, device, *il_binary, &properties, &program));
12381240
}
12391241

12401242
void TearDown() override {
@@ -1273,9 +1275,10 @@ template <class T> struct urProgramTestWithParam : urQueueTestWithParam<T> {
12731275
static_cast<uint32_t>(metadatas.size()),
12741276
metadatas.empty() ? nullptr : metadatas.data()};
12751277

1276-
ASSERT_SUCCESS(uur::KernelsEnvironment::instance->CreateProgram(
1277-
this->platform, this->context, this->device, *il_binary, &properties,
1278-
&program));
1278+
UUR_RETURN_ON_FATAL_FAILURE(
1279+
uur::KernelsEnvironment::instance->CreateProgram(
1280+
this->platform, this->context, this->device, *il_binary,
1281+
&properties, &program));
12791282
}
12801283

12811284
void TearDown() override {

test/conformance/testing/include/uur/known_failure.h

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,24 @@ inline bool isKnownFailureOn(const DeviceTuple &param,
140140
return false;
141141
}
142142

143+
inline bool
144+
isKnownFailureOn(std::tuple<ur_platform_handle_t, ur_device_handle_t> param,
145+
const std::vector<Matcher> &matchers) {
146+
ur_adapter_handle_t adapter = nullptr;
147+
uur::GetPlatformInfo<ur_adapter_handle_t>(std::get<0>(param),
148+
UR_PLATFORM_INFO_ADAPTER, adapter);
149+
auto adapterInfo = detail::getAdapterInfo(adapter);
150+
std::string name;
151+
uur::GetDeviceInfo<std::string>(std::get<1>(param), UR_DEVICE_INFO_NAME,
152+
name);
153+
for (const auto &matcher : matchers) {
154+
if (matcher.matches(adapterInfo, name)) {
155+
return true;
156+
}
157+
}
158+
return false;
159+
}
160+
143161
template <class Param>
144162
inline bool isKnownFailureOn(const std::tuple<DeviceTuple, Param> &param,
145163
const std::vector<Matcher> &matchers) {
@@ -197,9 +215,9 @@ inline bool alsoRunKnownFailures() {
197215
}
198216
} // namespace uur
199217

200-
#define UUR_KNOWN_FAILURE_ON(...) \
201-
if (uur::isKnownFailureOn(this->GetParam(), {__VA_ARGS__})) { \
202-
auto message = uur::knownFailureMessage(this->GetParam()); \
218+
#define UUR_KNOWN_FAILURE_ON_PARAM(param, ...) \
219+
if (uur::isKnownFailureOn(param, {__VA_ARGS__})) { \
220+
auto message = uur::knownFailureMessage(param); \
203221
if (uur::alsoRunKnownFailures()) { \
204222
std::cerr << message << "\n"; \
205223
} else { \
@@ -208,4 +226,7 @@ inline bool alsoRunKnownFailures() {
208226
} \
209227
(void)0
210228

229+
#define UUR_KNOWN_FAILURE_ON(...) \
230+
UUR_KNOWN_FAILURE_ON_PARAM(this->GetParam(), __VA_ARGS__)
231+
211232
#endif // UR_CONFORMANCE_INCLUDE_KNOWN_FAILURE_H_INCLUDED

0 commit comments

Comments
 (0)