diff options
author | Sadik Armagan <sadik.armagan@arm.com> | 2021-03-31 16:12:13 +0100 |
---|---|---|
committer | Sadik Armagan <sadik.armagan@arm.com> | 2021-04-02 10:38:51 +0000 |
commit | aede8ca25d3231d122b670353b754142b64e5d69 (patch) | |
tree | 87ba5bdae701a51b15fa44d550a55932e89966c9 | |
parent | 8c7a28ba48a0c7347fd6f940cbcf4b6dbeca932f (diff) | |
download | armnn-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
-rw-r--r-- | include/armnn/Types.hpp | 3 | ||||
-rw-r--r-- | src/armnn/AsyncNetwork.cpp | 13 | ||||
-rw-r--r-- | src/armnn/test/OptimizerTests.cpp | 3 | ||||
-rw-r--r-- | src/backends/backendsCommon/test/CompatibilityTests.cpp | 2 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.cpp | 10 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.hpp | 6 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 10 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.hpp | 6 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.cpp | 4 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.hpp | 2 |
10 files changed, 56 insertions, 3 deletions
diff --git a/include/armnn/Types.hpp b/include/armnn/Types.hpp index 576e67ea18..07d38a332d 100644 --- a/include/armnn/Types.hpp +++ b/include/armnn/Types.hpp @@ -203,6 +203,9 @@ enum class BackendCapability : uint32_t /// On the other hand, non-const weights can be accessed through inputs. NonConstWeights, + /// Asynchronous Execution. + AsyncExecution, + // add new enum values here }; 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, }; |