From 73d3e2e1616ba5dcdb0a190afba2463742bd4fcc Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Thu, 29 Apr 2021 14:23:04 +0100 Subject: IVGCVSW-5819 5820 5821 Add MemorySourceFlags to TensorHandleFactoryRegistry::GetFactory * Modify Layer::CreateTensorHandles to include MemorySource * Modify INetworkProperties to add MemorySource * Disable Neon/Cl fallback tests until full import implementation complete Change-Id: Ia4fff6ea3d4bf6afca33aae358125ccaec7f9a38 Signed-off-by: Francis Murtagh --- src/armnn/Layer.cpp | 13 +++++++++++-- src/armnn/Layer.hpp | 3 ++- src/armnn/LoadedNetwork.cpp | 12 ++++++++---- src/armnn/Runtime.cpp | 2 +- src/armnn/layers/ConcatLayer.cpp | 13 +++++++++++-- src/armnn/layers/ConcatLayer.hpp | 4 +++- src/armnn/layers/OutputLayer.hpp | 5 +++-- src/armnn/layers/SplitterLayer.cpp | 13 +++++++++++-- src/armnn/layers/SplitterLayer.hpp | 4 ++-- 9 files changed, 52 insertions(+), 17 deletions(-) (limited to 'src/armnn') diff --git a/src/armnn/Layer.cpp b/src/armnn/Layer.cpp index 13d834f6ae..782f1939b0 100644 --- a/src/armnn/Layer.cpp +++ b/src/armnn/Layer.cpp @@ -249,7 +249,8 @@ void Layer::SetAdditionalInfo(QueueDescriptor& descriptor) const void Layer::CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& workloadFactory, - const bool IsMemoryManaged) + const bool IsMemoryManaged, + MemorySource memSource) { for (unsigned int idx=0; idx < GetNumOutputSlots(); idx++) { @@ -264,7 +265,15 @@ void Layer::CreateTensorHandles(const TensorHandleFactoryRegistry& registry, } else { - ITensorHandleFactory* handleFactory = registry.GetFactory(factoryId); + ITensorHandleFactory* handleFactory; + if (memSource == MemorySource::Undefined ) + { + handleFactory = registry.GetFactory(factoryId); + } + else + { + handleFactory = registry.GetFactory(factoryId, memSource); + } ARMNN_ASSERT(handleFactory); handler.CreateTensorHandles(*handleFactory, IsMemoryManaged); } diff --git a/src/armnn/Layer.hpp b/src/armnn/Layer.hpp index 5ab6b3152f..d43545c01f 100644 --- a/src/armnn/Layer.hpp +++ b/src/armnn/Layer.hpp @@ -275,7 +275,8 @@ public: virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& factory, - const bool IsMemoryManaged = true); + const bool IsMemoryManaged = true, + MemorySource memSource = MemorySource::Undefined); /// Creates a dynamically-allocated copy of this layer. /// @param graph - The Graph into which this Layer is being cloned. diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 85451cb0d8..5c5a963212 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -174,8 +174,10 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net, { // If IsImportEnabled is true then we need to set IsMemoryManaged // to false when creating TensorHandles - layer->CreateTensorHandles(m_TensorHandleFactoryRegistry, workloadFactory, - !m_NetworkProperties.m_ImportEnabled); + layer->CreateTensorHandles(m_TensorHandleFactoryRegistry, + workloadFactory, + !m_NetworkProperties.m_ImportEnabled, + m_NetworkProperties.m_InputSource); break; } default: @@ -186,8 +188,10 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net, (layer->GetOutputSlots()[0].GetNumConnections() == 1) && (layer->GetOutputSlots()[0].GetConnection(0)->GetOwningLayer().GetType() == LayerType::Output)) { - layer->CreateTensorHandles(m_TensorHandleFactoryRegistry, workloadFactory, - !m_NetworkProperties.m_ExportEnabled); + layer->CreateTensorHandles(m_TensorHandleFactoryRegistry, + workloadFactory, + !m_NetworkProperties.m_ExportEnabled, + m_NetworkProperties.m_OutputSource); } else { diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 91a21d4b53..1dd86a61ce 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -128,7 +128,7 @@ Status RuntimeImpl::LoadNetwork(NetworkId& networkIdOut, IOptimizedNetworkPtr inNetwork, std::string& errorMessage) { - INetworkProperties networkProperties; + INetworkProperties networkProperties(false, MemorySource::Undefined, MemorySource::Undefined); return LoadNetwork(networkIdOut, std::move(inNetwork), errorMessage, networkProperties); } diff --git a/src/armnn/layers/ConcatLayer.cpp b/src/armnn/layers/ConcatLayer.cpp index 238fdb66d9..3a20e1b3f6 100644 --- a/src/armnn/layers/ConcatLayer.cpp +++ b/src/armnn/layers/ConcatLayer.cpp @@ -179,7 +179,8 @@ void ConcatLayer::CreateTensors(const TensorHandleFactoryRegistry& registry, void ConcatLayer::CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& workloadFactory, - const bool isMemoryManaged) + const bool isMemoryManaged, + MemorySource memSource) { OutputSlot& slot = GetOutputSlot(0); ITensorHandleFactory::FactoryId factoryId = slot.GetTensorHandleFactoryId(); @@ -190,7 +191,15 @@ void ConcatLayer::CreateTensorHandles(const TensorHandleFactoryRegistry& registr } else { - ITensorHandleFactory* handleFactory = registry.GetFactory(factoryId); + ITensorHandleFactory* handleFactory; + if (memSource == MemorySource::Undefined) + { + handleFactory = registry.GetFactory(factoryId); + } + else + { + handleFactory = registry.GetFactory(factoryId, memSource); + } ARMNN_ASSERT(handleFactory); CreateTensors(registry, *handleFactory, isMemoryManaged); } diff --git a/src/armnn/layers/ConcatLayer.hpp b/src/armnn/layers/ConcatLayer.hpp index 3d9ba1815e..6a43318382 100644 --- a/src/armnn/layers/ConcatLayer.hpp +++ b/src/armnn/layers/ConcatLayer.hpp @@ -24,9 +24,11 @@ public: /// @param [in] registry Contains all the registered tensor handle factories available for use. /// @param [in] factory The workload factory which will create the workload. /// @param [in] IsMemoryManaged Determine whether or not to assign a memory manager during creation + /// @param [in] MemorySource Determine the source of memory e.g Malloc virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& factory, - const bool IsMemoryManaged = true) override; + const bool IsMemoryManaged = true, + MemorySource memSource = MemorySource::Undefined) override; /// Creates a dynamically-allocated copy of this layer. /// @param [in] graph The graph into which this layer is being cloned. diff --git a/src/armnn/layers/OutputLayer.hpp b/src/armnn/layers/OutputLayer.hpp index 6315e25da1..fc6a8aa6b2 100644 --- a/src/armnn/layers/OutputLayer.hpp +++ b/src/armnn/layers/OutputLayer.hpp @@ -26,9 +26,10 @@ public: /// @param [in] IsMemoryManaged Determine whether or not to assign a memory manager during creation virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& factory, - const bool IsMemoryManaged = true) override + const bool isMemoryManaged = true, + MemorySource memSource = MemorySource::Undefined) override { - IgnoreUnused(registry, factory, IsMemoryManaged); + IgnoreUnused(registry, factory, isMemoryManaged, memSource); } /// Creates a dynamically-allocated copy of this layer. diff --git a/src/armnn/layers/SplitterLayer.cpp b/src/armnn/layers/SplitterLayer.cpp index 5e6622e13a..adef9aa1a2 100644 --- a/src/armnn/layers/SplitterLayer.cpp +++ b/src/armnn/layers/SplitterLayer.cpp @@ -177,7 +177,8 @@ void SplitterLayer::CreateTensors(const TensorHandleFactoryRegistry& registry, void SplitterLayer::CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& workloadFactory, - const bool isMemoryManaged) + const bool isMemoryManaged, + MemorySource memSource) { OutputSlot& slot = GetOutputSlot(0); ITensorHandleFactory::FactoryId factoryId = slot.GetTensorHandleFactoryId(); @@ -188,7 +189,15 @@ void SplitterLayer::CreateTensorHandles(const TensorHandleFactoryRegistry& regis } else { - ITensorHandleFactory* handleFactory = registry.GetFactory(factoryId); + ITensorHandleFactory* handleFactory; + if (memSource == MemorySource::Undefined) + { + handleFactory = registry.GetFactory(factoryId); + } + else + { + handleFactory = registry.GetFactory(factoryId, memSource); + } ARMNN_ASSERT(handleFactory); CreateTensors(registry, *handleFactory, isMemoryManaged); } diff --git a/src/armnn/layers/SplitterLayer.hpp b/src/armnn/layers/SplitterLayer.hpp index 9999009175..075b136da9 100644 --- a/src/armnn/layers/SplitterLayer.hpp +++ b/src/armnn/layers/SplitterLayer.hpp @@ -24,10 +24,10 @@ public: /// @param [in] registry Contains all the registered tensor handle factories available for use. /// @param [in] factory The workload factory which will create the workload. /// @param [in] IsMemoryManaged Determine whether or not to assign a memory manager during creation - //virtual void CreateTensorHandles(Graph& graph, const IWorkloadFactory& factory) override; virtual void CreateTensorHandles(const TensorHandleFactoryRegistry& registry, const IWorkloadFactory& factory, - const bool IsMemoryManaged = true) override; + const bool IsMemoryManaged = true, + MemorySource memSource = MemorySource::Undefined) override; /// Creates a dynamically-allocated copy of this layer. /// @param [in] graph The graph into which this layer is being cloned. -- cgit v1.2.1