Skip to content

Commit 55fd99b

Browse files
committed
[SYCL][UR][CTS] Add urEventWait test for multiple contexts
1 parent 74a6281 commit 55fd99b

File tree

1 file changed

+85
-27
lines changed

1 file changed

+85
-27
lines changed

unified-runtime/test/conformance/event/urEventWait.cpp

Lines changed: 85 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,56 +7,78 @@
77
#include <uur/fixtures.h>
88
#include <uur/known_failure.h>
99

10-
struct urEventWaitTest : uur::urQueueTest {
10+
struct urEventWaitTest : uur::urDeviceTest {
1111
void SetUp() override {
12-
UUR_RETURN_ON_FATAL_FAILURE(urQueueTest::SetUp());
13-
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_READ_ONLY, size,
14-
nullptr, &src_buffer));
15-
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_WRITE_ONLY, size,
16-
nullptr, &dst_buffer));
17-
input.assign(count, 42);
18-
ASSERT_SUCCESS(urEnqueueMemBufferWrite(queue, src_buffer, false, 0, size,
19-
input.data(), 0, nullptr, &event));
20-
ASSERT_SUCCESS(urEventWait(1, &event));
12+
UUR_RETURN_ON_FATAL_FAILURE(urDeviceTest::SetUp());
13+
14+
for (size_t i = 0; i < maxNumContexts; ++i) {
15+
ur_context_handle_t context = nullptr;
16+
ASSERT_SUCCESS(urContextCreate(1, &device, nullptr, &context));
17+
ASSERT_NE(context, nullptr);
18+
contexts.push_back(context);
19+
20+
ur_queue_handle_t queue = nullptr;
21+
ASSERT_SUCCESS(urQueueCreate(context, device, 0, &queue));
22+
ASSERT_NE(queue, nullptr);
23+
queues.push_back(queue);
24+
25+
src_buffer.emplace_back();
26+
dst_buffer.emplace_back();
27+
28+
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_READ_WRITE, size,
29+
nullptr, &src_buffer[i]));
30+
ASSERT_SUCCESS(urMemBufferCreate(context, UR_MEM_FLAG_READ_WRITE, size,
31+
nullptr, &dst_buffer[i]));
32+
input.emplace_back();
33+
input[i].assign(count, uint32_t(99 + i));
34+
ASSERT_SUCCESS(urEnqueueMemBufferWrite(queue, src_buffer[i], true, 0,
35+
size, input[i].data(), 0, nullptr,
36+
nullptr));
37+
}
2138
}
2239

