IVGCVSW-5078 Fix segmentation fault on Yolo V3 Big App
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>
Fri, 10 Jul 2020 16:50:53 +0000 (17:50 +0100)
committerJim Flynn <jim.flynn@arm.com>
Mon, 13 Jul 2020 09:17:43 +0000 (09:17 +0000)
 * Register TensorHandleFactories when create Workload Factory

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I6217c6f00d27b67e42b8043cbaf72d9db5789bfb

src/armnn/LoadedNetwork.cpp
src/backends/cl/ClBackend.cpp
src/backends/neon/NeonBackend.cpp
src/backends/reference/RefBackend.cpp

index b35dfd1..0dd75aa 100644 (file)
@@ -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)));
index 0a898ec..f9a8993 100644 (file)
@@ -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));
index 841ed27..01cc6d8 100644 (file)
@@ -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));
 }
index 590fde3..e93b317 100644 (file)
@@ -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));
 }