diff --git a/level_zero/core/source/memory/memory.cpp b/level_zero/core/source/memory/memory.cpp index 7ad658c728..e11deac077 100644 --- a/level_zero/core/source/memory/memory.cpp +++ b/level_zero/core/source/memory/memory.cpp @@ -105,8 +105,7 @@ ze_result_t DriverHandleImp::allocHostMem(ze_host_mem_alloc_flags_t flags, size_ *ptr = nullptr; return ZE_RESULT_ERROR_UNSUPPORTED_SIZE; } - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = this->devices[0]->getNEODevice()->getDeviceBitfield(); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, this->devices[0]->getNEODevice()->getDeviceBitfield()); auto usmPtr = svmAllocsManager->createHostUnifiedMemoryAllocation(static_cast(this->devices.size() - 1), size, @@ -126,10 +125,9 @@ ze_result_t DriverHandleImp::allocDeviceMem(ze_device_handle_t hDevice, ze_devic *ptr = nullptr; return ZE_RESULT_ERROR_UNSUPPORTED_SIZE; } - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, Device::fromHandle(hDevice)->getNEODevice()->getDeviceBitfield()); unifiedMemoryProperties.allocationFlags.flags.shareable = 1u; unifiedMemoryProperties.device = Device::fromHandle(hDevice)->getNEODevice(); - unifiedMemoryProperties.subdeviceBitfield = Device::fromHandle(hDevice)->getNEODevice()->getDeviceBitfield(); void *usmPtr = svmAllocsManager->createUnifiedMemoryAllocation(Device::fromHandle(hDevice)->getRootDeviceIndex(), size, unifiedMemoryProperties); @@ -144,20 +142,21 @@ ze_result_t DriverHandleImp::allocDeviceMem(ze_device_handle_t hDevice, ze_devic ze_result_t DriverHandleImp::allocSharedMem(ze_device_handle_t hDevice, ze_device_mem_alloc_flags_t deviceFlags, ze_host_mem_alloc_flags_t hostFlags, size_t size, size_t alignment, void **ptr) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); ze_device_handle_t device; + void *unifiedMemoryPropertiesDevice = nullptr; if (hDevice == nullptr) { device = this->devices[0]; - unifiedMemoryProperties.device = nullptr; } else { device = hDevice; - unifiedMemoryProperties.device = Device::fromHandle(device)->getNEODevice(); + unifiedMemoryPropertiesDevice = Device::fromHandle(device)->getNEODevice(); } + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, Device::fromHandle(device)->getNEODevice()->getDeviceBitfield()); + unifiedMemoryProperties.device = unifiedMemoryPropertiesDevice; + if (size > this->devices[0]->getDeviceInfo().maxMemAllocSize) { *ptr = nullptr; return ZE_RESULT_ERROR_UNSUPPORTED_SIZE; } - unifiedMemoryProperties.subdeviceBitfield = Device::fromHandle(device)->getNEODevice()->getDeviceBitfield(); auto usmPtr = svmAllocsManager->createSharedUnifiedMemoryAllocation(Device::fromHandle(device)->getRootDeviceIndex(), diff --git a/level_zero/core/test/unit_tests/mocks/mock_driver_handle.cpp b/level_zero/core/test/unit_tests/mocks/mock_driver_handle.cpp index aca05795fe..dc7a6eec60 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_driver_handle.cpp +++ b/level_zero/core/test/unit_tests/mocks/mock_driver_handle.cpp @@ -7,6 +7,8 @@ #include "mock_driver_handle.h" +#include "opencl/test/unit_test/mocks/mock_graphics_allocation.h" + namespace L0 { namespace ult { @@ -54,7 +56,7 @@ ze_result_t Mock::doGetDevice(uint32_t *pCount, ze_device_handle_t ze_result_t Mock::doAllocHostMem(ze_host_mem_alloc_flags_t flags, size_t size, size_t alignment, void **ptr) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, NEO::mockDeviceBitfield); auto allocation = svmAllocsManager->createUnifiedMemoryAllocation(0u, size, unifiedMemoryProperties); @@ -68,7 +70,7 @@ ze_result_t Mock::doAllocHostMem(ze_host_mem_alloc_flags_t flags, } ze_result_t Mock::doAllocDeviceMem(ze_device_handle_t hDevice, ze_device_mem_alloc_flags_t flags, size_t size, size_t alignment, void **ptr) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, NEO::mockDeviceBitfield); auto allocation = svmAllocsManager->createUnifiedMemoryAllocation(0u, size, unifiedMemoryProperties); diff --git a/opencl/source/api/api.cpp b/opencl/source/api/api.cpp index d42f1fec68..e3c9c7d336 100644 --- a/opencl/source/api/api.cpp +++ b/opencl/source/api/api.cpp @@ -3522,7 +3522,8 @@ void *clHostMemAllocINTEL( return nullptr; } - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, + neoContext->getDeviceBitfieldForAllocation(neoContext->getDevice(0)->getRootDeviceIndex())); cl_mem_flags flags = 0; cl_mem_flags_intel flagsIntel = 0; cl_mem_alloc_flags_intel allocflags = 0; @@ -3561,11 +3562,11 @@ void *clDeviceMemAllocINTEL( return nullptr; } - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, + neoDevice->getDeviceBitfield()); cl_mem_flags flags = 0; cl_mem_flags_intel flagsIntel = 0; cl_mem_alloc_flags_intel allocflags = 0; - unifiedMemoryProperties.subdeviceBitfield = neoDevice->getDeviceBitfield(); if (!MemoryPropertiesHelper::parseMemoryProperties(properties, unifiedMemoryProperties.allocationFlags, flags, flagsIntel, allocflags, MemoryPropertiesHelper::ObjType::UNKNOWN, *neoContext)) { @@ -3602,28 +3603,32 @@ void *clSharedMemAllocINTEL( return nullptr; } - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); cl_mem_flags flags = 0; cl_mem_flags_intel flagsIntel = 0; cl_mem_alloc_flags_intel allocflags = 0; + ClDevice *neoDevice = castToObject(device); + void *unifiedMemoryPropertiesDevice = nullptr; + DeviceBitfield subdeviceBitfield; + if (neoDevice) { + if (!neoContext->isDeviceAssociated(*neoDevice)) { + err.set(CL_INVALID_DEVICE); + return nullptr; + } + unifiedMemoryPropertiesDevice = device; + subdeviceBitfield = neoDevice->getDeviceBitfield(); + } else { + neoDevice = neoContext->getDevice(0); + subdeviceBitfield = neoContext->getDeviceBitfieldForAllocation(neoContext->getDevice(0)->getRootDeviceIndex()); + } + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, subdeviceBitfield); + unifiedMemoryProperties.device = unifiedMemoryPropertiesDevice; if (!MemoryPropertiesHelper::parseMemoryProperties(properties, unifiedMemoryProperties.allocationFlags, flags, flagsIntel, allocflags, MemoryPropertiesHelper::ObjType::UNKNOWN, *neoContext)) { err.set(CL_INVALID_VALUE); return nullptr; } - ClDevice *neoDevice = castToObject(device); - if (neoDevice) { - if (!neoContext->isDeviceAssociated(*neoDevice)) { - err.set(CL_INVALID_DEVICE); - return nullptr; - } - unifiedMemoryProperties.device = device; - unifiedMemoryProperties.subdeviceBitfield = neoDevice->getDeviceBitfield(); - } else { - neoDevice = neoContext->getDevice(0); - unifiedMemoryProperties.subdeviceBitfield = neoContext->getDeviceBitfieldForAllocation(neoContext->getDevice(0)->getRootDeviceIndex()); - } + if (size > neoDevice->getSharedDeviceInfo().maxMemAllocSize && !unifiedMemoryProperties.allocationFlags.flags.allowUnrestrictedSize) { err.set(CL_INVALID_BUFFER_SIZE); return nullptr; diff --git a/opencl/test/unit_test/command_queue/enqueue_svm_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_svm_tests.cpp index 24d19f31fd..d0e28c5eba 100644 --- a/opencl/test/unit_test/command_queue/enqueue_svm_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_svm_tests.cpp @@ -1347,9 +1347,7 @@ struct FailCsr : public CommandStreamReceiverHw { }; HWTEST_F(EnqueueSvmTest, whenInternalAllocationsAreMadeResidentThenOnlyNonSvmAllocationsAreAdded) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); unifiedMemoryProperties.device = pDevice; auto allocationSize = 4096u; auto svmManager = this->context->getSVMAllocsManager(); @@ -1373,9 +1371,7 @@ HWTEST_F(EnqueueSvmTest, whenInternalAllocationsAreMadeResidentThenOnlyNonSvmAll } HWTEST_F(EnqueueSvmTest, whenInternalAllocationsAreAddedToResidencyContainerThenOnlyExpectedAllocationsAreAdded) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); unifiedMemoryProperties.device = pDevice; auto allocationSize = 4096u; auto svmManager = this->context->getSVMAllocsManager(); @@ -1417,8 +1413,7 @@ struct createHostUnifiedMemoryAllocationTest : public ::testing::Test { HWTEST_F(createHostUnifiedMemoryAllocationTest, whenCreatingHostUnifiedMemoryAllocationThenOneAllocDataIsCreatedWithOneGraphicsAllocationPerDevice) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = device0->getDevice().getDeviceBitfield(); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, device0->getDevice().getDeviceBitfield()); EXPECT_EQ(0u, svmManager->getNumAllocs()); auto unifiedMemoryPtr = svmManager->createHostUnifiedMemoryAllocation(numDevices - 1, @@ -1441,8 +1436,7 @@ HWTEST_F(createHostUnifiedMemoryAllocationTest, HWTEST_F(createHostUnifiedMemoryAllocationTest, whenCreatingMultiGraphicsAllocationThenGraphicsAllocationPerDeviceIsCreated) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = device0->getDevice().getDeviceBitfield(); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, device0->getDevice().getDeviceBitfield()); auto alignedSize = alignUp(allocationSize, MemoryConstants::pageSize64k); auto memoryManager = context.getMemoryManager(); @@ -1487,8 +1481,7 @@ HWTEST_F(createHostUnifiedMemoryAllocationTest, HWTEST_F(createHostUnifiedMemoryAllocationTest, whenCreatingMultiGraphicsAllocationForSpecificRootDeviceIndicesThenOnlyGraphicsAllocationPerSpecificRootDeviceIndexIsCreated) { - NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = device0->getDevice().getDeviceBitfield(); + NEO::SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, device0->getDevice().getDeviceBitfield()); auto alignedSize = alignUp(allocationSize, MemoryConstants::pageSize64k); auto memoryManager = context.getMemoryManager(); diff --git a/opencl/test/unit_test/kernel/kernel_tests.cpp b/opencl/test/unit_test/kernel/kernel_tests.cpp index b8046483c4..5a62449300 100644 --- a/opencl/test/unit_test/kernel/kernel_tests.cpp +++ b/opencl/test/unit_test/kernel/kernel_tests.cpp @@ -1750,8 +1750,7 @@ HWTEST_F(KernelResidencyTest, givenKernelWhenItUsesIndirectUnifiedMemoryDeviceAl auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto properties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); - properties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto properties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, properties); mockKernel.mockKernel->makeResident(this->pDevice->getGpgpuCommandStreamReceiver()); @@ -1776,10 +1775,8 @@ HWTEST_F(KernelResidencyTest, givenKernelUsingIndirectHostMemoryWhenMakeResident auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); - deviceProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); - auto hostProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - hostProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); + auto hostProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedDeviceMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, deviceProperties); auto unifiedHostMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, hostProperties); @@ -1800,10 +1797,8 @@ HWTEST_F(KernelResidencyTest, givenKernelUsingIndirectSharedMemoryWhenMakeReside auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - sharedProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); - auto hostProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - hostProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); + auto hostProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedSharedMemoryAllocation = svmAllocationsManager->createSharedUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, sharedProperties, mockKernel.mockContext->getSpecialQueue()); auto unifiedHostMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, hostProperties); @@ -1826,8 +1821,7 @@ HWTEST_F(KernelResidencyTest, givenDeviceUnifiedMemoryAndPageFaultManagerWhenMak auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); - deviceProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, deviceProperties); auto unifiedMemoryGraphicsAllocation = svmAllocationsManager->getSVMAlloc(unifiedMemoryAllocation); @@ -1854,8 +1848,7 @@ HWTEST_F(KernelResidencyTest, givenSharedUnifiedMemoryAndPageFaultManagerWhenMak auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - sharedProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createSharedUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, sharedProperties, mockKernel.mockContext->getSpecialQueue()); auto unifiedMemoryGraphicsAllocation = svmAllocationsManager->getSVMAlloc(unifiedMemoryAllocation); mockPageFaultManager->insertAllocation(unifiedMemoryAllocation, 4096u, svmAllocationsManager, mockKernel.mockContext->getSpecialQueue(), {}); @@ -1889,8 +1882,7 @@ HWTEST_F(KernelResidencyTest, givenSharedUnifiedMemoryAndNotRequiredMemSyncWhenM auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - sharedProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createSharedUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, sharedProperties, mockKernel.mockContext->getSpecialQueue()); auto unifiedMemoryGraphicsAllocation = svmAllocationsManager->getSVMAlloc(unifiedMemoryAllocation); mockPageFaultManager->insertAllocation(unifiedMemoryAllocation, 4096u, svmAllocationsManager, mockKernel.mockContext->getSpecialQueue(), {}); @@ -1918,8 +1910,7 @@ HWTEST_F(KernelResidencyTest, givenSharedUnifiedMemoryRequiredMemSyncWhenMakeRes auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - sharedProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createSharedUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, sharedProperties, mockKernel.mockContext->getSpecialQueue()); auto unifiedMemoryGraphicsAllocation = svmAllocationsManager->getSVMAlloc(unifiedMemoryAllocation); mockPageFaultManager->insertAllocation(unifiedMemoryAllocation, 4096u, svmAllocationsManager, mockKernel.mockContext->getSpecialQueue(), {}); @@ -1947,8 +1938,7 @@ HWTEST_F(KernelResidencyTest, givenSharedUnifiedMemoryAllocPageFaultManagerAndIn auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - sharedProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto sharedProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createSharedUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, sharedProperties, mockKernel.mockContext->getSpecialQueue()); mockPageFaultManager->insertAllocation(unifiedMemoryAllocation, 4096u, svmAllocationsManager, mockKernel.mockContext->getSpecialQueue(), {}); @@ -1976,8 +1966,7 @@ HWTEST_F(KernelResidencyTest, givenKernelWhenSetKernelExecInfoWithUnifiedMemoryI auto &commandStreamReceiver = this->pDevice->getUltCommandStreamReceiver(); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); - deviceProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, deviceProperties); auto unifiedMemoryGraphicsAllocation = svmAllocationsManager->getSVMAlloc(unifiedMemoryAllocation); @@ -2002,8 +1991,7 @@ HWTEST_F(KernelResidencyTest, givenKernelWhenclSetKernelExecInfoWithUnifiedMemor MockKernelWithInternals mockKernel(*this->pClDevice); auto svmAllocationsManager = mockKernel.mockContext->getSVMAllocsManager(); - auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY); - deviceProperties.subdeviceBitfield = pDevice->getDeviceBitfield(); + auto deviceProperties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, pDevice->getDeviceBitfield()); auto unifiedMemoryAllocation = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, deviceProperties); auto unifiedMemoryAllocation2 = svmAllocationsManager->createUnifiedMemoryAllocation(pDevice->getRootDeviceIndex(), 4096u, deviceProperties); diff --git a/opencl/test/unit_test/mem_obj/mem_obj_destruction_tests.cpp b/opencl/test/unit_test/mem_obj/mem_obj_destruction_tests.cpp index 506047aef2..9b77d37c35 100644 --- a/opencl/test/unit_test/mem_obj/mem_obj_destruction_tests.cpp +++ b/opencl/test/unit_test/mem_obj/mem_obj_destruction_tests.cpp @@ -495,8 +495,7 @@ HWTEST_F(UsmDestructionTests, givenSharedUsmAllocationWhenBlockingFreeIsCalledTh mockDevice.resetCommandStreamReceiver(mockCsr); *mockCsr->getTagAddress() = 5u; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = mockDevice.getDeviceBitfield(); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, mockDevice.getDeviceBitfield()); auto svmAllocationsManager = mockContext.getSVMAllocsManager(); auto sharedMemory = svmAllocationsManager->createUnifiedAllocationWithDeviceStorage(0u, 4096u, {}, unifiedMemoryProperties); @@ -535,8 +534,7 @@ HWTEST_F(UsmDestructionTests, givenUsmAllocationWhenBlockingFreeIsCalledThenWait mockDevice.resetCommandStreamReceiver(mockCsr); *mockCsr->getTagAddress() = 5u; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY); - unifiedMemoryProperties.subdeviceBitfield = mockClDevice.getDeviceBitfield(); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, mockClDevice.getDeviceBitfield()); auto svmAllocationsManager = mockContext.getSVMAllocsManager(); auto hostMemory = svmAllocationsManager->createUnifiedMemoryAllocation(0u, 4096u, unifiedMemoryProperties); diff --git a/opencl/test/unit_test/memory_manager/unified_memory_manager_tests.cpp b/opencl/test/unit_test/memory_manager/unified_memory_manager_tests.cpp index 22f865da3c..bf302b6757 100644 --- a/opencl/test/unit_test/memory_manager/unified_memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/unified_memory_manager_tests.cpp @@ -164,9 +164,7 @@ TEST_F(SVMMemoryAllocatorTest, whenCouldNotAllocateInMemoryManagerThenCreateUnif FailMemoryManager failMemoryManager(executionEnvironment); svmManager->memoryManager = &failMemoryManager; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, mockDeviceBitfield); auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); EXPECT_EQ(nullptr, ptr); EXPECT_EQ(0u, svmManager->SVMAllocs.getNumAllocs()); @@ -206,10 +204,8 @@ TEST_F(SVMMemoryAllocatorTest, whenCoherentFlagIsPassedThenAllocationIsCoherent) } TEST_F(SVMLocalMemoryAllocatorTest, whenDeviceAllocationIsCreatedThenItIsStoredWithWriteCombinedTypeInAllocationMap) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, mockDeviceBitfield); unifiedMemoryProperties.allocationFlags.allocFlags.allocWriteCombined = true; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; auto allocationSize = 4000u; auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4000u, unifiedMemoryProperties); EXPECT_NE(nullptr, ptr); @@ -231,10 +227,8 @@ TEST_F(SVMMemoryAllocatorTest, givenNoWriteCombinedFlagwhenDeviceAllocationIsCre if (is32bit) { GTEST_SKIP(); } - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, mockDeviceBitfield); unifiedMemoryProperties.allocationFlags.allocFlags.allocWriteCombined = false; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; auto allocationSize = 4096u; auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); EXPECT_NE(nullptr, ptr); @@ -252,9 +246,7 @@ TEST_F(SVMMemoryAllocatorTest, givenNoWriteCombinedFlagwhenDeviceAllocationIsCre } TEST_F(SVMMemoryAllocatorTest, whenHostAllocationIsCreatedThenItIsStoredWithProperTypeInAllocationMap) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::HOST_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, mockDeviceBitfield); auto allocationSize = 4096u; auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); EXPECT_NE(nullptr, ptr); @@ -279,9 +271,7 @@ TEST_F(SVMMemoryAllocatorTest, whenCouldNotAllocateInMemoryManagerThenCreateShar FailMemoryManager failMemoryManager(executionEnvironment); svmManager->memoryManager = &failMemoryManager; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, mockDeviceBitfield); auto ptr = svmManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties, &cmdQ); EXPECT_EQ(nullptr, ptr); EXPECT_EQ(0u, svmManager->SVMAllocs.getNumAllocs()); @@ -290,9 +280,7 @@ TEST_F(SVMMemoryAllocatorTest, whenCouldNotAllocateInMemoryManagerThenCreateShar TEST_F(SVMMemoryAllocatorTest, whenSharedAllocationIsCreatedThenItIsStoredWithProperTypeInAllocationMap) { MockCommandQueue cmdQ; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, mockDeviceBitfield); auto allocationSize = 4096u; auto ptr = svmManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties, &cmdQ); @@ -318,10 +306,8 @@ TEST_F(SVMLocalMemoryAllocatorTest, whenSharedAllocationIsCreatedWithDebugFlagSe DebugManager.flags.AllocateSharedAllocationsWithCpuAndGpuStorage.set(true); auto device = mockContext.getDevice(0u); - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, device->getDeviceBitfield()); unifiedMemoryProperties.device = device; - unifiedMemoryProperties.subdeviceBitfield = device->getDeviceBitfield(); auto allocationSize = 4096u; auto ptr = svmManager->createSharedUnifiedMemoryAllocation(device->getRootDeviceIndex(), 4096u, unifiedMemoryProperties, &cmdQ); EXPECT_NE(nullptr, ptr); @@ -351,9 +337,7 @@ TEST_F(SVMLocalMemoryAllocatorTest, whenSharedAllocationIsCreatedWithLocalMemory DebugManagerStateRestore restore; DebugManager.flags.EnableLocalMemory.set(1); - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, mockDeviceBitfield); auto allocationSize = 4096u; auto ptr = svmManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties, &cmdQ); EXPECT_NE(nullptr, ptr); @@ -381,9 +365,7 @@ TEST_F(SVMMemoryAllocatorTest, givenSharedAllocationsDebugFlagWhenDeviceMemoryIs DebugManagerStateRestore restore; DebugManager.flags.AllocateSharedAllocationsWithCpuAndGpuStorage.set(true); - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, mockDeviceBitfield); auto allocationSize = 4096u; auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); EXPECT_NE(nullptr, ptr); @@ -558,9 +540,7 @@ TEST(UnifiedMemoryTest, givenDeviceBitfieldWithMultipleBitsSetWhenSharedUnifiedM auto svmManager = std::make_unique(memoryManager.get()); memoryManager->pageFaultManager.reset(new MockPageFaultManager); - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = DeviceBitfield(0xf); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, DeviceBitfield(0xf)); auto ptr = svmManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties, &cmdQ); @@ -574,9 +554,7 @@ TEST(UnifiedMemoryTest, givenDeviceBitfieldWithMultipleBitsSetWhenSharedUnifiedM TEST_F(UnifiedMemoryManagerPropertiesTest, givenDeviceBitfieldWithSingleBitSetWhenSharedUnifiedMemoryAllocationIsCreatedThenProperPropertiesArePassedToMemoryManager) { MockCommandQueue cmdQ; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = DeviceBitfield(0x8); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, DeviceBitfield(0x8)); auto ptr = svmManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties, &cmdQ); @@ -593,9 +571,7 @@ TEST(UnifiedMemoryTest, givenDeviceBitfieldWithMultipleBitsSetWhenDeviceUnifiedM MockExecutionEnvironment executionEnvironment; auto memoryManager = std::make_unique(false, true, executionEnvironment); auto svmManager = std::make_unique(memoryManager.get()); - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = DeviceBitfield(0xf); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, DeviceBitfield(0xf)); auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); @@ -607,9 +583,7 @@ TEST(UnifiedMemoryTest, givenDeviceBitfieldWithMultipleBitsSetWhenDeviceUnifiedM } TEST_F(UnifiedMemoryManagerPropertiesTest, givenDeviceBitfieldWithSingleBitSetWhenDeviceUnifiedMemoryAllocationIsCreatedThenProperPropertiesArePassedToMemoryManager) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::SHARED_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = DeviceBitfield(0x8); + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, DeviceBitfield(0x8)); auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); @@ -638,9 +612,7 @@ struct ShareableUnifiedMemoryManagerPropertiesTest : public ::testing::Test { }; TEST_F(ShareableUnifiedMemoryManagerPropertiesTest, givenShareableUnifiedPropertyFlagThenShareableAllocationPropertyFlagIsSet) { - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties; - unifiedMemoryProperties.memoryType = InternalMemoryType::DEVICE_UNIFIED_MEMORY; - unifiedMemoryProperties.subdeviceBitfield = mockDeviceBitfield; + SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, mockDeviceBitfield); unifiedMemoryProperties.allocationFlags.flags.shareable = 1; auto ptr = svmManager->createUnifiedMemoryAllocation(mockRootDeviceIndex, 4096u, unifiedMemoryProperties); diff --git a/shared/source/memory_manager/unified_memory_manager.cpp b/shared/source/memory_manager/unified_memory_manager.cpp index 8e76d67e6a..e175e572bb 100644 --- a/shared/source/memory_manager/unified_memory_manager.cpp +++ b/shared/source/memory_manager/unified_memory_manager.cpp @@ -108,8 +108,7 @@ void *SVMAllocsManager::createSVMAlloc(uint32_t rootDeviceIndex, size_t size, co if (!memoryManager->isLocalMemorySupported(rootDeviceIndex)) { return createZeroCopySvmAllocation(rootDeviceIndex, size, svmProperties, deviceBitfield); } else { - UnifiedMemoryProperties unifiedMemoryProperties{}; - unifiedMemoryProperties.subdeviceBitfield = deviceBitfield; + UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::NOT_SPECIFIED, deviceBitfield); return createUnifiedAllocationWithDeviceStorage(rootDeviceIndex, size, svmProperties, unifiedMemoryProperties); } } diff --git a/shared/source/memory_manager/unified_memory_manager.h b/shared/source/memory_manager/unified_memory_manager.h index 2d6c2d7956..5cc30654be 100644 --- a/shared/source/memory_manager/unified_memory_manager.h +++ b/shared/source/memory_manager/unified_memory_manager.h @@ -91,8 +91,7 @@ class SVMAllocsManager { }; struct UnifiedMemoryProperties { - UnifiedMemoryProperties() = default; - UnifiedMemoryProperties(InternalMemoryType memoryType) : memoryType(memoryType){}; + UnifiedMemoryProperties(InternalMemoryType memoryType, DeviceBitfield subdeviceBitfield) : memoryType(memoryType), subdeviceBitfield(subdeviceBitfield){}; InternalMemoryType memoryType = InternalMemoryType::NOT_SPECIFIED; MemoryProperties allocationFlags; void *device = nullptr; diff --git a/shared/test/unit_test/page_fault_manager/cpu_page_fault_manager_tests.cpp b/shared/test/unit_test/page_fault_manager/cpu_page_fault_manager_tests.cpp index 1e50f273f6..ee057ec239 100644 --- a/shared/test/unit_test/page_fault_manager/cpu_page_fault_manager_tests.cpp +++ b/shared/test/unit_test/page_fault_manager/cpu_page_fault_manager_tests.cpp @@ -356,7 +356,7 @@ TEST_F(PageFaultManagerTest, givenUnifiedMemoryAllocWhenSetAubWritableIsCalledTh void *cmdQ = reinterpret_cast(0xFFFF); auto memoryManager = std::make_unique(executionEnvironment); auto unifiedMemoryManager = std::make_unique(memoryManager.get()); - auto properties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY); + auto properties = SVMAllocsManager::UnifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, mockDeviceBitfield); properties.subdeviceBitfield = mockDeviceBitfield; void *alloc1 = unifiedMemoryManager->createSharedUnifiedMemoryAllocation(mockRootDeviceIndex, 10, properties, cmdQ);