diff options
author | Matthew Bentham <Matthew.Bentham@arm.com> | 2020-02-04 10:03:55 +0000 |
---|---|---|
committer | Derek Lamberti <derek.lamberti@arm.com> | 2020-02-04 13:13:46 +0000 |
commit | 9a61fa6bdc8724cc66eba532360e0e48b6b1a60e (patch) | |
tree | 547a2e5db5af7517171a84c9395ac9c42151e6db /src/armnn/Runtime.cpp | |
parent | 3d8bc97ff2250b230b105b3df34d1ef3efd82d2c (diff) | |
download | armnn-9a61fa6bdc8724cc66eba532360e0e48b6b1a60e.tar.gz |
Github #273 Handle failure to initialise BackendContext in Runtime
Define CreateBackendContext to throw BackendUnavailableException
if necessary runtime components are missing.
Handle this in the constructor of Runtime by not adding those
backends to the internal DeviceSpec owned by the Runtime.
Signed-off-by: Matthew Bentham <Matthew.Bentham@arm.com>
Change-Id: Iadffb5240e32e1f105683c4d361276b92d1e720c
Diffstat (limited to 'src/armnn/Runtime.cpp')
-rw-r--r-- | src/armnn/Runtime.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 2d7269a09c..47c998a6fd 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -153,7 +153,6 @@ const std::shared_ptr<IProfiler> Runtime::GetProfiler(NetworkId networkId) const Runtime::Runtime(const CreationOptions& options) : m_NetworkIdCounter(0) - , m_DeviceSpec{BackendRegistryInstance().GetBackendIds()} { ARMNN_LOG(info) << "ArmNN v" << ARMNN_VERSION << "\n"; @@ -164,12 +163,11 @@ Runtime::Runtime(const CreationOptions& options) // goes through the backend registry LoadDynamicBackends(options.m_DynamicBackendsPath); + BackendIdSet supportedBackends; for (const auto& id : BackendRegistryInstance().GetBackendIds()) { // Store backend contexts for the supported ones - const BackendIdSet& supportedBackends = m_DeviceSpec.GetSupportedBackends(); - if (supportedBackends.find(id) != supportedBackends.end()) - { + try { auto factoryFun = BackendRegistryInstance().GetFactory(id); auto backend = factoryFun(); BOOST_ASSERT(backend.get() != nullptr); @@ -182,8 +180,15 @@ Runtime::Runtime(const CreationOptions& options) { m_BackendContexts.emplace(std::make_pair(id, std::move(context))); } + supportedBackends.emplace(id); + } + catch (const BackendUnavailableException&) + { + // Ignore backends which are unavailable } + } + m_DeviceSpec.AddSupportedBackends(supportedBackends); } Runtime::~Runtime() |