ArmNN
 21.02
SampleDynamicBackend.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
11 
14 
15 namespace sdb // sample dynamic backend
16 {
17 
18 constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
19 
20 class SampleDynamicBackend : public armnn::IBackendInternal
21 {
22 public:
23  SampleDynamicBackend() = default;
24  ~SampleDynamicBackend() = default;
25 
26  static const armnn::BackendId& GetIdStatic()
27  {
28  static const armnn::BackendId s_Id{SampleDynamicBackendId()};
29  return s_Id;
30  }
31 
32  const armnn::BackendId& GetId() const override { return GetIdStatic(); }
33 
34  IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override
35  {
36  return std::make_unique<SampleMemoryManager>();
37  }
38 
39  IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
40  const IMemoryManagerSharedPtr& memoryManager) const override
41  {
42  return std::make_unique<SampleDynamicWorkloadFactory>(
43  armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
44  }
45 
46  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 
58  IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
59  const armnn::IRuntime::CreationOptions&, IBackendProfilingPtr&) override
60  {
61  return IBackendProfilingContextPtr{};
62  }
63 
64  IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
65  {
66  static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
67  return layerSupport;
68  }
69 
70  std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
71  {
72  return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
73  }
74 
75  IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
76  {
77  return IBackendContextPtr{};
78  }
79 
80  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 
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 
101 const char* GetBackendId()
102 {
103  return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
104 }
105 
106 void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
107 {
108  if (!outMajor || !outMinor)
109  {
110  return;
111  }
112 
114 
115  *outMajor = apiVersion.m_Major;
116  *outMinor = apiVersion.m_Minor;
117 }
118 
120 {
121  return new sdb::SampleDynamicBackend();
122 }
123 
124 
void RegisterMemoryManager(std::shared_ptr< IMemoryManager > memoryManger)
Register a memory manager with shared ownership.
void RegisterFactory(std::unique_ptr< ITensorHandleFactory > allocator)
Register a TensorHandleFactory and transfer ownership.
std::shared_ptr< ILayerSupport > ILayerSupportSharedPtr
The SubgraphView class represents a subgraph of a Graph.
static constexpr BackendVersion GetApiVersion()
Returns the version of the Backend API.
constexpr const char * SampleDynamicBackendId()
void AddUntouchedSubgraph(SubgraphView &&subgraph)
void GetVersion(uint32_t *outMajor, uint32_t *outMinor)
void * BackendFactory()
const char * GetBackendId()
std::unique_ptr< IMemoryManager > IMemoryManagerUniquePtr