From dbf5f314f9498afa756e2637251a89a5291abde0 Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Thu, 26 Aug 2021 11:08:01 +0100 Subject: IVGCVSW-6311 Add the pre-import backend capability * Update acl and ref backend capabilities * Add check for AsyncExecution capability in LoadedNetwork * Add new exception for capabilities Signed-off-by: Finn Williams Change-Id: I2f053c845a64f336e96d452793639c6e0d3eaa89 --- .../backendsCommon/test/CompatibilityTests.cpp | 76 ++++++++++++---------- src/backends/cl/ClBackend.hpp | 4 +- src/backends/neon/NeonBackend.hpp | 5 +- src/backends/reference/RefBackend.hpp | 4 +- 4 files changed, 53 insertions(+), 36 deletions(-) (limited to 'src/backends') diff --git a/src/backends/backendsCommon/test/CompatibilityTests.cpp b/src/backends/backendsCommon/test/CompatibilityTests.cpp index 34baad9d0c..7b25732daa 100644 --- a/src/backends/backendsCommon/test/CompatibilityTests.cpp +++ b/src/backends/backendsCommon/test/CompatibilityTests.cpp @@ -128,26 +128,27 @@ TEST_CASE("Neon_Cl_DirectCompatibility_Test") TEST_SUITE("BackendCapability") { -#if defined(ARMNNREF_ENABLED) -TEST_CASE("Ref_Backends_Capability_Test") +namespace { - auto refBackend = std::make_unique(); - auto refCapabilities = refBackend->GetCapabilities(); - - CHECK(armnn::HasCapability("NonConstWeights", refCapabilities)); - CHECK(armnn::HasCapability("AsyncExecution", refCapabilities)); - armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", true}; - armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", true}; - - CHECK(armnn::HasCapability(nonConstWeights, refCapabilities)); - CHECK(armnn::HasCapability(AsyncExecution, refCapabilities)); +void CapabilityTestHelper(BackendCapabilities &capabilities, + std::vector> capabilityVector) +{ + for (auto pair : capabilityVector) + { + CHECK_MESSAGE(armnn::HasCapability(pair.first, capabilities), + pair.first << " capability was not been found"); + CHECK_MESSAGE(armnn::HasCapability(BackendOptions::BackendOption{pair.first, pair.second}, capabilities), + pair.first << " capability set incorrectly"); + } } -TEST_CASE("Ref_Backends_Unkown_Capability_Test") +#if defined(ARMNNREF_ENABLED) + +TEST_CASE("Ref_Backends_Unknown_Capability_Test") { - auto refBackend = std::make_unique(); + auto refBackend = std::make_unique(); auto refCapabilities = refBackend->GetCapabilities(); armnn::BackendOptions::BackendOption AsyncExecutionFalse{"AsyncExecution", false}; @@ -167,44 +168,53 @@ TEST_CASE("Ref_Backends_Unkown_Capability_Test") CHECK(!armnn::HasCapability(unkownCapability, refCapabilities)); } +TEST_CASE ("Ref_Backends_Capability_Test") +{ + auto refBackend = std::make_unique(); + auto refCapabilities = refBackend->GetCapabilities(); + + CapabilityTestHelper(refCapabilities, + {{"NonConstWeights", true}, + {"AsyncExecution", true}, + {"ProtectedContentAllocation", false}, + {"ConstantTensorsAsInputs", true}, + {"PreImportIOTensors", false}}); +} + #endif #if defined(ARMCOMPUTENEON_ENABLED) -TEST_CASE("Neon_Backends_Capability_Test") +TEST_CASE ("Neon_Backends_Capability_Test") { auto neonBackend = std::make_unique(); auto neonCapabilities = neonBackend->GetCapabilities(); - CHECK(armnn::HasCapability("NonConstWeights", neonCapabilities)); - CHECK(armnn::HasCapability("AsyncExecution", neonCapabilities)); - - armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", false}; - armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", false}; - - CHECK(armnn::HasCapability(nonConstWeights, neonCapabilities)); - CHECK(armnn::HasCapability(AsyncExecution, neonCapabilities)); + CapabilityTestHelper(neonCapabilities, + {{"NonConstWeights", false}, + {"AsyncExecution", false}, + {"ProtectedContentAllocation", false}, + {"ConstantTensorsAsInputs", false}, + {"PreImportIOTensors", false}}); } #endif #if defined(ARMCOMPUTECL_ENABLED) -TEST_CASE("Cl_Backends_Capability_Test") +TEST_CASE ("Cl_Backends_Capability_Test") { auto clBackend = std::make_unique(); auto clCapabilities = clBackend->GetCapabilities(); - CHECK(armnn::HasCapability("NonConstWeights", clCapabilities)); - CHECK(armnn::HasCapability("AsyncExecution", clCapabilities)); - - armnn::BackendOptions::BackendOption nonConstWeights{"NonConstWeights", false}; - armnn::BackendOptions::BackendOption AsyncExecution{"AsyncExecution", false}; - - CHECK(armnn::HasCapability(nonConstWeights, clCapabilities)); - CHECK(armnn::HasCapability(AsyncExecution, clCapabilities)); + CapabilityTestHelper(clCapabilities, + {{"NonConstWeights", false}, + {"AsyncExecution", false}, + {"ProtectedContentAllocation", true}, + {"ConstantTensorsAsInputs", false}, + {"PreImportIOTensors", false}}); } #endif - +} } diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp index 4f68c3bcc7..570d301616 100644 --- a/src/backends/cl/ClBackend.hpp +++ b/src/backends/cl/ClBackend.hpp @@ -26,7 +26,9 @@ const BackendCapabilities gpuAccCapabilities("GpuAcc", { {"NonConstWeights", false}, {"AsyncExecution", false}, - {"ProtectedContentAllocation", true} + {"ProtectedContentAllocation", true}, + {"ConstantTensorsAsInputs", false}, + {"PreImportIOTensors", false} }); class ClBackend : public IBackendInternal diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp index eae57320cc..0ae28d8a71 100644 --- a/src/backends/neon/NeonBackend.hpp +++ b/src/backends/neon/NeonBackend.hpp @@ -13,7 +13,10 @@ namespace armnn const BackendCapabilities cpuAccCapabilities("GpuAcc", { {"NonConstWeights", false}, - {"AsyncExecution", false} + {"AsyncExecution", false}, + {"ProtectedContentAllocation", false}, + {"ConstantTensorsAsInputs", false}, + {"PreImportIOTensors", false} }); diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp index 2855957e31..1a79d7090a 100644 --- a/src/backends/reference/RefBackend.hpp +++ b/src/backends/reference/RefBackend.hpp @@ -13,7 +13,9 @@ const BackendCapabilities cpuRefCapabilities("CpuRef", { {"NonConstWeights", true}, {"AsyncExecution", true}, - {"ConstantTensorsAsInputs", true} + {"ProtectedContentAllocation", false}, + {"ConstantTensorsAsInputs", true}, + {"PreImportIOTensors", false} }); const std::set oldCpuRefCapabilities { -- cgit v1.2.1