From c601aa626dac78e1482a258e493a6c186e6bf514 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Tue, 29 Oct 2019 15:03:22 +0000 Subject: GitHub #292 Move BackendRegistry.hpp to the public API * Moved to BackendRegistry.hpp include/armnn * Updated makefiles and sources accordingly Signed-off-by: Matteo Martincigh Change-Id: I4d83abb581d523218a880c879fcf30c9611f7fd7 --- Android.mk | 1 + CMakeLists.txt | 2 + include/armnn/BackendRegistry.hpp | 61 +++++++++++++++ src/armnn/BackendHelper.cpp | 5 +- src/armnn/BackendRegistry.cpp | 86 ++++++++++++++++++++++ src/armnn/LayerSupport.cpp | 3 +- src/armnn/LoadedNetwork.cpp | 3 +- src/armnn/Network.cpp | 2 +- src/armnn/NetworkUtils.cpp | 3 +- src/armnn/Runtime.cpp | 2 +- .../test/ParserFlatbuffersFixture.hpp | 18 +++-- src/backends/README.md | 2 +- src/backends/backendsCommon/BackendRegistry.cpp | 86 ---------------------- src/backends/backendsCommon/BackendRegistry.hpp | 61 --------------- src/backends/backendsCommon/CMakeLists.txt | 2 - src/backends/backendsCommon/DynamicBackend.hpp | 3 +- src/backends/backendsCommon/WorkloadFactory.cpp | 3 +- src/backends/backendsCommon/common.mk | 1 - .../backendsCommon/test/BackendRegistryTests.cpp | 2 +- .../backendsCommon/test/CommonTestUtils.hpp | 5 +- .../backendsCommon/test/DynamicBackendTests.hpp | 2 +- src/backends/backendsCommon/test/MockBackend.cpp | 3 +- .../test/OptimizeSubgraphViewTests.cpp | 2 +- src/backends/cl/ClBackend.cpp | 3 +- src/backends/cl/ClLayerSupport.cpp | 4 +- src/backends/cl/ClRegistryInitializer.cpp | 2 +- src/backends/neon/NeonBackend.cpp | 3 +- src/backends/neon/NeonLayerSupport.cpp | 6 +- src/backends/neon/NeonRegistryInitializer.cpp | 2 +- src/backends/reference/RefBackend.cpp | 3 +- src/backends/reference/RefLayerSupport.cpp | 2 +- src/backends/reference/RefRegistryInitializer.cpp | 2 +- tests/DeepSpeechV1InferenceTest.hpp | 0 tests/InferenceModel.hpp | 5 +- tests/LstmCommon.hpp | 0 35 files changed, 200 insertions(+), 190 deletions(-) create mode 100644 include/armnn/BackendRegistry.hpp create mode 100644 src/armnn/BackendRegistry.cpp delete mode 100644 src/backends/backendsCommon/BackendRegistry.cpp delete mode 100644 src/backends/backendsCommon/BackendRegistry.hpp mode change 100755 => 100644 tests/DeepSpeechV1InferenceTest.hpp mode change 100755 => 100644 tests/LstmCommon.hpp diff --git a/Android.mk b/Android.mk index c91b43faef..dbc999e651 100644 --- a/Android.mk +++ b/Android.mk @@ -78,6 +78,7 @@ LOCAL_C_INCLUDES := \ LOCAL_SRC_FILES := \ $(ARMNN_BACKEND_SOURCES) \ src/armnn/BackendHelper.cpp \ + src/armnn/BackendRegistry.cpp \ src/armnn/Descriptors.cpp \ src/armnn/Exceptions.cpp \ src/armnn/Graph.cpp \ diff --git a/CMakeLists.txt b/CMakeLists.txt index 005650fc74..b66ed5fe4c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -214,6 +214,7 @@ list(APPEND armnn_sources include/armnn/ArmNN.hpp include/armnn/BackendHelper.hpp include/armnn/BackendId.hpp + include/armnn/BackendRegistry.hpp include/armnn/Conversion.hpp include/armnn/Deprecated.hpp include/armnn/Descriptors.hpp @@ -355,6 +356,7 @@ list(APPEND armnn_sources src/armnn/layers/SwitchLayer.hpp src/armnn/layers/TransposeConvolution2dLayer.cpp src/armnn/layers/TransposeConvolution2dLayer.hpp + src/armnn/BackendRegistry.cpp src/armnn/BackendSettings.hpp src/armnn/BackendHelper.cpp src/armnn/CompatibleTypes.hpp diff --git a/include/armnn/BackendRegistry.hpp b/include/armnn/BackendRegistry.hpp new file mode 100644 index 0000000000..82e59d970b --- /dev/null +++ b/include/armnn/BackendRegistry.hpp @@ -0,0 +1,61 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include +#include + +#include +#include +#include + +namespace armnn +{ + +class IBackendInternal; +using IBackendInternalUniquePtr = std::unique_ptr; + +class BackendRegistry +{ +public: + using PointerType = IBackendInternalUniquePtr; + using FactoryFunction = std::function; + + void Register(const BackendId& id, FactoryFunction factory); + bool IsBackendRegistered(const BackendId& id) const; + FactoryFunction GetFactory(const BackendId& id) const; + size_t Size() const; + BackendIdSet GetBackendIds() const; + std::string GetBackendIdsAsString() const; + + BackendRegistry() {} + virtual ~BackendRegistry() {} + + struct StaticRegistryInitializer + { + StaticRegistryInitializer(BackendRegistry& instance, + const BackendId& id, + FactoryFunction factory) + { + instance.Register(id, factory); + } + }; + +protected: + using FactoryStorage = std::unordered_map; + + // For testing only + static void Swap(BackendRegistry& instance, FactoryStorage& other); + +private: + BackendRegistry(const BackendRegistry&) = delete; + BackendRegistry& operator=(const BackendRegistry&) = delete; + + FactoryStorage m_Factories; +}; + +BackendRegistry& BackendRegistryInstance(); + +} // namespace armnn diff --git a/src/armnn/BackendHelper.cpp b/src/armnn/BackendHelper.cpp index 2514038863..673950e4e3 100644 --- a/src/armnn/BackendHelper.cpp +++ b/src/armnn/BackendHelper.cpp @@ -4,8 +4,9 @@ // #include -#include "backendsCommon/BackendRegistry.hpp" -#include "backendsCommon/IBackendInternal.hpp" +#include + +#include namespace armnn { diff --git a/src/armnn/BackendRegistry.cpp b/src/armnn/BackendRegistry.cpp new file mode 100644 index 0000000000..45f73b8daf --- /dev/null +++ b/src/armnn/BackendRegistry.cpp @@ -0,0 +1,86 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include +#include + +namespace armnn +{ + +BackendRegistry& BackendRegistryInstance() +{ + static BackendRegistry instance; + return instance; +} + +void BackendRegistry::Register(const BackendId& id, BackendRegistry::FactoryFunction factory) +{ + if (m_Factories.find(id) != m_Factories.end()) + { + throw InvalidArgumentException( + std::string(id) + " already registered as IBackend factory", + CHECK_LOCATION()); + } + + m_Factories[id] = factory; +} + +bool BackendRegistry::IsBackendRegistered(const BackendId& id) const +{ + return (m_Factories.find(id) != m_Factories.end()); +} + +BackendRegistry::FactoryFunction BackendRegistry::GetFactory(const BackendId& id) const +{ + auto it = m_Factories.find(id); + if (it == m_Factories.end()) + { + throw InvalidArgumentException( + std::string(id) + " has no IBackend factory registered", + CHECK_LOCATION()); + } + + return it->second; +} + +size_t BackendRegistry::Size() const +{ + return m_Factories.size(); +} + +BackendIdSet BackendRegistry::GetBackendIds() const +{ + BackendIdSet result; + for (const auto& it : m_Factories) + { + result.insert(it.first); + } + return result; +} + +std::string BackendRegistry::GetBackendIdsAsString() const +{ + static const std::string delimitator = ", "; + + std::stringstream output; + for (auto& backendId : GetBackendIds()) + { + if (output.tellp() != std::streampos(0)) + { + output << delimitator; + } + output << backendId; + } + + return output.str(); +} + +void BackendRegistry::Swap(BackendRegistry& instance, BackendRegistry::FactoryStorage& other) +{ + std::swap(instance.m_Factories, other); +} + + +} // namespace armnn diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp index 997b5f245a..7b9ada9150 100644 --- a/src/armnn/LayerSupport.cpp +++ b/src/armnn/LayerSupport.cpp @@ -2,11 +2,12 @@ // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // + #include #include #include +#include -#include #include #include diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 5e3e3f24fe..e9a3545e35 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -11,8 +11,9 @@ #include "Profiling.hpp" #include "HeapProfiling.hpp" +#include + #include -#include #include #include #include diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 1339a6ef6b..a708361a91 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -14,13 +14,13 @@ #include #include -#include #include #include #include #include #include +#include #include #include diff --git a/src/armnn/NetworkUtils.cpp b/src/armnn/NetworkUtils.cpp index a3760a9c6b..cfed6680ca 100644 --- a/src/armnn/NetworkUtils.cpp +++ b/src/armnn/NetworkUtils.cpp @@ -8,8 +8,7 @@ #include "SubgraphViewSelector.hpp" #include - -#include +#include namespace armnn { diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 68975a2191..c95b2c45e2 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -5,8 +5,8 @@ #include "Runtime.hpp" #include +#include -#include #include #include diff --git a/src/armnnTfLiteParser/test/ParserFlatbuffersFixture.hpp b/src/armnnTfLiteParser/test/ParserFlatbuffersFixture.hpp index 0c6428012b..9a305bf361 100644 --- a/src/armnnTfLiteParser/test/ParserFlatbuffersFixture.hpp +++ b/src/armnnTfLiteParser/test/ParserFlatbuffersFixture.hpp @@ -5,27 +5,29 @@ #pragma once +#include "Schema.hpp" + #include #include #include +#include -#include "Schema.hpp" -#include -#include -#include - -#include "test/TensorHelpers.hpp" +#include #include -#include "armnnTfLiteParser/ITfLiteParser.hpp" -#include +#include + +#include +#include +#include #include "flatbuffers/idl.h" #include "flatbuffers/util.h" #include "flatbuffers/flexbuffers.h" #include + #include using armnnTfLiteParser::ITfLiteParser; diff --git a/src/backends/README.md b/src/backends/README.md index a75bc9cb28..4c59222097 100644 --- a/src/backends/README.md +++ b/src/backends/README.md @@ -125,7 +125,7 @@ The method ```OptimizationViews OptimizeSubgraph(const SubgraphView& subgraph)`` apply specific optimizations to a given sub-graph. The Arm NN framework then creates instances of the IBackendInternal interface with the help of the -[BackendRegistry](backendsCommon/BackendRegistry.hpp) singleton. +[BackendRegistry](../../include/armnn/BackendRegistry.hpp) singleton. **Important:** the ```IBackendInternal``` object is not guaranteed to have a longer lifetime than the objects it creates. It is only intended to be a single entry point for the factory functions it has. diff --git a/src/backends/backendsCommon/BackendRegistry.cpp b/src/backends/backendsCommon/BackendRegistry.cpp deleted file mode 100644 index 7078304599..0000000000 --- a/src/backends/backendsCommon/BackendRegistry.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "BackendRegistry.hpp" -#include - -namespace armnn -{ - -BackendRegistry& BackendRegistryInstance() -{ - static BackendRegistry instance; - return instance; -} - -void BackendRegistry::Register(const BackendId& id, BackendRegistry::FactoryFunction factory) -{ - if (m_Factories.find(id) != m_Factories.end()) - { - throw InvalidArgumentException( - std::string(id) + " already registered as IBackend factory", - CHECK_LOCATION()); - } - - m_Factories[id] = factory; -} - -bool BackendRegistry::IsBackendRegistered(const BackendId& id) const -{ - return (m_Factories.find(id) != m_Factories.end()); -} - -BackendRegistry::FactoryFunction BackendRegistry::GetFactory(const BackendId& id) const -{ - auto it = m_Factories.find(id); - if (it == m_Factories.end()) - { - throw InvalidArgumentException( - std::string(id) + " has no IBackend factory registered", - CHECK_LOCATION()); - } - - return it->second; -} - -size_t BackendRegistry::Size() const -{ - return m_Factories.size(); -} - -BackendIdSet BackendRegistry::GetBackendIds() const -{ - BackendIdSet result; - for (const auto& it : m_Factories) - { - result.insert(it.first); - } - return result; -} - -std::string BackendRegistry::GetBackendIdsAsString() const -{ - static const std::string delimitator = ", "; - - std::stringstream output; - for (auto& backendId : GetBackendIds()) - { - if (output.tellp() != std::streampos(0)) - { - output << delimitator; - } - output << backendId; - } - - return output.str(); -} - -void BackendRegistry::Swap(BackendRegistry& instance, BackendRegistry::FactoryStorage& other) -{ - std::swap(instance.m_Factories, other); -} - - -} // namespace armnn diff --git a/src/backends/backendsCommon/BackendRegistry.hpp b/src/backends/backendsCommon/BackendRegistry.hpp deleted file mode 100644 index 82e59d970b..0000000000 --- a/src/backends/backendsCommon/BackendRegistry.hpp +++ /dev/null @@ -1,61 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include -#include - -#include -#include -#include - -namespace armnn -{ - -class IBackendInternal; -using IBackendInternalUniquePtr = std::unique_ptr; - -class BackendRegistry -{ -public: - using PointerType = IBackendInternalUniquePtr; - using FactoryFunction = std::function; - - void Register(const BackendId& id, FactoryFunction factory); - bool IsBackendRegistered(const BackendId& id) const; - FactoryFunction GetFactory(const BackendId& id) const; - size_t Size() const; - BackendIdSet GetBackendIds() const; - std::string GetBackendIdsAsString() const; - - BackendRegistry() {} - virtual ~BackendRegistry() {} - - struct StaticRegistryInitializer - { - StaticRegistryInitializer(BackendRegistry& instance, - const BackendId& id, - FactoryFunction factory) - { - instance.Register(id, factory); - } - }; - -protected: - using FactoryStorage = std::unordered_map; - - // For testing only - static void Swap(BackendRegistry& instance, FactoryStorage& other); - -private: - BackendRegistry(const BackendRegistry&) = delete; - BackendRegistry& operator=(const BackendRegistry&) = delete; - - FactoryStorage m_Factories; -}; - -BackendRegistry& BackendRegistryInstance(); - -} // namespace armnn diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt index fc36365f99..d4947943ae 100644 --- a/src/backends/backendsCommon/CMakeLists.txt +++ b/src/backends/backendsCommon/CMakeLists.txt @@ -4,8 +4,6 @@ # list(APPEND armnnBackendsCommon_sources - BackendRegistry.cpp - BackendRegistry.hpp CpuTensorHandle.cpp CpuTensorHandleFwd.hpp CpuTensorHandle.hpp diff --git a/src/backends/backendsCommon/DynamicBackend.hpp b/src/backends/backendsCommon/DynamicBackend.hpp index 34c001958d..f888b1e27e 100644 --- a/src/backends/backendsCommon/DynamicBackend.hpp +++ b/src/backends/backendsCommon/DynamicBackend.hpp @@ -6,7 +6,8 @@ #pragma once #include "IBackendInternal.hpp" -#include "BackendRegistry.hpp" + +#include #include #include diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 34e4cbe579..31ad5cb45a 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -6,15 +6,14 @@ #include "CpuTensorHandle.hpp" #include "WorkloadFactory.hpp" - #include #include #include #include #include +#include -#include #include #include #include diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk index de0da68149..34040d67f9 100644 --- a/src/backends/backendsCommon/common.mk +++ b/src/backends/backendsCommon/common.mk @@ -8,7 +8,6 @@ # file in the root of ArmNN COMMON_SOURCES := \ - BackendRegistry.cpp \ CpuTensorHandle.cpp \ DynamicBackend.cpp \ DynamicBackendUtils.cpp \ diff --git a/src/backends/backendsCommon/test/BackendRegistryTests.cpp b/src/backends/backendsCommon/test/BackendRegistryTests.cpp index 283caafaf9..e1ab7ecb82 100644 --- a/src/backends/backendsCommon/test/BackendRegistryTests.cpp +++ b/src/backends/backendsCommon/test/BackendRegistryTests.cpp @@ -4,8 +4,8 @@ // #include +#include -#include #include #include diff --git a/src/backends/backendsCommon/test/CommonTestUtils.hpp b/src/backends/backendsCommon/test/CommonTestUtils.hpp index 58bd6b197f..e96edc8317 100644 --- a/src/backends/backendsCommon/test/CommonTestUtils.hpp +++ b/src/backends/backendsCommon/test/CommonTestUtils.hpp @@ -9,8 +9,9 @@ #include #include +#include + #include -#include #include @@ -73,4 +74,4 @@ armnn::TensorShape MakeTensorShape(unsigned int batches, unsigned int channels, unsigned int height, unsigned int width, - armnn::DataLayout layout); \ No newline at end of file + armnn::DataLayout layout); diff --git a/src/backends/backendsCommon/test/DynamicBackendTests.hpp b/src/backends/backendsCommon/test/DynamicBackendTests.hpp index 4a7ab19d54..2615bdc066 100644 --- a/src/backends/backendsCommon/test/DynamicBackendTests.hpp +++ b/src/backends/backendsCommon/test/DynamicBackendTests.hpp @@ -7,10 +7,10 @@ #include #include -#include #include #include +#include #include diff --git a/src/backends/backendsCommon/test/MockBackend.cpp b/src/backends/backendsCommon/test/MockBackend.cpp index 043b5125c7..4fb692ca63 100644 --- a/src/backends/backendsCommon/test/MockBackend.cpp +++ b/src/backends/backendsCommon/test/MockBackend.cpp @@ -6,9 +6,10 @@ #include "MockBackend.hpp" #include "MockBackendId.hpp" +#include + #include #include -#include #include #include diff --git a/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp b/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp index a6e835612b..7cb5ded773 100644 --- a/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp +++ b/src/backends/backendsCommon/test/OptimizeSubgraphViewTests.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 95ffbc48fd..2528a45b03 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -10,9 +10,10 @@ #include "ClLayerSupport.hpp" #include "ClTensorHandleFactory.hpp" +#include + #include -#include #include #include diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index f9540f27b0..be565a523a 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -7,11 +7,11 @@ #include "ClBackendId.hpp" #include +#include + #include #include -#include - #include #if defined(ARMCOMPUTECL_ENABLED) diff --git a/src/backends/cl/ClRegistryInitializer.cpp b/src/backends/cl/ClRegistryInitializer.cpp index 4d6f5f4a05..8decd6f689 100644 --- a/src/backends/cl/ClRegistryInitializer.cpp +++ b/src/backends/cl/ClRegistryInitializer.cpp @@ -5,7 +5,7 @@ #include "ClBackend.hpp" -#include +#include namespace { diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 63529c9693..5b005403f1 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -9,9 +9,10 @@ #include "NeonLayerSupport.hpp" #include "NeonTensorHandleFactory.hpp" +#include + #include -#include #include #include diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index cc96f63c1a..bc912ff9df 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -7,12 +7,12 @@ #include "NeonBackendId.hpp" #include -#include -#include #include #include +#include -#include +#include +#include #include diff --git a/src/backends/neon/NeonRegistryInitializer.cpp b/src/backends/neon/NeonRegistryInitializer.cpp index c74acae96b..fd2e84dd5f 100644 --- a/src/backends/neon/NeonRegistryInitializer.cpp +++ b/src/backends/neon/NeonRegistryInitializer.cpp @@ -5,7 +5,7 @@ #include "NeonBackend.hpp" -#include +#include namespace { diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp index 2b56416b31..10cd5e5752 100644 --- a/src/backends/reference/RefBackend.cpp +++ b/src/backends/reference/RefBackend.cpp @@ -9,9 +9,10 @@ #include "RefLayerSupport.hpp" #include "RefTensorHandleFactory.hpp" +#include + #include #include -#include #include diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp index c65886ba4d..59721582a3 100644 --- a/src/backends/reference/RefLayerSupport.cpp +++ b/src/backends/reference/RefLayerSupport.cpp @@ -12,8 +12,8 @@ #include #include +#include -#include #include #include diff --git a/src/backends/reference/RefRegistryInitializer.cpp b/src/backends/reference/RefRegistryInitializer.cpp index 427c7f01ab..a06bd8d949 100644 --- a/src/backends/reference/RefRegistryInitializer.cpp +++ b/src/backends/reference/RefRegistryInitializer.cpp @@ -5,7 +5,7 @@ #include "RefBackend.hpp" -#include +#include namespace { diff --git a/tests/DeepSpeechV1InferenceTest.hpp b/tests/DeepSpeechV1InferenceTest.hpp old mode 100755 new mode 100644 diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp index 412476a4df..9e054c4375 100644 --- a/tests/InferenceModel.hpp +++ b/tests/InferenceModel.hpp @@ -2,8 +2,11 @@ // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // + #pragma once + #include +#include #if defined(ARMNN_SERIALIZER) #include "armnnDeserializer/IDeserializer.hpp" @@ -18,8 +21,6 @@ #include #include -#include - #include #include #include diff --git a/tests/LstmCommon.hpp b/tests/LstmCommon.hpp old mode 100755 new mode 100644 -- cgit v1.2.1