aboutsummaryrefslogtreecommitdiff
path: root/src/armnn
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnn')
-rw-r--r--src/armnn/Layer.cpp13
-rw-r--r--src/armnn/Layer.hpp3
-rw-r--r--src/armnn/LoadedNetwork.cpp12
-rw-r--r--src/armnn/Runtime.cpp2
-rw-r--r--src/armnn/layers/ConcatLayer.cpp13
-rw-r--r--src/armnn/layers/ConcatLayer.hpp4
-rw-r--r--src/armnn/layers/OutputLayer.hpp5
-rw-r--r--src/armnn/layers/SplitterLayer.cpp13
-rw-r--r--src/armnn/layers/SplitterLayer.hpp4
9 files changed, 52 insertions, 17 deletions
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<IOptimizedNetwork> 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<IOptimizedNetwork> 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.