From 5caf907efc31e774f8afde54b17a5596477772f6 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Wed, 14 Nov 2018 18:35:18 +0000 Subject: IVGCVSW-2136: Remove memory management methods from workload factories Change-Id: Idc0f94590566ac362f7e1d1999361d025cc2f67a --- src/armnn/LoadedNetwork.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/armnn/LoadedNetwork.cpp') diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 24d119c260..3464fb0277 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -92,10 +92,11 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net) auto createBackend = BackendRegistryInstance().GetFactory(backend); auto it = m_Backends.emplace(std::make_pair(backend, createBackend())); - auto memoryManager = it.first->second->CreateMemoryManager(); - auto workloadFactory = it.first->second->CreateWorkloadFactory(std::move(memoryManager)); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = it.first->second->CreateMemoryManager(); + auto workloadFactory = it.first->second->CreateWorkloadFactory(memoryManager); - m_WorkloadFactories.emplace(std::make_pair(backend, std::move(workloadFactory))); + m_WorkloadFactories.emplace(std::make_pair(backend, + std::make_pair(std::move(workloadFactory), memoryManager))); } layer->CreateTensorHandles(m_OptimizedNetwork->GetGraph(), GetWorkloadFactory(*layer)); } @@ -182,7 +183,7 @@ const IWorkloadFactory& LoadedNetwork::GetWorkloadFactory(const Layer& layer) co CHECK_LOCATION()); } - workloadFactory = it->second.get(); + workloadFactory = it->second.first.get(); BOOST_ASSERT_MSG(workloadFactory, "No workload factory"); @@ -416,7 +417,11 @@ void LoadedNetwork::AllocateWorkingMemory() } for (auto&& workloadFactory : m_WorkloadFactories) { - workloadFactory.second->Acquire(); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = workloadFactory.second.second; + if (memoryManager) + { + memoryManager->Acquire(); + } } m_IsWorkingMemAllocated = true; } @@ -431,7 +436,11 @@ void LoadedNetwork::FreeWorkingMemory() // Informs the memory managers to release memory in it's respective memory group for (auto&& workloadFactory : m_WorkloadFactories) { - workloadFactory.second->Release(); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = workloadFactory.second.second; + if (memoryManager) + { + memoryManager->Release(); + } } m_IsWorkingMemAllocated = false; } -- cgit v1.2.1