blob: 4f048d093777ac3d670e2865cf4452e66db4c832 [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>
Colm Donelan40847fc2023-04-06 11:40:19 +010014#include <armnn/utility/PolymorphicDowncast.hpp>
15#include <backendsCommon/TensorHandleFactoryRegistry.hpp>
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000016
Jan Eilersc84e45d2020-08-19 14:14:36 +010017namespace sdb // sample dynamic backend
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000018{
19
20constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
21
Jan Eilersc84e45d2020-08-19 14:14:36 +010022class SampleDynamicBackend : public armnn::IBackendInternal
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000023{
24public:
25 SampleDynamicBackend() = default;
26 ~SampleDynamicBackend() = default;
27
Jan Eilersc84e45d2020-08-19 14:14:36 +010028 static const armnn::BackendId& GetIdStatic()
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000029 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010030 static const armnn::BackendId s_Id{SampleDynamicBackendId()};
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000031 return s_Id;
32 }
33
Jan Eilersc84e45d2020-08-19 14:14:36 +010034 const armnn::BackendId& GetId() const override { return GetIdStatic(); }
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000035
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 {
Teresa Charline8816722020-08-05 17:43:54 +010044 return std::make_unique<SampleDynamicWorkloadFactory>(
Jan Eilersc84e45d2020-08-19 14:14:36 +010045 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000046 }
47
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000048 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
Jan Eilersc84e45d2020-08-19 14:14:36 +010049 class armnn::TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000050 {
Narumol Prangnawarat0739fee2020-08-11 11:24:25 +010051 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>(
Jan Eilersc84e45d2020-08-19 14:14:36 +010057 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000058 }
59
60 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Jan Eilersc84e45d2020-08-19 14:14:36 +010061 const armnn::IRuntime::CreationOptions&, IBackendProfilingPtr&) override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000062 {
63 return IBackendProfilingContextPtr{};
64 }
65
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000066 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
67 {
68 static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
69 return layerSupport;
70 }
71
Jan Eilersc84e45d2020-08-19 14:14:36 +010072 std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000073 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010074 return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
Narumol Prangnawarat9c308962020-02-04 14:45:41 +000075 }
76
Jan Eilersc84e45d2020-08-19 14:14:36 +010077 IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000078 {
79 return IBackendContextPtr{};
80 }
81
Jan Eilersc84e45d2020-08-19 14:14:36 +010082 armnn::OptimizationViews OptimizeSubgraphView(const armnn::SubgraphView& subgraph) const override
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000083 {
Jan Eilersc84e45d2020-08-19 14:14:36 +010084 armnn::OptimizationViews optimizationViews;
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000085
Jan Eilersc84e45d2020-08-19 14:14:36 +010086 optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000087
88 return optimizationViews;
89 }
Teresa Charline8816722020-08-05 17:43:54 +010090
Jan Eilersc84e45d2020-08-19 14:14:36 +010091 void RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry& registry) override
Teresa Charline8816722020-08-05 17:43:54 +010092 {
93 auto memoryManager = std::make_shared<SampleMemoryManager>();
94
95 registry.RegisterMemoryManager(memoryManager);
96 registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
97 }
98
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000099};
100
Jan Eilersc84e45d2020-08-19 14:14:36 +0100101} // namespace sdb
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000102
103const char* GetBackendId()
104{
Jan Eilersc84e45d2020-08-19 14:14:36 +0100105 return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000106}
107
108void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
109{
110 if (!outMajor || !outMinor)
111 {
112 return;
113 }
114
115 armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
116
117 *outMajor = apiVersion.m_Major;
118 *outMinor = apiVersion.m_Minor;
119}
120
121void* BackendFactory()
122{
Jan Eilersc84e45d2020-08-19 14:14:36 +0100123 return new sdb::SampleDynamicBackend();
Narumol Prangnawarat867eba52020-02-03 12:29:56 +0000124}
125
126