From 2d949a9f3da586eb9bd083b9e680df79158ae0d2 Mon Sep 17 00:00:00 2001 From: Dominik Dabek Date: Thu, 25 Aug 2022 16:56:19 +0000 Subject: [PATCH] Fix device allocation cache Do not use aligned size when storing allocation Trim allocation cache before deleting devices Related-To: NEO-6893 Signed-off-by: Dominik Dabek --- level_zero/core/source/driver/driver_handle_imp.cpp | 3 +++ shared/source/memory_manager/unified_memory_manager.cpp | 3 +-- .../memory_manager/unified_memory_manager_cache_tests.cpp | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/level_zero/core/source/driver/driver_handle_imp.cpp b/level_zero/core/source/driver/driver_handle_imp.cpp index bfc12a5d24..1f25e95a0a 100644 --- a/level_zero/core/source/driver/driver_handle_imp.cpp +++ b/level_zero/core/source/driver/driver_handle_imp.cpp @@ -151,6 +151,9 @@ ze_result_t DriverHandleImp::getExtensionProperties(uint32_t *pCount, DriverHandleImp::~DriverHandleImp() { if (memoryManager != nullptr) { memoryManager->peekExecutionEnvironment().prepareForCleanup(); + if (this->svmAllocsManager) { + this->svmAllocsManager->trimUSMDeviceAllocCache(); + } } for (auto &device : this->devices) { diff --git a/shared/source/memory_manager/unified_memory_manager.cpp b/shared/source/memory_manager/unified_memory_manager.cpp index cdc03976bf..c6e1b0e7ea 100644 --- a/shared/source/memory_manager/unified_memory_manager.cpp +++ b/shared/source/memory_manager/unified_memory_manager.cpp @@ -396,8 +396,7 @@ bool SVMAllocsManager::freeSVMAlloc(void *ptr, bool blocking) { if (svmData) { if (InternalMemoryType::DEVICE_UNIFIED_MEMORY == svmData->memoryType && this->usmDeviceAllocationsCacheEnabled) { - size_t alignedSize = alignUp(svmData->size, svmData->pageSizeForAlignment); - this->usmDeviceAllocationsCache.insert(alignedSize, ptr); + this->usmDeviceAllocationsCache.insert(svmData->size, ptr); return true; } this->freeSVMAllocImpl(ptr, blocking, svmData); diff --git a/shared/test/unit_test/memory_manager/unified_memory_manager_cache_tests.cpp b/shared/test/unit_test/memory_manager/unified_memory_manager_cache_tests.cpp index ea3a25e54c..3e7ca95a14 100644 --- a/shared/test/unit_test/memory_manager/unified_memory_manager_cache_tests.cpp +++ b/shared/test/unit_test/memory_manager/unified_memory_manager_cache_tests.cpp @@ -82,8 +82,11 @@ TEST(SvmDeviceAllocationCacheTest, givenAllocationsWithDifferentSizesWhenAllocat auto testDataset = std::vector( { {(allocationSizeBasis << 0), nullptr}, + {(allocationSizeBasis << 0) + 1, nullptr}, {(allocationSizeBasis << 1), nullptr}, + {(allocationSizeBasis << 1) + 1, nullptr}, {(allocationSizeBasis << 2), nullptr}, + {(allocationSizeBasis << 2) + 1, nullptr}, }); SVMAllocsManager::UnifiedMemoryProperties unifiedMemoryProperties(InternalMemoryType::DEVICE_UNIFIED_MEMORY, rootDeviceIndices, deviceBitfields);