ArmNN
 23.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  {
62  }
63 
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 
81  {
82  armnn::OptimizationViews optimizationViews;
83 
84  optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
85 
86  return optimizationViews;
87  }
88 
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 
armnn::BackendId
Definition: BackendId.hpp:75
armnn::IMemoryManagerUniquePtr
std::unique_ptr< IMemoryManager > IMemoryManagerUniquePtr
Definition: IMemoryManager.hpp:24
sdb
Definition: SampleDynamicAdditionWorkload.cpp:11
armnn::IBackendInternal::RegisterTensorHandleFactories
virtual void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry &registry, MemorySourceFlags inputFlags, MemorySourceFlags outputFlags)
(Optional) Register TensorHandleFactories Either this method or CreateMemoryManager() and IWorkloadFa...
Definition: IBackendInternal.cpp:124
IBackendInternal.hpp
SampleMemoryManager.hpp
armnn::TensorHandleFactoryRegistry
Definition: TensorHandleFactoryRegistry.hpp:23
sdb::SampleDynamicBackendId
constexpr const char * SampleDynamicBackendId()
Definition: SampleDynamicBackend.cpp:18
armnn::IBackendInternal
Definition: IBackendInternal.hpp:77
armnn::BackendVersion::m_Minor
uint32_t m_Minor
Definition: IBackendInternal.hpp:37
armnn::IRuntime::CreationOptions
Definition: IRuntime.hpp:85
armnn::IBackendInternal::OptimizeSubgraphView
virtual OptimizationViews OptimizeSubgraphView(const SubgraphView &subgraph, const ModelOptions &modelOptions) const
Definition: IBackendInternal.cpp:113
SampleDynamicLayerSupport.hpp
SampleDynamicWorkloadFactory.hpp
sdb::SampleDynamicTensorHandleFactory::GetIdStatic
static const FactoryId & GetIdStatic()
Definition: SampleDynamicTensorHandleFactory.cpp:16
armnn::TensorHandleFactoryRegistry::RegisterFactory
void RegisterFactory(std::unique_ptr< ITensorHandleFactory > allocator)
Register a TensorHandleFactory and transfer ownership.
Definition: TensorHandleFactoryRegistry.cpp:12
OptimizationViews.hpp
armnn::OptimizationViews
Definition: OptimizationViews.hpp:18
armnn::OptimizationViews::AddUntouchedSubgraph
void AddUntouchedSubgraph(SubgraphView &&subgraph)
Definition: OptimizationViews.hpp:49
armnn::IBackendInternal::GetApiVersion
static constexpr BackendVersion GetApiVersion()
Returns the version of the Backend API.
Definition: IBackendInternal.hpp:167
armnn::SubgraphView
The SubgraphView class represents a subgraph of a Graph.
Definition: SubgraphView.hpp:31
armnn::IBackendInternal::IBackendProfilingContextPtr
std::shared_ptr< arm::pipe::IBackendProfilingContext > IBackendProfilingContextPtr
This is the bridge between backend and backend profiling we'll keep it in the backend namespace.
Definition: IBackendInternal.hpp:92
SampleDynamicTensorHandleFactory.hpp
GetVersion
void GetVersion(uint32_t *outMajor, uint32_t *outMinor)
Definition: SampleDynamicBackend.cpp:106
SampleDynamicBackend.hpp
armnn::BackendVersion::m_Major
uint32_t m_Major
Definition: IBackendInternal.hpp:36
armnn::ILayerSupportSharedPtr
std::shared_ptr< ILayerSupport > ILayerSupportSharedPtr
Definition: ILayerSupport.hpp:560
armnn::IBackendInternal::CreateWorkloadFactory
virtual IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr &memoryManager, const ModelOptions &modelOptions) const
Definition: IBackendInternal.cpp:23
armnn::BackendVersion
Definition: IBackendInternal.hpp:34
armnn::IBackendInternal::IBackendContextPtr
std::unique_ptr< IBackendContext > IBackendContextPtr
Definition: IBackendInternal.hpp:90
armnn::TensorHandleFactoryRegistry::RegisterMemoryManager
void RegisterMemoryManager(std::shared_ptr< IMemoryManager > memoryManger)
Register a memory manager with shared ownership.
Definition: TensorHandleFactoryRegistry.cpp:34
armnn::IBackendInternal::GetLayerSupport
virtual ILayerSupportSharedPtr GetLayerSupport(const ModelOptions &modelOptions) const
Definition: IBackendInternal.cpp:87
BackendFactory
void * BackendFactory()
Definition: SampleDynamicBackend.cpp:119
GetBackendId
const char * GetBackendId()
Definition: SampleDynamicBackend.cpp:101