diff options
author | Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> | 2018-10-31 11:04:01 +0000 |
---|---|---|
committer | David Beck <david.beck@arm.com> | 2018-11-08 11:34:44 +0000 |
commit | 60578950322491e44b4203fe085c3230ead19c7a (patch) | |
tree | e68bd71cb7b90d66d69a3de25561e32a13dd4e17 /src/backends | |
parent | db49a8880ba869627e884b5ba5245a3932de218d (diff) | |
download | armnn-60578950322491e44b4203fe085c3230ead19c7a.tar.gz |
IVGCVSW-1709: Clean up memory manager bodge
* Added quick workaround for the memory management errors in the
CL/Neon unit tests
Change-Id: I56250db462cdbdc1acc0a5824807d288fb0c1d11
Diffstat (limited to 'src/backends')
29 files changed, 46 insertions, 866 deletions
diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.cpp b/src/backends/aclCommon/BaseMemoryManager.cpp index 532692b1ce..4e0d14c5e4 100644 --- a/src/backends/aclCommon/memory/BaseMemoryManager.cpp +++ b/src/backends/aclCommon/BaseMemoryManager.cpp @@ -5,9 +5,9 @@ #include "BaseMemoryManager.hpp" #if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) -#include "BlobLifetimeManager.hpp" -#include "PoolManager.hpp" -#include "OffsetLifetimeManager.hpp" +#include "arm_compute/runtime/BlobLifetimeManager.h" +#include "arm_compute/runtime/PoolManager.h" +#include "arm_compute/runtime/OffsetLifetimeManager.h" #endif #include <boost/polymorphic_cast.hpp> @@ -19,7 +19,7 @@ namespace armnn BaseMemoryManager::BaseMemoryManager(std::unique_ptr<arm_compute::IAllocator> alloc, MemoryAffinity memoryAffinity) { - // (Re)create the memory manager components. + BOOST_ASSERT(alloc); m_Allocator = std::move(alloc); m_IntraLayerMemoryMgr = CreateArmComputeMemoryManager(memoryAffinity); @@ -33,53 +33,30 @@ BaseMemoryManager::CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity) if (memoryAffinity == MemoryAffinity::Buffer) { - lifetimeManager = std::make_shared<BlobLifetimeManager>(); + lifetimeManager = std::make_shared<arm_compute::BlobLifetimeManager>(); } else { - lifetimeManager = std::make_shared<OffsetLifetimeManager>(); + lifetimeManager = std::make_shared<arm_compute::OffsetLifetimeManager>(); } - auto poolManager = std::make_shared<PoolManager>(); + auto poolManager = std::make_shared<arm_compute::PoolManager>(); auto memoryManager = std::make_shared<arm_compute::MemoryManagerOnDemand>(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() { + static const size_t s_NumPools = 1; + // Allocate memory pools for intra-layer memory manager BOOST_ASSERT(m_IntraLayerMemoryMgr); - IPoolManager* poolManager = boost::polymorphic_downcast<IPoolManager*>(m_IntraLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->AllocatePools(); + m_IntraLayerMemoryMgr->populate(*m_Allocator, s_NumPools); // Allocate memory pools for inter-layer memory manager BOOST_ASSERT(m_InterLayerMemoryMgr); - poolManager = boost::polymorphic_downcast<IPoolManager*>(m_InterLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->AllocatePools(); + 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); @@ -94,15 +71,11 @@ void BaseMemoryManager::Release() // Release memory pools managed by intra-layer memory manager BOOST_ASSERT(m_IntraLayerMemoryMgr); - IPoolManager* poolManager = boost::polymorphic_downcast<IPoolManager*>(m_IntraLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->ReleasePools(); + m_IntraLayerMemoryMgr->clear(); // Release memory pools managed by inter-layer memory manager BOOST_ASSERT(m_InterLayerMemoryMgr); - poolManager = boost::polymorphic_downcast<IPoolManager*>(m_InterLayerMemoryMgr->pool_manager()); - BOOST_ASSERT(poolManager); - poolManager->ReleasePools(); + m_InterLayerMemoryMgr->clear(); } #endif diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.hpp b/src/backends/aclCommon/BaseMemoryManager.hpp index a6ffff7086..ffa440b3ab 100644 --- a/src/backends/aclCommon/memory/BaseMemoryManager.hpp +++ b/src/backends/aclCommon/BaseMemoryManager.hpp @@ -43,12 +43,10 @@ public: std::shared_ptr<arm_compute::MemoryManagerOnDemand>& GetInterLayerManager() { return m_InterLayerMemoryMgr; } std::shared_ptr<arm_compute::IMemoryGroup>& GetInterLayerMemoryGroup() { return m_InterLayerMemoryGroup; } - void Finalize(); void Acquire(); void Release(); protected: - std::unique_ptr<arm_compute::IAllocator> m_Allocator; std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_IntraLayerMemoryMgr; std::shared_ptr<arm_compute::MemoryManagerOnDemand> m_InterLayerMemoryMgr; @@ -59,7 +57,6 @@ protected: virtual std::shared_ptr<arm_compute::IMemoryGroup> CreateMemoryGroup(const std::shared_ptr<arm_compute::MemoryManagerOnDemand>& memoryManager) = 0; - void FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager); #endif }; 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/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 <arm_compute/runtime/IMemoryGroup.h> - -#include "boost/assert.hpp" - -#include <algorithm> - -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<size_t> 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<arm_compute::IMemoryPool> BlobLifetimeManager::create_pool(arm_compute::IAllocator* allocator) -{ - BOOST_ASSERT(allocator); - return std::make_unique<BlobMemoryPool>(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 <arm_compute/runtime/ISimpleLifetimeManager.h> - -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<arm_compute::IMemoryPool> create_pool(arm_compute::IAllocator* allocator) override; - - arm_compute::MappingType mapping_type() const override; - -private: - void update_blobs_and_mappings() override; - - std::vector<size_t> 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 <boost/assert.hpp> - -namespace armnn -{ - -BlobMemoryPool::BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector<size_t> 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<arm_compute::IMemoryPool> BlobMemoryPool::duplicate() -{ - BOOST_ASSERT(m_Allocator); - return std::make_unique<BlobMemoryPool>(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 <arm_compute/runtime/IAllocator.h> -#include <arm_compute/runtime/Types.h> - -namespace armnn -{ - -/** Blob memory pool */ -class BlobMemoryPool : public IMemoryPool -{ -public: - BlobMemoryPool(arm_compute::IAllocator* allocator, std::vector<size_t> 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<arm_compute::IMemoryPool> 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<void*> m_Blobs; - - /// Sizes of each memory blob - std::vector<size_t> 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 <arm_compute/runtime/IMemoryPool.h> - -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 <arm_compute/runtime/IPoolManager.h> - -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 <arm_compute/runtime/IMemoryGroup.h> - -#include <numeric> - -#include <boost/assert.hpp> - -namespace armnn -{ - -OffsetLifetimeManager::OffsetLifetimeManager() - : m_BlobSize(0) -{ -} - -std::unique_ptr<arm_compute::IMemoryPool> OffsetLifetimeManager::create_pool(arm_compute::IAllocator* allocator) -{ - BOOST_ASSERT(allocator); - return std::make_unique<OffsetMemoryPool>(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<size_t>(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 <arm_compute/runtime/ISimpleLifetimeManager.h> - -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<arm_compute::IMemoryPool> 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 <boost/assert.hpp> - -#include <algorithm> - -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<uint8_t*>(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<arm_compute::IMemoryPool> OffsetMemoryPool::duplicate() -{ - BOOST_ASSERT(m_Allocator); - return std::make_unique<OffsetMemoryPool>(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 <arm_compute/runtime/IAllocator.h> -#include <arm_compute/runtime/Types.h> - -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<arm_compute::IMemoryPool> 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 <boost/assert.hpp> -#include <boost/polymorphic_cast.hpp> - -#include <algorithm> - -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<arm_compute::Mutex> 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<arm_compute::Mutex> lock(m_Mutex); - - auto it = std::find_if( - std::begin(m_OccupiedPools), - std::end(m_OccupiedPools), - [pool](const std::unique_ptr<arm_compute::IMemoryPool> &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<arm_compute::IMemoryPool> pool) -{ - std::lock_guard<arm_compute::Mutex> 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<arm_compute::Semaphore>(m_FreePools.size()); -} - -size_t PoolManager::num_pools() const -{ - std::lock_guard<arm_compute::Mutex> lock(m_Mutex); - - return m_FreePools.size() + m_OccupiedPools.size(); -} - -void PoolManager::AllocatePools() -{ - std::lock_guard<arm_compute::Mutex> lock(m_Mutex); - - for (auto& pool : m_FreePools) - { - boost::polymorphic_downcast<IMemoryPool*>(pool.get())->AllocatePool(); - } - - for (auto& pool : m_OccupiedPools) - { - boost::polymorphic_downcast<IMemoryPool*>(pool.get())->AllocatePool(); - } -} - -void PoolManager::ReleasePools() -{ - std::lock_guard<arm_compute::Mutex> lock(m_Mutex); - - for (auto& pool : m_FreePools) - { - boost::polymorphic_downcast<IMemoryPool*>(pool.get())->ReleasePool(); - } - - for (auto& pool : m_OccupiedPools) - { - boost::polymorphic_downcast<IMemoryPool*>(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 <arm_compute/runtime/IMemoryPool.h> -#include <arm_compute/core/Error.h> - -#include <support/Mutex.h> -#include <support/Semaphore.h> - -#include <cstddef> -#include <list> -#include <memory> - -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<arm_compute::IMemoryPool> pool) override; - size_t num_pools() const override; - - void AllocatePools() override; - void ReleasePools() override; - -private: - /// List of free pools - std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_FreePools; - - /// List of occupied pools - std::list<std::unique_ptr<arm_compute::IMemoryPool>> m_OccupiedPools; - - /// Semaphore to control the queues - std::unique_ptr<arm_compute::Semaphore> 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<T, 4> 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<T,4> 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<T, 4> 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<T, 4> 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<T, 4> 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<T, 4> 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<T, 4> 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<T, 4> 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<T,4> Convolution1dTestImpl(armnn::IWorkloadFactory& workloadFact CopyDataToITensorHandle(inputHandle.get(), inputData.data()); - workloadFactory.Finalize(); + workloadFactory.Acquire(); workload->Execute(); + workloadFactory.Release(); // Output LayerTestResult<T,4> ret(outputInfo); @@ -1105,9 +1104,10 @@ LayerTestResult<T,4> 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<T, 4> 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<T, 2> 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<float,3> 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<float,4> 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<T, 4> 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<T, 4> 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<float,4> 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<T, 4> 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<float,4> 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<float,4> 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<float,4> 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<float, 4> 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<float, 4> 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<float, 4> 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<float, 4> 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<float, 4> 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<float, 2> 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<float, 4> 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<T, 2> 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<T, 3> 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<T, 4> 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<T, 4> ConstantTestImpl(armnn::IWorkloadFactory& workloadFactory, outputHandle->Allocate(); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -4673,7 +4650,6 @@ LayerTestResult<uint8_t, 3> 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<uint8_t, 4> 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<uint8_t, 4> 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<T, 4> 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<uint8_t, 4> 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<uint8_t, 4> 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<uint8_t, 4> 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<uint8_t, 4> 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<uint8_t, 4> 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<T, OutputDim> MeanTestHelper(armnn::IWorkloadFactory& workloadFa CopyDataToITensorHandle(inputHandle.get(), input.origin()); - workloadFactory.Finalize(); workload->Execute(); CopyDataFromITensorHandle(result.output.origin(), outputHandle.get()); @@ -6119,7 +6086,5 @@ LayerTestResult<float, 4> 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<float, 2> 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<float, 2> 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<float,4> 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<float,4> 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<float,4> 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<T, 2> 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<T, 2> 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 <backendsCommon/MemCopyWorkload.hpp> -#include <aclCommon/memory/IPoolManager.hpp> - #include <cl/ClTensorHandle.hpp> #include <cl/workloads/ClWorkloads.hpp> #include <cl/workloads/ClWorkloadUtils.hpp> @@ -316,11 +314,6 @@ std::unique_ptr<IWorkload> ClWorkloadFactory::CreatePad(const PadQueueDescriptor return MakeWorkload<ClPadWorkload>(descriptor, info); } -void ClWorkloadFactory::Finalize() -{ - m_MemoryManager.Finalize(); -} - void ClWorkloadFactory::Release() { m_MemoryManager.Release(); @@ -537,10 +530,6 @@ std::unique_ptr<IWorkload> 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 <armnn/Optional.hpp> #include <backendsCommon/OutputHandler.hpp> -#include <aclCommon/memory/BaseMemoryManager.hpp> +#include <aclCommon/BaseMemoryManager.hpp> namespace armnn { @@ -126,8 +126,6 @@ public: virtual std::unique_ptr<IWorkload> 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 <cl/ClContextControl.hpp> +#include <backendsCommon/WorkloadFactory.hpp> template<bool ProfilingEnabled> 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 <aclCommon/memory/IPoolManager.hpp> #endif #include <backendsCommon/MakeWorkloadHelper.hpp> @@ -280,11 +279,6 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreatePad(const PadQueueDescript return MakeWorkloadHelper<NullWorkload, NullWorkload>(descriptor, info); } -void NeonWorkloadFactory::Finalize() -{ - m_MemoryManager.Finalize(); -} - void NeonWorkloadFactory::Release() { m_MemoryManager.Release(); @@ -501,9 +495,6 @@ std::unique_ptr<IWorkload> 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 <armnn/Optional.hpp> + #include <backendsCommon/OutputHandler.hpp> -#include <aclCommon/memory/BaseMemoryManager.hpp> +#include <aclCommon/BaseMemoryManager.hpp> #include <boost/core/ignore_unused.hpp> @@ -127,8 +128,6 @@ public: virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor, const WorkloadInfo& info) const override; - virtual void Finalize() override; - virtual void Release() override; virtual void Acquire() override; |