diff options
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/BackendRegistry.hpp | 3 | ||||
-rw-r--r-- | src/backends/IBackendInternal.hpp | 14 | ||||
-rw-r--r-- | src/backends/WorkloadFactory.cpp | 54 | ||||
-rw-r--r-- | src/backends/WorkloadFactory.hpp | 6 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.cpp | 9 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.hpp | 4 | ||||
-rw-r--r-- | src/backends/cl/ClWorkloadFactory.cpp | 2 | ||||
-rw-r--r-- | src/backends/cl/ClWorkloadFactory.hpp | 6 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 9 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.hpp | 4 | ||||
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.cpp | 3 | ||||
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.hpp | 6 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.cpp | 9 | ||||
-rw-r--r-- | src/backends/reference/RefBackend.hpp | 4 | ||||
-rw-r--r-- | src/backends/reference/RefWorkloadFactory.cpp | 3 | ||||
-rw-r--r-- | src/backends/reference/RefWorkloadFactory.hpp | 6 | ||||
-rw-r--r-- | src/backends/test/BackendRegistryTests.cpp | 4 |
17 files changed, 69 insertions, 77 deletions
diff --git a/src/backends/BackendRegistry.hpp b/src/backends/BackendRegistry.hpp index 23cb37da99..4465e95174 100644 --- a/src/backends/BackendRegistry.hpp +++ b/src/backends/BackendRegistry.hpp @@ -6,11 +6,12 @@ #include <armnn/Types.hpp> #include "RegistryCommon.hpp" +#include "IBackendInternal.hpp" namespace armnn { -using BackendRegistry = RegistryCommon<IBackend, IBackendUniquePtr>; +using BackendRegistry = RegistryCommon<IBackendInternal, IBackendInternalUniquePtr>; BackendRegistry& BackendRegistryInstance(); diff --git a/src/backends/IBackendInternal.hpp b/src/backends/IBackendInternal.hpp index a441abd79f..7e44dbd676 100644 --- a/src/backends/IBackendInternal.hpp +++ b/src/backends/IBackendInternal.hpp @@ -5,19 +5,27 @@ #pragma once #include <armnn/Types.hpp> -#include <backends/WorkloadFactory.hpp> namespace armnn { +class IWorkloadFactory; class IBackendInternal : public IBackend { protected: + // Creation must be done through a specific + // backend interface. IBackendInternal() = default; - ~IBackendInternal() override = default; public: - virtual std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const = 0; + // Allow backends created by the factory function + // to be destroyed through IBackendInternal. + ~IBackendInternal() override = default; + + using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>; + virtual IWorkloadFactoryPtr CreateWorkloadFactory() const = 0; }; +using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>; + } // namespace armnn diff --git a/src/backends/WorkloadFactory.cpp b/src/backends/WorkloadFactory.cpp index e7dec49db4..fea383f030 100644 --- a/src/backends/WorkloadFactory.cpp +++ b/src/backends/WorkloadFactory.cpp @@ -5,10 +5,6 @@ #include <backends/WorkloadFactory.hpp> #include <backends/LayerSupportRegistry.hpp> -#include <backends/reference/RefWorkloadFactory.hpp> -#include <backends/neon/NeonWorkloadFactory.hpp> -#include <backends/cl/ClWorkloadFactory.hpp> - #include <armnn/Types.hpp> #include <armnn/LayerSupport.hpp> #include <Layer.hpp> @@ -24,40 +20,42 @@ namespace armnn namespace { - const TensorInfo OverrideDataType(const TensorInfo& info, boost::optional<DataType> type) + +const TensorInfo OverrideDataType(const TensorInfo& info, Optional<DataType> type) +{ + if (!type) { - if (type == boost::none) - { - return info; - } + return info; + } + + return TensorInfo(info.GetShape(), type.value(), info.GetQuantizationScale(), info.GetQuantizationOffset()); +} - return TensorInfo(info.GetShape(), type.get(), info.GetQuantizationScale(), info.GetQuantizationOffset()); +Optional<DataType> GetBiasTypeFromWeightsType(Optional<DataType> weightsType) +{ + if (!weightsType) + { + return weightsType; } - boost::optional<DataType> GetBiasTypeFromWeightsType(boost::optional<DataType> weightsType) + switch(weightsType.value()) { - if (weightsType == boost::none) - { + case DataType::Float16: + case DataType::Float32: return weightsType; - } - - switch(weightsType.get()) - { - case DataType::Float16: - case DataType::Float32: - return weightsType; - case DataType::QuantisedAsymm8: - return DataType::Signed32; - default: - BOOST_ASSERT_MSG(false, "GetBiasTypeFromWeightsType(): Unsupported data type."); - } - return boost::none; + case DataType::QuantisedAsymm8: + return DataType::Signed32; + default: + BOOST_ASSERT_MSG(false, "GetBiasTypeFromWeightsType(): Unsupported data type."); } + return EmptyOptional(); } +} // anonymous namespace + bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, const IConnectableLayer& connectableLayer, - boost::optional<DataType> dataType, + Optional<DataType> dataType, std::string& outReasonIfUnsupported) { Optional<std::string&> reason = outReasonIfUnsupported; @@ -589,7 +587,7 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, } bool IWorkloadFactory::IsLayerSupported(const IConnectableLayer& connectableLayer, - boost::optional<DataType> dataType, + Optional<DataType> dataType, std::string& outReasonIfUnsupported) { auto layer = boost::polymorphic_downcast<const Layer*>(&connectableLayer); diff --git a/src/backends/WorkloadFactory.hpp b/src/backends/WorkloadFactory.hpp index 41d6741ae7..2d482e0911 100644 --- a/src/backends/WorkloadFactory.hpp +++ b/src/backends/WorkloadFactory.hpp @@ -6,9 +6,9 @@ #include <memory> #include <armnn/TensorFwd.hpp> +#include <armnn/Optional.hpp> #include <backends/OutputHandler.hpp> #include <backends/Workload.hpp> -#include <boost/optional.hpp> namespace armnn { @@ -34,11 +34,11 @@ public: static bool IsLayerSupported(const BackendId& backendId, const IConnectableLayer& layer, - boost::optional<DataType> dataType, + Optional<DataType> dataType, std::string& outReasonIfUnsupported); static bool IsLayerSupported(const IConnectableLayer& layer, - boost::optional<DataType> dataType, + Optional<DataType> dataType, std::string& outReasonIfUnsupported); virtual bool SupportsSubTensors() const = 0; diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 1bab96b49a..d6a3a89391 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -23,7 +23,7 @@ static StaticRegistryInitializer<BackendRegistry> g_RegisterHelper ClBackend::GetIdStatic(), []() { - return IBackendUniquePtr(new ClBackend, &ClBackend::Destroy); + return IBackendInternalUniquePtr(new ClBackend); } }; @@ -35,14 +35,9 @@ const BackendId& ClBackend::GetIdStatic() return s_Id; } -std::unique_ptr<IWorkloadFactory> ClBackend::CreateWorkloadFactory() const +IBackendInternal::IWorkloadFactoryPtr ClBackend::CreateWorkloadFactory() const { return std::make_unique<ClWorkloadFactory>(); } -void ClBackend::Destroy(IBackend* backend) -{ - delete boost::polymorphic_downcast<ClBackend*>(backend); -} - } // namespace armnn
\ No newline at end of file diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp index 49a7a466c4..4eae6c92ec 100644 --- a/src/backends/cl/ClBackend.hpp +++ b/src/backends/cl/ClBackend.hpp @@ -18,9 +18,7 @@ public: static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } - std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override; - - static void Destroy(IBackend* backend); + IWorkloadFactoryPtr CreateWorkloadFactory() const override; }; } // namespace armnn
\ No newline at end of file diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index e1d8314d82..c697d90950 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -35,7 +35,7 @@ namespace armnn { bool ClWorkloadFactory::IsLayerSupported(const Layer& layer, - boost::optional<DataType> dataType, + Optional<DataType> dataType, std::string& outReasonIfUnsupported) { return IWorkloadFactory::IsLayerSupported(Compute::GpuAcc, layer, dataType, outReasonIfUnsupported); diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp index 66de3a50f1..1441b71e61 100644 --- a/src/backends/cl/ClWorkloadFactory.hpp +++ b/src/backends/cl/ClWorkloadFactory.hpp @@ -5,12 +5,11 @@ #pragma once #include <armnn/IRuntime.hpp> +#include <armnn/Optional.hpp> #include <backends/OutputHandler.hpp> #include <backends/aclCommon/memory/BaseMemoryManager.hpp> -#include <boost/optional.hpp> - namespace armnn { @@ -22,7 +21,8 @@ public: virtual Compute GetCompute() const override { return Compute::GpuAcc; } - static bool IsLayerSupported(const Layer& layer, boost::optional<DataType> dataType, + static bool IsLayerSupported(const Layer& layer, + Optional<DataType> dataType, std::string& outReasonIfUnsupported); virtual bool SupportsSubTensors() const override { return true; } diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index b7102956df..e475f0232b 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -23,7 +23,7 @@ static StaticRegistryInitializer<BackendRegistry> g_RegisterHelper NeonBackend::GetIdStatic(), []() { - return IBackendUniquePtr(new NeonBackend, &NeonBackend::Destroy); + return IBackendInternalUniquePtr(new NeonBackend); } }; @@ -35,14 +35,9 @@ const BackendId& NeonBackend::GetIdStatic() return s_Id; } -std::unique_ptr<IWorkloadFactory> NeonBackend::CreateWorkloadFactory() const +IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory() const { return std::make_unique<NeonWorkloadFactory>(); } -void NeonBackend::Destroy(IBackend* backend) -{ - delete boost::polymorphic_downcast<NeonBackend*>(backend); -} - } // namespace armnn
\ No newline at end of file diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp index 6280610bda..e1287c784c 100644 --- a/src/backends/neon/NeonBackend.hpp +++ b/src/backends/neon/NeonBackend.hpp @@ -18,9 +18,7 @@ public: static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } - std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override; - - static void Destroy(IBackend* backend); + IWorkloadFactoryPtr CreateWorkloadFactory() const override; }; } // namespace armnn
\ No newline at end of file diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 0e069a2f64..f0a9e76de1 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -25,7 +25,8 @@ namespace armnn { -bool NeonWorkloadFactory::IsLayerSupported(const Layer& layer, boost::optional<DataType> dataType, +bool NeonWorkloadFactory::IsLayerSupported(const Layer& layer, + Optional<DataType> dataType, std::string& outReasonIfUnsupported) { return IWorkloadFactory::IsLayerSupported(Compute::CpuAcc, layer, dataType, outReasonIfUnsupported); diff --git a/src/backends/neon/NeonWorkloadFactory.hpp b/src/backends/neon/NeonWorkloadFactory.hpp index 64951612c1..d1dd2c85fe 100644 --- a/src/backends/neon/NeonWorkloadFactory.hpp +++ b/src/backends/neon/NeonWorkloadFactory.hpp @@ -4,11 +4,12 @@ // #pragma once +#include <armnn/Optional.hpp> #include <backends/OutputHandler.hpp> #include <backends/aclCommon/memory/BaseMemoryManager.hpp> #include <boost/core/ignore_unused.hpp> -#include <boost/optional.hpp> + namespace armnn { @@ -21,7 +22,8 @@ public: virtual Compute GetCompute() const override { return Compute::CpuAcc; } - static bool IsLayerSupported(const Layer& layer, boost::optional<DataType> dataType, + static bool IsLayerSupported(const Layer& layer, + Optional<DataType> dataType, std::string& outReasonIfUnsupported); virtual bool SupportsSubTensors() const override { return true; } diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp index 9afb42d59f..34348fa120 100644 --- a/src/backends/reference/RefBackend.cpp +++ b/src/backends/reference/RefBackend.cpp @@ -23,7 +23,7 @@ static StaticRegistryInitializer<BackendRegistry> g_RegisterHelper RefBackend::GetIdStatic(), []() { - return IBackendUniquePtr(new RefBackend, &RefBackend::Destroy); + return IBackendInternalUniquePtr(new RefBackend); } }; @@ -35,14 +35,9 @@ const BackendId& RefBackend::GetIdStatic() return s_Id; } -std::unique_ptr<IWorkloadFactory> RefBackend::CreateWorkloadFactory() const +IBackendInternal::IWorkloadFactoryPtr RefBackend::CreateWorkloadFactory() const { return std::make_unique<RefWorkloadFactory>(); } -void RefBackend::Destroy(IBackend* backend) -{ - delete boost::polymorphic_downcast<RefBackend*>(backend); -} - } // namespace armnn
\ No newline at end of file diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp index 0cd3cf4dce..7162c9bf40 100644 --- a/src/backends/reference/RefBackend.hpp +++ b/src/backends/reference/RefBackend.hpp @@ -18,9 +18,7 @@ public: static const BackendId& GetIdStatic(); const BackendId& GetId() const override { return GetIdStatic(); } - std::unique_ptr<IWorkloadFactory> CreateWorkloadFactory() const override; - - static void Destroy(IBackend* backend); + IWorkloadFactoryPtr CreateWorkloadFactory() const override; }; } // namespace armnn
\ No newline at end of file diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index 048f6cdcc4..783e5fba2e 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -25,7 +25,8 @@ RefWorkloadFactory::RefWorkloadFactory() { } -bool RefWorkloadFactory::IsLayerSupported(const Layer& layer, boost::optional<DataType> dataType, +bool RefWorkloadFactory::IsLayerSupported(const Layer& layer, + Optional<DataType> dataType, std::string& outReasonIfUnsupported) { return IWorkloadFactory::IsLayerSupported(Compute::CpuRef, layer, dataType, outReasonIfUnsupported); diff --git a/src/backends/reference/RefWorkloadFactory.hpp b/src/backends/reference/RefWorkloadFactory.hpp index 1a9227a978..ef2e1abfaa 100644 --- a/src/backends/reference/RefWorkloadFactory.hpp +++ b/src/backends/reference/RefWorkloadFactory.hpp @@ -4,11 +4,12 @@ // #pragma once +#include <armnn/Optional.hpp> #include <backends/WorkloadFactory.hpp> #include <backends/OutputHandler.hpp> #include <boost/core/ignore_unused.hpp> -#include <boost/optional.hpp> + namespace armnn { @@ -34,7 +35,8 @@ public: virtual Compute GetCompute() const override { return Compute::CpuRef; } - static bool IsLayerSupported(const Layer& layer, boost::optional<DataType> dataType, + static bool IsLayerSupported(const Layer& layer, + Optional<DataType> dataType, std::string& outReasonIfUnsupported); virtual bool SupportsSubTensors() const override { return false; } diff --git a/src/backends/test/BackendRegistryTests.cpp b/src/backends/test/BackendRegistryTests.cpp index f6f749936f..34a2706466 100644 --- a/src/backends/test/BackendRegistryTests.cpp +++ b/src/backends/test/BackendRegistryTests.cpp @@ -55,7 +55,7 @@ BOOST_AUTO_TEST_CASE(TestRegistryHelper) [&called]() { called = true; - return armnn::IBackendUniquePtr(nullptr, nullptr); + return armnn::IBackendInternalUniquePtr(nullptr); } ); @@ -82,7 +82,7 @@ BOOST_AUTO_TEST_CASE(TestDirectCallToRegistry) [&called]() { called = true; - return armnn::IBackendUniquePtr(nullptr, nullptr); + return armnn::IBackendInternalUniquePtr(nullptr); } ); |