diff options
author | Derek Lamberti <derek.lamberti@arm.com> | 2019-06-13 11:40:08 +0100 |
---|---|---|
committer | Derek Lamberti <derek.lamberti@arm.com> | 2019-06-24 15:00:15 +0000 |
commit | 84da38b0f11ca3db0a439e510514be780f3933ff (patch) | |
tree | 56532f4842abc1ad00ae57bc20ddc72cada59b4c /src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp | |
parent | 9515c7ec4f4535fff2c8f2d3f88974474d3f3468 (diff) | |
download | armnn-84da38b0f11ca3db0a439e510514be780f3933ff.tar.gz |
IVGCVSW-3277 Refactor TensorHandle factory API
* Added backend support for multiple types of TensorHandle factories
* Refactored the backend API to enable new tensor strategies
* Added mechanism to determine memory strategies during optimization
* Perform mem-copy only when Direct access is not found
* Explicitly deleted the copy-constructor from OutputSlot to prevent
accidental local copies that would cause the DisconnectAll to be
called by the destructor
Change-Id: I7e812c8e5e6c1c20db1c5932749ac70fd93db7f8
Signed-off-by: Derek Lamberti <derek.lamberti@arm.com>
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp')
-rw-r--r-- | src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp b/src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp new file mode 100644 index 0000000000..4692b9f960 --- /dev/null +++ b/src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp @@ -0,0 +1,69 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "TensorHandleFactoryRegistry.hpp" +#include "IMemoryManager.hpp" + + +namespace armnn +{ + +void TensorHandleFactoryRegistry::RegisterFactory(std::unique_ptr <ITensorHandleFactory> newFactory) +{ + if (!newFactory) + { + return; + } + + ITensorHandleFactory::FactoryId id = newFactory->GetId(); + + // Don't register duplicates + for (auto& registeredFactory : m_Factories) + { + if (id == registeredFactory->GetId()) + { + return; + } + } + + // Take ownership of the new allocator + m_Factories.push_back(std::move(newFactory)); +} + +void TensorHandleFactoryRegistry::RegisterMemoryManager(std::shared_ptr<armnn::IMemoryManager> memoryManger) +{ + m_MemoryManagers.push_back(memoryManger); +} + +ITensorHandleFactory* TensorHandleFactoryRegistry::GetFactory(ITensorHandleFactory::FactoryId id) const +{ + for (auto& factory : m_Factories) + { + if (factory->GetId() == id) + { + return factory.get(); + } + } + + return nullptr; +} + +void TensorHandleFactoryRegistry::AquireMemory() +{ + for (auto& mgr : m_MemoryManagers) + { + mgr->Acquire(); + } +} + +void TensorHandleFactoryRegistry::ReleaseMemory() +{ + for (auto& mgr : m_MemoryManagers) + { + mgr->Release(); + } +} + +} // namespace armnn |