diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-12-09 17:24:41 +0000 |
---|---|---|
committer | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-12-10 17:44:50 +0000 |
commit | 60a20fb62c992c4c6369bb7f532957f3e151f3d8 (patch) | |
tree | d9a33cbaeb33a24dddbf099d94f974493ed2cb60 /src/armnn | |
parent | ed66d14ec0840282f74241dda46e02194278c3cc (diff) | |
download | armnn-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.cpp | 5 | ||||
-rw-r--r-- | src/armnn/DeviceSpec.hpp | 21 | ||||
-rw-r--r-- | src/armnn/Runtime.cpp | 6 |
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 |