2340
void TearDown() override {
24-
if (src_buffer) {
25-
EXPECT_SUCCESS(urMemRelease(src_buffer));
41+
for (size_t i = 0; i < src_buffer.size(); ++i) {
42+
EXPECT_SUCCESS(urMemRelease(src_buffer[i]));
43+
EXPECT_SUCCESS(urMemRelease(dst_buffer[i]));
2644
}
27-
if (dst_buffer) {
28-
EXPECT_SUCCESS(urMemRelease(dst_buffer));
45+
for (size_t i = 0; i < queues.size(); ++i) {
46+
EXPECT_SUCCESS(urQueueRelease(queues[i]));
2947
}
30-
if (event) {
31-
EXPECT_SUCCESS(urEventRelease(event));
48+
for (size_t i = 0; i < contexts.size(); ++i) {
49+
EXPECT_SUCCESS(urContextRelease(contexts[i]));
3250
}
33-
urQueueTest::TearDown();
51+
UUR_RETURN_ON_FATAL_FAILURE(urDeviceTest::TearDown());
3452
}
3553

54+
const size_t maxNumContexts = 5;
55+
std::vector<ur_context_handle_t> contexts;
56+
std::vector<ur_queue_handle_t> queues;
57+
std::vector<ur_mem_handle_t> src_buffer;
58+
std::vector<ur_mem_handle_t> dst_buffer;
3659
const size_t count = 1024;
3760
const size_t size = sizeof(uint32_t) * count;
38-
ur_mem_handle_t src_buffer = nullptr;
39-
ur_mem_handle_t dst_buffer = nullptr;
40-
ur_event_handle_t event = nullptr;
41-
std::vector<uint32_t> input;
61+
std::vector<std::vector<uint32_t>> input;
4262
};
63+
4364
UUR_INSTANTIATE_DEVICE_TEST_SUITE(urEventWaitTest);
4465

4566
TEST_P(urEventWaitTest, Success) {
4667
UUR_KNOWN_FAILURE_ON(uur::NativeCPU{});
4768

4869
ur_event_handle_t event1 = nullptr;
49-
ASSERT_SUCCESS(urEnqueueMemBufferCopy(queue, src_buffer, dst_buffer, 0, 0,
50-
size, 0, nullptr, &event1));
70+
ASSERT_SUCCESS(urEnqueueMemBufferCopy(queues[0], src_buffer[0], dst_buffer[0],
71+
0, 0, size, 0, nullptr, &event1));
5172
std::vector<uint32_t> output(count, 1);
5273
ur_event_handle_t event2 = nullptr;
53-
ASSERT_SUCCESS(urEnqueueMemBufferRead(queue, dst_buffer, false, 0, size,
54-
output.data(), 0, nullptr, &event2));
74+
ASSERT_SUCCESS(urEnqueueMemBufferRead(queues[0], dst_buffer[0], false, 0,
75+
size, output.data(), 0, nullptr,
76+
&event2));
5577
std::vector<ur_event_handle_t> events{event1, event2};
56-
EXPECT_SUCCESS(urQueueFlush(queue));
78+
EXPECT_SUCCESS(urQueueFlush(queues[0]));
5779
ASSERT_SUCCESS(
5880
urEventWait(static_cast<uint32_t>(events.size()), events.data()));
59-
ASSERT_EQ(input, output);
81+
ASSERT_EQ(input[0], output);
6082

6183
EXPECT_SUCCESS(urEventRelease(event1));
6284
EXPECT_SUCCESS(urEventRelease(event2));
@@ -75,3 +97,39 @@ TEST_P(urEventWaitNegativeTest, InvalidNullPointerEventList) {
7597
ASSERT_EQ_RESULT(UR_RESULT_ERROR_INVALID_NULL_POINTER,
7698
urEventWait(1, nullptr));
7799
}
100+
101+
TEST_P(urEventWaitTest, WithMultipleContexts) {
102+
UUR_KNOWN_FAILURE_ON(uur::NativeCPU{});
103+
104+
std::vector<uint32_t> output(count, 1);
105+
106+
std::vector<ur_event_handle_t> events;
107+
for (size_t i = 0; i < maxNumContexts - 1; i++) {
108+
auto waitEvent = events.size() ? &events.back() : nullptr;
109+
ur_event_handle_t event = nullptr;
110+
ASSERT_SUCCESS(
111+
urEnqueueMemBufferCopy(queues[i], src_buffer[i], src_buffer[i + 1], 0,
112+
0, size, waitEvent ? 1 : 0, waitEvent, &event));
113+
events.push_back(event);
114+
}
115+
116+
ur_event_handle_t event1 = nullptr;
117+
ASSERT_SUCCESS(urEnqueueMemBufferCopy(queues.back(), src_buffer.back(),
118+
dst_buffer.back(), 0, 0, size, 1,
119+
&events.back(), &event1));
120+
121+
ur_event_handle_t event2 = nullptr;
122+
ASSERT_SUCCESS(urEnqueueMemBufferRead(queues.back(), dst_buffer.back(), false,
123+
0, size, output.data(), 0, nullptr,
124+
&event2));
125+
126+
events.push_back(event1);
127+
events.push_back(event2);
128+
129+
ASSERT_SUCCESS(
130+
urEventWait(static_cast<uint32_t>(events.size()), events.data()));
131+
ASSERT_EQ(input.front(), output);
132+
133+
EXPECT_SUCCESS(urEventRelease(event1));
134+
EXPECT_SUCCESS(urEventRelease(event2));
135+
}

0 commit comments

Comments
 (0)