Skip to content

Commit 0095324

Browse files
author
Petr Vesely
committed
[UR] Extend testing of virtual memory
1 parent 5b4c3d2 commit 0095324

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

test/conformance/enqueue/urEnqueueKernelLaunch.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,3 +120,81 @@ 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+
ASSERT_SUCCESS(urVirtualMemGranularityGetInfo(
130+
context, device, UR_VIRTUAL_MEM_GRANULARITY_INFO_MINIMUM,
131+
sizeof(granularity), &granularity, nullptr));
132+
133+
alloc_size = 1024;
134+
virtual_page_size =
135+
uur::RoundUpToNearestFactor(alloc_size, granularity);
136+
137+
ASSERT_SUCCESS(urPhysicalMemCreate(context, device, virtual_page_size,
138+
nullptr, &physical_mem));
139+
140+
ASSERT_SUCCESS(urVirtualMemReserve(context, nullptr, virtual_page_size,
141+
&virtual_ptr));
142+
143+
ASSERT_SUCCESS(urVirtualMemMap(context, virtual_ptr, virtual_page_size,
144+
physical_mem, 0,
145+
UR_VIRTUAL_MEM_ACCESS_FLAG_READ_WRITE));
146+
147+
int pattern = 0;
148+
ASSERT_SUCCESS(urEnqueueUSMFill(queue, virtual_ptr, sizeof(pattern),
149+
&pattern, virtual_page_size, 0, nullptr,
150+
nullptr));
151+
ASSERT_SUCCESS(urQueueFinish(queue));
152+
}
153+
154+
void TearDown() override {
155+
156+
if (virtual_ptr) {
157+
EXPECT_SUCCESS(
158+
urVirtualMemUnmap(context, virtual_ptr, virtual_page_size));
159+
EXPECT_SUCCESS(
160+
urVirtualMemFree(context, virtual_ptr, virtual_page_size));
161+
}
162+
163+
if (physical_mem) {
164+
EXPECT_SUCCESS(urPhysicalMemRelease(physical_mem));
165+
}
166+
167+
UUR_RETURN_ON_FATAL_FAILURE(uur::urKernelExecutionTest::TearDown());
168+
}
169+
170+
size_t granularity = 0;
171+
size_t alloc_size = 0;
172+
size_t virtual_page_size = 0;
173+
ur_physical_mem_handle_t physical_mem = nullptr;
174+
void *virtual_ptr = nullptr;
175+
};
176+
UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urEnqueueKernelLaunchWithVirtualMemory);
177+
178+
TEST_P(urEnqueueKernelLaunchWithVirtualMemory, Success) {
179+
size_t work_dim = 1;
180+
size_t global_offset = 0;
181+
size_t global_size = alloc_size / sizeof(uint32_t);
182+
183+
ASSERT_SUCCESS(urKernelSetArgPointer(kernel, 0, nullptr, virtual_ptr));
184+
185+
ur_event_handle_t kernel_evt;
186+
ASSERT_SUCCESS(urEnqueueKernelLaunch(queue, kernel, work_dim,
187+
&global_offset, &global_size, nullptr,
188+
0, nullptr, &kernel_evt));
189+
190+
std::vector<uint32_t> data(global_size);
191+
ASSERT_SUCCESS(urEnqueueUSMMemcpy(queue, true, data.data(), virtual_ptr,
192+
alloc_size, 1, &kernel_evt, nullptr));
193+
194+
ASSERT_SUCCESS(urQueueFinish(queue));
195+
196+
// verify fill worked
197+
for (size_t i = 0; i < data.size(); i++) {
198+
ASSERT_EQ(i, data.at(i));
199+
}
200+
}

0 commit comments

Comments
 (0)