From 6b779f0e437127bfa71a529e9b848b5e41683ab8 Mon Sep 17 00:00:00 2001 From: David Beck Date: Tue, 9 Oct 2018 17:20:21 +0100 Subject: IVGCVSW-1989 : implement backend creation and registry for Ref,Cl and Neon !armnn:152557 Change-Id: Ic6b99cddee1597c85de76034d9332fe1bf3aceb1 --- src/backends/IBackendInternal.hpp | 4 ++-- src/backends/cl/ClBackend.cpp | 22 ++++++++++++++++++++-- src/backends/cl/ClBackend.hpp | 8 +++----- src/backends/neon/NeonBackend.cpp | 23 +++++++++++++++++++++-- src/backends/neon/NeonBackend.hpp | 8 +++----- src/backends/reference/RefBackend.cpp | 22 ++++++++++++++++++++-- src/backends/reference/RefBackend.hpp | 8 +++----- 7 files changed, 72 insertions(+), 23 deletions(-) diff --git a/src/backends/IBackendInternal.hpp b/src/backends/IBackendInternal.hpp index 1ccf88ece6..a441abd79f 100644 --- a/src/backends/IBackendInternal.hpp +++ b/src/backends/IBackendInternal.hpp @@ -13,8 +13,8 @@ namespace armnn class IBackendInternal : public IBackend { protected: - IBackendInternal() {} - virtual ~IBackendInternal() {} + IBackendInternal() = default; + ~IBackendInternal() override = default; public: virtual std::unique_ptr CreateWorkloadFactory() const = 0; diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 5de9d31234..d185c15b72 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -4,11 +4,25 @@ // #include "ClBackend.hpp" +#include +#include namespace armnn { -const std::string ClBackend::s_Id = "arm_compute_cl"; +namespace +{ +static const std::string s_Id = "GpuAcc"; + +static BackendRegistry::Helper g_RegisterHelper{ + s_Id, + []() + { + return IBackendUniquePtr(new ClBackend, &ClBackend::Destroy); + } +}; + +} const std::string& ClBackend::GetId() const { @@ -22,8 +36,12 @@ const ILayerSupport& ClBackend::GetLayerSupport() const std::unique_ptr ClBackend::CreateWorkloadFactory() const { - // TODO implement return nullptr; } +void ClBackend::Destroy(IBackend* backend) +{ + delete boost::polymorphic_downcast(backend); +} + } // namespace armnn \ No newline at end of file diff --git a/src/backends/cl/ClBackend.hpp b/src/backends/cl/ClBackend.hpp index 7e67f5e9ad..c43b6a6ce0 100644 --- a/src/backends/cl/ClBackend.hpp +++ b/src/backends/cl/ClBackend.hpp @@ -4,8 +4,7 @@ // #pragma once -#include "backends/IBackendInternal.hpp" - +#include #include "ClLayerSupport.hpp" namespace armnn @@ -23,10 +22,9 @@ public: std::unique_ptr CreateWorkloadFactory() const override; -private: - static const std::string s_Id; + static void Destroy(IBackend* backend); - // TODO initialize +private: ClLayerSupport m_LayerSupport; }; diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 1137145aa2..b4f1897704 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -4,11 +4,26 @@ // #include "NeonBackend.hpp" +#include +#include namespace armnn { -const std::string NeonBackend::s_Id = "arm_compute_neon"; +namespace +{ + +static const std::string s_Id = "CpuAcc"; + +static BackendRegistry::Helper g_RegisterHelper{ + s_Id, + []() + { + return IBackendUniquePtr(new NeonBackend, &NeonBackend::Destroy); + } +}; + +} const std::string& NeonBackend::GetId() const { @@ -22,8 +37,12 @@ const ILayerSupport& NeonBackend::GetLayerSupport() const std::unique_ptr NeonBackend::CreateWorkloadFactory() const { - // TODO implement return nullptr; } +void NeonBackend::Destroy(IBackend* backend) +{ + delete boost::polymorphic_downcast(backend); +} + } // namespace armnn \ No newline at end of file diff --git a/src/backends/neon/NeonBackend.hpp b/src/backends/neon/NeonBackend.hpp index 86fccf0e51..5d4bd5dfcc 100644 --- a/src/backends/neon/NeonBackend.hpp +++ b/src/backends/neon/NeonBackend.hpp @@ -4,8 +4,7 @@ // #pragma once -#include "backends/IBackendInternal.hpp" - +#include #include "NeonLayerSupport.hpp" namespace armnn @@ -23,10 +22,9 @@ public: std::unique_ptr CreateWorkloadFactory() const override; -private: - static const std::string s_Id; + static void Destroy(IBackend* backend); - // TODO initialize +private: NeonLayerSupport m_LayerSupport; }; diff --git a/src/backends/reference/RefBackend.cpp b/src/backends/reference/RefBackend.cpp index 1799abfc33..b671e8bca8 100644 --- a/src/backends/reference/RefBackend.cpp +++ b/src/backends/reference/RefBackend.cpp @@ -4,11 +4,25 @@ // #include "RefBackend.hpp" +#include +#include namespace armnn { -const std::string RefBackend::s_Id = "arm_reference"; +namespace +{ +const std::string s_Id = "CpuRef"; + +static BackendRegistry::Helper s_RegisterHelper{ + s_Id, + []() + { + return IBackendUniquePtr(new RefBackend, &RefBackend::Destroy); + } +}; + +} const std::string& RefBackend::GetId() const { @@ -22,8 +36,12 @@ const ILayerSupport& RefBackend::GetLayerSupport() const std::unique_ptr RefBackend::CreateWorkloadFactory() const { - // TODO implement return nullptr; } +void RefBackend::Destroy(IBackend* backend) +{ + delete boost::polymorphic_downcast(backend); +} + } // namespace armnn \ No newline at end of file diff --git a/src/backends/reference/RefBackend.hpp b/src/backends/reference/RefBackend.hpp index c3797158a6..e4a11f10c9 100644 --- a/src/backends/reference/RefBackend.hpp +++ b/src/backends/reference/RefBackend.hpp @@ -4,8 +4,7 @@ // #pragma once -#include "backends/IBackendInternal.hpp" - +#include #include "RefLayerSupport.hpp" namespace armnn @@ -23,10 +22,9 @@ public: std::unique_ptr CreateWorkloadFactory() const override; -private: - static const std::string s_Id; + static void Destroy(IBackend* backend); - // TODO initialize +private: RefLayerSupport m_LayerSupport; }; -- cgit v1.2.1