From 9b26e96b113bdcc7c67ba94fe30c368adb349898 Mon Sep 17 00:00:00 2001 From: Patryk Wrobel Date: Thu, 20 Oct 2022 22:18:08 +0000 Subject: [PATCH] Do not copy std::vector of OS handles when it is not needed This change replaces unneeded copying of std::vectors with usage of const references. Furthermore, it adds reserve() call before filling the container via push_back(). Signed-off-by: Patryk Wrobel --- level_zero/core/source/context/context_imp.cpp | 2 ++ level_zero/core/source/driver/driver_handle_imp.cpp | 2 +- level_zero/core/source/driver/driver_handle_imp.h | 2 +- .../core/test/unit_tests/fixtures/memory_ipc_fixture.h | 6 +++--- .../core/test/unit_tests/sources/event/test_event.cpp | 2 +- shared/source/memory_manager/memory_manager.h | 2 +- shared/source/memory_manager/os_agnostic_memory_manager.cpp | 2 +- shared/source/memory_manager/os_agnostic_memory_manager.h | 2 +- shared/source/os_interface/linux/drm_memory_manager.cpp | 2 +- shared/source/os_interface/linux/drm_memory_manager.h | 2 +- shared/source/os_interface/windows/wddm_memory_manager.cpp | 2 +- shared/source/os_interface/windows/wddm_memory_manager.h | 2 +- shared/test/common/mocks/mock_memory_manager.h | 2 +- shared/test/unit_test/device/neo_device_tests.cpp | 2 +- 14 files changed, 17 insertions(+), 15 deletions(-) diff --git a/level_zero/core/source/context/context_imp.cpp b/level_zero/core/source/context/context_imp.cpp index 0538532378..cabfc3889e 100644 --- a/level_zero/core/source/context/context_imp.cpp +++ b/level_zero/core/source/context/context_imp.cpp @@ -508,6 +508,8 @@ ze_result_t ContextImp::openIpcMemHandles(ze_device_handle_t hDevice, ze_ipc_memory_flags_t flags, void **pptr) { std::vector handles; + handles.reserve(numIpcHandles); + for (uint32_t i = 0; i < numIpcHandles; i++) { uint64_t handle = 0; memcpy_s(&handle, diff --git a/level_zero/core/source/driver/driver_handle_imp.cpp b/level_zero/core/source/driver/driver_handle_imp.cpp index 1f93ded5ff..e431f423e4 100644 --- a/level_zero/core/source/driver/driver_handle_imp.cpp +++ b/level_zero/core/source/driver/driver_handle_imp.cpp @@ -513,7 +513,7 @@ void *DriverHandleImp::importFdHandle(NEO::Device *neoDevice, ze_ipc_memory_flag return reinterpret_cast(alloc->getGpuAddress()); } -void *DriverHandleImp::importFdHandles(NEO::Device *neoDevice, ze_ipc_memory_flags_t flags, std::vector handles, NEO::GraphicsAllocation **pAlloc) { +void *DriverHandleImp::importFdHandles(NEO::Device *neoDevice, ze_ipc_memory_flags_t flags, const std::vector &handles, NEO::GraphicsAllocation **pAlloc) { NEO::AllocationProperties unifiedMemoryProperties{neoDevice->getRootDeviceIndex(), MemoryConstants::pageSize, NEO::AllocationType::BUFFER, diff --git a/level_zero/core/source/driver/driver_handle_imp.h b/level_zero/core/source/driver/driver_handle_imp.h index 269c2f8bd8..18d28ea5c6 100644 --- a/level_zero/core/source/driver/driver_handle_imp.h +++ b/level_zero/core/source/driver/driver_handle_imp.h @@ -40,7 +40,7 @@ struct DriverHandleImp : public DriverHandle { NEO::MemoryManager *getMemoryManager() override; void setMemoryManager(NEO::MemoryManager *memoryManager) override; MOCKABLE_VIRTUAL void *importFdHandle(NEO::Device *neoDevice, ze_ipc_memory_flags_t flags, uint64_t handle, NEO::GraphicsAllocation **pAlloc); - MOCKABLE_VIRTUAL void *importFdHandles(NEO::Device *neoDevice, ze_ipc_memory_flags_t flags, std::vector handles, NEO::GraphicsAllocation **pAlloc); + MOCKABLE_VIRTUAL void *importFdHandles(NEO::Device *neoDevice, ze_ipc_memory_flags_t flags, const std::vector &handles, NEO::GraphicsAllocation **pAlloc); MOCKABLE_VIRTUAL void *importNTHandle(ze_device_handle_t hDevice, void *handle); ze_result_t checkMemoryAccessFromDevice(Device *device, const void *ptr) override; NEO::SVMAllocsManager *getSvmAllocsManager() override; diff --git a/level_zero/core/test/unit_tests/fixtures/memory_ipc_fixture.h b/level_zero/core/test/unit_tests/fixtures/memory_ipc_fixture.h index 89ff6dcc1b..6adf6cf08b 100644 --- a/level_zero/core/test/unit_tests/fixtures/memory_ipc_fixture.h +++ b/level_zero/core/test/unit_tests/fixtures/memory_ipc_fixture.h @@ -387,7 +387,7 @@ struct ContextGetIpcHandleMock : public L0::ContextImp { class MemoryManagerIpcMock : public NEO::MemoryManager { public: MemoryManagerIpcMock(NEO::ExecutionEnvironment &executionEnvironment) : NEO::MemoryManager(executionEnvironment) {} - NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } + NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } NEO::GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } void addAllocationToHostPtrManager(NEO::GraphicsAllocation *memory) override{}; void removeAllocationFromHostPtrManager(NEO::GraphicsAllocation *memory) override{}; @@ -490,7 +490,7 @@ class MemoryManagerOpenIpcMock : public MemoryManagerIpcMock { alloc->setGpuBaseAddress(0xabcd); return alloc; } - NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { + NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { if (failOnCreateGraphicsAllocationFromSharedHandle) { return nullptr; } @@ -656,7 +656,7 @@ class MemoryManagerIpcImplicitScalingMock : public NEO::MemoryManager { return alloc; } - NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { + NEO::GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { if (failOnCreateGraphicsAllocationFromSharedHandle) { return nullptr; } diff --git a/level_zero/core/test/unit_tests/sources/event/test_event.cpp b/level_zero/core/test/unit_tests/sources/event/test_event.cpp index d867fd98fe..05f3486a24 100644 --- a/level_zero/core/test/unit_tests/sources/event/test_event.cpp +++ b/level_zero/core/test/unit_tests/sources/event/test_event.cpp @@ -50,7 +50,7 @@ class MemoryManagerEventPoolFailMock : public NEO::MemoryManager { void *createMultiGraphicsAllocationInSystemMemoryPool(RootDeviceIndicesContainer &rootDeviceIndices, AllocationProperties &properties, NEO::MultiGraphicsAllocation &multiGraphicsAllocation) override { return nullptr; }; - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } NEO::GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } void addAllocationToHostPtrManager(NEO::GraphicsAllocation *memory) override{}; void removeAllocationFromHostPtrManager(NEO::GraphicsAllocation *memory) override{}; diff --git a/shared/source/memory_manager/memory_manager.h b/shared/source/memory_manager/memory_manager.h index ec9ddbda8b..c2a2a2aee9 100644 --- a/shared/source/memory_manager/memory_manager.h +++ b/shared/source/memory_manager/memory_manager.h @@ -91,7 +91,7 @@ class MemoryManager { virtual bool verifyHandle(osHandle handle, uint32_t rootDeviceIndex, bool) { return true; } virtual bool isNTHandle(osHandle handle, uint32_t rootDeviceIndex) { return false; } - virtual GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) = 0; + virtual GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) = 0; virtual GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) = 0; virtual void closeSharedHandle(GraphicsAllocation *graphicsAllocation){}; virtual GraphicsAllocation *createGraphicsAllocationFromNTHandle(void *handle, uint32_t rootDeviceIndex, AllocationType allocType) = 0; diff --git a/shared/source/memory_manager/os_agnostic_memory_manager.cpp b/shared/source/memory_manager/os_agnostic_memory_manager.cpp index 8b8133484c..295a2e23e4 100644 --- a/shared/source/memory_manager/os_agnostic_memory_manager.cpp +++ b/shared/source/memory_manager/os_agnostic_memory_manager.cpp @@ -235,7 +235,7 @@ GraphicsAllocation *OsAgnosticMemoryManager::allocate32BitGraphicsMemoryImpl(con return memoryAllocation; } -GraphicsAllocation *OsAgnosticMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { +GraphicsAllocation *OsAgnosticMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { return nullptr; } diff --git a/shared/source/memory_manager/os_agnostic_memory_manager.h b/shared/source/memory_manager/os_agnostic_memory_manager.h index 217f7dd485..1ef7712bf2 100644 --- a/shared/source/memory_manager/os_agnostic_memory_manager.h +++ b/shared/source/memory_manager/os_agnostic_memory_manager.h @@ -69,7 +69,7 @@ class OsAgnosticMemoryManager : public MemoryManager { OsAgnosticMemoryManager(bool aubUsage, ExecutionEnvironment &executionEnvironment); void initialize(bool aubUsage); ~OsAgnosticMemoryManager() override; - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; GraphicsAllocation *createGraphicsAllocationFromNTHandle(void *handle, uint32_t rootDeviceIndex, AllocationType allocType) override { return nullptr; } diff --git a/shared/source/os_interface/linux/drm_memory_manager.cpp b/shared/source/os_interface/linux/drm_memory_manager.cpp index 503f861873..2bba0acd05 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.cpp +++ b/shared/source/os_interface/linux/drm_memory_manager.cpp @@ -680,7 +680,7 @@ BufferObject *DrmMemoryManager::findAndReferenceSharedBufferObject(int boHandle, return bo; } -GraphicsAllocation *DrmMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { +GraphicsAllocation *DrmMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { BufferObjects bos; std::vector sizes; size_t totalSize = 0; diff --git a/shared/source/os_interface/linux/drm_memory_manager.h b/shared/source/os_interface/linux/drm_memory_manager.h index 07fd912c0f..96ef5d4ae5 100644 --- a/shared/source/os_interface/linux/drm_memory_manager.h +++ b/shared/source/os_interface/linux/drm_memory_manager.h @@ -36,7 +36,7 @@ class DrmMemoryManager : public MemoryManager { void freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation, bool isImportedAllocation) override; void handleFenceCompletion(GraphicsAllocation *allocation) override; GraphicsAllocation *createGraphicsAllocationFromExistingStorage(AllocationProperties &properties, void *ptr, MultiGraphicsAllocation &multiGraphicsAllocation) override; - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; void closeSharedHandle(GraphicsAllocation *gfxAllocation) override; diff --git a/shared/source/os_interface/windows/wddm_memory_manager.cpp b/shared/source/os_interface/windows/wddm_memory_manager.cpp index 28e2e3e7f9..0fa9849234 100644 --- a/shared/source/os_interface/windows/wddm_memory_manager.cpp +++ b/shared/source/os_interface/windows/wddm_memory_manager.cpp @@ -467,7 +467,7 @@ GraphicsAllocation *WddmMemoryManager::createAllocationFromHandle(osHandle handl return allocation.release(); } -GraphicsAllocation *WddmMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { +GraphicsAllocation *WddmMemoryManager::createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) { return nullptr; } diff --git a/shared/source/os_interface/windows/wddm_memory_manager.h b/shared/source/os_interface/windows/wddm_memory_manager.h index 17c73b526e..aec55d759f 100644 --- a/shared/source/os_interface/windows/wddm_memory_manager.h +++ b/shared/source/os_interface/windows/wddm_memory_manager.h @@ -44,7 +44,7 @@ class WddmMemoryManager : public MemoryManager { void freeGraphicsMemoryImpl(GraphicsAllocation *gfxAllocation, bool isImportedAllocation) override; void handleFenceCompletion(GraphicsAllocation *allocation) override; - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override; GraphicsAllocation *createGraphicsAllocationFromNTHandle(void *handle, uint32_t rootDeviceIndex, AllocationType allocType) override; diff --git a/shared/test/common/mocks/mock_memory_manager.h b/shared/test/common/mocks/mock_memory_manager.h index 358f5356d7..2a7b80ae05 100644 --- a/shared/test/common/mocks/mock_memory_manager.h +++ b/shared/test/common/mocks/mock_memory_manager.h @@ -306,7 +306,7 @@ class FailMemoryManager : public MockMemoryManager { return nullptr; } - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } diff --git a/shared/test/unit_test/device/neo_device_tests.cpp b/shared/test/unit_test/device/neo_device_tests.cpp index 55cfd4230e..641cd2b3dc 100644 --- a/shared/test/unit_test/device/neo_device_tests.cpp +++ b/shared/test/unit_test/device/neo_device_tests.cpp @@ -340,7 +340,7 @@ TEST_F(DeviceGetCapsTest, givenFlagEnabled64kbPagesWhenCallConstructorMemoryMana MockMemoryManager(ExecutionEnvironment &executionEnvironment) : MemoryManager(executionEnvironment) {} void addAllocationToHostPtrManager(GraphicsAllocation *memory) override{}; void removeAllocationFromHostPtrManager(GraphicsAllocation *memory) override{}; - GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(std::vector handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } + GraphicsAllocation *createGraphicsAllocationFromMultipleSharedHandles(const std::vector &handles, AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; } GraphicsAllocation *createGraphicsAllocationFromSharedHandle(osHandle handle, const AllocationProperties &properties, bool requireSpecificBitness, bool isHostIpcAllocation) override { return nullptr; }; GraphicsAllocation *createGraphicsAllocationFromNTHandle(void *handle, uint32_t rootDeviceIndex, AllocationType allocType) override { return nullptr; }; AllocationStatus populateOsHandles(OsHandleStorage &handleStorage, uint32_t rootDeviceIndex) override { return AllocationStatus::Success; };