@@ -459,7 +459,8 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
459
459
460
460
if (Mem->isBuffer ()) {
461
461
auto &Buffer = std::get<BufferMem>(Mem->Mem );
462
- hipDeviceptr_t &DevPtr = Buffer.Ptrs [hDevice->getIndex ()];
462
+ hipDeviceptr_t &DevPtr =
463
+ Buffer.Ptrs [hDevice->getIndex () % Buffer.Ptrs .size ()];
463
464
464
465
// Allocation has already been made
465
466
if (DevPtr != BufferMem::native_type{0 }) {
@@ -482,12 +483,12 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
482
483
try {
483
484
auto &Image = std::get<SurfaceMem>(Mem->Mem );
484
485
// Allocation has already been made
485
- if (Image.Arrays [hDevice->getIndex ()]) {
486
+ if (Image.Arrays [hDevice->getIndex () % Image. Arrays . size () ]) {
486
487
return UR_RESULT_SUCCESS;
487
488
}
488
489
UR_CHECK_ERROR (hipArray3DCreate (
489
490
reinterpret_cast <hipCUarray *>(&ImageArray), &Image.ArrayDesc ));
490
- Image.Arrays [hDevice->getIndex ()] = ImageArray;
491
+ Image.Arrays [hDevice->getIndex () % Image. Arrays . size () ] = ImageArray;
491
492
// HIP_RESOURCE_DESC is a union of different structs, shown here
492
493
// We need to fill it as described here to use it for a surface or texture
493
494
// HIP_RESOURCE_DESC::resType must be HIP_RESOURCE_TYPE_ARRAY and
@@ -499,7 +500,7 @@ ur_result_t allocateMemObjOnDeviceIfNeeded(ur_mem_handle_t Mem,
499
500
ImageResDesc.resType = hipResourceTypeArray;
500
501
501
502
UR_CHECK_ERROR (hipCreateSurfaceObject (&Surface, &ImageResDesc));
502
- Image.SurfObjs [hDevice->getIndex ()] = Surface;
503
+ Image.SurfObjs [hDevice->getIndex () % Image. SurfObjs . size () ] = Surface;
503
504
} catch (ur_result_t Err) {
504
505
if (ImageArray) {
505
506
UR_CHECK_ERROR (hipFreeArray (ImageArray));
@@ -610,9 +611,10 @@ ur_result_t migrateMemoryToDeviceIfNeeded(ur_mem_handle_t Mem,
610
611
UR_ASSERT (hDevice, UR_RESULT_ERROR_INVALID_NULL_HANDLE);
611
612
// Device allocation has already been initialized with most up to date
612
613
// data in buffer
613
- if (Mem->HaveMigratedToDeviceSinceLastWrite [hDevice->getIndex ()]) {
614
+ if (Mem->HaveMigratedToDeviceSinceLastWrite
615
+ [hDevice->getIndex () %
616
+ Mem->HaveMigratedToDeviceSinceLastWrite .size ()])
614
617
return UR_RESULT_SUCCESS;
615
- }
616
618
617
619
ScopedContext Active (hDevice);
618
620
if (Mem->isBuffer ()) {
@@ -621,6 +623,8 @@ ur_result_t migrateMemoryToDeviceIfNeeded(ur_mem_handle_t Mem,
621
623
UR_CHECK_ERROR (migrateImageToDevice (Mem, hDevice));
622
624
}
623
625
624
- Mem->HaveMigratedToDeviceSinceLastWrite [hDevice->getIndex ()] = true ;
626
+ Mem->HaveMigratedToDeviceSinceLastWrite
627
+ [hDevice->getIndex () % Mem->HaveMigratedToDeviceSinceLastWrite .size ()] =
628
+ true ;
625
629
return UR_RESULT_SUCCESS;
626
630
}
0 commit comments