blob: 7a3475b8d45f1529f43b089276a65111ffa7526b [file] [log] [blame]
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00001//
Teresa Charline8816722020-08-05 17:43:54 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Narumol Prangnawarat867eba52020-02-03 12:29:56 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "SampleDynamicBackend.hpp"
7#include "SampleDynamicLayerSupport.hpp"
8#include "SampleDynamicWorkloadFactory.hpp"
9#include "SampleMemoryManager.hpp"
Teresa Charline8816722020-08-05 17:43:54 +010010#include "SampleDynamicTensorHandleFactory.hpp"
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000011
12#include <armnn/backends/IBackendInternal.hpp>
13#include <armnn/backends/OptimizationViews.hpp>
14
15namespace armnn
16{
17
18constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
19
20class SampleDynamicBackend : public IBackendInternal
21{
22public:
23 SampleDynamicBackend() = default;
24 ~SampleDynamicBackend() = default;
25
26 static const BackendId& GetIdStatic()
27 {
28 static const BackendId s_Id{SampleDynamicBackendId()};
29 return s_Id;
30 }
31
32 const 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 {
Teresa Charline8816722020-08-05 17:43:54 +010042 return std::make_unique<SampleDynamicWorkloadFactory>(
43 PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000044 }
45
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000046 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
Narumol Prangnawarat0739fee2020-08-11 11:24:25 +010047 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000048 {
Narumol Prangnawarat0739fee2020-08-11 11:24:25 +010049 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 PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000056 }
57
58 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Narumol Prangnawarat1398b752020-02-10 10:05:50 +000059 const IRuntime::CreationOptions&, IBackendProfilingPtr&) override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000060 {
61 return IBackendProfilingContextPtr{};
62 }
63
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000064 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
65 {
66 static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
67 return layerSupport;
68 }
69
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000070 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
71 {
Teresa Charline8816722020-08-05 17:43:54 +010072 return std::vector<ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000073 }
74
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000075 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override
76 {
77 return IBackendContextPtr{};
78 }
79
80 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const override
81 {
82 OptimizationViews optimizationViews;
83
84 optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph));
85
86 return optimizationViews;
87 }
Teresa Charline8816722020-08-05 17:43:54 +010088
Narumol Prangnawarat0739fee2020-08-11 11:24:25 +010089 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override
Teresa Charline8816722020-08-05 17:43:54 +010090 {
91 auto memoryManager = std::make_shared<SampleMemoryManager>();
92
93 registry.RegisterMemoryManager(memoryManager);
94 registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
95 }
96
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000097};
98
99} // namespace armnn
100
101const char* GetBackendId()
102{
103 return armnn::SampleDynamicBackend::GetIdStatic().Get().c_str();
104}
105
106void 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
119void* BackendFactory()
120{
121 return new armnn::SampleDynamicBackend();
122}
123
124