blob: 2ef8faa6278973090b081aaf465f74efb718ec60 [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(
47 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const override
48 {
49 return IWorkloadFactoryPtr{};
50 }
51
52 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Narumol Prangnawarat1398b752020-02-10 10:05:50 +000053 const IRuntime::CreationOptions&, IBackendProfilingPtr&) override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000054 {
55 return IBackendProfilingContextPtr{};
56 }
57
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000058 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
59 {
60 static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
61 return layerSupport;
62 }
63
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000064 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
65 {
Teresa Charline8816722020-08-05 17:43:54 +010066 return std::vector<ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000067 }
68
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000069 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override
70 {
71 return IBackendContextPtr{};
72 }
73
74 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const override
75 {
76 OptimizationViews optimizationViews;
77
78 optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph));
79
80 return optimizationViews;
81 }
Teresa Charline8816722020-08-05 17:43:54 +010082
83 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) const override
84 {
85 auto memoryManager = std::make_shared<SampleMemoryManager>();
86
87 registry.RegisterMemoryManager(memoryManager);
88 registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
89 }
90
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000091};
92
93} // namespace armnn
94
95const char* GetBackendId()
96{
97 return armnn::SampleDynamicBackend::GetIdStatic().Get().c_str();
98}
99
100void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
101{
102 if (!outMajor || !outMinor)
103 {
104 return;
105 }
106
107 armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
108
109 *outMajor = apiVersion.m_Major;
110 *outMinor = apiVersion.m_Minor;
111}
112
113void* BackendFactory()
114{
115 return new armnn::SampleDynamicBackend();
116}
117
118