aboutsummaryrefslogtreecommitdiff
path: root/src/backends
diff options
context:
space:
mode:
authorFinn Williams <Finn.Williams@arm.com>2021-05-26 18:38:12 +0100
committerFinn Williams <Finn.Williams@arm.com>2021-06-09 17:18:10 +0100
commitb9af86ea42568ade799ee5529137e4756977b6c6 (patch)
tree261003078fd2191b22ee7465e07668cbed666553 /src/backends
parent5b1bcc93820b442bc4035c1e030a8d4a0983df91 (diff)
downloadarmnn-b9af86ea42568ade799ee5529137e4756977b6c6.tar.gz
IVGCVSW-5855 Refactor the reporting of capabilities from backends
Signed-off-by: Finn Williams <Finn.Williams@arm.com> Change-Id: I05fc331a8e91bdcb6b8a2f32cfb555060fc5d797
Diffstat (limited to 'src/backends')
-rw-r--r--src/backends/backendsCommon/test/CMakeLists.txt6
-rw-r--r--src/backends/backendsCommon/test/CompatibilityTests.cpp61
-rw-r--r--src/backends/cl/ClBackend.cpp10
-rw-r--r--src/backends/cl/ClBackend.hpp14
-rw-r--r--src/backends/neon/NeonBackend.cpp10
-rw-r--r--src/backends/neon/NeonBackend.hpp15
-rw-r--r--src/backends/reference/RefBackend.cpp4
-rw-r--r--src/backends/reference/RefBackend.hpp18
8 files changed, 94 insertions, 44 deletions
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index 98b800bda2..6313bd5cc9 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -13,6 +13,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources
CommonTestUtils.cpp
CommonTestUtils.hpp
ComparisonEndToEndTestImpl.hpp
+ CompatibilityTests.cpp
DataLayoutUtils.hpp
DataTypeUtils.hpp
DefaultAsyncExecuteTest.cpp
@@ -182,11 +183,6 @@ if (ARMNNREF)
)
endif()
-if(ARMCOMPUTENEON AND ARMCOMPUTECL)
- list(APPEND armnnBackendsCommonUnitTests_sources
- CompatibilityTests.cpp)
-endif()
-
add_library(armnnBackendsCommonUnitTests OBJECT ${armnnBackendsCommonUnitTests_sources})
target_include_directories(armnnBackendsCommonUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn)
target_include_directories(armnnBackendsCommonUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils)
diff --git a/src/backends/backendsCommon/test/CompatibilityTests.cpp b/src/backends/backendsCommon/test/CompatibilityTests.cpp
index 0f889f416c..ed00088549 100644
--- a/src/backends/backendsCommon/test/CompatibilityTests.cpp
+++ b/src/backends/backendsCommon/test/CompatibilityTests.cpp
@@ -8,6 +8,7 @@
#include <cl/ClBackend.hpp>
#include <neon/NeonBackend.hpp>
#include <reference/RefBackend.hpp>
+#include <armnn/BackendHelper.hpp>
#include <Network.hpp>
@@ -18,6 +19,7 @@ using namespace armnn;
BOOST_AUTO_TEST_SUITE(BackendsCompatibility, * boost::unit_test::disabled())
+#if defined(ARMCOMPUTENEON_ENABLED)
BOOST_AUTO_TEST_CASE(Neon_Cl_DirectCompatibility_Test)
{
auto neonBackend = std::make_unique<NeonBackend>();
@@ -114,7 +116,7 @@ BOOST_AUTO_TEST_CASE(Neon_Cl_DirectCompatibility_Test)
});
BOOST_TEST(importCount == 0);
}
-
+#endif
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(BackendCapability)
@@ -124,9 +126,38 @@ BOOST_AUTO_TEST_SUITE(BackendCapability)
BOOST_AUTO_TEST_CASE(Ref_Backends_Capability_Test)
{
auto refBackend = std::make_unique<RefBackend>();
- BOOST_CHECK(refBackend->HasCapability(armnn::BackendCapability::NonConstWeights));
+ auto refCapabilities = refBackend->GetCapabilities();
- BOOST_CHECK(!refBackend->HasCapability(armnn::BackendCapability::AsyncExecution));
+ BOOST_CHECK(armnn::HasCapability("NonConstWeights", refCapabilities));
+ BOOST_CHECK(armnn::HasCapability("AsyncExecution", refCapabilities));
+
+ armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", true};
+ armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", true};
+
+ BOOST_CHECK(armnn::HasCapability(nonConstWeights, refCapabilities));
+ BOOST_CHECK(armnn::HasCapability(AsyncExecution, refCapabilities));
+}
+
+BOOST_AUTO_TEST_CASE(Ref_Backends_Unkown_Capability_Test)
+{
+ auto refBackend = std::make_unique<RefBackend>();
+ auto refCapabilities = refBackend->GetCapabilities();
+
+ armnn::BackendOptions::BackendOption AsyncExecutionFalse{"AsyncExecution", false};
+ BOOST_CHECK(!armnn::HasCapability(AsyncExecutionFalse, refCapabilities));
+
+ armnn::BackendOptions::BackendOption AsyncExecutionInt{"AsyncExecution", 50};
+ BOOST_CHECK(!armnn::HasCapability(AsyncExecutionFalse, refCapabilities));
+
+ armnn::BackendOptions::BackendOption AsyncExecutionFloat{"AsyncExecution", 0.0f};
+ BOOST_CHECK(!armnn::HasCapability(AsyncExecutionFloat, refCapabilities));
+
+ armnn::BackendOptions::BackendOption AsyncExecutionString{"AsyncExecution", "true"};
+ BOOST_CHECK(!armnn::HasCapability(AsyncExecutionString, refCapabilities));
+
+ BOOST_CHECK(!armnn::HasCapability("Telekinesis", refCapabilities));
+ armnn::BackendOptions::BackendOption unkownCapability{"Telekinesis", true};
+ BOOST_CHECK(!armnn::HasCapability(unkownCapability, refCapabilities));
}
#endif
@@ -136,7 +167,16 @@ BOOST_AUTO_TEST_CASE(Ref_Backends_Capability_Test)
BOOST_AUTO_TEST_CASE(Neon_Backends_Capability_Test)
{
auto neonBackend = std::make_unique<NeonBackend>();
- BOOST_CHECK(!neonBackend->HasCapability(armnn::BackendCapability::NonConstWeights));
+ auto neonCapabilities = neonBackend->GetCapabilities();
+
+ BOOST_CHECK(armnn::HasCapability("NonConstWeights", neonCapabilities));
+ BOOST_CHECK(armnn::HasCapability("AsyncExecution", neonCapabilities));
+
+ armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", false};
+ armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", false};
+
+ BOOST_CHECK(armnn::HasCapability(nonConstWeights, neonCapabilities));
+ BOOST_CHECK(armnn::HasCapability(AsyncExecution, neonCapabilities));
}
#endif
@@ -145,8 +185,17 @@ BOOST_AUTO_TEST_CASE(Neon_Backends_Capability_Test)
BOOST_AUTO_TEST_CASE(Cl_Backends_Capability_Test)
{
- auto clBackend = std::make_unique<ClBackend>();
- BOOST_CHECK(!clBackend->HasCapability(armnn::BackendCapability::NonConstWeights));
+ auto clBackend = std::make_unique<ClBackend>();
+ auto clCapabilities = clBackend->GetCapabilities();
+
+ BOOST_CHECK(armnn::HasCapability("NonConstWeights", clCapabilities));
+ BOOST_CHECK(armnn::HasCapability("AsyncExecution", clCapabilities));
+
+ armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", false};
+ armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", false};
+
+ BOOST_CHECK(armnn::HasCapability(nonConstWeights, clCapabilities));
+ BOOST_CHECK(armnn::HasCapability(AsyncExecution, clCapabilities));
}
#endif
diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp
index a9ab237325..f1e52c1998 100644
--- a/src/backends/cl/ClBackend.cpp
+++ b/src/backends/cl/ClBackend.cpp
@@ -177,16 +177,6 @@ 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 252d87edea..db03cfeff0 100644
--- a/src/backends/cl/ClBackend.hpp
+++ b/src/backends/cl/ClBackend.hpp
@@ -9,9 +9,12 @@
namespace armnn
{
-const std::set<armnn::BackendCapability> gpuAccCapabilities {
- // add new capabilities here..
-};
+// add new capabilities here..
+const BackendCapabilities gpuAccCapabilities("GpuAcc",
+ {
+ {"NonConstWeights", false},
+ {"AsyncExecution", false}
+ });
class ClBackend : public IBackendInternal
{
@@ -63,7 +66,10 @@ public:
IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
const ModelOptions& modelOptions) const override;
- bool HasCapability(BackendCapability capabilityClass) const override;
+ BackendCapabilities GetCapabilities() const override
+ {
+ return gpuAccCapabilities;
+ };
};
} // namespace armnn
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index b496238cf3..17876753fb 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -132,16 +132,6 @@ 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 34606f992c..eae57320cc 100644
--- a/src/backends/neon/NeonBackend.hpp
+++ b/src/backends/neon/NeonBackend.hpp
@@ -9,9 +9,13 @@
namespace armnn
{
-const std::set<armnn::BackendCapability> cpuAccCapabilities {
- // add new capabilities here..
-};
+// add new capabilities here..
+const BackendCapabilities cpuAccCapabilities("GpuAcc",
+ {
+ {"NonConstWeights", false},
+ {"AsyncExecution", false}
+ });
+
class NeonBackend : public IBackendInternal
{
@@ -52,7 +56,10 @@ public:
IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
const ModelOptions& modelOptions) const override;
- bool HasCapability(BackendCapability capabilityClass) const override;
+ BackendCapabilities GetCapabilities() const override
+ {
+ return cpuAccCapabilities;
+ };
};
} // namespace armnn
diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp
index 85c6a2e1e4..c9f164e0c9 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 = cpuRefCapabilities.find(capabilityClass);
- if (search != cpuRefCapabilities.end())
+ auto search = oldCpuRefCapabilities.find(capabilityClass);
+ if (search != oldCpuRefCapabilities.end())
{
return true;
}
diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp
index 3143173061..441f4ebdf4 100644
--- a/src/backends/reference/RefBackend.hpp
+++ b/src/backends/reference/RefBackend.hpp
@@ -8,11 +8,18 @@
namespace armnn
{
-
-const std::set<armnn::BackendCapability> cpuRefCapabilities {
- armnn::BackendCapability::NonConstWeights,
+// add new capabilities here..
+const BackendCapabilities cpuRefCapabilities("CpuRef",
+ {
+ {"NonConstWeights", true},
+ {"AsyncExecution", true}
+ });
+
+const std::set<armnn::BackendCapability> oldCpuRefCapabilities {
+ armnn::BackendCapability::NonConstWeights,
};
+
class RefBackend : public IBackendInternal
{
public:
@@ -44,6 +51,11 @@ public:
void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
+ BackendCapabilities GetCapabilities() const override
+ {
+ return cpuRefCapabilities;
+ };
+
bool HasCapability(BackendCapability capabilityClass) const override;
};