diff options
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/backendsCommon/test/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/CompatibilityTests.cpp | 61 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.cpp | 10 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.hpp | 14 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 10 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.hpp | 15 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.cpp | 4 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.hpp | 18 |
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; }; |