aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Beck <david.beck@arm.com>2018-11-05 13:40:33 +0000
committerMatthew Bentham <matthew.bentham@arm.com>2018-11-05 17:26:57 +0000
commit9efb57d62197aeb7d868c289bb34166c132f0287 (patch)
tree047fe9ac08ad90145d4e2d5bf1c6acc24eaad16c
parent9c6f3afdf7686d9804fd5bc04ea68fca4c49a0a8 (diff)
downloadarmnn-9efb57d62197aeb7d868c289bb34166c132f0287.tar.gz
Revert "IVGCVSW-2056 + IVGCVSW-2064 : move ClContextControl to the ClBackend"
This reverts commit d4dfa684941a21314b70593d01b0fc2167eebad4. Change-Id: Id61ce69215505c3cf5d30ec2a7ec9127fb2554fc
-rw-r--r--CMakeLists.txt1
-rw-r--r--include/armnn/ArmNN.hpp1
-rw-r--r--include/armnn/IBackend.hpp22
-rw-r--r--include/armnn/Types.hpp16
-rw-r--r--src/armnn/LayerSupport.cpp2
-rw-r--r--src/armnn/LoadedNetwork.cpp8
-rw-r--r--src/armnn/LoadedNetwork.hpp3
-rw-r--r--src/armnn/Runtime.cpp52
-rw-r--r--src/armnn/Runtime.hpp12
-rw-r--r--src/backends/backendsCommon/BackendContextRegistry.cpp17
-rw-r--r--src/backends/backendsCommon/BackendContextRegistry.hpp28
-rw-r--r--src/backends/backendsCommon/BackendRegistry.hpp4
-rw-r--r--src/backends/backendsCommon/CMakeLists.txt3
-rw-r--r--src/backends/backendsCommon/IBackendContext.hpp27
-rw-r--r--src/backends/backendsCommon/IBackendInternal.hpp5
-rw-r--r--src/backends/backendsCommon/LayerSupportRegistry.hpp6
-rw-r--r--src/backends/backendsCommon/RegistryCommon.hpp20
-rw-r--r--src/backends/backendsCommon/WorkloadFactory.cpp2
-rw-r--r--src/backends/backendsCommon/common.mk2
-rw-r--r--src/backends/backendsCommon/test/BackendRegistryTests.cpp8
-rw-r--r--src/backends/cl/CMakeLists.txt27
-rw-r--r--src/backends/cl/ClBackend.cpp7
-rw-r--r--src/backends/cl/ClBackend.hpp4
-rw-r--r--src/backends/cl/ClBackendContext.cpp111
-rw-r--r--src/backends/cl/ClBackendContext.hpp23
-rw-r--r--src/backends/cl/ClLayerSupport.cpp2
-rw-r--r--src/backends/cl/backend.mk2
-rw-r--r--src/backends/neon/CMakeLists.txt23
-rw-r--r--src/backends/neon/NeonBackend.cpp4
-rw-r--r--src/backends/neon/NeonBackend.hpp4
-rw-r--r--src/backends/neon/NeonLayerSupport.cpp2
-rw-r--r--src/backends/neon/backend.mk1
-rw-r--r--src/backends/reference/CMakeLists.txt1
-rw-r--r--src/backends/reference/RefBackend.cpp4
-rw-r--r--src/backends/reference/RefBackend.hpp4
-rw-r--r--src/backends/reference/RefLayerSupport.cpp2
-rw-r--r--src/backends/reference/backend.mk1
37 files changed, 122 insertions, 339 deletions
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<IBackend>;
+using IBackendUniquePtr = std::unique_ptr<IBackend, void(*)(IBackend* backend)>;
+
/// 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<std::string&>(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> LoadedNetwork::MakeLoadedNetwork(std::unique_ptr<OptimizedNetwork> net,
- const IRuntime::CreationOptions& options,
std::string & errorMessage)
{
std::unique_ptr<LoadedNetwork> loadedNetwork;
@@ -53,7 +52,7 @@ std::unique_ptr<LoadedNetwork> 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> LoadedNetwork::MakeLoadedNetwork(std::unique_ptr<
return loadedNetwork;
}
-LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net,
- const IRuntime::CreationOptions& options)
+LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net)
: m_OptimizedNetwork(std::move(net))
, m_WorkingMemLock(m_WorkingMemMutex, std::defer_lock)
{
@@ -91,7 +89,7 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> 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<LoadedNetwork> MakeLoadedNetwork(std::unique_ptr<OptimizedNetwork> 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<OptimizedNetwork> net, const IRuntime::CreationOptions& options);
+ LoadedNetwork(std::unique_ptr<OptimizedNetwork> 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 <armnn/Version.hpp>
#include <backendsCommon/BackendRegistry.hpp>
-#include <backendsCommon/BackendContextRegistry.hpp>
#include <iostream>
+#ifdef ARMCOMPUTECL_ENABLED
+#include <arm_compute/core/CL/OpenCL.h>
+#include <arm_compute/core/CL/CLKernelLibrary.h>
+#include <arm_compute/runtime/CL/CLScheduler.h>
+#endif
+
#include <boost/log/trivial.hpp>
#include <boost/polymorphic_cast.hpp>
@@ -52,7 +57,6 @@ Status Runtime::LoadNetwork(NetworkId& networkIdOut,
IOptimizedNetwork* rawNetwork = inNetwork.release();
unique_ptr<LoadedNetwork> loadedNetwork = LoadedNetwork::MakeLoadedNetwork(
std::unique_ptr<OptimizedNetwork>(boost::polymorphic_downcast<OptimizedNetwork*>(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<std::mutex> 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<IProfiler> 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 <armnn/IRuntime.hpp>
#include <armnn/Tensor.hpp>
#include <armnn/BackendId.hpp>
-#include <backendsCommon/IBackendContext.hpp>
+
+#include <cl/ClContextControl.hpp>
#include <mutex>
#include <unordered_map>
@@ -86,13 +87,14 @@ private:
}
mutable std::mutex m_Mutex;
+
std::unordered_map<NetworkId, std::unique_ptr<LoadedNetwork>> m_LoadedNetworks;
- CreationOptions m_Options;
+
+ ClContextControl m_ClContextControl;
+
int m_NetworkIdCounter;
- DeviceSpec m_DeviceSpec;
- using BackendContextMap = std::unordered_map<BackendId, IBackendContextUniquePtr>;
- 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 <armnn/IRuntime.hpp>
-#include <armnn/Types.hpp>
-
-namespace armnn
-{
-
-using BackendContextRegistry = RegistryCommon<IBackendContext,
- IBackendContextUniquePtr,
- IRuntime::CreationOptions>;
-
-BackendContextRegistry& BackendContextRegistryInstance();
-
-template <>
-struct RegisteredTypeName<IBackendContext>
-{
- 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<IBackendInternal,
- IBackendInternalUniquePtr,
- EmptyInitializer>;
+using BackendRegistry = RegistryCommon<IBackendInternal, IBackendInternalUniquePtr>;
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 <armnn/IRuntime.hpp>
-#include <memory>
-
-namespace armnn
-{
-
-class IBackendContext
-{
-public:
- virtual ~IBackendContext() {}
-
-protected:
- IBackendContext(const IRuntime::CreationOptions& options) {}
-
-private:
- IBackendContext() = delete;
-};
-
-using IBackendContextUniquePtr = std::unique_ptr<IBackendContext>;
-
-} // 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 <armnn/IBackend.hpp>
-#include <memory>
+#include <armnn/Types.hpp>
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 <armnn/ILayerSupport.hpp>
-#include <armnn/Types.hpp>
namespace armnn
{
-using LayerSupportRegistry = RegistryCommon<ILayerSupport,
- ILayerSupportSharedPtr,
- EmptyInitializer>;
+
+using LayerSupportRegistry = RegistryCommon<ILayerSupport, ILayerSupportSharedPtr>;
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 <typename RegisteredType, typename PointerType, typename ParamType>
+template <typename RegisteredType, typename PointerType>
class RegistryCommon
{
public:
- using FactoryFunction = std::function<PointerType(const ParamType&)>;
+ using FactoryFunction = std::function<PointerType()>;
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<BackendRegistry> 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 <backendsCommon/BackendRegistry.hpp>
-#include <boost/log/trivial.hpp>
namespace armnn
{
@@ -20,13 +19,13 @@ static StaticRegistryInitializer<BackendRegistry> 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<ClWorkloadFactory>();
}
-} // 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 <backendsCommon/BackendContextRegistry.hpp>
-#include <boost/log/trivial.hpp>
-
-#include <mutex>
-
-#ifdef ARMCOMPUTECL_ENABLED
-// Needed for the CL scheduler calls
-#include <arm_compute/core/CL/OpenCL.h>
-#include <arm_compute/core/CL/CLKernelLibrary.h>
-#include <arm_compute/runtime/CL/CLScheduler.h>
-#endif
-
-namespace armnn
-{
-
-namespace
-{
-
-static StaticRegistryInitializer<BackendContextRegistry> g_RegisterHelper
-{
- BackendContextRegistryInstance(),
- ClBackendId(),
- [](const IRuntime::CreationOptions& options)
- {
- return IBackendContextUniquePtr(new ClBackendContext{options});
- }
-};
-
-static std::mutex g_ContextControlMutex;
-
-std::shared_ptr<ClBackendContext::ContextControlWrapper>
-GetContextControlWrapper(const IRuntime::CreationOptions& options)
-{
- static std::weak_ptr<ClBackendContext::ContextControlWrapper> contextControlWrapper;
-
- std::lock_guard<std::mutex> lockGuard(g_ContextControlMutex);
- std::shared_ptr<ClBackendContext::ContextControlWrapper> result;
-
- if (contextControlWrapper.expired())
- {
- result = std::make_shared<ClBackendContext::ContextControlWrapper>(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 <backendsCommon/IBackendContext.hpp>
-
-namespace armnn
-{
-
-class ClBackendContext : public IBackendContext
-{
-public:
- ClBackendContext(const IRuntime::CreationOptions& options);
- ~ClBackendContext() override;
-
- struct ContextControlWrapper;
-private:
- std::shared_ptr<ContextControlWrapper> 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<LayerSupportRegistry> 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 <backendsCommon/BackendRegistry.hpp>
+#include <boost/cast.hpp>
+
namespace armnn
{
@@ -19,7 +21,7 @@ static StaticRegistryInitializer<BackendRegistry> 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<LayerSupportRegistry> 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 <backendsCommon/BackendRegistry.hpp>
+#include <boost/cast.hpp>
+
namespace armnn
{
@@ -19,7 +21,7 @@ static StaticRegistryInitializer<BackendRegistry> 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<LayerSupportRegistry> 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
-