aboutsummaryrefslogtreecommitdiff
path: root/src/armnn/Runtime.cpp
diff options
context:
space:
mode:
authorMatthew Bentham <Matthew.Bentham@arm.com>2020-02-04 10:03:55 +0000
committerDerek Lamberti <derek.lamberti@arm.com>2020-02-04 13:13:46 +0000
commit9a61fa6bdc8724cc66eba532360e0e48b6b1a60e (patch)
tree547a2e5db5af7517171a84c9395ac9c42151e6db /src/armnn/Runtime.cpp
parent3d8bc97ff2250b230b105b3df34d1ef3efd82d2c (diff)
downloadarmnn-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.cpp13
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()