aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSadik Armagan <sadik.armagan@arm.com>2021-03-31 16:12:13 +0100
committerSadik Armagan <sadik.armagan@arm.com>2021-04-02 10:38:51 +0000
commitaede8ca25d3231d122b670353b754142b64e5d69 (patch)
tree87ba5bdae701a51b15fa44d550a55932e89966c9 /src
parent8c7a28ba48a0c7347fd6f940cbcf4b6dbeca932f (diff)
downloadarmnn-aede8ca25d3231d122b670353b754142b64e5d69.tar.gz
IVGCVSW-5783 'Add AsyncExecution Capability'
* Added AsyncExecution to the BackendCapability enum class. * Logged a warning if backends do not support AsyncExecution capability if AsyncNetwork is created. Signed-off-by: Sadik Armagan <sadik.armagan@arm.com> Change-Id: I49f8467297f4b6b8e414cb6a3638a7d3f1bb886a
Diffstat (limited to 'src')
-rw-r--r--src/armnn/AsyncNetwork.cpp13
-rw-r--r--src/armnn/test/OptimizerTests.cpp3
-rw-r--r--src/backends/backendsCommon/test/CompatibilityTests.cpp2
-rw-r--r--src/backends/cl/ClBackend.cpp10
-rw-r--r--src/backends/cl/ClBackend.hpp6
-rw-r--r--src/backends/neon/NeonBackend.cpp10
-rw-r--r--src/backends/neon/NeonBackend.hpp6
-rw-r--r--src/backends/reference/RefBackend.cpp4
-rw-r--r--src/backends/reference/RefBackend.hpp2
9 files changed, 53 insertions, 3 deletions
diff --git a/src/armnn/AsyncNetwork.cpp b/src/armnn/AsyncNetwork.cpp
index 4e3838bb5d..230346a0c3 100644
--- a/src/armnn/AsyncNetwork.cpp
+++ b/src/armnn/AsyncNetwork.cpp
@@ -8,6 +8,7 @@
#include "Layer.hpp"
#include "Profiling.hpp"
+#include <armnn/BackendHelper.hpp>
#include <armnn/BackendRegistry.hpp>
#include <armnn/Logging.hpp>
#include <armnn/utility/Assert.hpp>
@@ -391,6 +392,18 @@ AsyncNetworkImpl::AsyncNetworkImpl(std::unique_ptr<IOptimizedNetwork> net,
}
}
+ // Check backends support BackendCapability::AsyncExecution
+ for (auto const& backend : m_Backends)
+ {
+ if (!IsCapabilitySupported(backend.first, BackendCapability::AsyncExecution))
+ {
+ ARMNN_LOG(warning) << fmt::format("AsyncNetworkImpl() Backend: '{0}' does not support Async Execution. "
+ "Will fall back to default implementation.",
+ backend.first.Get());
+ }
+
+ }
+
profiling::ProfilingGuid networkGuid = m_OptimizedNetwork->GetGuid();
std::unique_ptr<profiling::TimelineUtilityMethods> timelineUtils =
profiling::TimelineUtilityMethods::GetTimelineUtils(m_ProfilingService);
diff --git a/src/armnn/test/OptimizerTests.cpp b/src/armnn/test/OptimizerTests.cpp
index 896fdfd68c..95255c3a21 100644
--- a/src/armnn/test/OptimizerTests.cpp
+++ b/src/armnn/test/OptimizerTests.cpp
@@ -685,6 +685,9 @@ BOOST_AUTO_TEST_CASE(BackendCapabilityTest)
BackendId backendId ="MockBackend";
// MockBackend does not support the NonConstWeights capability
BOOST_CHECK(!armnn::IsCapabilitySupported(backendId, armnn::BackendCapability::NonConstWeights));
+
+ // MockBackend does not support the AsyncExecution capability
+ BOOST_CHECK(!armnn::IsCapabilitySupported(backendId, armnn::BackendCapability::AsyncExecution));
}
BOOST_AUTO_TEST_CASE(BackendHintTest)
diff --git a/src/backends/backendsCommon/test/CompatibilityTests.cpp b/src/backends/backendsCommon/test/CompatibilityTests.cpp
index 915a0151d9..0f889f416c 100644
--- a/src/backends/backendsCommon/test/CompatibilityTests.cpp
+++ b/src/backends/backendsCommon/test/CompatibilityTests.cpp
@@ -125,6 +125,8 @@ BOOST_AUTO_TEST_CASE(Ref_Backends_Capability_Test)
{
auto refBackend = std::make_unique<RefBackend>();
BOOST_CHECK(refBackend->HasCapability(armnn::BackendCapability::NonConstWeights));
+
+ BOOST_CHECK(!refBackend->HasCapability(armnn::BackendCapability::AsyncExecution));
}
#endif
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
index 928760ef5f..33aff2731d 100644
--- a/src/backends/cl/ClBackend.cpp
+++ b/src/backends/cl/ClBackend.cpp
@@ -141,6 +141,16 @@ IBackendInternal::ILayerSupportSharedPtr ClBackend::GetLayerSupport(const ModelO
return layerSupport;
}
+bool ClBackend::HasCapability(BackendCapability capabilityClass) const
+{
+ auto search = gpuAccCapabilities.find(capabilityClass);
+ if (search != gpuAccCapabilities.end())
+ {
+ return true;
+ }
+ return false;
+}
+
OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph,
const ModelOptions& modelOptions) const
{
diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp
index 2b19fc5b33..f9a5745eb3 100644
--- a/src/backends/cl/ClBackend.hpp
+++ b/src/backends/cl/ClBackend.hpp
@@ -9,6 +9,10 @@
namespace armnn
{
+const std::set<armnn::BackendCapability> gpuAccCapabilities {
+ // add new capabilities here..
+};
+
class ClBackend : public IBackendInternal
{
public:
@@ -49,6 +53,8 @@ public:
IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
const ModelOptions& modelOptions) const override;
+
+ bool HasCapability(BackendCapability capabilityClass) const override;
};
} // namespace armnn
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index d48b32bb45..a1299fb458 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -131,6 +131,16 @@ IBackendInternal::ILayerSupportSharedPtr NeonBackend::GetLayerSupport(const Mode
return layerSupport;
}
+bool NeonBackend::HasCapability(BackendCapability capabilityClass) const
+{
+ auto search = cpuAccCapabilities.find(capabilityClass);
+ if (search != cpuAccCapabilities.end())
+ {
+ return true;
+ }
+ return false;
+}
+
OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const
{
OptimizationViews optimizationViews;
diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp
index 42c6666930..34606f992c 100644
--- a/src/backends/neon/NeonBackend.hpp
+++ b/src/backends/neon/NeonBackend.hpp
@@ -9,6 +9,10 @@
namespace armnn
{
+const std::set<armnn::BackendCapability> cpuAccCapabilities {
+ // add new capabilities here..
+};
+
class NeonBackend : public IBackendInternal
{
public:
@@ -47,6 +51,8 @@ public:
IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
const ModelOptions& modelOptions) const override;
+
+ bool HasCapability(BackendCapability capabilityClass) const override;
};
} // namespace armnn
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
index 53c55ab26a..85c6a2e1e4 100644
--- a/src/backends/reference/RefBackend.cpp
+++ b/src/backends/reference/RefBackend.cpp
@@ -71,8 +71,8 @@ IBackendInternal::ILayerSupportSharedPtr RefBackend::GetLayerSupport() const
bool RefBackend::HasCapability(BackendCapability capabilityClass) const
{
- auto search = backendCapabilities.find(capabilityClass);
- if (search != backendCapabilities.end())
+ auto search = cpuRefCapabilities.find(capabilityClass);
+ if (search != cpuRefCapabilities.end())
{
return true;
}
diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp
index c92936ca0c..3143173061 100644
--- a/src/backends/reference/RefBackend.hpp
+++ b/src/backends/reference/RefBackend.hpp
@@ -9,7 +9,7 @@
namespace armnn
{
-const std::set<armnn::BackendCapability> backendCapabilities {
+const std::set<armnn::BackendCapability> cpuRefCapabilities {
armnn::BackendCapability::NonConstWeights,
};