@@ -222,16 +222,23 @@ void demonstrateMemoryMigration() {
222222 }
223223
224224 int device = 0 ;
225+ // CUDA 13 updated UM APIs use cudaMemLocation instead of raw int device IDs
226+ cudaMemLocation locDevice{};
227+ locDevice.type = cudaMemLocationTypeDevice;
228+ locDevice.id = device;
229+ cudaMemLocation locHost{};
230+ locHost.type = cudaMemLocationTypeHost;
231+ locHost.id = 0 ; // host id is unused
225232
226233 printf (" Testing memory migration with prefetching and hints...\n " );
227234
228- // Set memory advice
229- CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseSetReadMostly, device ));
230- CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseSetPreferredLocation, device ));
235+ // Set memory advice (location-aware in CUDA 13)
236+ CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseSetReadMostly, locDevice ));
237+ CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseSetPreferredLocation, locDevice ));
231238
232- // Prefetch to GPU
239+ // Prefetch to GPU (location-aware + explicit stream)
233240 printf (" Prefetching to GPU...\n " );
234- CUDA_CHECK (cudaMemPrefetchAsync (data, bytes, device ));
241+ CUDA_CHECK (cudaMemPrefetchAsync (data, bytes, locDevice, 0 ));
235242 CUDA_CHECK (cudaDeviceSynchronize ());
236243
237244 int blockSize = 256 ;
@@ -250,9 +257,9 @@ void demonstrateMemoryMigration() {
250257 float gpu_time;
251258 CUDA_CHECK (cudaEventElapsedTime (&gpu_time, start, stop));
252259
253- // Prefetch to CPU
260+ // Prefetch to CPU (location-aware + explicit stream)
254261 printf (" Prefetching to CPU...\n " );
255- CUDA_CHECK (cudaMemPrefetchAsync (data, bytes, cudaCpuDeviceId ));
262+ CUDA_CHECK (cudaMemPrefetchAsync (data, bytes, locHost, 0 ));
256263 CUDA_CHECK (cudaDeviceSynchronize ());
257264
258265 // CPU computation (data already on CPU)
@@ -274,9 +281,9 @@ void demonstrateMemoryMigration() {
274281 // Test without prefetching for comparison
275282 printf (" \n Testing without prefetching...\n " );
276283
277- // Reset memory advice
278- CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseUnsetReadMostly, device ));
279- CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseUnsetPreferredLocation, device ));
284+ // Reset memory advice (location-aware in CUDA 13)
285+ CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseUnsetReadMostly, locDevice ));
286+ CUDA_CHECK (cudaMemAdvise (data, bytes, cudaMemAdviseUnsetPreferredLocation, locDevice ));
280287
281288 CUDA_CHECK (cudaEventRecord (start));
282289 computeIntensive<<<gridSize, blockSize>>> (data, n);
0 commit comments