Skip to content

Commit 66ea060

Browse files
committed
[CTS] extract queue and device creation logic
from urMultiQueueLaunchMemcpyTest to a separate fixture
1 parent 1f13d2c commit 66ea060

File tree

2 files changed

+60
-49
lines changed

2 files changed

+60
-49
lines changed

test/conformance/enqueue/helpers.h

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,50 @@ printFillTestString(const testing::TestParamInfo<typename T::ParamType> &info) {
154154
return test_name.str();
155155
}
156156

157+
struct urMultiQueueMultiDeviceTest : uur::urMultiDeviceContextTestTemplate<1> {
158+
void initQueues(std::vector<ur_device_handle_t> srcDevices,
159+
size_t numDuplicate) {
160+
for (size_t i = 0; i < numDuplicate; i++) {
161+
devices.insert(devices.end(), srcDevices.begin(), srcDevices.end());
162+
}
163+
164+
for (auto &device : devices) {
165+
ur_queue_handle_t queue = nullptr;
166+
ASSERT_SUCCESS(urQueueCreate(context, device, nullptr, &queue));
167+
queues.push_back(queue);
168+
}
169+
}
170+
171+
// Default implementation that uses all available devices
172+
void SetUp() override {
173+
UUR_RETURN_ON_FATAL_FAILURE(
174+
uur::urMultiDeviceContextTestTemplate<1>::SetUp());
175+
initQueues(uur::KernelsEnvironment::instance->devices, 1);
176+
}
177+
178+
// Specialized implementation that duplicates all devices and queues
179+
void SetUp(std::vector<ur_device_handle_t> srcDevices,
180+
size_t numDuplicate) {
181+
UUR_RETURN_ON_FATAL_FAILURE(
182+
uur::urMultiDeviceContextTestTemplate<1>::SetUp());
183+
initQueues(srcDevices, numDuplicate);
184+
}
185+
186+
void TearDown() override {
187+
for (auto &queue : queues) {
188+
EXPECT_SUCCESS(urQueueRelease(queue));
189+
}
190+
UUR_RETURN_ON_FATAL_FAILURE(
191+
uur::urMultiDeviceContextTestTemplate<1>::TearDown());
192+
}
193+
std::function<std::tuple<std::vector<ur_device_handle_t>,
194+
std::vector<ur_queue_handle_t>>(void)>
195+
makeQueues;
196+
197+
std::vector<ur_device_handle_t> devices;
198+
std::vector<ur_queue_handle_t> queues;
199+
};
200+
157201
} // namespace uur
158202

159203
#endif // UUR_ENQUEUE_RECT_HELPERS_H_INCLUDED

test/conformance/enqueue/urEnqueueKernelLaunchAndMemcpyInOrder.cpp

Lines changed: 16 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// See LICENSE.TXT
44
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55

6+
#include "helpers.h"
7+
68
#include <uur/fixtures.h>
79
#include <uur/raii.h>
810

@@ -13,27 +15,23 @@
1315
std::tuple<size_t, size_t, size_t> minL0DriverVersion = {1, 3, 29534};
1416

