@@ -433,7 +433,7 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
433433
434434 if (Mem->isBuffer ()) {
435435 auto &Buffer = std::get<BufferMem>(Mem->Mem );
436- auto &DevPtr = Buffer.Ptrs [hDevice->getIndex ()];
436+ auto &DevPtr = Buffer.Ptrs [hDevice->getIndex () % Buffer. Ptrs . size () ];
437437
438438 // Allocation has already been made
439439 if (DevPtr != BufferMem::native_type{0 }) {
@@ -456,11 +456,11 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
456456 try {
457457 auto &Image = std::get<SurfaceMem>(Mem->Mem );
458458 // Allocation has already been made
459- if (Image.Arrays [hDevice->getIndex ()]) {
459+ if (Image.Arrays [hDevice->getIndex () % Image. Arrays . size () ]) {
460460 return UR_RESULT_SUCCESS;
461461 }
462462 UR_CHECK_ERROR (cuArray3DCreate (&ImageArray, &Image.ArrayDesc ));
463- Image.Arrays [hDevice->getIndex ()] = ImageArray;
463+ Image.Arrays [hDevice->getIndex () % Image. Arrays . size () ] = ImageArray;
464464
465465 // CUDA_RESOURCE_DESC is a union of different structs, shown here
466466 // https://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__TEXOBJECT.html
@@ -475,7 +475,7 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
475475 ImageResDesc.flags = 0 ;
476476
477477 UR_CHECK_ERROR (cuSurfObjectCreate (&Surface, &ImageResDesc));
478- Image.SurfObjs [hDevice->getIndex ()] = Surface;
478+ Image.SurfObjs [hDevice->getIndex () % Image. SurfObjs . size () ] = Surface;
479479 } catch (ur_result_t Err) {
480480 if (ImageArray) {
481481 UR_CHECK_ERROR (cuArrayDestroy (ImageArray));
@@ -590,7 +590,9 @@ ur_result_t migrateMemoryToDeviceIfNeeded(ur_mem_handle_t Mem,
590590 UR_ASSERT (hDevice, UR_RESULT_ERROR_INVALID_NULL_HANDLE);
591591 // Device allocation has already been initialized with most up to date
592592 // data in buffer
593- if (Mem->HaveMigratedToDeviceSinceLastWrite [hDevice->getIndex ()]) {
593+ if (Mem->HaveMigratedToDeviceSinceLastWrite
594+ [hDevice->getIndex () %
595+ Mem->HaveMigratedToDeviceSinceLastWrite .size ()]) {
594596 return UR_RESULT_SUCCESS;
595597 }
596598
@@ -601,6 +603,8 @@ ur_result_t migrateMemoryToDeviceIfNeeded(ur_mem_handle_t Mem,
601603 UR_CHECK_ERROR (migrateImageToDevice (Mem, hDevice));
602604 }
603605
604- Mem->HaveMigratedToDeviceSinceLastWrite [hDevice->getIndex ()] = true ;
606+ Mem->HaveMigratedToDeviceSinceLastWrite
607+ [hDevice->getIndex () % Mem->HaveMigratedToDeviceSinceLastWrite .size ()] =
608+ true ;
605609 return UR_RESULT_SUCCESS;
606610}
0 commit comments