aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp
diff options
context:
space:
mode:
authorDerek Lamberti <derek.lamberti@arm.com>2019-06-13 11:40:08 +0100
committerDerek Lamberti <derek.lamberti@arm.com>2019-06-24 15:00:15 +0000
commit84da38b0f11ca3db0a439e510514be780f3933ff (patch)
tree56532f4842abc1ad00ae57bc20ddc72cada59b4c /src/backends/backendsCommon/TensorHandleFactoryRegistry.cpp
parent9515c7ec4f4535fff2c8f2d3f88974474d3f3468 (diff)
downloadarmnn-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.cpp69
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