Skip to content

Commit c777601

Browse files
authored
Merge pull request #694 from veselypeta/petr/669/extend-vm-testing
[UR] Extend testing of virtual memory
2 parents 4834f8b + b7218bd commit c777601

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

test/conformance/enqueue/urEnqueueKernelLaunch.cpp

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,93 @@ TEST_P(urEnqueueKernelLaunch3DTest, Success) {
120120
ASSERT_SUCCESS(urQueueFinish(queue));
121121
ValidateBuffer(buffer, buffer_size, val);
122122
}
123+
124+
struct urEnqueueKernelLaunchWithVirtualMemory : uur::urKernelExecutionTest {
125+
126+
void SetUp() override {
127+
program_name = "fill_usm";
128+
UUR_RETURN_ON_FATAL_FAILURE(uur::urKernelExecutionTest::SetUp());
129+
130+
ur_bool_t virtual_memory_support = false;
131+
ASSERT_SUCCESS(urDeviceGetInfo(
132+
device, UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT, sizeof(ur_bool_t),
133+
&virtual_memory_support, nullptr));
134+
if (!virtual_memory_support) {
135+
GTEST_SKIP() << "Virtual memory is not supported.";
136+
}
137+
138+
ASSERT_SUCCESS(urVirtualMemGranularityGetInfo(
139+
context, device, UR_VIRTUAL_MEM_GRANULARITY_INFO_MINIMUM,
140+
sizeof(granularity), &granularity, nullptr));
141+
142+
alloc_size = 1024;
143+
virtual_page_size =
144+
uur::RoundUpToNearestFactor(alloc_size, granularity);
145+
146+
ASSERT_SUCCESS(urPhysicalMemCreate(context, device, virtual_page_size,
147+
nullptr, &physical_mem));
148+
149+
ASSERT_SUCCESS(urVirtualMemReserve(context, nullptr, virtual_page_size,
150+
&virtual_ptr));
151+
152+
ASSERT_SUCCESS(urVirtualMemMap(context, virtual_ptr, virtual_page_size,
153+
physical_mem, 0,
154+
UR_VIRTUAL_MEM_ACCESS_FLAG_READ_WRITE));
155+
156+
int pattern = 0;
157+
ASSERT_SUCCESS(urEnqueueUSMFill(queue, virtual_ptr, sizeof(pattern),
158+
&pattern, virtual_page_size, 0, nullptr,
159+
nullptr));
160+
ASSERT_SUCCESS(urQueueFinish(queue));
161+
}
162+
163+
void TearDown() override {
164+
165+
if (virtual_ptr) {
166+
EXPECT_SUCCESS(
167+
urVirtualMemUnmap(context, virtual_ptr, virtual_page_size));
168+
EXPECT_SUCCESS(
169+
urVirtualMemFree(context, virtual_ptr, virtual_page_size));
170+
}
171+
172+
if (physical_mem) {
173+
EXPECT_SUCCESS(urPhysicalMemRelease(physical_mem));
174+
}
175+
176+
UUR_RETURN_ON_FATAL_FAILURE(uur::urKernelExecutionTest::TearDown());
177+
}
178+
179+
size_t granularity = 0;
180+
size_t alloc_size = 0;
181+
size_t virtual_page_size = 0;
182+
ur_physical_mem_handle_t physical_mem = nullptr;
183+
void *virtual_ptr = nullptr;
184+
};
185+
UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urEnqueueKernelLaunchWithVirtualMemory);
186+
187+
TEST_P(urEnqueueKernelLaunchWithVirtualMemory, Success) {
188+
size_t work_dim = 1;
189+
size_t global_offset = 0;
190+
size_t global_size = alloc_size / sizeof(uint32_t);
191+
uint32_t fill_val = 42;
192+
193+
ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, virtual_ptr));
194+
ASSERT_SUCCESS(
195+
urKernelSetArgValue(kernel, 1, sizeof(fill_val), nullptr, &fill_val));
196+
197+
ur_event_handle_t kernel_evt;
198+
ASSERT_SUCCESS(urEnqueueKernelLaunch(queue, kernel, work_dim,
199+
&global_offset, &global_size, nullptr,
200+
0, nullptr, &kernel_evt));
201+
202+
std::vector<uint32_t> data(global_size);
203+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(queue, true, data.data(), virtual_ptr,
204+
alloc_size, 1, &kernel_evt, nullptr));
205+
206+
ASSERT_SUCCESS(urQueueFinish(queue));
207+
208+
// verify fill worked
209+
for (size_t i = 0; i < data.size(); i++) {
210+
ASSERT_EQ(fill_val, data.at(i));
211+
}
212+
}

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,15 @@ template <class T> struct urUSMPoolTestWithParam : urContextTestWithParam<T> {
670670
struct urVirtualMemGranularityTest : urContextTest {
671671
void SetUp() override {
672672
UUR_RETURN_ON_FATAL_FAILURE(urContextTest::SetUp());
673+
674+
ur_bool_t virtual_memory_support = false;
675+
ASSERT_SUCCESS(urDeviceGetInfo(
676+
device, UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT, sizeof(ur_bool_t),
677+
&virtual_memory_support, nullptr));
678+
if (!virtual_memory_support) {
679+
GTEST_SKIP() << "Virtual memory is not supported.";
680+
}
681+
673682
ASSERT_SUCCESS(urVirtualMemGranularityGetInfo(
674683
context, device, UR_VIRTUAL_MEM_GRANULARITY_INFO_MINIMUM,
675684
sizeof(granularity), &granularity, nullptr));
@@ -681,6 +690,15 @@ template <class T>
681690
struct urVirtualMemGranularityTestWithParam : urContextTestWithParam<T> {
682691
void SetUp() override {
683692
UUR_RETURN_ON_FATAL_FAILURE(urContextTestWithParam<T>::SetUp());
693+
694+
ur_bool_t virtual_memory_support = false;
695+
ASSERT_SUCCESS(urDeviceGetInfo(
696+
this->device, UR_DEVICE_INFO_VIRTUAL_MEMORY_SUPPORT,
697+
sizeof(ur_bool_t), &virtual_memory_support, nullptr));
698+
if (!virtual_memory_support) {
699+
GTEST_SKIP() << "Virtual memory is not supported.";
700+
}
701+
684702
ASSERT_SUCCESS(urVirtualMemGranularityGetInfo(
685703
this->context, this->device,
686704
UR_VIRTUAL_MEM_GRANULARITY_INFO_MINIMUM, sizeof(granularity),

0 commit comments

Comments
 (0)