From 60578950322491e44b4203fe085c3230ead19c7a Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Wed, 31 Oct 2018 11:04:01 +0000 Subject: IVGCVSW-1709: Clean up memory manager bodge * Added quick workaround for the memory management errors in the CL/Neon unit tests Change-Id: I56250db462cdbdc1acc0a5824807d288fb0c1d11 --- src/armnn/LoadedNetwork.cpp | 6 - src/backends/aclCommon/BaseMemoryManager.cpp | 98 ++++++++++++++++ src/backends/aclCommon/BaseMemoryManager.hpp | 101 +++++++++++++++++ src/backends/aclCommon/CMakeLists.txt | 16 +-- src/backends/aclCommon/common.mk | 7 +- .../aclCommon/memory/BaseMemoryManager.cpp | 125 --------------------- .../aclCommon/memory/BaseMemoryManager.hpp | 104 ----------------- .../aclCommon/memory/BlobLifetimeManager.cpp | 79 ------------- .../aclCommon/memory/BlobLifetimeManager.hpp | 35 ------ src/backends/aclCommon/memory/BlobMemoryPool.cpp | 88 --------------- src/backends/aclCommon/memory/BlobMemoryPool.hpp | 55 --------- src/backends/aclCommon/memory/IMemoryPool.hpp | 22 ---- src/backends/aclCommon/memory/IPoolManager.hpp | 21 ---- .../aclCommon/memory/OffsetLifetimeManager.cpp | 62 ---------- .../aclCommon/memory/OffsetLifetimeManager.hpp | 37 ------ src/backends/aclCommon/memory/OffsetMemoryPool.cpp | 84 -------------- src/backends/aclCommon/memory/OffsetMemoryPool.hpp | 54 --------- src/backends/aclCommon/memory/PoolManager.cpp | 105 ----------------- src/backends/aclCommon/memory/PoolManager.hpp | 57 ---------- src/backends/backendsCommon/WorkloadFactory.hpp | 3 - .../backendsCommon/test/BatchNormTestImpl.hpp | 2 - .../backendsCommon/test/Conv2dTestImpl.hpp | 20 ++-- .../backendsCommon/test/FullyConnectedTestImpl.hpp | 3 +- src/backends/backendsCommon/test/LayerTests.cpp | 39 +------ src/backends/backendsCommon/test/LstmTestImpl.hpp | 3 - src/backends/backendsCommon/test/NormTestImpl.hpp | 11 +- .../backendsCommon/test/SoftmaxTestImpl.hpp | 8 +- src/backends/cl/ClWorkloadFactory.cpp | 11 -- src/backends/cl/ClWorkloadFactory.hpp | 4 +- src/backends/cl/test/ClContextControlFixture.hpp | 16 +-- src/backends/neon/NeonWorkloadFactory.cpp | 9 -- src/backends/neon/NeonWorkloadFactory.hpp | 5 +- 32 files changed, 232 insertions(+), 1058 deletions(-) create mode 100644 src/backends/aclCommon/BaseMemoryManager.cpp create mode 100644 src/backends/aclCommon/BaseMemoryManager.hpp delete mode 100644 src/backends/aclCommon/memory/BaseMemoryManager.cpp delete mode 100644 src/backends/aclCommon/memory/BaseMemoryManager.hpp delete mode 100644 src/backends/aclCommon/memory/BlobLifetimeManager.cpp delete mode 100644 src/backends/aclCommon/memory/BlobLifetimeManager.hpp delete mode 100644 src/backends/aclCommon/memory/BlobMemoryPool.cpp delete mode 100644 src/backends/aclCommon/memory/BlobMemoryPool.hpp delete mode 100644 src/backends/aclCommon/memory/IMemoryPool.hpp delete mode 100644 src/backends/aclCommon/memory/IPoolManager.hpp delete mode 100644 src/backends/aclCommon/memory/OffsetLifetimeManager.cpp delete mode 100644 src/backends/aclCommon/memory/OffsetLifetimeManager.hpp delete mode 100644 src/backends/aclCommon/memory/OffsetMemoryPool.cpp delete mode 100644 src/backends/aclCommon/memory/OffsetMemoryPool.hpp delete mode 100644 src/backends/aclCommon/memory/PoolManager.cpp delete mode 100644 src/backends/aclCommon/memory/PoolManager.hpp diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index f58a115754..92433d11c6 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -132,12 +132,6 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net) // Set up memory. m_OptimizedNetwork->GetGraph().AllocateDynamicBuffers(); - - // Finalize the workload factories before execution. - for (auto&& workloadFactory : m_WorkloadFactories) - { - workloadFactory.second->Finalize(); - } } TensorInfo LoadedNetwork::GetInputTensorInfo(LayerBindingId layerId) const diff --git a/src/backends/aclCommon/BaseMemoryManager.cpp b/src/backends/aclCommon/BaseMemoryManager.cpp new file mode 100644 index 0000000000..4e0d14c5e4 --- /dev/null +++ b/src/backends/aclCommon/BaseMemoryManager.cpp @@ -0,0 +1,98 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#include "BaseMemoryManager.hpp" + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) +#include "arm_compute/runtime/BlobLifetimeManager.h" +#include "arm_compute/runtime/PoolManager.h" +#include "arm_compute/runtime/OffsetLifetimeManager.h" +#endif + +#include + +namespace armnn +{ + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) +BaseMemoryManager::BaseMemoryManager(std::unique_ptr alloc, + MemoryAffinity memoryAffinity) +{ + BOOST_ASSERT(alloc); + m_Allocator = std::move(alloc); + + m_IntraLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity); + m_InterLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity); +} + +std::shared_ptr +BaseMemoryManager::CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity) +{ + std::shared_ptr lifetimeManager = nullptr; + + if (memoryAffinity == MemoryAffinity::Buffer) + { + lifetimeManager = std::make_shared(); + } + else + { + lifetimeManager = std::make_shared(); + } + + auto poolManager = std::make_shared(); + auto memoryManager = std::make_shared(lifetimeManager, poolManager); + + return memoryManager; +} + +void BaseMemoryManager::Acquire() +{ + static const size_t s_NumPools = 1; + + // Allocate memory pools for intra-layer memory manager + BOOST_ASSERT(m_IntraLayerMemoryMgr); + m_IntraLayerMemoryMgr->populate(*m_Allocator, s_NumPools); + + // Allocate memory pools for inter-layer memory manager + BOOST_ASSERT(m_InterLayerMemoryMgr); + m_InterLayerMemoryMgr->populate(*m_Allocator, s_NumPools); + + // Acquire inter-layer memory group. NOTE: This has to come after allocating the pools + BOOST_ASSERT(m_InterLayerMemoryGroup); + m_InterLayerMemoryGroup->acquire(); +} + +void BaseMemoryManager::Release() +{ + // Release inter-layer memory group. NOTE: This has to come before releasing the pools + BOOST_ASSERT(m_InterLayerMemoryGroup); + m_InterLayerMemoryGroup->release(); + + // Release memory pools managed by intra-layer memory manager + BOOST_ASSERT(m_IntraLayerMemoryMgr); + m_IntraLayerMemoryMgr->clear(); + + // Release memory pools managed by inter-layer memory manager + BOOST_ASSERT(m_InterLayerMemoryMgr); + m_InterLayerMemoryMgr->clear(); +} +#endif + +#ifdef ARMCOMPUTENEON_ENABLED +std::shared_ptr +NeonMemoryManager::CreateMemoryGroup(const std::shared_ptr& memoryManager) +{ + return std::make_shared(memoryManager); +} +#endif + +#ifdef ARMCOMPUTECL_ENABLED +std::shared_ptr +ClMemoryManager::CreateMemoryGroup(const std::shared_ptr& memoryManager) +{ + return std::make_shared(memoryManager); +} +#endif + +} diff --git a/src/backends/aclCommon/BaseMemoryManager.hpp b/src/backends/aclCommon/BaseMemoryManager.hpp new file mode 100644 index 0000000000..ffa440b3ab --- /dev/null +++ b/src/backends/aclCommon/BaseMemoryManager.hpp @@ -0,0 +1,101 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include + +#ifdef ARMCOMPUTENEON_ENABLED +#include +#endif + +#ifdef ARMCOMPUTECL_ENABLED +#include +#endif + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) +#include +#include +#include +#endif + +namespace armnn +{ + +class BaseMemoryManager +{ +public: + enum class MemoryAffinity + { + Buffer, + Offset + }; + + BaseMemoryManager() { } + virtual ~BaseMemoryManager() { } + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) + + BaseMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity); + + std::shared_ptr& GetIntraLayerManager() { return m_IntraLayerMemoryMgr; } + std::shared_ptr& GetInterLayerManager() { return m_InterLayerMemoryMgr; } + std::shared_ptr& GetInterLayerMemoryGroup() { return m_InterLayerMemoryGroup; } + + void Acquire(); + void Release(); + +protected: + std::unique_ptr m_Allocator; + std::shared_ptr m_IntraLayerMemoryMgr; + std::shared_ptr m_InterLayerMemoryMgr; + std::shared_ptr m_InterLayerMemoryGroup; + + std::shared_ptr CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity); + + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) = 0; + +#endif +}; + +class NeonMemoryManager : public BaseMemoryManager +{ +public: + NeonMemoryManager() {} + virtual ~NeonMemoryManager() {} + +#ifdef ARMCOMPUTENEON_ENABLED + NeonMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity) + : BaseMemoryManager(std::move(alloc), memoryAffinity) + { + m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); + } + +protected: + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) override; +#endif +}; + +class ClMemoryManager : public BaseMemoryManager +{ +public: + ClMemoryManager() {} + virtual ~ClMemoryManager() {} + +#ifdef ARMCOMPUTECL_ENABLED + ClMemoryManager(std::unique_ptr alloc) + : BaseMemoryManager(std::move(alloc), MemoryAffinity::Buffer) + { + m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); + } + +protected: + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) override; +#endif +}; + +} //namespace armnn diff --git a/src/backends/aclCommon/CMakeLists.txt b/src/backends/aclCommon/CMakeLists.txt index 83c7c87cd0..933d7ab007 100644 --- a/src/backends/aclCommon/CMakeLists.txt +++ b/src/backends/aclCommon/CMakeLists.txt @@ -7,20 +7,8 @@ list(APPEND armnnAclCommon_sources ArmComputeTensorUtils.hpp ArmComputeTensorUtils.cpp ArmComputeUtils.hpp - memory/BaseMemoryManager.cpp - memory/BaseMemoryManager.hpp - memory/BlobLifetimeManager.cpp - memory/BlobLifetimeManager.hpp - memory/BlobMemoryPool.cpp - memory/BlobMemoryPool.hpp - memory/IMemoryPool.hpp - memory/IPoolManager.hpp - memory/OffsetLifetimeManager.cpp - memory/OffsetLifetimeManager.hpp - memory/OffsetMemoryPool.cpp - memory/OffsetMemoryPool.hpp - memory/PoolManager.cpp - memory/PoolManager.hpp + BaseMemoryManager.cpp + BaseMemoryManager.hpp ) if(BUILD_UNIT_TESTS) diff --git a/src/backends/aclCommon/common.mk b/src/backends/aclCommon/common.mk index 67ba01b1e4..cebceaf2d7 100644 --- a/src/backends/aclCommon/common.mk +++ b/src/backends/aclCommon/common.mk @@ -9,12 +9,7 @@ COMMON_SOURCES := \ ArmComputeTensorUtils.cpp \ - memory/BaseMemoryManager.cpp \ - memory/BlobLifetimeManager.cpp \ - memory/BlobMemoryPool.cpp \ - memory/OffsetLifetimeManager.cpp \ - memory/OffsetMemoryPool.cpp \ - memory/PoolManager.cpp + BaseMemoryManager.cpp # COMMON_TEST_SOURCES contains the list of files to be included # in the Android unit test build (armnn-tests) and it is picked diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.cpp b/src/backends/aclCommon/memory/BaseMemoryManager.cpp deleted file mode 100644 index 532692b1ce..0000000000 --- a/src/backends/aclCommon/memory/BaseMemoryManager.cpp +++ /dev/null @@ -1,125 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "BaseMemoryManager.hpp" - -#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) -#include "BlobLifetimeManager.hpp" -#include "PoolManager.hpp" -#include "OffsetLifetimeManager.hpp" -#endif - -#include - -namespace armnn -{ - -#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) -BaseMemoryManager::BaseMemoryManager(std::unique_ptr alloc, - MemoryAffinity memoryAffinity) -{ - // (Re)create the memory manager components. - m_Allocator = std::move(alloc); - - m_IntraLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity); - m_InterLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity); -} - -std::shared_ptr -BaseMemoryManager::CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity) -{ - std::shared_ptr lifetimeManager = nullptr; - - if (memoryAffinity == MemoryAffinity::Buffer) - { - lifetimeManager = std::make_shared(); - } - else - { - lifetimeManager = std::make_shared(); - } - - auto poolManager = std::make_shared(); - auto memoryManager = std::make_shared(lifetimeManager, poolManager); - - // Set allocator that the memory manager will use - memoryManager->set_allocator(m_Allocator.get()); - - return memoryManager; -} - -void BaseMemoryManager::FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager) -{ - // Number of pools that the manager will create. This specifies how many layers you want to run in parallel - memoryManager.set_num_pools(1); - - // Finalize the memory manager. (Validity checks, memory allocations, etc) - memoryManager.finalize(); -} - -void BaseMemoryManager::Finalize() -{ - BOOST_ASSERT(m_IntraLayerMemoryMgr); - FinalizeMemoryManager(*m_IntraLayerMemoryMgr.get()); - - BOOST_ASSERT(m_InterLayerMemoryMgr); - FinalizeMemoryManager(*m_InterLayerMemoryMgr.get()); -} - -void BaseMemoryManager::Acquire() -{ - // Allocate memory pools for intra-layer memory manager - BOOST_ASSERT(m_IntraLayerMemoryMgr); - IPoolManager* poolManager = boost::polymorphic_downcast(m_IntraLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->AllocatePools(); - - // Allocate memory pools for inter-layer memory manager - BOOST_ASSERT(m_InterLayerMemoryMgr); - poolManager = boost::polymorphic_downcast(m_InterLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->AllocatePools(); - - // Acquire inter-layer memory group. NOTE: This has to come after allocating the pools - BOOST_ASSERT(m_InterLayerMemoryGroup); - m_InterLayerMemoryGroup->acquire(); -} - -void BaseMemoryManager::Release() -{ - // Release inter-layer memory group. NOTE: This has to come before releasing the pools - BOOST_ASSERT(m_InterLayerMemoryGroup); - m_InterLayerMemoryGroup->release(); - - // Release memory pools managed by intra-layer memory manager - BOOST_ASSERT(m_IntraLayerMemoryMgr); - IPoolManager* poolManager = boost::polymorphic_downcast(m_IntraLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->ReleasePools(); - - // Release memory pools managed by inter-layer memory manager - BOOST_ASSERT(m_InterLayerMemoryMgr); - poolManager = boost::polymorphic_downcast(m_InterLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->ReleasePools(); -} -#endif - -#ifdef ARMCOMPUTENEON_ENABLED -std::shared_ptr -NeonMemoryManager::CreateMemoryGroup(const std::shared_ptr& memoryManager) -{ - return std::make_shared(memoryManager); -} -#endif - -#ifdef ARMCOMPUTECL_ENABLED -std::shared_ptr -ClMemoryManager::CreateMemoryGroup(const std::shared_ptr& memoryManager) -{ - return std::make_shared(memoryManager); -} -#endif - -} diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.hpp b/src/backends/aclCommon/memory/BaseMemoryManager.hpp deleted file mode 100644 index a6ffff7086..0000000000 --- a/src/backends/aclCommon/memory/BaseMemoryManager.hpp +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -#ifdef ARMCOMPUTENEON_ENABLED -#include -#endif - -#ifdef ARMCOMPUTECL_ENABLED -#include -#endif - -#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) -#include -#include -#include -#endif - -namespace armnn -{ - -class BaseMemoryManager -{ -public: - enum class MemoryAffinity - { - Buffer, - Offset - }; - - BaseMemoryManager() { } - virtual ~BaseMemoryManager() { } - -#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) - - BaseMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity); - - std::shared_ptr& GetIntraLayerManager() { return m_IntraLayerMemoryMgr; } - std::shared_ptr& GetInterLayerManager() { return m_InterLayerMemoryMgr; } - std::shared_ptr& GetInterLayerMemoryGroup() { return m_InterLayerMemoryGroup; } - - void Finalize(); - void Acquire(); - void Release(); - -protected: - - std::unique_ptr m_Allocator; - std::shared_ptr m_IntraLayerMemoryMgr; - std::shared_ptr m_InterLayerMemoryMgr; - std::shared_ptr m_InterLayerMemoryGroup; - - std::shared_ptr CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity); - - virtual std::shared_ptr - CreateMemoryGroup(const std::shared_ptr& memoryManager) = 0; - - void FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager); -#endif -}; - -class NeonMemoryManager : public BaseMemoryManager -{ -public: - NeonMemoryManager() {} - virtual ~NeonMemoryManager() {} - -#ifdef ARMCOMPUTENEON_ENABLED - NeonMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity) - : BaseMemoryManager(std::move(alloc), memoryAffinity) - { - m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); - } - -protected: - virtual std::shared_ptr - CreateMemoryGroup(const std::shared_ptr& memoryManager) override; -#endif -}; - -class ClMemoryManager : public BaseMemoryManager -{ -public: - ClMemoryManager() {} - virtual ~ClMemoryManager() {} - -#ifdef ARMCOMPUTECL_ENABLED - ClMemoryManager(std::unique_ptr alloc) - : BaseMemoryManager(std::move(alloc), MemoryAffinity::Buffer) - { - m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); - } - -protected: - virtual std::shared_ptr - CreateMemoryGroup(const std::shared_ptr& memoryManager) override; -#endif -}; - -} //namespace armnn diff --git a/src/backends/aclCommon/memory/BlobLifetimeManager.cpp b/src/backends/aclCommon/memory/BlobLifetimeManager.cpp deleted file mode 100644 index 41100e945f..0000000000 --- a/src/backends/aclCommon/memory/BlobLifetimeManager.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "BlobLifetimeManager.hpp" -#include "BlobMemoryPool.hpp" - -#include - -#include "boost/assert.hpp" - -#include - -namespace armnn -{ - -BlobLifetimeManager::BlobLifetimeManager() - : m_BlobSizes() -{ -} - -arm_compute::MappingType BlobLifetimeManager::mapping_type() const -{ - return arm_compute::MappingType::BLOBS; -} - -void BlobLifetimeManager::update_blobs_and_mappings() -{ - using namespace arm_compute; - - BOOST_ASSERT(are_all_finalized()); - BOOST_ASSERT(_active_group); - - // Sort free blobs requirements in descending order. - _free_blobs.sort([](const Blob & ba, const Blob & bb) - { - return ba.max_size > bb.max_size; - }); - std::vector groupSizes; - std::transform(std::begin(_free_blobs), std::end(_free_blobs), std::back_inserter(groupSizes), [](const Blob & b) - { - return b.max_size; - }); - - // Update blob sizes - size_t max_size = std::max(m_BlobSizes.size(), groupSizes.size()); - m_BlobSizes.resize(max_size, 0); - groupSizes.resize(max_size, 0); - std::transform(std::begin(m_BlobSizes), std::end(m_BlobSizes), std::begin(groupSizes), - std::begin(m_BlobSizes), [](size_t lhs, size_t rhs) - { - return std::max(lhs, rhs); - }); - - // Calculate group mappings - auto& groupMappings = _active_group->mappings(); - unsigned int blobIdx = 0; - - for(auto& freeBlob : _free_blobs) - { - for(auto& boundElementId : freeBlob.bound_elements) - { - BOOST_ASSERT(_active_elements.find(boundElementId) != std::end(_active_elements)); - - Element& boundElement = _active_elements[boundElementId]; - groupMappings[boundElement.handle] = blobIdx; - } - - ++blobIdx; - } -} - -std::unique_ptr BlobLifetimeManager::create_pool(arm_compute::IAllocator* allocator) -{ - BOOST_ASSERT(allocator); - return std::make_unique(allocator, m_BlobSizes); -} - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/BlobLifetimeManager.hpp b/src/backends/aclCommon/memory/BlobLifetimeManager.hpp deleted file mode 100644 index d777ba59ee..0000000000 --- a/src/backends/aclCommon/memory/BlobLifetimeManager.hpp +++ /dev/null @@ -1,35 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -namespace armnn -{ - -class BlobLifetimeManager : public arm_compute::ISimpleLifetimeManager -{ -public: - BlobLifetimeManager(); - - BlobLifetimeManager(const BlobLifetimeManager&) = delete; - - BlobLifetimeManager& operator=(const BlobLifetimeManager&) = delete; - - BlobLifetimeManager(BlobLifetimeManager&&) = default; - - BlobLifetimeManager& operator=(BlobLifetimeManager&&) = default; - - std::unique_ptr create_pool(arm_compute::IAllocator* allocator) override; - - arm_compute::MappingType mapping_type() const override; - -private: - void update_blobs_and_mappings() override; - - std::vector m_BlobSizes; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/BlobMemoryPool.cpp b/src/backends/aclCommon/memory/BlobMemoryPool.cpp deleted file mode 100644 index 8b0a957bb0..0000000000 --- a/src/backends/aclCommon/memory/BlobMemoryPool.cpp +++ /dev/null @@ -1,88 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "BlobMemoryPool.hpp" - -#include - -namespace armnn -{ - -BlobMemoryPool::BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector blobSizes) - : m_Allocator(allocator) - , m_Blobs() - , m_BlobSizes(std::move(blobSizes)) - , m_MemoryAllocated(false) -{ - AllocatePool(); -} - -BlobMemoryPool::~BlobMemoryPool() -{ - ReleasePool(); -} - -void BlobMemoryPool::acquire(arm_compute::MemoryMappings& handles) -{ - // Set memory to handlers - for (auto& handle : handles) - { - BOOST_ASSERT(handle.first); - *handle.first = m_Blobs[handle.second]; - } -} - -void BlobMemoryPool::release(arm_compute::MemoryMappings &handles) -{ - for (auto& handle : handles) - { - BOOST_ASSERT(handle.first); - *handle.first = nullptr; - } -} - -arm_compute::MappingType BlobMemoryPool::mapping_type() const -{ - return arm_compute::MappingType::BLOBS; -} - -std::unique_ptr BlobMemoryPool::duplicate() -{ - BOOST_ASSERT(m_Allocator); - return std::make_unique(m_Allocator, m_BlobSizes); -} - -void BlobMemoryPool::AllocatePool() -{ - if (!m_MemoryAllocated) - { - BOOST_ASSERT(m_Allocator); - - for (const auto& blobSize : m_BlobSizes) - { - m_Blobs.push_back(m_Allocator->allocate(blobSize, 0)); - } - - m_MemoryAllocated = true; - } -} - -void BlobMemoryPool::ReleasePool() -{ - if (m_MemoryAllocated) - { - BOOST_ASSERT(m_Allocator); - - for (auto& blob : m_Blobs) - { - m_Allocator->free(blob); - } - - m_Blobs.clear(); - - m_MemoryAllocated = false; - } -} - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/BlobMemoryPool.hpp b/src/backends/aclCommon/memory/BlobMemoryPool.hpp deleted file mode 100644 index 4d42e6ee7a..0000000000 --- a/src/backends/aclCommon/memory/BlobMemoryPool.hpp +++ /dev/null @@ -1,55 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include "IMemoryPool.hpp" - -#include -#include - -namespace armnn -{ - -/** Blob memory pool */ -class BlobMemoryPool : public IMemoryPool -{ -public: - BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector blobSizes); - - ~BlobMemoryPool(); - - BlobMemoryPool(const BlobMemoryPool&) = delete; - - BlobMemoryPool& operator=(const BlobMemoryPool&) = delete; - - BlobMemoryPool(BlobMemoryPool&&) = default; - - BlobMemoryPool& operator=(BlobMemoryPool&&) = default; - - void acquire(arm_compute::MemoryMappings &handles) override; - void release(arm_compute::MemoryMappings &handles) override; - - arm_compute::MappingType mapping_type() const override; - - std::unique_ptr duplicate() override; - - void AllocatePool() override; - void ReleasePool() override; - -private: - /// Allocator to use for internal allocation - arm_compute::IAllocator* m_Allocator; - - /// Vector holding all the memory blobs - std::vector m_Blobs; - - /// Sizes of each memory blob - std::vector m_BlobSizes; - - /// Flag indicating whether memory has been allocated for the pool - bool m_MemoryAllocated; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/IMemoryPool.hpp b/src/backends/aclCommon/memory/IMemoryPool.hpp deleted file mode 100644 index 99130699e0..0000000000 --- a/src/backends/aclCommon/memory/IMemoryPool.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -namespace armnn -{ - -class IMemoryPool : public arm_compute::IMemoryPool -{ -public: - /// Allocates memory for the entire pool - virtual void AllocatePool() = 0; - - /// Releases all memory associated with the pool - virtual void ReleasePool() = 0; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/IPoolManager.hpp b/src/backends/aclCommon/memory/IPoolManager.hpp deleted file mode 100644 index be15fdd57e..0000000000 --- a/src/backends/aclCommon/memory/IPoolManager.hpp +++ /dev/null @@ -1,21 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -namespace armnn -{ - -class IPoolManager : public arm_compute::IPoolManager { -public: - // Allocates all pools within the pool manager - virtual void AllocatePools() = 0; - - // Releases all pools within the pool manager - virtual void ReleasePools() = 0; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp b/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp deleted file mode 100644 index d0174f893c..0000000000 --- a/src/backends/aclCommon/memory/OffsetLifetimeManager.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "OffsetLifetimeManager.hpp" -#include "OffsetMemoryPool.hpp" - -#include - -#include - -#include - -namespace armnn -{ - -OffsetLifetimeManager::OffsetLifetimeManager() - : m_BlobSize(0) -{ -} - -std::unique_ptr OffsetLifetimeManager::create_pool(arm_compute::IAllocator* allocator) -{ - BOOST_ASSERT(allocator); - return std::make_unique(allocator, m_BlobSize); -} - -arm_compute::MappingType OffsetLifetimeManager::mapping_type() const -{ - return arm_compute::MappingType::OFFSETS; -} - -void OffsetLifetimeManager::update_blobs_and_mappings() -{ - BOOST_ASSERT(are_all_finalized()); - BOOST_ASSERT(_active_group); - - // Update blob size - size_t maxGroupSize = std::accumulate(std::begin(_free_blobs), std::end(_free_blobs), - static_cast(0), [](size_t s, const Blob& b) - { - return s + b.max_size; - }); - m_BlobSize = std::max(m_BlobSize, maxGroupSize); - - // Calculate group mappings - auto& groupMappings = _active_group->mappings(); - size_t offset = 0; - for(auto& freeBlob : _free_blobs) - { - for(auto& boundElementId : freeBlob.bound_elements) - { - BOOST_ASSERT(_active_elements.find(boundElementId) != std::end(_active_elements)); - Element& boundElement = _active_elements[boundElementId]; - groupMappings[boundElement.handle] = offset; - } - offset += freeBlob.max_size; - BOOST_ASSERT(offset <= m_BlobSize); - } -} - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp b/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp deleted file mode 100644 index 1283193052..0000000000 --- a/src/backends/aclCommon/memory/OffsetLifetimeManager.hpp +++ /dev/null @@ -1,37 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -namespace armnn -{ - -class OffsetLifetimeManager : public arm_compute::ISimpleLifetimeManager -{ -public: - OffsetLifetimeManager(); - - OffsetLifetimeManager(const OffsetLifetimeManager&) = delete; - - OffsetLifetimeManager& operator=(const OffsetLifetimeManager&) = delete; - - OffsetLifetimeManager(OffsetLifetimeManager&&) = default; - - OffsetLifetimeManager& operator=(OffsetLifetimeManager&&) = default; - - std::unique_ptr create_pool(arm_compute::IAllocator* allocator) override; - - arm_compute::MappingType mapping_type() const override; - -private: - void update_blobs_and_mappings() override; - -private: - /// Memory blob size - size_t m_BlobSize; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/OffsetMemoryPool.cpp b/src/backends/aclCommon/memory/OffsetMemoryPool.cpp deleted file mode 100644 index 48bea5e845..0000000000 --- a/src/backends/aclCommon/memory/OffsetMemoryPool.cpp +++ /dev/null @@ -1,84 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "OffsetMemoryPool.hpp" - -#include - -#include - -namespace armnn -{ - -OffsetMemoryPool::OffsetMemoryPool(arm_compute::IAllocator* allocator, size_t blobSize) - : m_Allocator(allocator) - , m_Blob() - , m_BlobSize(blobSize) - , m_MemoryAllocated(false) -{ - AllocatePool(); -} - -OffsetMemoryPool::~OffsetMemoryPool() -{ - ReleasePool(); -} - -void OffsetMemoryPool::acquire(arm_compute::MemoryMappings& handles) -{ - BOOST_ASSERT(m_Blob); - - // Set memory to handlers - for(auto& handle : handles) - { - BOOST_ASSERT(handle.first); - *handle.first = reinterpret_cast(m_Blob) + handle.second; - } -} - -void OffsetMemoryPool::release(arm_compute::MemoryMappings &handles) -{ - for(auto& handle : handles) - { - BOOST_ASSERT(handle.first); - *handle.first = nullptr; - } -} - -arm_compute::MappingType OffsetMemoryPool::mapping_type() const -{ - return arm_compute::MappingType::OFFSETS; -} - -std::unique_ptr OffsetMemoryPool::duplicate() -{ - BOOST_ASSERT(m_Allocator); - return std::make_unique(m_Allocator, m_BlobSize); -} - -void OffsetMemoryPool::AllocatePool() -{ - if (!m_MemoryAllocated) - { - BOOST_ASSERT(m_Allocator); - m_Blob = m_Allocator->allocate(m_BlobSize, 0); - - m_MemoryAllocated = true; - } -} - -void OffsetMemoryPool::ReleasePool() -{ - if (m_MemoryAllocated) - { - BOOST_ASSERT(m_Allocator); - - m_Allocator->free(m_Blob); - m_Blob = nullptr; - - m_MemoryAllocated = false; - } -} - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/OffsetMemoryPool.hpp b/src/backends/aclCommon/memory/OffsetMemoryPool.hpp deleted file mode 100644 index 25cf8cd638..0000000000 --- a/src/backends/aclCommon/memory/OffsetMemoryPool.hpp +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include "IMemoryPool.hpp" - -#include -#include - -namespace armnn -{ - -class OffsetMemoryPool : public IMemoryPool -{ -public: - OffsetMemoryPool(arm_compute::IAllocator* allocator, size_t blobSize); - - ~OffsetMemoryPool(); - - OffsetMemoryPool(const OffsetMemoryPool&) = delete; - - OffsetMemoryPool& operator=(const OffsetMemoryPool&) = delete; - - OffsetMemoryPool(OffsetMemoryPool&&) = default; - - OffsetMemoryPool& operator=(OffsetMemoryPool &&) = default; - - void acquire(arm_compute::MemoryMappings& handles) override; - void release(arm_compute::MemoryMappings& handles) override; - - arm_compute::MappingType mapping_type() const override; - - std::unique_ptr duplicate() override; - - void AllocatePool() override; - void ReleasePool() override; - -private: - /// Allocator to use for internal allocation - arm_compute::IAllocator* m_Allocator; - - /// Memory blob - void* m_Blob; - - /// Size of the allocated memory blob - size_t m_BlobSize; - - /// Flag indicating whether memory has been allocated for the pool - bool m_MemoryAllocated; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/PoolManager.cpp b/src/backends/aclCommon/memory/PoolManager.cpp deleted file mode 100644 index 363b4590b3..0000000000 --- a/src/backends/aclCommon/memory/PoolManager.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "IMemoryPool.hpp" -#include "PoolManager.hpp" - -#include -#include - -#include - -namespace armnn -{ - -PoolManager::PoolManager() - : m_FreePools() - , m_OccupiedPools() - , m_Semaphore() - , m_Mutex() -{} - -arm_compute::IMemoryPool *PoolManager::lock_pool() -{ - BOOST_ASSERT_MSG(!(m_FreePools.empty() && m_OccupiedPools.empty()), "Haven't setup any pools"); - - m_Semaphore->wait(); - std::lock_guard lock(m_Mutex); - - BOOST_ASSERT_MSG(!m_FreePools.empty(), "Empty pool must exist as semaphore has been signalled"); - m_OccupiedPools.splice(std::begin(m_OccupiedPools), m_FreePools, std::begin(m_FreePools)); - - return m_OccupiedPools.front().get(); -} - -void PoolManager::unlock_pool(arm_compute::IMemoryPool *pool) -{ - BOOST_ASSERT_MSG(!(m_FreePools.empty() && m_OccupiedPools.empty()), "Haven't setup any pools!"); - - std::lock_guard lock(m_Mutex); - - auto it = std::find_if( - std::begin(m_OccupiedPools), - std::end(m_OccupiedPools), - [pool](const std::unique_ptr &poolIterator) - { - return poolIterator.get() == pool; - } - ); - - BOOST_ASSERT_MSG(it != std::end(m_OccupiedPools), "Pool to be unlocked couldn't be found"); - m_FreePools.splice(std::begin(m_FreePools), m_OccupiedPools, it); - m_Semaphore->signal(); -} - -void PoolManager::register_pool(std::unique_ptr pool) -{ - std::lock_guard lock(m_Mutex); - BOOST_ASSERT_MSG(m_OccupiedPools.empty(), "All pools should be free in order to register a new one"); - - // Set pool - m_FreePools.push_front(std::move(pool)); - - // Update semaphore - m_Semaphore = std::make_unique(m_FreePools.size()); -} - -size_t PoolManager::num_pools() const -{ - std::lock_guard lock(m_Mutex); - - return m_FreePools.size() + m_OccupiedPools.size(); -} - -void PoolManager::AllocatePools() -{ - std::lock_guard lock(m_Mutex); - - for (auto& pool : m_FreePools) - { - boost::polymorphic_downcast(pool.get())->AllocatePool(); - } - - for (auto& pool : m_OccupiedPools) - { - boost::polymorphic_downcast(pool.get())->AllocatePool(); - } -} - -void PoolManager::ReleasePools() -{ - std::lock_guard lock(m_Mutex); - - for (auto& pool : m_FreePools) - { - boost::polymorphic_downcast(pool.get())->ReleasePool(); - } - - for (auto& pool : m_OccupiedPools) - { - boost::polymorphic_downcast(pool.get())->ReleasePool(); - } -} - -} //namespace armnn \ No newline at end of file diff --git a/src/backends/aclCommon/memory/PoolManager.hpp b/src/backends/aclCommon/memory/PoolManager.hpp deleted file mode 100644 index 39bc665415..0000000000 --- a/src/backends/aclCommon/memory/PoolManager.hpp +++ /dev/null @@ -1,57 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include "IPoolManager.hpp" - -#include -#include - -#include -#include - -#include -#include -#include - -namespace armnn -{ - -class PoolManager : public IPoolManager -{ -public: - PoolManager(); - - PoolManager(const PoolManager &) = delete; - - PoolManager &operator=(const PoolManager &) = delete; - - PoolManager(PoolManager &&) = default; - - PoolManager &operator=(PoolManager &&) = default; - - arm_compute::IMemoryPool *lock_pool() override; - void unlock_pool(arm_compute::IMemoryPool *pool) override; - void register_pool(std::unique_ptr pool) override; - size_t num_pools() const override; - - void AllocatePools() override; - void ReleasePools() override; - -private: - /// List of free pools - std::list> m_FreePools; - - /// List of occupied pools - std::list> m_OccupiedPools; - - /// Semaphore to control the queues - std::unique_ptr m_Semaphore; - - /// Mutex to control access to the queues - mutable arm_compute::Mutex m_Mutex; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/backendsCommon/WorkloadFactory.hpp b/src/backends/backendsCommon/WorkloadFactory.hpp index 34c1349021..67876e13a2 100644 --- a/src/backends/backendsCommon/WorkloadFactory.hpp +++ b/src/backends/backendsCommon/WorkloadFactory.hpp @@ -25,9 +25,6 @@ public: virtual const BackendId& GetBackendId() const = 0; - /// Informs the memory manager that the network is finalized and ready for execution. - virtual void Finalize() { } - /// Inform the memory manager to release the memory virtual void Release() { } diff --git a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp index 2360fd56e2..67282ed819 100644 --- a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp +++ b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp @@ -87,7 +87,6 @@ LayerTestResult BatchNormTestImpl(armnn::IWorkloadFactory& workloadFactory CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -177,7 +176,6 @@ LayerTestResult BatchNormTestNhwcImpl(armnn::IWorkloadFactory& workloadFact CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); diff --git a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp index aa3a44db5d..03becab73f 100755 --- a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp +++ b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp @@ -213,8 +213,9 @@ LayerTestResult SimpleConvolution2dTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -304,8 +305,9 @@ LayerTestResult SimpleConvolution2dNhwcTestImpl(armnn::IWorkloadFactory& w CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -445,7 +447,6 @@ LayerTestResult DepthwiseConvolution2dAsymmetricTestImpl(armnn::IWorkloadF CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -589,7 +590,6 @@ LayerTestResult DepthwiseConvolution2dDepthMul1TestImpl(armnn::IWorkloadFa CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -791,7 +791,6 @@ LayerTestResult DepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory& wo CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -891,7 +890,6 @@ LayerTestResult DepthwiseConvolution2dNhwcTestImpl(armnn::IWorkloadFactory CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1007,8 +1005,9 @@ LayerTestResult Convolution1dTestImpl(armnn::IWorkloadFactory& workloadFact CopyDataToITensorHandle(inputHandle.get(), inputData.data()); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); // Output LayerTestResult ret(outputInfo); @@ -1105,9 +1104,10 @@ LayerTestResult CompareConvolution2dTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); - refWorkloadFactory.Finalize(); + workloadFactory.Release(); + workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1228,9 +1228,7 @@ LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFact CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); - refWorkloadFactory.Finalize(); workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); diff --git a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp index 125b7e62b1..298901e640 100644 --- a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp +++ b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp @@ -41,8 +41,9 @@ LayerTestResult SimpleFullyConnectedTestImpl( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 12a7063e22..6b5fa726b8 100755 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -931,7 +931,6 @@ LayerTestResult MergerTest(armnn::IWorkloadFactory& workloadFactory) CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get()); @@ -1021,7 +1020,6 @@ LayerTestResult AdditionTest(armnn::IWorkloadFactory& workloadFactory) CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1098,7 +1096,6 @@ LayerTestResult AdditionBroadcastTestImpl(armnn::IWorkloadFactory& workloa CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1170,7 +1167,6 @@ LayerTestResult AdditionBroadcast1ElementTestImpl(armnn::IWorkloadFactory& CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1255,9 +1251,7 @@ LayerTestResult CompareAdditionTest(armnn::IWorkloadFactory& workloadFa CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2Ref.get(), &input2[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); - refWorkloadFactory.Finalize(); workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1324,7 +1318,6 @@ LayerTestResult DivisionTestHelper(armnn::IWorkloadFactory& workloadFactor CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -1527,7 +1520,6 @@ LayerTestResult MultiplicationTestHelper(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -1670,9 +1662,7 @@ LayerTestResult CompareMultiplicationTest(armnn::IWorkloadFactory& work CopyDataToITensorHandle(inputHandle0Ref.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1Ref.get(), &input1[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); - refWorkloadFactory.Finalize(); workloadRef->Execute(); CopyDataFromITensorHandle(&comparisonResult.output[0][0][0][0], outputHandle.get()); @@ -1751,9 +1741,7 @@ LayerTestResult CompareBatchNormTest(armnn::IWorkloadFactory& workloadF CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); - refWorkloadFactory.Finalize(); workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -2106,7 +2094,6 @@ void Concatenate(armnn::IWorkloadFactory& workloadFactory, ++nextInputId; } - workloadFactory.Finalize(); workload->Execute(); if (needPermuteForConcat) @@ -3087,7 +3074,6 @@ LayerTestResult ResizeBilinearNopTest(armnn::IWorkloadFactory& workloa outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3152,7 +3138,6 @@ LayerTestResult SimpleResizeBilinearTest(armnn::IWorkloadFactory& work outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3217,7 +3202,6 @@ LayerTestResult ResizeBilinearSqMinTest(armnn::IWorkloadFactory& workl outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3280,7 +3264,6 @@ LayerTestResult ResizeBilinearMinTest(armnn::IWorkloadFactory& workloa outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3345,7 +3328,6 @@ LayerTestResult ResizeBilinearMagTest(armnn::IWorkloadFactory& workloa outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3394,7 +3376,6 @@ LayerTestResult FakeQuantizationTest(armnn::IWorkloadFactory& workload CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -3441,8 +3422,9 @@ LayerTestResult L2NormalizationTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3515,7 +3497,6 @@ LayerTestResult Pad2dTestCommon(armnn::IWorkloadFactory& workloadFactory, CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); @@ -3596,7 +3577,6 @@ LayerTestResult Pad3dTestCommon(armnn::IWorkloadFactory& workloadFactory, CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get()); @@ -3830,8 +3810,6 @@ LayerTestResult Pad4dTestCommon(armnn::IWorkloadFactory& workloadFactory, CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); - workloadFactory.Finalize(); - workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -4530,7 +4508,6 @@ LayerTestResult ConstantTestImpl(armnn::IWorkloadFactory& workloadFactory, outputHandle->Allocate(); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -4673,7 +4650,6 @@ LayerTestResult MergerUint8Test(armnn::IWorkloadFactory& workloadFac CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0], outputHandle.get()); @@ -4748,7 +4724,6 @@ LayerTestResult AdditionUint8Test(armnn::IWorkloadFactory& workloadF CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); CopyDataToITensorHandle(inputHandle2.get(), &input2[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -4810,7 +4785,6 @@ LayerTestResult MultiplicationUint8TestHelper(armnn::IWorkloadFactor CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -4984,7 +4958,6 @@ LayerTestResult SubtractionTestHelper(armnn::IWorkloadFactory& workloadFac CopyDataToITensorHandle(inputHandle0.get(), &input0[0][0][0][0]); CopyDataToITensorHandle(inputHandle1.get(), &input1[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5129,7 +5102,6 @@ LayerTestResult ResizeBilinearNopUint8Test(armnn::IWorkloadFactory& outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5187,7 +5159,6 @@ LayerTestResult SimpleResizeBilinearUint8Test(armnn::IWorkloadFactor outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5243,7 +5214,6 @@ LayerTestResult ResizeBilinearSqMinUint8Test(armnn::IWorkloadFactory outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5297,7 +5267,6 @@ LayerTestResult ResizeBilinearMinUint8Test(armnn::IWorkloadFactory& CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5353,7 +5322,6 @@ LayerTestResult ResizeBilinearMagUint8Test(armnn::IWorkloadFactory& outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -5875,7 +5843,6 @@ LayerTestResult MeanTestHelper(armnn::IWorkloadFactory& workloadFa CopyDataToITensorHandle(inputHandle.get(), input.origin()); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(result.output.origin(), outputHandle.get()); @@ -6119,7 +6086,5 @@ LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& work CopyDataFromITensorHandle(&addRet.output[0][0][0][0], addOutputHandle.get()); - workloadFactory.Finalize(); - return addRet; } diff --git a/src/backends/backendsCommon/test/LstmTestImpl.hpp b/src/backends/backendsCommon/test/LstmTestImpl.hpp index 758f294d48..bb567e7901 100644 --- a/src/backends/backendsCommon/test/LstmTestImpl.hpp +++ b/src/backends/backendsCommon/test/LstmTestImpl.hpp @@ -210,7 +210,6 @@ LayerTestResult LstmNoCifgNoPeepholeNoProjectionTestImpl(armnn::IWorkl CopyDataToITensorHandle(outputStateInHandle.get(), &outputStateInTensor[0][0]); CopyDataToITensorHandle(cellStateInHandle.get(), &cellStateInTensor[0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -920,7 +919,6 @@ LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl(armnn::IWorkloadFactory CopyDataToITensorHandle(outputStateInHandle.get(), &outputStateInTensor[0][0]); CopyDataToITensorHandle(cellStateInHandle.get(), &cellStateInTensor[0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -1138,7 +1136,6 @@ LayerTestResult LstmLayerWithCifgWithPeepholeNoProjectionTestImpl(armn CopyDataToITensorHandle(outputStateOutHandle.get(), &outputStateOutTensor[0][0]); CopyDataToITensorHandle(cellStateOutHandle.get(), &cellStateOutTensor[0][0]); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&ret0.output[0][0], scratchBufferHandle.get()); diff --git a/src/backends/backendsCommon/test/NormTestImpl.hpp b/src/backends/backendsCommon/test/NormTestImpl.hpp index 0d8d4340a8..16893eb315 100644 --- a/src/backends/backendsCommon/test/NormTestImpl.hpp +++ b/src/backends/backendsCommon/test/NormTestImpl.hpp @@ -73,8 +73,9 @@ LayerTestResult SimpleNormalizationTestImpl(armnn::IWorkloadFactory& wo CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -215,8 +216,9 @@ LayerTestResult SimpleNormalizationNhwcTestImpl(armnn::IWorkloadFactory CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -330,9 +332,10 @@ LayerTestResult CompareNormalizationTestImpl(armnn::IWorkloadFactory& w CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); - refWorkloadFactory.Finalize(); + workloadFactory.Release(); + workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); diff --git a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp index 1e145a1a2e..2a239866f7 100644 --- a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp +++ b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp @@ -62,8 +62,9 @@ LayerTestResult SimpleSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFac outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -141,9 +142,10 @@ LayerTestResult CompareSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFa CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0]); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); - refWorkloadFactory.Finalize(); + workloadFactory.Release(); + workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 43c147fb38..eece934ea3 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -19,8 +19,6 @@ #include -#include - #include #include #include @@ -316,11 +314,6 @@ std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor return MakeWorkload(descriptor, info); } -void ClWorkloadFactory::Finalize() -{ - m_MemoryManager.Finalize(); -} - void ClWorkloadFactory::Release() { m_MemoryManager.Release(); @@ -537,10 +530,6 @@ std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor return nullptr; } -void ClWorkloadFactory::Finalize() -{ -} - void ClWorkloadFactory::Release() { } diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp index ff7e56c385..c45bc15839 100644 --- a/src/backends/cl/ClWorkloadFactory.hpp +++ b/src/backends/cl/ClWorkloadFactory.hpp @@ -8,7 +8,7 @@ #include #include -#include +#include namespace armnn { @@ -126,8 +126,6 @@ public: virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, const WorkloadInfo& info) const override; - virtual void Finalize() override; - virtual void Release() override; virtual void Acquire() override; diff --git a/src/backends/cl/test/ClContextControlFixture.hpp b/src/backends/cl/test/ClContextControlFixture.hpp index 52e34147bb..0371c69a0b 100644 --- a/src/backends/cl/test/ClContextControlFixture.hpp +++ b/src/backends/cl/test/ClContextControlFixture.hpp @@ -6,26 +6,14 @@ #pragma once #include +#include template struct ClContextControlFixtureBase { - static ClContextControlFixtureBase*& Instance() - { - static ClContextControlFixtureBase* s_Instance = nullptr; - return s_Instance; - } - // Initialising ClContextControl to ensure OpenCL is loaded correctly for each test case ClContextControlFixtureBase() - : m_ClContextControl(nullptr, ProfilingEnabled) - { - Instance() = this; - } - ~ClContextControlFixtureBase() - { - Instance() = nullptr; - } + : m_ClContextControl(nullptr, ProfilingEnabled) {} armnn::ClContextControl m_ClContextControl; }; diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 604686771e..11b5634a79 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -16,7 +16,6 @@ #include "workloads/NeonWorkloadUtils.hpp" #include "workloads/NeonWorkloads.hpp" -#include #endif #include @@ -280,11 +279,6 @@ std::unique_ptr NeonWorkloadFactory::CreatePad(const PadQueueDescript return MakeWorkloadHelper(descriptor, info); } -void NeonWorkloadFactory::Finalize() -{ - m_MemoryManager.Finalize(); -} - void NeonWorkloadFactory::Release() { m_MemoryManager.Release(); @@ -501,9 +495,6 @@ std::unique_ptr NeonWorkloadFactory::CreatePad(const PadQueueDescript return nullptr; } -void NeonWorkloadFactory::Finalize() -{} - void NeonWorkloadFactory::Release() {} diff --git a/src/backends/neon/NeonWorkloadFactory.hpp b/src/backends/neon/NeonWorkloadFactory.hpp index abcd033f7d..9b574f6a14 100644 --- a/src/backends/neon/NeonWorkloadFactory.hpp +++ b/src/backends/neon/NeonWorkloadFactory.hpp @@ -5,8 +5,9 @@ #pragma once #include + #include -#include +#include #include @@ -127,8 +128,6 @@ public: virtual std::unique_ptr CreatePad(const PadQueueDescriptor& descriptor, const WorkloadInfo& info) const override; - virtual void Finalize() override; - virtual void Release() override; virtual void Acquire() override; -- cgit v1.2.1