From 07e5aaa44c818d7cc77e8315acc08d9e684a84e5 Mon Sep 17 00:00:00 2001 From: Bartosz Dunajski Date: Tue, 2 Jun 2020 13:38:02 +0200 Subject: [PATCH] Use HwHelper to set extra AllocationData Change-Id: I29d38b845287c169e538f78da2a7f0e58e589754 Signed-off-by: Bartosz Dunajski --- .../aub_mem_dump/aub_alloc_dump_tests.cpp | 2 +- .../memory_manager/memory_manager_tests.cpp | 16 +++++----- .../mocks/linux/mock_drm_memory_manager.h | 1 - .../unit_test/mocks/mock_memory_manager.h | 3 -- ..._manager_allocate_in_device_pool_tests.cpp | 2 -- .../linux/drm_memory_manager_tests.cpp | 12 ++++---- .../linux/drm_memory_manager_tests.h | 2 -- shared/source/helpers/hw_helper.h | 5 ++++ shared/source/helpers/hw_helper_base.inl | 4 +++ shared/source/memory_manager/CMakeLists.txt | 1 - .../memory_manager/allocation_properties.h | 29 ++++++++++++++++++ .../source/memory_manager/memory_manager.cpp | 4 ++- shared/source/memory_manager/memory_manager.h | 30 ------------------- .../memory_manager/memory_manager_extra.cpp | 14 --------- 14 files changed, 56 insertions(+), 69 deletions(-) delete mode 100644 shared/source/memory_manager/memory_manager_extra.cpp diff --git a/opencl/test/unit_test/aub_mem_dump/aub_alloc_dump_tests.cpp b/opencl/test/unit_test/aub_mem_dump/aub_alloc_dump_tests.cpp index 7fc46425db..76e5d819fc 100644 --- a/opencl/test/unit_test/aub_mem_dump/aub_alloc_dump_tests.cpp +++ b/opencl/test/unit_test/aub_mem_dump/aub_alloc_dump_tests.cpp @@ -447,7 +447,7 @@ HWTEST_P(AubSurfaceDumpTests, givenGraphicsAllocationWhenGetDumpSurfaceIsCalledA imgDesc.image_type = CL_MEM_OBJECT_IMAGE2D; auto imgInfo = MockGmm::initImgInfo(imgDesc, 0, nullptr); MockGmm::queryImgParams(pDevice->getGmmClientContext(), imgInfo); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; auto imageAllocation = memoryManager.allocateGraphicsMemoryForImage(allocationData); ASSERT_NE(nullptr, imageAllocation); diff --git a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp index 9a3e553ccd..a6872f7bf7 100644 --- a/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/opencl/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -380,7 +380,7 @@ TEST_F(MemoryAllocatorTest, GivenPointerAndSizeWhenAskedToCreateGrahicsAllocatio handleStorage.fragmentStorageData[1].fragmentSize = size * 2; handleStorage.fragmentStorageData[2].fragmentSize = size * 3; - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.size = size; allocationData.hostPtr = ptr; auto allocation = std::unique_ptr(memoryManager->createGraphicsAllocation(handleStorage, allocationData)); @@ -456,7 +456,7 @@ TEST_F(MemoryAllocatorTest, givenAllocationWithFragmentsWhenCallingFreeGraphicsM } TEST_F(MemoryAllocatorTest, GivenShareableEnabledAndDisabledWhenAskedToCreateGrahicsAllocationThenValidAllocationIsReturned) { - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.type = GraphicsAllocation::AllocationType::BUFFER; allocationData.flags.shareable = 1u; @@ -664,7 +664,7 @@ TEST(OsAgnosticMemoryManager, givenDefaultMemoryManagerWhenAllocateGraphicsMemor imgDesc.image_type = CL_MEM_OBJECT_IMAGE2D; auto imgInfo = MockGmm::initImgInfo(imgDesc, 0, nullptr); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; auto imageAllocation = memoryManager.allocateGraphicsMemoryForImage(allocationData); @@ -683,7 +683,7 @@ TEST(OsAgnosticMemoryManager, givenEnabledLocalMemoryWhenAllocateGraphicsMemoryF imgDesc.image_type = CL_MEM_OBJECT_IMAGE2D; auto imgInfo = MockGmm::initImgInfo(imgDesc, 0, nullptr); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; auto imageAllocation = memoryManager.allocateGraphicsMemoryForImage(allocationData); @@ -719,7 +719,7 @@ TEST(OsAgnosticMemoryManager, givenHostPointerNotRequiringCopyWhenAllocateGraphi bool copyRequired = MockMemoryManager::isCopyRequired(imgInfo, hostPtr); EXPECT_FALSE(copyRequired); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.hostPtr = hostPtr; allocationData.size = imgInfo.size; @@ -758,7 +758,7 @@ TEST(OsAgnosticMemoryManager, givenHostPointerRequiringCopyWhenAllocateGraphicsM bool copyRequired = MockMemoryManager::isCopyRequired(imgInfo, hostPtr); EXPECT_TRUE(copyRequired); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.hostPtr = hostPtr; @@ -1277,7 +1277,7 @@ TEST(MemoryManager, givenSharedResourceCopyWhenAllocatingGraphicsMemoryThenAlloc imgDesc.image_type = CL_MEM_OBJECT_IMAGE2D; auto imgInfo = MockGmm::initImgInfo(imgDesc, 0, nullptr); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.type = GraphicsAllocation::AllocationType::SHARED_RESOURCE_COPY; @@ -1291,7 +1291,7 @@ TEST(MemoryManager, givenShareableWhenAllocatingGraphicsMemoryThenAllocateSharea ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); MockMemoryManager memoryManager(false, true, *executionEnvironment); - MockMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.size = 4096u; allocationData.type = GraphicsAllocation::AllocationType::BUFFER; allocationData.flags.shareable = true; diff --git a/opencl/test/unit_test/mocks/linux/mock_drm_memory_manager.h b/opencl/test/unit_test/mocks/linux/mock_drm_memory_manager.h index c82a8ca2fe..537260b85d 100644 --- a/opencl/test/unit_test/mocks/linux/mock_drm_memory_manager.h +++ b/opencl/test/unit_test/mocks/linux/mock_drm_memory_manager.h @@ -53,7 +53,6 @@ class TestedDrmMemoryManager : public MemoryManagerCreate { using DrmMemoryManager::allocateGraphicsMemoryWithAlignment; using DrmMemoryManager::allocateGraphicsMemoryWithHostPtr; using DrmMemoryManager::allocateShareableMemory; - using DrmMemoryManager::AllocationData; using DrmMemoryManager::allocUserptr; using DrmMemoryManager::createGraphicsAllocation; using DrmMemoryManager::createSharedBufferObject; diff --git a/opencl/test/unit_test/mocks/mock_memory_manager.h b/opencl/test/unit_test/mocks/mock_memory_manager.h index 5f46d1ee3f..3dcf0aa23e 100644 --- a/opencl/test/unit_test/mocks/mock_memory_manager.h +++ b/opencl/test/unit_test/mocks/mock_memory_manager.h @@ -35,7 +35,6 @@ class MockMemoryManager : public MemoryManagerCreate { using MemoryManager::allocateGraphicsMemoryInPreferredPool; using MemoryManager::allocateGraphicsMemoryWithAlignment; using MemoryManager::allocateGraphicsMemoryWithProperties; - using MemoryManager::AllocationData; using MemoryManager::createGraphicsAllocation; using MemoryManager::createStorageInfoFromProperties; using MemoryManager::getAllocationData; @@ -134,8 +133,6 @@ class MockMemoryManager : public MemoryManagerCreate { DeviceBitfield recentlyPassedDeviceBitfield{}; }; -using AllocationData = MockMemoryManager::AllocationData; - class GMockMemoryManager : public MockMemoryManager { public: GMockMemoryManager(const ExecutionEnvironment &executionEnvironment) : MockMemoryManager(const_cast(executionEnvironment)){}; diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_allocate_in_device_pool_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_allocate_in_device_pool_tests.cpp index b746a1808f..b4b0fdd89c 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_allocate_in_device_pool_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_allocate_in_device_pool_tests.cpp @@ -19,8 +19,6 @@ using namespace NEO; -using AllocationData = TestedDrmMemoryManager::AllocationData; - TEST(DrmMemoryManagerSimpleTest, givenDrmMemoryManagerWhenAllocateInDevicePoolIsCalledThenNullptrAndStatusRetryIsReturned) { MockExecutionEnvironment executionEnvironment(defaultHwInfo.get()); executionEnvironment.rootDeviceEnvironments[0]->osInterface = std::make_unique(); diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index 0dcbaa378c..ccd4b42260 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -1095,7 +1095,7 @@ TEST_F(DrmMemoryManagerTest, givenMemoryManagerWhenAskedForAllocationWithAlignme mock->ioctl_expected.gemUserptr = 1; mock->ioctl_expected.gemClose = 1; - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; // emulate GPU address space exhaust memoryManager->forceLimitedRangeAllocator(0xFFFFFFFFF); @@ -1286,7 +1286,7 @@ TEST_F(DrmMemoryManagerTest, GivenMemoryManagerWhenAllocateGraphicsMemoryForImag imgInfo.size = 4096u; imgInfo.rowPitch = 512u; - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.rootDeviceIndex = rootDeviceIndex; @@ -1692,7 +1692,7 @@ TEST_F(DrmMemoryManagerTest, givenHostPointerNotRequiringCopyWhenAllocateGraphic bool copyRequired = MockMemoryManager::isCopyRequired(imgInfo, hostPtr); EXPECT_FALSE(copyRequired); - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.hostPtr = hostPtr; allocationData.rootDeviceIndex = rootDeviceIndex; @@ -2189,7 +2189,7 @@ TEST_F(DrmMemoryManagerTest, givenDrmMemoryManagerWhenLockUnlockIsCalledOnAlloca imgInfo.size = 4096u; imgInfo.rowPitch = 512u; - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.imgInfo = &imgInfo; allocationData.rootDeviceIndex = rootDeviceIndex; @@ -3443,7 +3443,7 @@ TEST_F(DrmMemoryManagerTest, givenSvmCpuAllocationWhenSizeAndAlignmentProvidedTh mock->ioctl_expected.gemWait = 1; mock->ioctl_expected.gemClose = 1; - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.size = 2 * MemoryConstants::megaByte; allocationData.alignment = 2 * MemoryConstants::megaByte; allocationData.type = GraphicsAllocation::AllocationType::SVM_CPU; @@ -3482,7 +3482,7 @@ TEST_F(DrmMemoryManagerTest, givenSvmCpuAllocationWhenSizeAndAlignmentProvidedBu memoryManager->getGfxPartition(rootDeviceIndex)->heapInit(HeapIndex::HEAP_STANDARD, 0, 0); - TestedDrmMemoryManager::AllocationData allocationData; + AllocationData allocationData; allocationData.size = 2 * MemoryConstants::megaByte; allocationData.alignment = 2 * MemoryConstants::megaByte; allocationData.type = GraphicsAllocation::AllocationType::SVM_CPU; diff --git a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.h b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.h index 98b1cc6ebf..8d405f4892 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.h +++ b/opencl/test/unit_test/os_interface/linux/drm_memory_manager_tests.h @@ -21,8 +21,6 @@ namespace NEO { -using AllocationData = TestedDrmMemoryManager::AllocationData; - class DrmMemoryManagerBasic : public ::testing::Test { public: DrmMemoryManagerBasic() : executionEnvironment(defaultHwInfo.get(), false, numRootDevices){}; diff --git a/shared/source/helpers/hw_helper.h b/shared/source/helpers/hw_helper.h index d5b97916f1..0cad54c477 100644 --- a/shared/source/helpers/hw_helper.h +++ b/shared/source/helpers/hw_helper.h @@ -23,6 +23,8 @@ namespace NEO { class GmmHelper; class GraphicsAllocation; +struct AllocationData; +struct AllocationProperties; struct HardwareCapabilities; struct RootDeviceEnvironment; struct PipeControlArgs; @@ -91,6 +93,7 @@ class HwHelper { virtual bool isIndependentForwardProgressSupported() = 0; virtual uint64_t getGpuTimeStampInNS(uint64_t timeStamp, double frequency) const = 0; virtual uint32_t getBindlessSurfaceExtendedMessageDescriptorValue(uint32_t surfStateOffset) const = 0; + virtual void setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties) const = 0; virtual bool isSpecialWorkgroupSizeRequired(const HardwareInfo &hwInfo, bool isSimulation) const = 0; virtual uint32_t getGlobalTimeStampBits() const = 0; @@ -255,6 +258,8 @@ class HwHelperHw : public HwHelper { uint32_t getGlobalTimeStampBits() const override; + void setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties) const override; + protected: static const AuxTranslationMode defaultAuxTranslationMode; HwHelperHw() = default; diff --git a/shared/source/helpers/hw_helper_base.inl b/shared/source/helpers/hw_helper_base.inl index 90fd50c96b..496fb06309 100644 --- a/shared/source/helpers/hw_helper_base.inl +++ b/shared/source/helpers/hw_helper_base.inl @@ -13,6 +13,7 @@ #include "shared/source/helpers/hw_helper.h" #include "shared/source/helpers/hw_info.h" #include "shared/source/helpers/preamble.h" +#include "shared/source/memory_manager/allocation_properties.h" #include "shared/source/memory_manager/graphics_allocation.h" #include "shared/source/os_interface/os_interface.h" @@ -380,4 +381,7 @@ const StackVec HwHelperHw::getDeviceSubGroupSizes() const return {8, 16, 32}; } +template +void HwHelperHw::setExtraAllocationData(AllocationData &allocationData, const AllocationProperties &properties) const {} + } // namespace NEO diff --git a/shared/source/memory_manager/CMakeLists.txt b/shared/source/memory_manager/CMakeLists.txt index b672ffd658..7e8ab93faa 100644 --- a/shared/source/memory_manager/CMakeLists.txt +++ b/shared/source/memory_manager/CMakeLists.txt @@ -32,7 +32,6 @@ set(NEO_CORE_MEMORY_MANAGER ${CMAKE_CURRENT_SOURCE_DIR}/local_memory_usage.h ${CMAKE_CURRENT_SOURCE_DIR}/memory_manager.cpp ${CMAKE_CURRENT_SOURCE_DIR}/memory_manager.h - ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/memory_manager_extra.cpp ${CMAKE_CURRENT_SOURCE_DIR}/memory_operations_handler.h ${CMAKE_CURRENT_SOURCE_DIR}/memory_operations_status.h ${CMAKE_CURRENT_SOURCE_DIR}/memory_pool.h diff --git a/shared/source/memory_manager/allocation_properties.h b/shared/source/memory_manager/allocation_properties.h index 8fde7f2d8e..605e0bba27 100644 --- a/shared/source/memory_manager/allocation_properties.h +++ b/shared/source/memory_manager/allocation_properties.h @@ -75,4 +75,33 @@ struct AllocationProperties { flags.multiOsContextCapable = multiOsContextCapableParam; } }; + +struct AllocationData { + union { + struct { + uint32_t allocateMemory : 1; + uint32_t allow64kbPages : 1; + uint32_t allow32Bit : 1; + uint32_t useSystemMemory : 1; + uint32_t forcePin : 1; + uint32_t uncacheable : 1; + uint32_t flushL3 : 1; + uint32_t preferRenderCompressed : 1; + uint32_t multiOsContextCapable : 1; + uint32_t requiresCpuAccess : 1; + uint32_t shareable : 1; + uint32_t resource48Bit : 1; + uint32_t reserved : 20; + } flags; + uint32_t allFlags = 0; + }; + static_assert(sizeof(AllocationData::flags) == sizeof(AllocationData::allFlags), ""); + GraphicsAllocation::AllocationType type = GraphicsAllocation::AllocationType::UNKNOWN; + const void *hostPtr = nullptr; + size_t size = 0; + size_t alignment = 0; + StorageInfo storageInfo = {}; + ImageInfo *imgInfo = nullptr; + uint32_t rootDeviceIndex = 0; +}; } // namespace NEO diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index fa3e2d3b89..5a3b46333d 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -348,7 +348,9 @@ bool MemoryManager::getAllocationData(AllocationData &allocationData, const Allo allocationData.rootDeviceIndex = properties.rootDeviceIndex; - getAllocationDataExtra(allocationData, properties); + auto hwInfo = executionEnvironment.rootDeviceEnvironments[properties.rootDeviceIndex]->getHardwareInfo(); + HwHelper::get(hwInfo->platform.eRenderCoreFamily).setExtraAllocationData(allocationData, properties); + return true; } diff --git a/shared/source/memory_manager/memory_manager.h b/shared/source/memory_manager/memory_manager.h index dd3e7c6d44..9153c297a1 100644 --- a/shared/source/memory_manager/memory_manager.h +++ b/shared/source/memory_manager/memory_manager.h @@ -168,37 +168,7 @@ class MemoryManager { virtual bool isCpuCopyRequired(const void *ptr) { return false; } protected: - struct AllocationData { - union { - struct { - uint32_t allocateMemory : 1; - uint32_t allow64kbPages : 1; - uint32_t allow32Bit : 1; - uint32_t useSystemMemory : 1; - uint32_t forcePin : 1; - uint32_t uncacheable : 1; - uint32_t flushL3 : 1; - uint32_t preferRenderCompressed : 1; - uint32_t multiOsContextCapable : 1; - uint32_t requiresCpuAccess : 1; - uint32_t shareable : 1; - uint32_t resource48Bit : 1; - uint32_t reserved : 20; - } flags; - uint32_t allFlags = 0; - }; - static_assert(sizeof(AllocationData::flags) == sizeof(AllocationData::allFlags), ""); - GraphicsAllocation::AllocationType type = GraphicsAllocation::AllocationType::UNKNOWN; - const void *hostPtr = nullptr; - size_t size = 0; - size_t alignment = 0; - StorageInfo storageInfo = {}; - ImageInfo *imgInfo = nullptr; - uint32_t rootDeviceIndex = 0; - }; - bool getAllocationData(AllocationData &allocationData, const AllocationProperties &properties, const void *hostPtr, const StorageInfo &storageInfo); - void getAllocationDataExtra(AllocationData &allocationData, const AllocationProperties &properties); static void overrideAllocationData(AllocationData &allocationData, const AllocationProperties &properties); static bool useInternal32BitAllocator(GraphicsAllocation::AllocationType allocationType) { return allocationType == GraphicsAllocation::AllocationType::KERNEL_ISA || diff --git a/shared/source/memory_manager/memory_manager_extra.cpp b/shared/source/memory_manager/memory_manager_extra.cpp deleted file mode 100644 index 2d08efbe96..0000000000 --- a/shared/source/memory_manager/memory_manager_extra.cpp +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright (C) 2020 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "shared/source/memory_manager/memory_manager.h" - -namespace NEO { -void MemoryManager::getAllocationDataExtra(AllocationData &allocationData, const AllocationProperties &properties) { -} - -} // namespace NEO