From 9efb57d62197aeb7d868c289bb34166c132f0287 Mon Sep 17 00:00:00 2001 From: David Beck Date: Mon, 5 Nov 2018 13:40:33 +0000 Subject: Revert "IVGCVSW-2056 + IVGCVSW-2064 : move ClContextControl to the ClBackend" This reverts commit d4dfa684941a21314b70593d01b0fc2167eebad4. Change-Id: Id61ce69215505c3cf5d30ec2a7ec9127fb2554fc --- CMakeLists.txt | 1 - include/armnn/ArmNN.hpp | 1 - include/armnn/IBackend.hpp | 22 ---- include/armnn/Types.hpp | 16 ++- src/armnn/LayerSupport.cpp | 2 +- src/armnn/LoadedNetwork.cpp | 8 +- src/armnn/LoadedNetwork.hpp | 3 +- src/armnn/Runtime.cpp | 52 ++++++---- src/armnn/Runtime.hpp | 12 ++- .../backendsCommon/BackendContextRegistry.cpp | 17 ---- .../backendsCommon/BackendContextRegistry.hpp | 28 ------ src/backends/backendsCommon/BackendRegistry.hpp | 4 +- src/backends/backendsCommon/CMakeLists.txt | 3 - src/backends/backendsCommon/IBackendContext.hpp | 27 ----- src/backends/backendsCommon/IBackendInternal.hpp | 5 +- .../backendsCommon/LayerSupportRegistry.hpp | 6 +- src/backends/backendsCommon/RegistryCommon.hpp | 20 +--- src/backends/backendsCommon/WorkloadFactory.cpp | 2 +- src/backends/backendsCommon/common.mk | 2 - .../backendsCommon/test/BackendRegistryTests.cpp | 8 +- src/backends/cl/CMakeLists.txt | 27 +++-- src/backends/cl/ClBackend.cpp | 7 +- src/backends/cl/ClBackend.hpp | 4 +- src/backends/cl/ClBackendContext.cpp | 111 --------------------- src/backends/cl/ClBackendContext.hpp | 23 ----- src/backends/cl/ClLayerSupport.cpp | 2 +- src/backends/cl/backend.mk | 2 - src/backends/neon/CMakeLists.txt | 23 +++-- src/backends/neon/NeonBackend.cpp | 4 +- src/backends/neon/NeonBackend.hpp | 4 +- src/backends/neon/NeonLayerSupport.cpp | 2 +- src/backends/neon/backend.mk | 1 - src/backends/reference/CMakeLists.txt | 1 - src/backends/reference/RefBackend.cpp | 4 +- src/backends/reference/RefBackend.hpp | 4 +- src/backends/reference/RefLayerSupport.cpp | 2 +- src/backends/reference/backend.mk | 1 - 37 files changed, 122 insertions(+), 339 deletions(-) delete mode 100644 include/armnn/IBackend.hpp delete mode 100644 src/backends/backendsCommon/BackendContextRegistry.cpp delete mode 100644 src/backends/backendsCommon/BackendContextRegistry.hpp delete mode 100644 src/backends/backendsCommon/IBackendContext.hpp delete mode 100644 src/backends/cl/ClBackendContext.cpp delete mode 100644 src/backends/cl/ClBackendContext.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index e8d00deb21..48176c106b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -154,7 +154,6 @@ list(APPEND armnn_sources include/armnn/ILayerSupport.hpp include/armnn/INetwork.hpp include/armnn/IProfiler.hpp - include/armnn/IBackend.hpp include/armnn/IRuntime.hpp include/armnn/LayerSupport.hpp include/armnn/LstmParams.hpp diff --git a/include/armnn/ArmNN.hpp b/include/armnn/ArmNN.hpp index a9bb451931..f03b79d1ca 100644 --- a/include/armnn/ArmNN.hpp +++ b/include/armnn/ArmNN.hpp @@ -7,7 +7,6 @@ #include "BackendId.hpp" #include "Descriptors.hpp" #include "Exceptions.hpp" -#include "IBackend.hpp" #include "IRuntime.hpp" #include "INetwork.hpp" #include "LayerSupport.hpp" diff --git a/include/armnn/IBackend.hpp b/include/armnn/IBackend.hpp deleted file mode 100644 index 34df91c803..0000000000 --- a/include/armnn/IBackend.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include "BackendId.hpp" - -namespace armnn -{ - -class IBackend -{ -protected: - IBackend() {} - virtual ~IBackend() {} - -public: - virtual const BackendId& GetId() const = 0; -}; - -} // namespace armnn \ No newline at end of file diff --git a/include/armnn/Types.hpp b/include/armnn/Types.hpp index 2249a365d2..cd6e17be37 100644 --- a/include/armnn/Types.hpp +++ b/include/armnn/Types.hpp @@ -139,6 +139,20 @@ enum class OutputShapeRounding Ceiling = 1 }; +/// Each backend should implement an IBackend. +class IBackend +{ +protected: + IBackend() {} + virtual ~IBackend() {} + +public: + virtual const BackendId& GetId() const = 0; +}; + +using IBackendSharedPtr = std::shared_ptr; +using IBackendUniquePtr = std::unique_ptr; + /// Device specific knowledge to be passed to the optimizer. class IDeviceSpec { @@ -208,6 +222,4 @@ private: /// Define LayerGuid type. using LayerGuid = unsigned int; -struct EmptyInitializer {}; - } // namespace armnn diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp index e3009e26fd..fb3ce43646 100644 --- a/src/armnn/LayerSupport.cpp +++ b/src/armnn/LayerSupport.cpp @@ -39,7 +39,7 @@ void CopyErrorMessage(char* truncatedString, const char* fullString, size_t maxL bool isSupported; \ try { \ auto factoryFunc = LayerSupportRegistryInstance().GetFactory(backendId); \ - auto layerSupportObject = factoryFunc(EmptyInitializer()); \ + auto layerSupportObject = factoryFunc(); \ isSupported = layerSupportObject->func(__VA_ARGS__, Optional(reasonIfUnsupportedFull)); \ CopyErrorMessage(reasonIfUnsupported, reasonIfUnsupportedFull.c_str(), reasonIfUnsupportedMaxLength); \ } catch (InvalidArgumentException e) { \ diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 97c836079e..f58a115754 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -38,7 +38,6 @@ std::string ToErrorMessage(const char * prefix, const ExceptionType & error) } // anonymous std::unique_ptr LoadedNetwork::MakeLoadedNetwork(std::unique_ptr net, - const IRuntime::CreationOptions& options, std::string & errorMessage) { std::unique_ptr loadedNetwork; @@ -53,7 +52,7 @@ std::unique_ptr LoadedNetwork::MakeLoadedNetwork(std::unique_ptr< try { - loadedNetwork.reset(new LoadedNetwork(std::move(net), options)); + loadedNetwork.reset(new LoadedNetwork(std::move(net))); } catch (const armnn::RuntimeException& error) { @@ -71,8 +70,7 @@ std::unique_ptr LoadedNetwork::MakeLoadedNetwork(std::unique_ptr< return loadedNetwork; } -LoadedNetwork::LoadedNetwork(std::unique_ptr net, - const IRuntime::CreationOptions& options) +LoadedNetwork::LoadedNetwork(std::unique_ptr net) : m_OptimizedNetwork(std::move(net)) , m_WorkingMemLock(m_WorkingMemMutex, std::defer_lock) { @@ -91,7 +89,7 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net, if (m_Backends.count(backend) == 0) { auto createBackend = BackendRegistryInstance().GetFactory(backend); - auto it = m_Backends.emplace(std::make_pair(backend, createBackend(EmptyInitializer()))); + auto it = m_Backends.emplace(std::make_pair(backend, createBackend())); m_WorkloadFactories.emplace(std::make_pair(backend, it.first->second->CreateWorkloadFactory())); } diff --git a/src/armnn/LoadedNetwork.hpp b/src/armnn/LoadedNetwork.hpp index b36b69bca3..65dd4ec25b 100644 --- a/src/armnn/LoadedNetwork.hpp +++ b/src/armnn/LoadedNetwork.hpp @@ -40,7 +40,6 @@ public: Status EnqueueWorkload(const InputTensors& inputTensors, const OutputTensors& outputTensors); static std::unique_ptr MakeLoadedNetwork(std::unique_ptr net, - const IRuntime::CreationOptions& options, std::string & errorMessage); // NOTE we return by reference as the purpose of this method is only to provide @@ -52,7 +51,7 @@ public: void FreeWorkingMemory(); private: - LoadedNetwork(std::unique_ptr net, const IRuntime::CreationOptions& options); + LoadedNetwork(std::unique_ptr net); void EnqueueInput(const BindableLayer& layer, ITensorHandle* tensorHandle, const TensorInfo& tensorInfo); diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 769136486d..37e25a7fb6 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -6,10 +6,15 @@ #include #include -#include #include +#ifdef ARMCOMPUTECL_ENABLED +#include +#include +#include +#endif + #include #include @@ -52,7 +57,6 @@ Status Runtime::LoadNetwork(NetworkId& networkIdOut, IOptimizedNetwork* rawNetwork = inNetwork.release(); unique_ptr loadedNetwork = LoadedNetwork::MakeLoadedNetwork( std::unique_ptr(boost::polymorphic_downcast(rawNetwork)), - m_Options, errorMessage); if (!loadedNetwork) @@ -74,6 +78,24 @@ Status Runtime::LoadNetwork(NetworkId& networkIdOut, Status Runtime::UnloadNetwork(NetworkId networkId) { +#ifdef ARMCOMPUTECL_ENABLED + if (arm_compute::CLScheduler::get().context()() != NULL) + { + // Waits for all queued CL requests to finish before unloading the network they may be using. + try + { + // Coverity fix: arm_compute::CLScheduler::sync() may throw an exception of type cl::Error. + arm_compute::CLScheduler::get().sync(); + } + catch (const cl::Error&) + { + BOOST_LOG_TRIVIAL(warning) << "WARNING: Runtime::UnloadNetwork(): an error occurred while waiting for " + "the queued CL requests to finish"; + return Status::Failure; + } + } +#endif + { std::lock_guard lockGuard(m_Mutex); @@ -82,6 +104,14 @@ Status Runtime::UnloadNetwork(NetworkId networkId) BOOST_LOG_TRIVIAL(warning) << "WARNING: Runtime::UnloadNetwork(): " << networkId << " not found!"; return Status::Failure; } + +#ifdef ARMCOMPUTECL_ENABLED + if (arm_compute::CLScheduler::get().context()() != NULL && m_LoadedNetworks.empty()) + { + // There are no loaded networks left, so clear the CL cache to free up memory + m_ClContextControl.ClearClCache(); + } +#endif } BOOST_LOG_TRIVIAL(debug) << "Runtime::UnloadNetwork(): Unloaded network with ID: " << networkId; @@ -101,26 +131,12 @@ const std::shared_ptr Runtime::GetProfiler(NetworkId networkId) const } Runtime::Runtime(const CreationOptions& options) - : m_Options{options} + : m_ClContextControl(options.m_GpuAccTunedParameters.get(), + options.m_EnableGpuProfiling) , m_NetworkIdCounter(0) , m_DeviceSpec{BackendRegistryInstance().GetBackendIds()} { BOOST_LOG_TRIVIAL(info) << "ArmNN v" << ARMNN_VERSION << "\n"; - - for (const auto& id : BackendContextRegistryInstance().GetBackendIds()) - { - // Store backend contexts for the supported ones - if (m_DeviceSpec.GetSupportedBackends().count(id) > 0) - { - // Don't throw an exception, rather return a dummy factory if not - // found. - auto factoryFun = BackendContextRegistryInstance().GetFactory( - id, [](const CreationOptions&) { return IBackendContextUniquePtr(); } - ); - - m_BackendContexts.emplace(std::make_pair(id, factoryFun(options))); - } - } } Runtime::~Runtime() diff --git a/src/armnn/Runtime.hpp b/src/armnn/Runtime.hpp index 694e1e5f9a..e4d4d4ddb9 100644 --- a/src/armnn/Runtime.hpp +++ b/src/armnn/Runtime.hpp @@ -10,7 +10,8 @@ #include #include #include -#include + +#include #include #include @@ -86,13 +87,14 @@ private: } mutable std::mutex m_Mutex; + std::unordered_map> m_LoadedNetworks; - CreationOptions m_Options; + + ClContextControl m_ClContextControl; + int m_NetworkIdCounter; - DeviceSpec m_DeviceSpec; - using BackendContextMap = std::unordered_map; - BackendContextMap m_BackendContexts; + DeviceSpec m_DeviceSpec; }; } diff --git a/src/backends/backendsCommon/BackendContextRegistry.cpp b/src/backends/backendsCommon/BackendContextRegistry.cpp deleted file mode 100644 index 0168a127af..0000000000 --- a/src/backends/backendsCommon/BackendContextRegistry.cpp +++ /dev/null @@ -1,17 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "BackendContextRegistry.hpp" - -namespace armnn -{ - -BackendContextRegistry& BackendContextRegistryInstance() -{ - static BackendContextRegistry instance; - return instance; -} - -} // namespace armnn diff --git a/src/backends/backendsCommon/BackendContextRegistry.hpp b/src/backends/backendsCommon/BackendContextRegistry.hpp deleted file mode 100644 index 23830a0105..0000000000 --- a/src/backends/backendsCommon/BackendContextRegistry.hpp +++ /dev/null @@ -1,28 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include "IBackendContext.hpp" -#include "RegistryCommon.hpp" - -#include -#include - -namespace armnn -{ - -using BackendContextRegistry = RegistryCommon; - -BackendContextRegistry& BackendContextRegistryInstance(); - -template <> -struct RegisteredTypeName -{ - static const char * Name() { return "IBackendContext"; } -}; - -} // namespace armnn diff --git a/src/backends/backendsCommon/BackendRegistry.hpp b/src/backends/backendsCommon/BackendRegistry.hpp index ba2d26aaea..145da8819c 100644 --- a/src/backends/backendsCommon/BackendRegistry.hpp +++ b/src/backends/backendsCommon/BackendRegistry.hpp @@ -12,9 +12,7 @@ namespace armnn { -using BackendRegistry = RegistryCommon; +using BackendRegistry = RegistryCommon; BackendRegistry& BackendRegistryInstance(); diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt index cb89aebc4e..9dd9b92fe3 100644 --- a/src/backends/backendsCommon/CMakeLists.txt +++ b/src/backends/backendsCommon/CMakeLists.txt @@ -4,14 +4,11 @@ # list(APPEND armnnBackendsCommon_sources - BackendContextRegistry.cpp - BackendContextRegistry.hpp BackendRegistry.cpp BackendRegistry.hpp CpuTensorHandle.cpp CpuTensorHandleFwd.hpp CpuTensorHandle.hpp - IBackendContext.hpp IBackendInternal.hpp ILayerSupport.cpp ITensorHandle.hpp diff --git a/src/backends/backendsCommon/IBackendContext.hpp b/src/backends/backendsCommon/IBackendContext.hpp deleted file mode 100644 index d073d12868..0000000000 --- a/src/backends/backendsCommon/IBackendContext.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include -#include - -namespace armnn -{ - -class IBackendContext -{ -public: - virtual ~IBackendContext() {} - -protected: - IBackendContext(const IRuntime::CreationOptions& options) {} - -private: - IBackendContext() = delete; -}; - -using IBackendContextUniquePtr = std::unique_ptr; - -} // namespace armnn diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp index a24b60064a..7e44dbd676 100644 --- a/src/backends/backendsCommon/IBackendInternal.hpp +++ b/src/backends/backendsCommon/IBackendInternal.hpp @@ -4,8 +4,7 @@ // #pragma once -#include -#include +#include namespace armnn { @@ -14,6 +13,8 @@ class IWorkloadFactory; class IBackendInternal : public IBackend { protected: + // Creation must be done through a specific + // backend interface. IBackendInternal() = default; public: diff --git a/src/backends/backendsCommon/LayerSupportRegistry.hpp b/src/backends/backendsCommon/LayerSupportRegistry.hpp index 6124685032..a5efad05ef 100644 --- a/src/backends/backendsCommon/LayerSupportRegistry.hpp +++ b/src/backends/backendsCommon/LayerSupportRegistry.hpp @@ -6,13 +6,11 @@ #include "RegistryCommon.hpp" #include -#include namespace armnn { -using LayerSupportRegistry = RegistryCommon; + +using LayerSupportRegistry = RegistryCommon; LayerSupportRegistry& LayerSupportRegistryInstance(); diff --git a/src/backends/backendsCommon/RegistryCommon.hpp b/src/backends/backendsCommon/RegistryCommon.hpp index 3dbfad2a66..03bd338090 100644 --- a/src/backends/backendsCommon/RegistryCommon.hpp +++ b/src/backends/backendsCommon/RegistryCommon.hpp @@ -22,11 +22,11 @@ struct RegisteredTypeName static const char * Name() { return "UNKNOWN"; } }; -template +template class RegistryCommon { public: - using FactoryFunction = std::function; + using FactoryFunction = std::function; void Register(const BackendId& id, FactoryFunction factory) { @@ -53,20 +53,6 @@ public: return it->second; } - FactoryFunction GetFactory(const BackendId& id, - FactoryFunction defaultFactory) const - { - auto it = m_Factories.find(id); - if (it == m_Factories.end()) - { - return defaultFactory; - } - else - { - return it->second; - } - } - size_t Size() const { return m_Factories.size(); @@ -131,4 +117,4 @@ struct StaticRegistryInitializer } }; -} // namespace armnn \ No newline at end of file +} // namespace armnn diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 83a20e8675..9f974522aa 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -68,7 +68,7 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, auto const& layerSupportRegistry = LayerSupportRegistryInstance(); auto layerSupportFactory = layerSupportRegistry.GetFactory(backendId); - auto layerSupportObject = layerSupportFactory(EmptyInitializer()); + auto layerSupportObject = layerSupportFactory(); switch(layer.GetType()) { diff --git a/src/backends/backendsCommon/common.mk b/src/backends/backendsCommon/common.mk index 152ada3532..b1583b987e 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 := \ - BackendContextRegistry.cpp \ BackendRegistry.cpp \ CpuTensorHandle.cpp \ ILayerSupport.cpp \ @@ -27,4 +26,3 @@ COMMON_TEST_SOURCES := \ test/WorkloadDataValidation.cpp \ test/TensorCopyUtils.cpp \ test/LayerTests.cpp - diff --git a/src/backends/backendsCommon/test/BackendRegistryTests.cpp b/src/backends/backendsCommon/test/BackendRegistryTests.cpp index 4afe273de4..0bc655be09 100644 --- a/src/backends/backendsCommon/test/BackendRegistryTests.cpp +++ b/src/backends/backendsCommon/test/BackendRegistryTests.cpp @@ -54,7 +54,7 @@ BOOST_AUTO_TEST_CASE(TestRegistryHelper) StaticRegistryInitializer factoryHelper( BackendRegistryInstance(), "HelloWorld", - [&called](const EmptyInitializer&) + [&called]() { called = true; return armnn::IBackendInternalUniquePtr(nullptr); @@ -69,7 +69,7 @@ BOOST_AUTO_TEST_CASE(TestRegistryHelper) // sanity check: the factory still not called BOOST_TEST(called == false); - factoryFunction(EmptyInitializer()); + factoryFunction(); BOOST_TEST(called == true); } @@ -81,7 +81,7 @@ BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry) bool called = false; BackendRegistryInstance().Register( "HelloWorld", - [&called](const EmptyInitializer&) + [&called]() { called = true; return armnn::IBackendInternalUniquePtr(nullptr); @@ -96,7 +96,7 @@ BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry) // sanity check: the factory still not called BOOST_TEST(called == false); - factoryFunction(EmptyInitializer()); + factoryFunction(); BOOST_TEST(called == true); } diff --git a/src/backends/cl/CMakeLists.txt b/src/backends/cl/CMakeLists.txt index 30254582b2..d751854c92 100644 --- a/src/backends/cl/CMakeLists.txt +++ b/src/backends/cl/CMakeLists.txt @@ -3,23 +3,18 @@ # SPDX-License-Identifier: MIT # -list(APPEND armnnClBackend_sources - ClBackendId.hpp - ClLayerSupport.cpp - ClLayerSupport.hpp - ClWorkloadFactory.cpp - ClWorkloadFactory.hpp -) - if(ARMCOMPUTECL) list(APPEND armnnClBackend_sources - ClBackendContext.cpp - ClBackendContext.hpp ClBackend.cpp ClBackend.hpp + ClBackendId.hpp ClContextControl.cpp ClContextControl.hpp + ClLayerSupport.cpp + ClLayerSupport.hpp ClTensorHandle.hpp + ClWorkloadFactory.cpp + ClWorkloadFactory.hpp OpenClTimer.cpp OpenClTimer.hpp ) @@ -29,10 +24,20 @@ if(ARMCOMPUTECL) if(BUILD_UNIT_TESTS) add_subdirectory(test) endif() + +else() + list(APPEND armnnClBackend_sources + ClBackendId.hpp + ClContextControl.cpp + ClContextControl.hpp + ClLayerSupport.cpp + ClLayerSupport.hpp + ClWorkloadFactory.cpp + ClWorkloadFactory.hpp + ) endif() add_library(armnnClBackend OBJECT ${armnnClBackend_sources}) target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils) target_include_directories(armnnClBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) - diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 5d5cad572c..b1857a3678 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -8,7 +8,6 @@ #include "ClWorkloadFactory.hpp" #include -#include namespace armnn { @@ -20,13 +19,13 @@ static StaticRegistryInitializer g_RegisterHelper { BackendRegistryInstance(), ClBackend::GetIdStatic(), - [](const EmptyInitializer&) + []() { return IBackendInternalUniquePtr(new ClBackend); } }; -} // anonymous namespace +} const BackendId& ClBackend::GetIdStatic() { @@ -39,4 +38,4 @@ IBackendInternal::IWorkloadFactoryPtr ClBackend::CreateWorkloadFactory() const return std::make_unique(); } -} // namespace armnn \ No newline at end of file +} // namespace armnn diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp index 381d808036..223aeb3095 100644 --- a/src/backends/cl/ClBackend.hpp +++ b/src/backends/cl/ClBackend.hpp @@ -12,8 +12,8 @@ namespace armnn class ClBackend : public IBackendInternal { public: - ClBackend() = default; - ~ClBackend() override = default; + ClBackend() = default; + ~ClBackend() = default; static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } diff --git a/src/backends/cl/ClBackendContext.cpp b/src/backends/cl/ClBackendContext.cpp deleted file mode 100644 index 7789415f89..0000000000 --- a/src/backends/cl/ClBackendContext.cpp +++ /dev/null @@ -1,111 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClBackendContext.hpp" -#include "ClBackendId.hpp" -#include "ClContextControl.hpp" - -#include -#include - -#include - -#ifdef ARMCOMPUTECL_ENABLED -// Needed for the CL scheduler calls -#include -#include -#include -#endif - -namespace armnn -{ - -namespace -{ - -static StaticRegistryInitializer g_RegisterHelper -{ - BackendContextRegistryInstance(), - ClBackendId(), - [](const IRuntime::CreationOptions& options) - { - return IBackendContextUniquePtr(new ClBackendContext{options}); - } -}; - -static std::mutex g_ContextControlMutex; - -std::shared_ptr -GetContextControlWrapper(const IRuntime::CreationOptions& options) -{ - static std::weak_ptr contextControlWrapper; - - std::lock_guard lockGuard(g_ContextControlMutex); - std::shared_ptr result; - - if (contextControlWrapper.expired()) - { - result = std::make_shared(options); - contextControlWrapper = result; - } - else - { - result = contextControlWrapper.lock(); - } - - return result; -} - -} // anonymous namespace - - -#ifdef ARMCOMPUTECL_ENABLED -struct ClBackendContext::ContextControlWrapper -{ - ContextControlWrapper(const IRuntime::CreationOptions& options) - : m_ClContextControl{options.m_GpuAccTunedParameters.get(), - options.m_EnableGpuProfiling} - { - } - - ~ContextControlWrapper() - { - if (arm_compute::CLScheduler::get().context()() != NULL) - { - // Waits for all queued CL requests to finish before unloading the network they may be using. - try - { - // Coverity fix: arm_compute::CLScheduler::sync() may throw an exception of type cl::Error. - arm_compute::CLScheduler::get().sync(); - m_ClContextControl.ClearClCache(); - } - catch (const cl::Error&) - { - BOOST_LOG_TRIVIAL(warning) << "WARNING: Runtime::UnloadNetwork(): an error occurred while waiting for " - "the queued CL requests to finish"; - } - } - } - - ClContextControl m_ClContextControl; -}; -#else //ARMCOMPUTECL_ENABLED -struct ClBackendContext::ContextControlWrapper -{ - ContextControlWrapper(const IRuntime::CreationOptions&){} -}; -#endif //ARMCOMPUTECL_ENABLED - -ClBackendContext::ClBackendContext(const IRuntime::CreationOptions& options) -: IBackendContext{options} -, m_ContextControl{GetContextControlWrapper(options)} -{ -} - -ClBackendContext::~ClBackendContext() -{ -} - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/cl/ClBackendContext.hpp b/src/backends/cl/ClBackendContext.hpp deleted file mode 100644 index 4aaa8a9afe..0000000000 --- a/src/backends/cl/ClBackendContext.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#pragma once - -#include - -namespace armnn -{ - -class ClBackendContext : public IBackendContext -{ -public: - ClBackendContext(const IRuntime::CreationOptions& options); - ~ClBackendContext() override; - - struct ContextControlWrapper; -private: - std::shared_ptr m_ContextControl; -}; - -} // namespace armnn \ No newline at end of file diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index ab62eee41e..f4e14c24d0 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -53,7 +53,7 @@ ILayerSupportSharedPtr GetLayerSupportPointer() static StaticRegistryInitializer g_RegisterHelper{ LayerSupportRegistryInstance(), ClBackendId(), - [](const EmptyInitializer&) + []() { return GetLayerSupportPointer(); } diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index 8433240ae9..97df8e4903 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -8,7 +8,6 @@ # file in the root of ArmNN BACKEND_SOURCES := \ - ClBackendContext.cpp \ ClBackend.cpp \ ClContextControl.cpp \ ClLayerSupport.cpp \ @@ -55,4 +54,3 @@ BACKEND_TEST_SOURCES := \ test/ClRuntimeTests.cpp \ test/Fp16SupportTest.cpp \ test/OpenClTimerTest.cpp - diff --git a/src/backends/neon/CMakeLists.txt b/src/backends/neon/CMakeLists.txt index 0f7759d7e2..badad2f8a4 100644 --- a/src/backends/neon/CMakeLists.txt +++ b/src/backends/neon/CMakeLists.txt @@ -3,20 +3,17 @@ # SPDX-License-Identifier: MIT # -list(APPEND armnnNeonBackend_sources - NeonBackendId.hpp - NeonLayerSupport.cpp - NeonLayerSupport.hpp - NeonWorkloadFactory.cpp - NeonWorkloadFactory.hpp -) - if(ARMCOMPUTENEON) list(APPEND armnnNeonBackend_sources NeonBackend.cpp NeonBackend.hpp + NeonBackendId.hpp NeonInterceptorScheduler.hpp NeonInterceptorScheduler.cpp + NeonLayerSupport.cpp + NeonLayerSupport.hpp + NeonWorkloadFactory.cpp + NeonWorkloadFactory.hpp NeonTensorHandle.hpp NeonTimer.hpp NeonTimer.cpp @@ -27,10 +24,18 @@ if(ARMCOMPUTENEON) if(BUILD_UNIT_TESTS) add_subdirectory(test) endif() + +else() + list(APPEND armnnNeonBackend_sources + NeonBackendId.hpp + NeonLayerSupport.cpp + NeonLayerSupport.hpp + NeonWorkloadFactory.cpp + NeonWorkloadFactory.hpp + ) endif() add_library(armnnNeonBackend OBJECT ${armnnNeonBackend_sources}) target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils) target_include_directories(armnnNeonBackend PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) - diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 1e9f633a21..7058d24e72 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -9,6 +9,8 @@ #include +#include + namespace armnn { @@ -19,7 +21,7 @@ static StaticRegistryInitializer g_RegisterHelper { BackendRegistryInstance(), NeonBackend::GetIdStatic(), - [](const EmptyInitializer&) + []() { return IBackendInternalUniquePtr(new NeonBackend); } diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp index 27ad94db34..b8bbd781a4 100644 --- a/src/backends/neon/NeonBackend.hpp +++ b/src/backends/neon/NeonBackend.hpp @@ -12,8 +12,8 @@ namespace armnn class NeonBackend : public IBackendInternal { public: - NeonBackend() = default; - ~NeonBackend() override = default; + NeonBackend() = default; + ~NeonBackend() = default; static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index 4704135540..a4a6b67c0b 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -49,7 +49,7 @@ ILayerSupportSharedPtr GetLayerSupportPointer() static StaticRegistryInitializer g_RegisterHelper{ LayerSupportRegistryInstance(), NeonBackendId(), - [](const EmptyInitializer&) + []() { return GetLayerSupportPointer(); } diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk index 29b3527542..8f7e72b17c 100644 --- a/src/backends/neon/backend.mk +++ b/src/backends/neon/backend.mk @@ -49,4 +49,3 @@ BACKEND_TEST_SOURCES := \ test/NeonOptimizedNetworkTests.cpp \ test/NeonRuntimeTests.cpp \ test/NeonTimerTest.cpp - diff --git a/src/backends/reference/CMakeLists.txt b/src/backends/reference/CMakeLists.txt index 1799275d7d..ff16f185b4 100644 --- a/src/backends/reference/CMakeLists.txt +++ b/src/backends/reference/CMakeLists.txt @@ -23,4 +23,3 @@ add_subdirectory(workloads) if(BUILD_UNIT_TESTS) add_subdirectory(test) endif() - diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp index 91fc3c99ab..b6fb0ff5ec 100644 --- a/src/backends/reference/RefBackend.cpp +++ b/src/backends/reference/RefBackend.cpp @@ -9,6 +9,8 @@ #include +#include + namespace armnn { @@ -19,7 +21,7 @@ static StaticRegistryInitializer g_RegisterHelper { BackendRegistryInstance(), RefBackend::GetIdStatic(), - [](const EmptyInitializer&) + []() { return IBackendInternalUniquePtr(new RefBackend); } diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp index e2f264d7a4..48a9d529d5 100644 --- a/src/backends/reference/RefBackend.hpp +++ b/src/backends/reference/RefBackend.hpp @@ -12,8 +12,8 @@ namespace armnn class RefBackend : public IBackendInternal { public: - RefBackend() = default; - ~RefBackend() override = default; + RefBackend() = default; + ~RefBackend() = default; static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp index 1e8fa75be7..629903ec2c 100644 --- a/src/backends/reference/RefLayerSupport.cpp +++ b/src/backends/reference/RefLayerSupport.cpp @@ -31,7 +31,7 @@ ILayerSupportSharedPtr GetLayerSupportPointer() static StaticRegistryInitializer g_RegisterHelper{ LayerSupportRegistryInstance(), RefBackendId(), - [](const EmptyInitializer&) + []() { return GetLayerSupportPointer(); } diff --git a/src/backends/reference/backend.mk b/src/backends/reference/backend.mk index 8a8a78a315..007efceb9b 100644 --- a/src/backends/reference/backend.mk +++ b/src/backends/reference/backend.mk @@ -71,4 +71,3 @@ BACKEND_TEST_SOURCES := \ test/RefLayerTests.cpp \ test/RefOptimizedNetworkTests.cpp \ test/RefRuntimeTests.cpp - -- cgit v1.2.1