From 02436b88775c8626940c483643ace52bb4461f2f Mon Sep 17 00:00:00 2001 From: Compute-Runtime-Validation Date: Wed, 14 Jun 2023 06:04:38 +0200 Subject: [PATCH] Revert "fix: support alignments in host and shared UnifiedMemoryAllocation" This reverts commit c11809e002c84c4e6906839042af6643d1fd3571. Signed-off-by: Compute-Runtime-Validation --- .../unit_tests/sources/memory/test_memory.cpp | 63 +------------------ .../os_agnostic_memory_manager.cpp | 3 +- .../memory_manager/unified_memory_manager.cpp | 15 +++-- .../os_interface/linux/drm_memory_manager.cpp | 5 +- shared/source/utilities/heap_allocator.cpp | 2 +- .../unified_memory_manager_tests.cpp | 56 +---------------- 6 files changed, 12 insertions(+), 132 deletions(-) diff --git a/level_zero/core/test/unit_tests/sources/memory/test_memory.cpp b/level_zero/core/test/unit_tests/sources/memory/test_memory.cpp index 428fd16941..2c62642617 100644 --- a/level_zero/core/test/unit_tests/sources/memory/test_memory.cpp +++ b/level_zero/core/test/unit_tests/sources/memory/test_memory.cpp @@ -1174,7 +1174,7 @@ TEST_F(ZexHostPointerTests, whenAllocatingSharedMemoryWithUseHostPtrFlagThenCrea EXPECT_EQ(ZE_RESULT_SUCCESS, result); } -TEST_F(MemoryTest, whenAllocatingDeviceMemoryThenAlignmentIsPassedCorrectlyAndMemoryIsAligned) { +TEST_F(MemoryTest, whenAllocatingDeviceMemoryThenAlignmentIsPassedCorrectly) { const size_t size = 1; ze_device_mem_alloc_desc_t deviceDesc = {}; @@ -1193,67 +1193,6 @@ TEST_F(MemoryTest, whenAllocatingDeviceMemoryThenAlignmentIsPassedCorrectlyAndMe ze_result_t result = context->allocDeviceMem(device->toHandle(), &deviceDesc, size, alignment, &ptr); EXPECT_EQ(ZE_RESULT_SUCCESS, result); EXPECT_NE(nullptr, ptr); - if (alignment != 0) { - EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr)); - } - result = context->freeMem(ptr); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - } while (alignment != 0); -} - -TEST_F(MemoryTest, whenAllocatingHostMemoryThenAlignmentIsPassedCorrectlyAndMemoryIsAligned) { - const size_t size = 1; - - ze_host_mem_alloc_desc_t hostDesc = {}; - hostDesc.stype = ZE_STRUCTURE_TYPE_HOST_MEM_ALLOC_DESC; - hostDesc.pNext = nullptr; - - auto memoryManager = static_cast(neoDevice->getMemoryManager()); - - size_t alignment = 8 * MemoryConstants::megaByte; - do { - alignment >>= 1; - memoryManager->validateAllocateProperties = [alignment](const AllocationProperties &properties) { - EXPECT_EQ(properties.alignment, alignUp(alignment, MemoryConstants::pageSize)); - }; - void *ptr = nullptr; - ze_result_t result = context->allocHostMem(&hostDesc, size, alignment, &ptr); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - EXPECT_NE(nullptr, ptr); - if (alignment != 0) { - EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr)); - } - result = context->freeMem(ptr); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - } while (alignment != 0); -} - -TEST_F(MemoryTest, whenAllocatingSharedMemoryThenAlignmentIsPassedCorrectlyAndMemoryIsAligned) { - const size_t size = 1; - - ze_device_mem_alloc_desc_t deviceDesc = {}; - deviceDesc.stype = ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC; - deviceDesc.pNext = nullptr; - - ze_host_mem_alloc_desc_t hostDesc = {}; - hostDesc.stype = ZE_STRUCTURE_TYPE_HOST_MEM_ALLOC_DESC; - hostDesc.pNext = nullptr; - - auto memoryManager = static_cast(neoDevice->getMemoryManager()); - - size_t alignment = 8 * MemoryConstants::megaByte; - do { - alignment >>= 1; - memoryManager->validateAllocateProperties = [alignment](const AllocationProperties &properties) { - EXPECT_EQ(properties.alignment, alignUp(alignment, MemoryConstants::pageSize64k)); - }; - void *ptr = nullptr; - ze_result_t result = context->allocSharedMem(device->toHandle(), &deviceDesc, &hostDesc, size, alignment, &ptr); - EXPECT_EQ(ZE_RESULT_SUCCESS, result); - EXPECT_NE(nullptr, ptr); - if (alignment != 0) { - EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr)); - } result = context->freeMem(ptr); EXPECT_EQ(ZE_RESULT_SUCCESS, result); } while (alignment != 0); diff --git a/shared/source/memory_manager/os_agnostic_memory_manager.cpp b/shared/source/memory_manager/os_agnostic_memory_manager.cpp index 44c0d76473..a9ae4e856f 100644 --- a/shared/source/memory_manager/os_agnostic_memory_manager.cpp +++ b/shared/source/memory_manager/os_agnostic_memory_manager.cpp @@ -457,8 +457,7 @@ GraphicsAllocation *OsAgnosticMemoryManager::allocateMemoryByKMD(const Allocatio GraphicsAllocation *alloc = nullptr; - const size_t alignment = std::max(allocationData.alignment, MemoryConstants::pageSize); - auto ptr = allocateSystemMemory(alignUp(allocationData.size, alignment), alignment); + auto ptr = allocateSystemMemory(alignUp(allocationData.size, MemoryConstants::pageSize), MemoryConstants::pageSize); if (ptr != nullptr) { alloc = createMemoryAllocation(allocationData.type, ptr, ptr, reinterpret_cast(ptr), allocationData.size, counter, MemoryPool::SystemCpuInaccessible, allocationData.rootDeviceIndex, allocationData.flags.uncacheable, allocationData.flags.flushL3, false); diff --git a/shared/source/memory_manager/unified_memory_manager.cpp b/shared/source/memory_manager/unified_memory_manager.cpp index 4e758be26c..a96d9ef57e 100644 --- a/shared/source/memory_manager/unified_memory_manager.cpp +++ b/shared/source/memory_manager/unified_memory_manager.cpp @@ -195,8 +195,8 @@ void *SVMAllocsManager::createSVMAlloc(size_t size, const SvmAllocationPropertie void *SVMAllocsManager::createHostUnifiedMemoryAllocation(size_t size, const UnifiedMemoryProperties &memoryProperties) { - size_t pageSizeForAlignment = alignUp(memoryProperties.alignment, MemoryConstants::pageSize); - size_t alignedSize = alignUp(size, MemoryConstants::pageSize); + size_t pageSizeForAlignment = MemoryConstants::pageSize; + size_t alignedSize = alignUp(size, pageSizeForAlignment); bool compressionEnabled = false; AllocationType allocationType = getGraphicsAllocationTypeAndCompressionPreference(memoryProperties, compressionEnabled); @@ -213,7 +213,6 @@ void *SVMAllocsManager::createHostUnifiedMemoryAllocation(size_t size, false, (deviceBitfield.count() > 1) && multiOsContextSupport, deviceBitfield}; - unifiedMemoryProperties.alignment = pageSizeForAlignment; unifiedMemoryProperties.flags.preferCompressed = compressionEnabled; unifiedMemoryProperties.flags.shareable = memoryProperties.allocationFlags.flags.shareable; unifiedMemoryProperties.flags.isUSMHostAllocation = true; @@ -376,8 +375,8 @@ void *SVMAllocsManager::createUnifiedKmdMigratedAllocation(size_t size, const Sv auto rootDeviceIndex = unifiedMemoryProperties.getRootDeviceIndex(); auto &deviceBitfield = unifiedMemoryProperties.subdeviceBitfields.at(rootDeviceIndex); - size_t pageSizeForAlignment = std::max(alignUp(unifiedMemoryProperties.alignment, MemoryConstants::pageSize2Mb), MemoryConstants::pageSize2Mb); - size_t alignedSize = alignUp(size, 2 * MemoryConstants::megaByte); + size_t pageSizeForAlignment = 2 * MemoryConstants::megaByte; + size_t alignedSize = alignUp(size, pageSizeForAlignment); AllocationProperties gpuProperties{rootDeviceIndex, true, alignedSize, @@ -578,15 +577,15 @@ void *SVMAllocsManager::createUnifiedAllocationWithDeviceStorage(size_t size, co auto rootDeviceIndex = unifiedMemoryProperties.getRootDeviceIndex(); auto externalPtr = reinterpret_cast(unifiedMemoryProperties.allocationFlags.hostptr); bool useExternalHostPtrForCpu = externalPtr != nullptr; - const auto pageSizeForAlignment = alignUp(unifiedMemoryProperties.alignment, MemoryConstants::pageSize64k); - size_t alignedSize = alignUp(size, MemoryConstants::pageSize64k); + constexpr auto pageSizeForAlignment = MemoryConstants::pageSize64k; + size_t alignedSize = alignUp(size, pageSizeForAlignment); DeviceBitfield subDevices = unifiedMemoryProperties.subdeviceBitfields.at(rootDeviceIndex); AllocationProperties cpuProperties{rootDeviceIndex, !useExternalHostPtrForCpu, // allocateMemory alignedSize, AllocationType::SVM_CPU, false, // isMultiStorageAllocation subDevices}; - cpuProperties.alignment = std::max(pageSizeForAlignment, memoryManager->peekExecutionEnvironment().rootDeviceEnvironments[rootDeviceIndex]->getProductHelper().getSvmCpuAlignment()); + cpuProperties.alignment = memoryManager->peekExecutionEnvironment().rootDeviceEnvironments[rootDeviceIndex]->getProductHelper().getSvmCpuAlignment(); cpuProperties.flags.isUSMHostAllocation = useExternalHostPtrForCpu; cpuProperties.forceKMDAllocation = true; cpuProperties.makeGPUVaDifferentThanCPUPtr = true; diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index 30cede5a2b..9a137f11eb 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -619,7 +619,7 @@ GraphicsAllocation *DrmMemoryManager::allocateMemoryByKMD(const AllocationData & auto gmm = std::make_unique(executionEnvironment.rootDeviceEnvironments[allocationData.rootDeviceIndex]->getGmmHelper(), allocationData.hostPtr, allocationData.size, 0u, CacheSettingsHelper::getGmmUsageType(allocationData.type, allocationData.flags.uncacheable, productHelper), false, systemMemoryStorageInfo, true); size_t bufferSize = allocationData.size; - uint64_t gpuRange = acquireGpuRangeWithCustomAlignment(bufferSize, allocationData.rootDeviceIndex, HeapIndex::HEAP_STANDARD64KB, allocationData.alignment); + uint64_t gpuRange = acquireGpuRange(bufferSize, allocationData.rootDeviceIndex, HeapIndex::HEAP_STANDARD64KB); GemCreate create{}; create.size = bufferSize; @@ -1602,9 +1602,6 @@ AllocationStatus getGpuAddress(const AlignmentSelector &alignmentSelector, HeapA alignment.heap = HeapIndex::HEAP_EXTENDED; } - if (alignment.alignment < allocationData.alignment) { - alignment.alignment = allocationData.alignment; - } gpuAddress = gmmHelper->canonize(gfxPartition->heapAllocateWithCustomAlignment(alignment.heap, sizeAllocated, alignment.alignment)); break; } diff --git a/shared/source/utilities/heap_allocator.cpp b/shared/source/utilities/heap_allocator.cpp index 2c1a7cd129..b27114889a 100644 --- a/shared/source/utilities/heap_allocator.cpp +++ b/shared/source/utilities/heap_allocator.cpp @@ -19,7 +19,7 @@ bool operator<(const HeapChunk &hc1, const HeapChunk &hc2) { } uint64_t HeapAllocator::allocateWithCustomAlignment(size_t &sizeToAllocate, size_t alignment) { - if (alignment < this->allocationAlignment) { + if (alignment == 0) { alignment = this->allocationAlignment; } diff --git a/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp b/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp index d2145d1b7d..65ae88c1e6 100644 --- a/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp +++ b/shared/test/unit_test/memory_manager/unified_memory_manager_tests.cpp @@ -267,56 +267,6 @@ TEST_F(SVMLocalMemoryAllocatorTest, givenForceMemoryPrefetchForKmdMigratedShared svmManager->freeSVMAlloc(ptr); } -TEST_F(SVMLocalMemoryAllocatorTest, givenAlignmentThenUnifiedMemoryAllocationsAreAlignedCorrectly) { - std::unique_ptr deviceFactory(new UltDeviceFactory(1, 2)); - auto device = deviceFactory->rootDevices[0]; - auto memoryManager = static_cast(device->getMemoryManager()); - auto svmManager = std::make_unique(memoryManager, false); - auto csr = std::make_unique(*device->getExecutionEnvironment(), device->getRootDeviceIndex(), device->getDeviceBitfield()); - csr->setupContext(*device->getDefaultEngine().osContext); - - size_t alignment = 8 * MemoryConstants::megaByte; - do { - alignment >>= 1; - memoryManager->validateAllocateProperties = [alignment](const AllocationProperties &properties) { - EXPECT_EQ(properties.alignment, alignUp(alignment, MemoryConstants::pageSize64k)); - }; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, alignment, rootDeviceIndices, deviceBitfields); - unifiedMemoryProperties.device = device; - auto ptr = svmManager->createUnifiedMemoryAllocation(1, unifiedMemoryProperties); - EXPECT_NE(nullptr, ptr); - if (alignment != 0) { - EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr)); - } - svmManager->freeSVMAlloc(ptr); - } while (alignment != 0); -} - -TEST_F(SVMLocalMemoryAllocatorTest, givenAlignmentThenHostUnifiedMemoryAllocationsAreAlignedCorrectly) { - std::unique_ptr deviceFactory(new UltDeviceFactory(1, 2)); - auto device = deviceFactory->rootDevices[0]; - auto memoryManager = static_cast(device->getMemoryManager()); - auto svmManager = std::make_unique(memoryManager, false); - auto csr = std::make_unique(*device->getExecutionEnvironment(), device->getRootDeviceIndex(), device->getDeviceBitfield()); - csr->setupContext(*device->getDefaultEngine().osContext); - - size_t alignment = 8 * MemoryConstants::megaByte; - do { - alignment >>= 1; - memoryManager->validateAllocateProperties = [alignment](const AllocationProperties &properties) { - EXPECT_EQ(properties.alignment, alignUp(alignment, MemoryConstants::pageSize)); - }; - SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::HOST_UNIFIED_MEMORY, alignment, rootDeviceIndices, deviceBitfields); - unifiedMemoryProperties.device = device; - auto ptr = svmManager->createHostUnifiedMemoryAllocation(1, unifiedMemoryProperties); - EXPECT_NE(nullptr, ptr); - if (alignment != 0) { - EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr)); - } - svmManager->freeSVMAlloc(ptr); - } while (alignment != 0); -} - TEST_F(SVMLocalMemoryAllocatorTest, givenAlignmentThenSharedUnifiedMemoryAllocationsAreAlignedCorrectly) { std::unique_ptr deviceFactory(new UltDeviceFactory(1, 2)); auto device = deviceFactory->rootDevices[0]; @@ -325,10 +275,6 @@ TEST_F(SVMLocalMemoryAllocatorTest, givenAlignmentThenSharedUnifiedMemoryAllocat auto csr = std::make_unique(*device->getExecutionEnvironment(), device->getRootDeviceIndex(), device->getDeviceBitfield()); csr->setupContext(*device->getDefaultEngine().osContext); - void *cmdQ = reinterpret_cast(0x12345); - auto mockPageFaultManager = new MockPageFaultManager(); - memoryManager->pageFaultManager.reset(mockPageFaultManager); - size_t alignment = 8 * MemoryConstants::megaByte; do { alignment >>= 1; @@ -337,7 +283,7 @@ TEST_F(SVMLocalMemoryAllocatorTest, givenAlignmentThenSharedUnifiedMemoryAllocat }; SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::SHARED_UNIFIED_MEMORY, alignment, rootDeviceIndices, deviceBitfields); unifiedMemoryProperties.device = device; - auto ptr = svmManager->createSharedUnifiedMemoryAllocation(1, unifiedMemoryProperties, cmdQ); + auto ptr = svmManager->createUnifiedMemoryAllocation(1, unifiedMemoryProperties); EXPECT_NE(nullptr, ptr); if (alignment != 0) { EXPECT_EQ(reinterpret_cast(ptr) & (~(alignment - 1)), reinterpret_cast(ptr));