ArmNN
 25.11
Loading...
Searching...
No Matches
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
16
17namespace sdb // sample dynamic backend
18{
19
20constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
21
22class SampleDynamicBackend : public armnn::IBackendInternal
23{
24public:
25 SampleDynamicBackend() = default;
26 ~SampleDynamicBackend() = default;
27
28 static const armnn::BackendId& GetIdStatic()
29 {
30 static const armnn::BackendId s_Id{SampleDynamicBackendId()};
31 return s_Id;
32 }
33
34 const armnn::BackendId& GetId() const override { return GetIdStatic(); }
35
36 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override
37 {
38 return std::make_unique<SampleMemoryManager>();
39 }
40
41 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
42 const IMemoryManagerSharedPtr& memoryManager) const override
43 {
44 return std::make_unique<SampleDynamicWorkloadFactory>(
46 }
47
48 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
49 class armnn::TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
50 {
51 auto memoryManager = std::make_shared<SampleMemoryManager>();
52
53 tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
54 tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
55
56 return std::make_unique<SampleDynamicWorkloadFactory>(
58 }
59
60 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
61 const armnn::IRuntime::CreationOptions&, IBackendProfilingPtr&) override
62 {
64 }
65
66 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
67 {
68 static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
69 return layerSupport;
70 }
71
72 std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
73 {
74 return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
75 }
76
77 IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
78 {
79 return IBackendContextPtr{};
80 }
81
82 armnn::OptimizationViews OptimizeSubgraphView(const armnn::SubgraphView& subgraph) const override
83 {
84 armnn::OptimizationViews optimizationViews;
85
86 optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
87
88 return optimizationViews;
89 }
90
91 void RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry& registry) override
92 {
93 auto memoryManager = std::make_shared<SampleMemoryManager>();
94
95 registry.RegisterMemoryManager(memoryManager);
96 registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
97 }
98
99};
100
101} // namespace sdb
102
103const char* GetBackendId()
104{
105 return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
106}
107
108void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
109{
110 if (!outMajor || !outMinor)
111 {
112 return;
113 }
114
116
117 *outMajor = apiVersion.m_Major;
118 *outMinor = apiVersion.m_Minor;
119}
120
122{
123 return new sdb::SampleDynamicBackend();
124}
125
126
void GetVersion(uint32_t *outMajor, uint32_t *outMinor)
void * BackendFactory()
const char * GetBackendId()
virtual const BackendId & GetId() const =0
virtual IMemoryManagerUniquePtr CreateMemoryManager() const
std::shared_ptr< ILayerSupport > ILayerSupportSharedPtr
std::unique_ptr< arm::pipe::IBackendProfiling > IBackendProfilingPtr
std::shared_ptr< IMemoryManager > IMemoryManagerSharedPtr
static constexpr BackendVersion GetApiVersion()
Returns the version of the Backend API.
virtual std::vector< ITensorHandleFactory::FactoryId > GetHandleFactoryPreferences() const
(Optional) Returns a vector of supported TensorHandleFactory ids in preference order.
virtual ILayerSupportSharedPtr GetLayerSupport() const =0
std::unique_ptr< IBackendContext > IBackendContextPtr
std::shared_ptr< arm::pipe::IBackendProfilingContext > IBackendProfilingContextPtr
This is the bridge between backend and backend profiling we'll keep it in the backend namespace.
void AddUntouchedSubgraph(SubgraphView &&subgraph)
void RegisterFactory(std::unique_ptr< ITensorHandleFactory > allocator)
Register a TensorHandleFactory and transfer ownership.
void RegisterMemoryManager(std::shared_ptr< IMemoryManager > memoryManger)
Register a memory manager with shared ownership.
auto PolymorphicPointerDowncast(const SourceType &value)
Polymorphic downcast for shared pointers and build in pointers.
constexpr const char * SampleDynamicBackendId()