@@ -120,3 +120,81 @@ TEST_P(urEnqueueKernelLaunch3DTest, Success) {
120
120
ASSERT_SUCCESS (urQueueFinish (queue));
121
121
ValidateBuffer (buffer, buffer_size, val);
122
122
}
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