blob: ce4d2dfc9962261fb0638d2c8997acc5276a3913 [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
Jan Eilersc84e45d2020-08-19 14:14:36 +010015namespace sdb // sample dynamic backend
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000016{
17
18constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
19
Jan Eilersc84e45d2020-08-19 14:14:36 +010020class SampleDynamicBackend : public armnn::IBackendInternal
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000021{
22public:
23 SampleDynamicBackend() = default;
24 ~SampleDynamicBackend() = default;
25
Jan Eilersc84e45d2020-08-19 14:14:36 +010026 static const armnn::BackendId& GetIdStatic()
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000027 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010028 static const armnn::BackendId s_Id{SampleDynamicBackendId()};
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000029 return s_Id;
30 }
31
Jan Eilersc84e45d2020-08-19 14:14:36 +010032 const armnn::BackendId& GetId() const override { return GetIdStatic(); }
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000033
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>(
Jan Eilersc84e45d2020-08-19 14:14:36 +010043 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000044 }
45
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000046 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
Jan Eilersc84e45d2020-08-19 14:14:36 +010047 class armnn::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>(
Jan Eilersc84e45d2020-08-19 14:14:36 +010055 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000056 }
57
58 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Jan Eilersc84e45d2020-08-19 14:14:36 +010059 const armnn::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
Jan Eilersc84e45d2020-08-19 14:14:36 +010070 std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000071 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010072 return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000073 }
74
Jan Eilersc84e45d2020-08-19 14:14:36 +010075 IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000076 {
77 return IBackendContextPtr{};
78 }
79
Jan Eilersc84e45d2020-08-19 14:14:36 +010080 armnn::OptimizationViews OptimizeSubgraphView(const armnn::SubgraphView& subgraph) const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000081 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010082 armnn::OptimizationViews optimizationViews;
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000083
Jan Eilersc84e45d2020-08-19 14:14:36 +010084 optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000085
86 return optimizationViews;
87 }
Teresa Charline8816722020-08-05 17:43:54 +010088
Jan Eilersc84e45d2020-08-19 14:14:36 +010089 void RegisterTensorHandleFactories(class armnn::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
Jan Eilersc84e45d2020-08-19 14:14:36 +010099} // namespace sdb
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000100
101const char* GetBackendId()
102{
Jan Eilersc84e45d2020-08-19 14:14:36 +0100103 return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000104}
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{
Jan Eilersc84e45d2020-08-19 14:14:36 +0100121 return new sdb::SampleDynamicBackend();
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000122}
123
124