1517
template <typename T>
16-
struct urMultiQueueLaunchMemcpyTest : uur::urMultiDeviceContextTestTemplate<1>,
18+
struct urMultiQueueLaunchMemcpyTest : uur::urMultiQueueMultiDeviceTest,
1719
testing::WithParamInterface<T> {
1820
std::string KernelName;
1921
std::vector<ur_program_handle_t> programs;
2022
std::vector<ur_kernel_handle_t> kernels;
2123
std::vector<void *> SharedMem;
2224

23-
std::vector<ur_queue_handle_t> queues;
24-
std::vector<ur_device_handle_t> devices;
25-
26-
std::function<void(void)> createQueues;
27-
2825
static constexpr char ProgramName[] = "increment";
2926
static constexpr size_t ArraySize = 100;
3027
static constexpr size_t InitialValue = 1;
3128

32-
void SetUp() override {
33-
UUR_RETURN_ON_FATAL_FAILURE(
34-
uur::urMultiDeviceContextTestTemplate<1>::SetUp());
29+
void SetUp() override { throw std::runtime_error("Not implemented"); }
3530

36-
createQueues();
31+
void SetUp(std::vector<ur_device_handle_t> srcDevices,
32+
size_t duplicateDevices) {
33+
UUR_RETURN_ON_FATAL_FAILURE(uur::urMultiQueueMultiDeviceTest::SetUp(
34+
srcDevices, duplicateDevices));
3735

3836
for (auto &device : devices) {
3937
SKIP_IF_DRIVER_TOO_OLD("Level-Zero", minL0DriverVersion, platform,
@@ -87,9 +85,6 @@ struct urMultiQueueLaunchMemcpyTest : uur::urMultiDeviceContextTestTemplate<1>,
8785
for (auto &Ptr : SharedMem) {
8886
urUSMFree(context, Ptr);
8987
}
90-
for (const auto &queue : queues) {
91-
EXPECT_SUCCESS(urQueueRelease(queue));
92-
}
9388
for (const auto &kernel : kernels) {
9489
urKernelRelease(kernel);
9590
}
@@ -136,23 +131,8 @@ struct urEnqueueKernelLaunchIncrementMultiDeviceTestWithParam
136131
using urMultiQueueLaunchMemcpyTest<Param>::SharedMem;
137132

138133
void SetUp() override {
139-
this->createQueues = [&] {
140-
for (size_t i = 0; i < duplicateDevices; i++) {
141-
devices.insert(
142-
devices.end(),
143-
uur::KernelsEnvironment::instance->devices.begin(),
144-
uur::KernelsEnvironment::instance->devices.end());
145-
}
146-
147-
for (auto &device : devices) {
148-
ur_queue_handle_t queue = nullptr;
149-
ASSERT_SUCCESS(urQueueCreate(context, device, 0, &queue));
150-
queues.push_back(queue);
151-
}
152-
};
153-
154-
UUR_RETURN_ON_FATAL_FAILURE(
155-
urMultiQueueLaunchMemcpyTest<Param>::SetUp());
134+
UUR_RETURN_ON_FATAL_FAILURE(urMultiQueueLaunchMemcpyTest<Param>::SetUp(
135+
uur::KernelsEnvironment::instance->devices, duplicateDevices));
156136
}
157137

158138
void TearDown() override {
@@ -166,8 +146,6 @@ struct urEnqueueKernelLaunchIncrementTest
166146
std::tuple<ur_device_handle_t, uur::BoolTestParam>> {
167147
static constexpr size_t numOps = 50;
168148

169-
ur_queue_handle_t queue;
170-
171149
using Param = std::tuple<ur_device_handle_t, uur::BoolTestParam>;
172150
using urMultiQueueLaunchMemcpyTest<Param>::context;
173151
using urMultiQueueLaunchMemcpyTest<Param>::queues;
@@ -176,26 +154,12 @@ struct urEnqueueKernelLaunchIncrementTest
176154
using urMultiQueueLaunchMemcpyTest<Param>::SharedMem;
177155

178156
void SetUp() override {
179-
auto device = std::get<0>(GetParam());
180-
181-
this->createQueues = [&] {
182-
ASSERT_SUCCESS(urQueueCreate(context, device, 0, &queue));
183-
184-
// use the same queue and device for all operations
185-
for (size_t i = 0; i < numOps; i++) {
186-
urQueueRetain(queue);
187-
188-
queues.push_back(queue);
189-
devices.push_back(device);
190-
}
191-
};
192-
193-
UUR_RETURN_ON_FATAL_FAILURE(
194-
urMultiQueueLaunchMemcpyTest<Param>::SetUp());
157+
UUR_RETURN_ON_FATAL_FAILURE(urMultiQueueLaunchMemcpyTest<Param>::SetUp(
158+
std::vector<ur_device_handle_t>{std::get<0>(GetParam())},
159+
numOps)); // Use single device, duplicated numOps times
195160
}
196161

197162
void TearDown() override {
198-
urQueueRelease(queue);
199163
UUR_RETURN_ON_FATAL_FAILURE(
200164
urMultiQueueLaunchMemcpyTest<Param>::TearDown());
201165
}
@@ -219,6 +183,9 @@ TEST_P(urEnqueueKernelLaunchIncrementTest, Success) {
219183
ur_event_handle_t *kernelEvent = nullptr;
220184
ur_event_handle_t *memcpyEvent = nullptr;
221185

186+
// This is a single device test
187+
auto queue = queues[0];
188+
222189
for (size_t i = 0; i < numOps; i++) {
223190
if (useEvents) {
224191
lastMemcpyEvent = memcpyEvent;

0 commit comments

Comments
 (0)