Skip to content

Commit 5c6744a

Browse files
committed
Add CTS test.
1 parent d975fd0 commit 5c6744a

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

source/adapters/opencl/usm.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//===-------------- adapter.hpp - OpenCL Adapter ---------------------===//
1+
//===--------------------- usm.hpp - OpenCL Adapter -----------------------===//
22
//
33
// Copyright (C) 2024 Intel Corporation
44
//

test/conformance/enqueue/urEnqueueUSMMemcpy.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,89 @@ TEST_P(urEnqueueUSMMemcpyTest, InvalidNullPtrEventWaitList) {
167167
}
168168

169169
UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urEnqueueUSMMemcpyTest);
170+
171+
struct urEnqueueUSMMemcpyMultiDeviceTest : uur::urAllDevicesTest {
172+
void SetUp() override {
173+
uur::urAllDevicesTest::SetUp();
174+
for (auto &device : devices) {
175+
ur_device_usm_access_capability_flags_t device_usm = 0;
176+
ASSERT_SUCCESS(uur::GetDeviceUSMDeviceSupport(device, device_usm));
177+
if (device_usm) {
178+
usm_devices.push_back(device);
179+
if (usm_devices.size() == 2) {
180+
break;
181+
}
182+
}
183+
}
184+
185+
if (usm_devices.size() < 2) {
186+
GTEST_SKIP() << "Not enough devices in platform with USM support";
187+
}
188+
189+
ASSERT_SUCCESS(urContextCreate(usm_devices.size(), usm_devices.data(),
190+
nullptr, &context));
191+
ASSERT_SUCCESS(
192+
urQueueCreate(context, usm_devices[0], nullptr, &src_queue));
193+
ASSERT_SUCCESS(
194+
urQueueCreate(context, usm_devices[1], nullptr, &dst_queue));
195+
196+
ASSERT_SUCCESS(
197+
urUSMHostAlloc(context, nullptr, nullptr, alloc_size, &host_alloc));
198+
ASSERT_SUCCESS(urUSMDeviceAlloc(context, usm_devices[0], nullptr,
199+
nullptr, alloc_size, &src_alloc));
200+
ASSERT_SUCCESS(urUSMDeviceAlloc(context, usm_devices[1], nullptr,
201+
nullptr, alloc_size, &dst_alloc));
202+
203+
ASSERT_SUCCESS(urEnqueueUSMFill(src_queue, src_alloc,
204+
sizeof(fill_pattern), &fill_pattern,
205+
alloc_size, 0, nullptr, nullptr));
206+
ASSERT_SUCCESS(urQueueFinish(src_queue));
207+
}
208+
209+
void TearDown() override {
210+
ASSERT_SUCCESS(urUSMFree(context, src_alloc));
211+
ASSERT_SUCCESS(urUSMFree(context, dst_alloc));
212+
ASSERT_SUCCESS(urUSMFree(context, host_alloc));
213+
ASSERT_SUCCESS(urQueueRelease(src_queue));
214+
ASSERT_SUCCESS(urQueueRelease(dst_queue));
215+
ASSERT_SUCCESS(urContextRelease(context));
216+
uur::urAllDevicesTest::TearDown();
217+
}
218+
219+
void verifyData() {
220+
for (size_t i = 0; i < alloc_size; i++) {
221+
EXPECT_EQ(static_cast<uint8_t *>(host_alloc)[i], fill_pattern);
222+
}
223+
}
224+
225+
std::vector<ur_device_handle_t> usm_devices;
226+
ur_context_handle_t context = nullptr;
227+
ur_queue_handle_t src_queue = nullptr;
228+
ur_queue_handle_t dst_queue = nullptr;
229+
void *src_alloc = nullptr;
230+
void *dst_alloc = nullptr;
231+
void *host_alloc = nullptr;
232+
size_t alloc_size = 64;
233+
uint8_t fill_pattern = 42;
234+
};
235+
236+
TEST_F(urEnqueueUSMMemcpyMultiDeviceTest, DeviceToDeviceCopyBlocking) {
237+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(src_queue, true, dst_alloc, src_alloc,
238+
alloc_size, 0, nullptr, nullptr));
239+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(dst_queue, true, host_alloc, dst_alloc,
240+
alloc_size, 0, nullptr, nullptr));
241+
verifyData();
242+
}
243+
244+
TEST_F(urEnqueueUSMMemcpyMultiDeviceTest, DeviceToDeviceCopyNonBlocking) {
245+
ur_event_handle_t device_copy_event = nullptr;
246+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(src_queue, false, dst_alloc, src_alloc,
247+
alloc_size, 0, nullptr,
248+
&device_copy_event));
249+
ASSERT_SUCCESS(urQueueFlush(src_queue));
250+
ASSERT_SUCCESS(urEventWait(1, &device_copy_event));
251+
ASSERT_SUCCESS(urEventRelease(device_copy_event));
252+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(dst_queue, true, host_alloc, dst_alloc,
253+
alloc_size, 0, nullptr, nullptr));
254+
verifyData();
255+
}

0 commit comments

Comments
 (0)