aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Runtime.cpp
diff options
context:
space:
mode:
authorsurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:29:27 +0100
committersurmeh01 <surabhi.mehta@arm.com>2018-03-29 16:29:27 +0100
commitbceff2fb3fc68bb0aa88b886900c34b77340c826 (patch)
treed867d3e090d58d3012dfbbac456e9ea8c7f789bc /src/armnn/Runtime.cpp
parent4fcda0101ec3d110c1d6d7bee5c83416b645528a (diff)
downloadarmnn-bceff2fb3fc68bb0aa88b886900c34b77340c826.tar.gz
Release 18.03
Diffstat (limited to 'src/armnn/Runtime.cpp')
-rw-r--r--src/armnn/Runtime.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index ea6d19bd31..e0d6a9add0 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -9,6 +9,7 @@
#ifdef ARMCOMPUTECL_ENABLED
#include <arm_compute/core/CL/OpenCL.h>
#include <arm_compute/core/CL/CLKernelLibrary.h>
+#include <arm_compute/runtime/CL/CLScheduler.h>
#endif
#include <boost/log/trivial.hpp>
@@ -58,18 +59,26 @@ Status Runtime::LoadNetwork(NetworkId& networkIdOut, IOptimizedNetworkPtr inNetw
m_LoadedNetworks[networkIdOut] = std::move(loadedNetwork);
return Status::Success;
-
}
Status Runtime::UnloadNetwork(NetworkId networkId)
{
+#ifdef ARMCOMPUTECL_ENABLED
+ if (arm_compute::CLScheduler::get().context()() != NULL)
+ {
+ arm_compute::CLScheduler::get().sync();
+ }
+#endif
if (m_LoadedNetworks.erase(networkId) == 0)
{
BOOST_LOG_TRIVIAL(warning) << "WARNING: Runtime::UnloadNetwork(): " << networkId << " not found!";
return Status::Failure;
}
#ifdef ARMCOMPUTECL_ENABLED
- arm_compute::CLKernelLibrary::get().clear_programs_cache();
+ if (arm_compute::CLScheduler::get().context()() != NULL && m_LoadedNetworks.empty())
+ {
+ m_WorkloadFactories.m_GpuAcc.get()->LoadOpenClRuntime();
+ }
#endif
BOOST_LOG_TRIVIAL(debug) << "Runtime::UnloadNetwork(): Unloaded network with ID: " << networkId;
return Status::Success;
@@ -87,11 +96,24 @@ Runtime::Runtime(const CreationOptions& options)
m_WorkloadFactories.m_CpuRef = make_shared<RefWorkloadFactory>(
options.m_DefaultComputeDevice == Compute::CpuRef ? true : options.m_UseCpuRefAsFallback);
m_WorkloadFactories.m_CpuAcc = make_shared<NeonWorkloadFactory>();
- m_WorkloadFactories.m_GpuAcc = make_shared<ClWorkloadFactory>();
+ m_WorkloadFactories.m_GpuAcc = make_shared<ClWorkloadFactory>(options.m_ClTunedParameters);
if (options.m_DefaultComputeDevice == Compute::GpuAcc)
{
- m_WorkloadFactories.m_GpuAcc.get()->LoadOpenClRuntime(options.m_ClTunedParameters);
+ m_WorkloadFactories.m_GpuAcc.get()->LoadOpenClRuntime();
+ }
+}
+
+Runtime::~Runtime()
+{
+ std::vector<int> networkIDs;
+ std::transform(m_LoadedNetworks.begin(), m_LoadedNetworks.end(),
+ std::back_inserter(networkIDs),
+ [](const auto &pair) { return pair.first; });
+
+ for (auto networkID : networkIDs)
+ {
+ UnloadNetwork(networkID);
}
}