aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/armnn/DeviceSpec.hpp4
-rw-r--r--src/armnn/Runtime.cpp13
-rw-r--r--src/armnn/Runtime.hpp2
3 files changed, 12 insertions, 7 deletions
diff --git a/src/armnn/DeviceSpec.hpp b/src/armnn/DeviceSpec.hpp
index 703a4b123f..a1457cf80e 100644
--- a/src/armnn/DeviceSpec.hpp
+++ b/src/armnn/DeviceSpec.hpp
@@ -14,6 +14,9 @@ namespace armnn
class DeviceSpec : public IDeviceSpec
{
public:
+ DeviceSpec()
+ {}
+
DeviceSpec(const BackendIdSet& supportedBackends)
: m_SupportedBackends{supportedBackends} {}
@@ -48,7 +51,6 @@ public:
}
private:
- DeviceSpec() = delete;
BackendIdSet m_SupportedBackends;
BackendIdSet m_DynamicBackends;
};
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()
diff --git a/src/armnn/Runtime.hpp b/src/armnn/Runtime.hpp
index e5debbf9ac..2ad3c9633c 100644
--- a/src/armnn/Runtime.hpp
+++ b/src/armnn/Runtime.hpp
@@ -73,8 +73,6 @@ public:
virtual void RegisterDebugCallback(NetworkId networkId, const DebugCallbackFunction& func) override;
/// Creates a runtime for workload execution.
- /// May throw a ClRuntimeUnavailableException if @a defaultComputeDevice requires a CL runtime but
- /// it cannot be setup for some reason.
Runtime(const CreationOptions& options);
~Runtime();