diff options
author | Finn Williams <Finn.Williams@arm.com> | 2021-07-08 13:07:19 +0100 |
---|---|---|
committer | Finn Williams <Finn.Williams@arm.com> | 2021-07-12 17:09:06 +0100 |
commit | fdf2eaea1773d066dbb48e3d214ccd5446fa918a (patch) | |
tree | 5b68a1a30e65bf0cdac65199bef5ea11eefaa442 /ArmnnPreparedModel.cpp | |
parent | f769f292ba506784c8d21d691de821f4e3b53fec (diff) | |
download | android-nn-driver-fdf2eaea1773d066dbb48e3d214ccd5446fa918a.tar.gz |
IVGCVSW-6062 update ArmnnPreparedModels to have a single static instance of the threadpool
Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: Ie350a11eab5d677dd6a5571ea4094aa51b23c501
Diffstat (limited to 'ArmnnPreparedModel.cpp')
-rw-r--r-- | ArmnnPreparedModel.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/ArmnnPreparedModel.cpp b/ArmnnPreparedModel.cpp index 388a1116..f14560a1 100644 --- a/ArmnnPreparedModel.cpp +++ b/ArmnnPreparedModel.cpp @@ -90,6 +90,9 @@ RequestThread<ArmnnPreparedModel, HalVersion, CallbackContext_1_0> ArmnnPreparedModel<HalVersion>::m_RequestThread; template<typename HalVersion> +std::unique_ptr<armnn::Threadpool> ArmnnPreparedModel<HalVersion>::m_Threadpool(nullptr); + +template<typename HalVersion> template <typename TensorBindingCollection> void ArmnnPreparedModel<HalVersion>::DumpTensorsIfRequired(char const* tensorNamePrefix, const TensorBindingCollection& tensorBindings) @@ -126,7 +129,7 @@ ArmnnPreparedModel<HalVersion>::ArmnnPreparedModel(armnn::NetworkId networkId, // Enable profiling if required. m_Runtime->GetProfiler(m_NetworkId)->EnableProfiling(m_GpuProfilingEnabled); - if (asyncModelExecutionEnabled) + if (m_AsyncModelExecutionEnabled) { std::vector<std::shared_ptr<armnn::IWorkingMemHandle>> memHandles; for (unsigned int i=0; i < numberOfThreads; ++i) @@ -134,8 +137,16 @@ ArmnnPreparedModel<HalVersion>::ArmnnPreparedModel(armnn::NetworkId networkId, memHandles.emplace_back(m_Runtime->CreateWorkingMemHandle(networkId)); } + if (!m_Threadpool) + { + m_Threadpool = std::make_unique<armnn::Threadpool>(numberOfThreads, runtime, memHandles); + } + else + { + m_Threadpool->LoadMemHandles(memHandles); + } + m_WorkingMemHandle = memHandles.back(); - m_Threadpool = std::make_unique<armnn::Threadpool>(numberOfThreads, runtime, memHandles); } } @@ -148,6 +159,12 @@ ArmnnPreparedModel<HalVersion>::~ArmnnPreparedModel() // Unload the network associated with this model. m_Runtime->UnloadNetwork(m_NetworkId); + // Unload the network memhandles from the threadpool + if (m_AsyncModelExecutionEnabled) + { + m_Threadpool->UnloadMemHandles(m_NetworkId); + } + // Dump the profiling info to a file if required. DumpJsonProfilingIfRequired(m_GpuProfilingEnabled, m_RequestInputsAndOutputsDumpDir, m_NetworkId, profiler.get()); } |