• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "SampleDynamicBackend.hpp"
7 #include "SampleDynamicLayerSupport.hpp"
8 #include "SampleDynamicWorkloadFactory.hpp"
9 #include "SampleMemoryManager.hpp"
10 #include "SampleDynamicTensorHandleFactory.hpp"
11 
12 #include <armnn/backends/IBackendInternal.hpp>
13 #include <armnn/backends/OptimizationViews.hpp>
14 
15 namespace sdb // sample dynamic backend
16 {
17 
SampleDynamicBackendId()18 constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
19 
20 class SampleDynamicBackend : public armnn::IBackendInternal
21 {
22 public:
23     SampleDynamicBackend()  = default;
24     ~SampleDynamicBackend() = default;
25 
GetIdStatic()26     static const armnn::BackendId& GetIdStatic()
27     {
28         static const armnn::BackendId s_Id{SampleDynamicBackendId()};
29         return s_Id;
30     }
31 
GetId() const32     const armnn::BackendId& GetId() const override { return GetIdStatic(); }
33 
CreateMemoryManager() const34     IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override
35     {
36         return std::make_unique<SampleMemoryManager>();
37     }
38 
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager) const39     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
40         const IMemoryManagerSharedPtr& memoryManager) const override
41     {
42         return std::make_unique<SampleDynamicWorkloadFactory>(
43                 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
44     }
45 
CreateWorkloadFactory(class armnn::TensorHandleFactoryRegistry & tensorHandleFactoryRegistry) const46     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
47         class armnn::TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
48     {
49         auto memoryManager = std::make_shared<SampleMemoryManager>();
50 
51         tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
52         tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
53 
54         return std::make_unique<SampleDynamicWorkloadFactory>(
55                 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
56     }
57 
CreateBackendProfilingContext(const armnn::IRuntime::CreationOptions &,IBackendProfilingPtr &)58     IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
59         const armnn::IRuntime::CreationOptions&, IBackendProfilingPtr&) override
60     {
61         return IBackendProfilingContextPtr{};
62     }
63 
GetLayerSupport() const64     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
65     {
66         static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
67         return layerSupport;
68     }
69 
GetHandleFactoryPreferences() const70     std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
71     {
72         return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
73     }
74 
CreateBackendContext(const armnn::IRuntime::CreationOptions &) const75     IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
76     {
77         return IBackendContextPtr{};
78     }
79 
OptimizeSubgraphView(const armnn::SubgraphView & subgraph) const80     armnn::OptimizationViews OptimizeSubgraphView(const armnn::SubgraphView& subgraph) const override
81     {
82         armnn::OptimizationViews optimizationViews;
83 
84         optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
85 
86         return optimizationViews;
87     }
88 
RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry & registry)89     void RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry& registry) override
90     {
91         auto memoryManager = std::make_shared<SampleMemoryManager>();
92 
93         registry.RegisterMemoryManager(memoryManager);
94         registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
95     }
96 
97 };
98 
99 } // namespace sdb
100 
GetBackendId()101 const char* GetBackendId()
102 {
103     return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
104 }
105 
GetVersion(uint32_t * outMajor,uint32_t * outMinor)106 void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
107 {
108     if (!outMajor || !outMinor)
109     {
110         return;
111     }
112 
113     armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
114 
115     *outMajor = apiVersion.m_Major;
116     *outMinor = apiVersion.m_Minor;
117 }
118 
BackendFactory()119 void* BackendFactory()
120 {
121     return new sdb::SampleDynamicBackend();
122 }
123 
124 
125