aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2020-07-10 17:50:53 +0100
committerJim Flynn <jim.flynn@arm.com>2020-07-13 09:17:43 +0000
commit549cb7ad5fe0686a5216557ef7ee21b520bf7936 (patch)
tree34c1ff0c8933cb72129d8b8d30d6e814c272841c
parent87d0bda9b49d9df4455f1887027e5ead2527c27e (diff)
downloadarmnn-549cb7ad5fe0686a5216557ef7ee21b520bf7936.tar.gz
IVGCVSW-5078 Fix segmentation fault on Yolo V3 Big App
* Register TensorHandleFactories when create Workload Factory Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: I6217c6f00d27b67e42b8043cbaf72d9db5789bfb
-rw-r--r--src/armnn/LoadedNetwork.cpp3
-rw-r--r--src/backends/cl/ClBackend.cpp1
-rw-r--r--src/backends/neon/NeonBackend.cpp2
-rw-r--r--src/backends/reference/RefBackend.cpp1
4 files changed, 5 insertions, 2 deletions
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index b35dfd1107..0dd75aa649 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -121,6 +121,7 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net,
m_OptimizedNetwork(std::move(net)),
m_IsImportEnabled(networkProperties.m_ImportEnabled),
m_IsExportEnabled(networkProperties.m_ExportEnabled),
+ m_TensorHandleFactoryRegistry(),
m_ProfilingService(profilingService)
{
// Create a profiler and register it for the current thread.
@@ -144,8 +145,6 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net,
if (backend->SupportsTensorAllocatorAPI())
{
- backend->RegisterTensorHandleFactories(m_TensorHandleFactoryRegistry);
-
auto workloadFactory = backend->CreateWorkloadFactory(m_TensorHandleFactoryRegistry);
m_WorkloadFactories.emplace(
std::make_pair(backendId, std::make_pair(std::move(workloadFactory), nullptr)));
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
index 0a898ec2c0..f9a8993baf 100644
--- a/src/backends/cl/ClBackend.cpp
+++ b/src/backends/cl/ClBackend.cpp
@@ -50,6 +50,7 @@ IBackendInternal::IWorkloadFactoryPtr ClBackend::CreateWorkloadFactory(
auto memoryManager = std::make_shared<ClMemoryManager>(std::make_unique<arm_compute::CLBufferAllocator>());
registry.RegisterMemoryManager(memoryManager);
+ registry.RegisterFactory(std::make_unique<ClTensorHandleFactory>(memoryManager));
return std::make_unique<ClWorkloadFactory>(
PolymorphicPointerDowncast<ClMemoryManager>(memoryManager));
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index 841ed27006..01cc6d8119 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -53,6 +53,8 @@ IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory(
BaseMemoryManager::MemoryAffinity::Offset);
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
+ tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));
+
return std::make_unique<NeonWorkloadFactory>(
PolymorphicPointerDowncast<NeonMemoryManager>(memoryManager));
}
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
index 590fde3e16..e93b317dce 100644
--- a/src/backends/reference/RefBackend.cpp
+++ b/src/backends/reference/RefBackend.cpp
@@ -37,6 +37,7 @@ IBackendInternal::IWorkloadFactoryPtr RefBackend::CreateWorkloadFactory(
auto memoryManager = std::make_shared<RefMemoryManager>();
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
+ tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<RefTensorHandleFactory>(memoryManager));
return std::make_unique<RefWorkloadFactory>(PolymorphicPointerDowncast<RefMemoryManager>(memoryManager));
}