From 84da38b0f11ca3db0a439e510514be780f3933ff Mon Sep 17 00:00:00 2001 From: Derek Lamberti Date: Thu, 13 Jun 2019 11:40:08 +0100 Subject: 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 Signed-off-by: Matteo Martincigh --- src/armnn/Layer.hpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'src/armnn/Layer.hpp') diff --git a/src/armnn/Layer.hpp b/src/armnn/Layer.hpp index cbb1771668..1ddbc00bc7 100644 --- a/src/armnn/Layer.hpp +++ b/src/armnn/Layer.hpp @@ -6,7 +6,9 @@ #include "LayerFwd.hpp" +#include #include +#include #include #include #include "InternalTypes.hpp" @@ -84,8 +86,15 @@ public: explicit OutputSlot(Layer& owner, OutputHandler& outputHandler) : m_OwningLayer(owner) , m_OutputHandler(outputHandler) + , m_TensorHandleFactoryId(ITensorHandleFactory::LegacyFactoryId) {} + OutputSlot(const OutputSlot&) = delete; + OutputSlot& operator=(const OutputSlot&) = delete; + + OutputSlot(OutputSlot&&) = default; + OutputSlot& operator=(OutputSlot&&) = default; + ~OutputSlot() { try @@ -147,12 +156,21 @@ public: bool operator==(const OutputSlot& other) const; + void SetTensorHandleFactory(const ITensorHandleFactory::FactoryId& id); + ITensorHandleFactory::FactoryId GetTensorHandleFactoryId() const; + + void SetMemoryStrategy(unsigned int connectionIndex, MemoryStrategy strategy); + MemoryStrategy GetMemoryStrategyForConnection(unsigned int connectionIdx) const; + private: void ValidateConnectionIndex(unsigned int index) const; Layer& m_OwningLayer; OutputHandler& m_OutputHandler; std::vector m_Connections; + + ITensorHandleFactory::FactoryId m_TensorHandleFactoryId; + std::vector m_MemoryStrategies; }; // InputSlot inlines that need OutputSlot declaration. @@ -248,7 +266,7 @@ public: virtual std::unique_ptr CreateWorkload(const Graph& graph, const IWorkloadFactory& factory) const = 0; - virtual void CreateTensorHandles(Graph& graph, const IWorkloadFactory& factory); + virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& factory); /// Creates a dynamically-allocated copy of this layer. /// @param graph - The Graph into which this Layer is being cloned. -- cgit v1.2.1