aboutsummaryrefslogtreecommitdiff
path: root/src/armnn
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-12-09 17:24:41 +0000
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-12-10 17:44:50 +0000
commit60a20fb62c992c4c6369bb7f532957f3e151f3d8 (patch)
treed9a33cbaeb33a24dddbf099d94f974493ed2cb60 /src/armnn
parented66d14ec0840282f74241dda46e02194278c3cc (diff)
downloadarmnn-60a20fb62c992c4c6369bb7f532957f3e151f3d8.tar.gz
IVGCVSW-4212 Example of standalone dynamic reference backend
* Add example to build dynamic reference backend * Add functions to clear dynamic backends * Fix the error when dynamic backend is not deregistered * Add DYARMNN_DYNAMIC_BACKEND_ENABLED to check disable empty dynamic backend when dynamic backend is enabled Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: I1ef3a3f10ed6ca5ec18d0af04b007fc3bc71a3cb
Diffstat (limited to 'src/armnn')
-rw-r--r--src/armnn/BackendRegistry.cpp5
-rw-r--r--src/armnn/DeviceSpec.hpp21
-rw-r--r--src/armnn/Runtime.cpp6
3 files changed, 30 insertions, 2 deletions
diff --git a/src/armnn/BackendRegistry.cpp b/src/armnn/BackendRegistry.cpp
index 45f73b8daf..dc3e2bc254 100644
--- a/src/armnn/BackendRegistry.cpp
+++ b/src/armnn/BackendRegistry.cpp
@@ -27,6 +27,11 @@ void BackendRegistry::Register(const BackendId& id, BackendRegistry::FactoryFunc
m_Factories[id] = factory;
}
+void BackendRegistry::Deregister(const BackendId& id)
+{
+ m_Factories.erase(id);
+}
+
bool BackendRegistry::IsBackendRegistered(const BackendId& id) const
{
return (m_Factories.find(id) != m_Factories.end());
diff --git a/src/armnn/DeviceSpec.hpp b/src/armnn/DeviceSpec.hpp
index 32264706fd..703a4b123f 100644
--- a/src/armnn/DeviceSpec.hpp
+++ b/src/armnn/DeviceSpec.hpp
@@ -24,14 +24,33 @@ public:
return m_SupportedBackends;
}
- void AddSupportedBackends(const BackendIdSet& backendIds)
+ void AddSupportedBackends(const BackendIdSet& backendIds, bool isDynamic = false)
{
m_SupportedBackends.insert(backendIds.begin(), backendIds.end());
+ if (isDynamic)
+ {
+ m_DynamicBackends.insert(backendIds.begin(), backendIds.end());
+ }
+ }
+
+ void ClearDynamicBackends()
+ {
+ for (const auto& id : m_DynamicBackends)
+ {
+ m_SupportedBackends.erase(id);
+ }
+ m_DynamicBackends.clear();
+ }
+
+ const BackendIdSet& GetDynamicBackends() const
+ {
+ return m_DynamicBackends;
}
private:
DeviceSpec() = delete;
BackendIdSet m_SupportedBackends;
+ BackendIdSet m_DynamicBackends;
};
} // namespace armnn
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index 9b0ce1a345..4ad6fa59a0 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -214,6 +214,10 @@ Runtime::~Runtime()
<< std::endl;
}
}
+
+ // Clear all dynamic backends.
+ DynamicBackendUtils::DeregisterDynamicBackends(m_DeviceSpec.GetDynamicBackends());
+ m_DeviceSpec.ClearDynamicBackends();
}
LoadedNetwork* Runtime::GetLoadedNetworkPtr(NetworkId networkId) const
@@ -273,7 +277,7 @@ void Runtime::LoadDynamicBackends(const std::string& overrideBackendPath)
BackendIdSet registeredBackendIds = DynamicBackendUtils::RegisterDynamicBackends(m_DynamicBackends);
// Add the registered dynamic backend ids to the list of supported backends
- m_DeviceSpec.AddSupportedBackends(registeredBackendIds);
+ m_DeviceSpec.AddSupportedBackends(registeredBackendIds, true);
}
} // namespace armnn