xref: /aosp_15_r20/external/armnn/src/dynamic/sample/SampleDynamicBackend.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #include "SampleDynamicBackend.hpp"
7*89c4ff92SAndroid Build Coastguard Worker #include "SampleDynamicLayerSupport.hpp"
8*89c4ff92SAndroid Build Coastguard Worker #include "SampleDynamicWorkloadFactory.hpp"
9*89c4ff92SAndroid Build Coastguard Worker #include "SampleMemoryManager.hpp"
10*89c4ff92SAndroid Build Coastguard Worker #include "SampleDynamicTensorHandleFactory.hpp"
11*89c4ff92SAndroid Build Coastguard Worker 
12*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/IBackendInternal.hpp>
13*89c4ff92SAndroid Build Coastguard Worker #include <armnn/backends/OptimizationViews.hpp>
14*89c4ff92SAndroid Build Coastguard Worker #include <armnn/utility/PolymorphicDowncast.hpp>
15*89c4ff92SAndroid Build Coastguard Worker #include <backendsCommon/TensorHandleFactoryRegistry.hpp>
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker namespace sdb // sample dynamic backend
18*89c4ff92SAndroid Build Coastguard Worker {
19*89c4ff92SAndroid Build Coastguard Worker 
SampleDynamicBackendId()20*89c4ff92SAndroid Build Coastguard Worker constexpr const char * SampleDynamicBackendId() { return "SampleDynamic"; }
21*89c4ff92SAndroid Build Coastguard Worker 
22*89c4ff92SAndroid Build Coastguard Worker class SampleDynamicBackend : public armnn::IBackendInternal
23*89c4ff92SAndroid Build Coastguard Worker {
24*89c4ff92SAndroid Build Coastguard Worker public:
25*89c4ff92SAndroid Build Coastguard Worker     SampleDynamicBackend()  = default;
26*89c4ff92SAndroid Build Coastguard Worker     ~SampleDynamicBackend() = default;
27*89c4ff92SAndroid Build Coastguard Worker 
GetIdStatic()28*89c4ff92SAndroid Build Coastguard Worker     static const armnn::BackendId& GetIdStatic()
29*89c4ff92SAndroid Build Coastguard Worker     {
30*89c4ff92SAndroid Build Coastguard Worker         static const armnn::BackendId s_Id{SampleDynamicBackendId()};
31*89c4ff92SAndroid Build Coastguard Worker         return s_Id;
32*89c4ff92SAndroid Build Coastguard Worker     }
33*89c4ff92SAndroid Build Coastguard Worker 
GetId() const34*89c4ff92SAndroid Build Coastguard Worker     const armnn::BackendId& GetId() const override { return GetIdStatic(); }
35*89c4ff92SAndroid Build Coastguard Worker 
CreateMemoryManager() const36*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override
37*89c4ff92SAndroid Build Coastguard Worker     {
38*89c4ff92SAndroid Build Coastguard Worker         return std::make_unique<SampleMemoryManager>();
39*89c4ff92SAndroid Build Coastguard Worker     }
40*89c4ff92SAndroid Build Coastguard Worker 
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager) const41*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
42*89c4ff92SAndroid Build Coastguard Worker         const IMemoryManagerSharedPtr& memoryManager) const override
43*89c4ff92SAndroid Build Coastguard Worker     {
44*89c4ff92SAndroid Build Coastguard Worker         return std::make_unique<SampleDynamicWorkloadFactory>(
45*89c4ff92SAndroid Build Coastguard Worker                 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
46*89c4ff92SAndroid Build Coastguard Worker     }
47*89c4ff92SAndroid Build Coastguard Worker 
CreateWorkloadFactory(class armnn::TensorHandleFactoryRegistry & tensorHandleFactoryRegistry) const48*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
49*89c4ff92SAndroid Build Coastguard Worker         class armnn::TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
50*89c4ff92SAndroid Build Coastguard Worker     {
51*89c4ff92SAndroid Build Coastguard Worker         auto memoryManager = std::make_shared<SampleMemoryManager>();
52*89c4ff92SAndroid Build Coastguard Worker 
53*89c4ff92SAndroid Build Coastguard Worker         tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
54*89c4ff92SAndroid Build Coastguard Worker         tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
55*89c4ff92SAndroid Build Coastguard Worker 
56*89c4ff92SAndroid Build Coastguard Worker         return std::make_unique<SampleDynamicWorkloadFactory>(
57*89c4ff92SAndroid Build Coastguard Worker                 armnn::PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
58*89c4ff92SAndroid Build Coastguard Worker     }
59*89c4ff92SAndroid Build Coastguard Worker 
CreateBackendProfilingContext(const armnn::IRuntime::CreationOptions &,IBackendProfilingPtr &)60*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
61*89c4ff92SAndroid Build Coastguard Worker         const armnn::IRuntime::CreationOptions&, IBackendProfilingPtr&) override
62*89c4ff92SAndroid Build Coastguard Worker     {
63*89c4ff92SAndroid Build Coastguard Worker         return IBackendProfilingContextPtr{};
64*89c4ff92SAndroid Build Coastguard Worker     }
65*89c4ff92SAndroid Build Coastguard Worker 
GetLayerSupport() const66*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override
67*89c4ff92SAndroid Build Coastguard Worker     {
68*89c4ff92SAndroid Build Coastguard Worker         static ILayerSupportSharedPtr layerSupport{new SampleDynamicLayerSupport};
69*89c4ff92SAndroid Build Coastguard Worker         return layerSupport;
70*89c4ff92SAndroid Build Coastguard Worker     }
71*89c4ff92SAndroid Build Coastguard Worker 
GetHandleFactoryPreferences() const72*89c4ff92SAndroid Build Coastguard Worker     std::vector<armnn::ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override
73*89c4ff92SAndroid Build Coastguard Worker     {
74*89c4ff92SAndroid Build Coastguard Worker         return std::vector<armnn::ITensorHandleFactory::FactoryId> { SampleDynamicTensorHandleFactory::GetIdStatic() };
75*89c4ff92SAndroid Build Coastguard Worker     }
76*89c4ff92SAndroid Build Coastguard Worker 
CreateBackendContext(const armnn::IRuntime::CreationOptions &) const77*89c4ff92SAndroid Build Coastguard Worker     IBackendInternal::IBackendContextPtr CreateBackendContext(const armnn::IRuntime::CreationOptions&) const override
78*89c4ff92SAndroid Build Coastguard Worker     {
79*89c4ff92SAndroid Build Coastguard Worker         return IBackendContextPtr{};
80*89c4ff92SAndroid Build Coastguard Worker     }
81*89c4ff92SAndroid Build Coastguard Worker 
OptimizeSubgraphView(const armnn::SubgraphView & subgraph) const82*89c4ff92SAndroid Build Coastguard Worker     armnn::OptimizationViews OptimizeSubgraphView(const armnn::SubgraphView& subgraph) const override
83*89c4ff92SAndroid Build Coastguard Worker     {
84*89c4ff92SAndroid Build Coastguard Worker         armnn::OptimizationViews optimizationViews;
85*89c4ff92SAndroid Build Coastguard Worker 
86*89c4ff92SAndroid Build Coastguard Worker         optimizationViews.AddUntouchedSubgraph(armnn::SubgraphView(subgraph));
87*89c4ff92SAndroid Build Coastguard Worker 
88*89c4ff92SAndroid Build Coastguard Worker         return optimizationViews;
89*89c4ff92SAndroid Build Coastguard Worker     }
90*89c4ff92SAndroid Build Coastguard Worker 
RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry & registry)91*89c4ff92SAndroid Build Coastguard Worker     void RegisterTensorHandleFactories(class armnn::TensorHandleFactoryRegistry& registry) override
92*89c4ff92SAndroid Build Coastguard Worker     {
93*89c4ff92SAndroid Build Coastguard Worker         auto memoryManager = std::make_shared<SampleMemoryManager>();
94*89c4ff92SAndroid Build Coastguard Worker 
95*89c4ff92SAndroid Build Coastguard Worker         registry.RegisterMemoryManager(memoryManager);
96*89c4ff92SAndroid Build Coastguard Worker         registry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
97*89c4ff92SAndroid Build Coastguard Worker     }
98*89c4ff92SAndroid Build Coastguard Worker 
99*89c4ff92SAndroid Build Coastguard Worker };
100*89c4ff92SAndroid Build Coastguard Worker 
101*89c4ff92SAndroid Build Coastguard Worker } // namespace sdb
102*89c4ff92SAndroid Build Coastguard Worker 
GetBackendId()103*89c4ff92SAndroid Build Coastguard Worker const char* GetBackendId()
104*89c4ff92SAndroid Build Coastguard Worker {
105*89c4ff92SAndroid Build Coastguard Worker     return sdb::SampleDynamicBackend::GetIdStatic().Get().c_str();
106*89c4ff92SAndroid Build Coastguard Worker }
107*89c4ff92SAndroid Build Coastguard Worker 
GetVersion(uint32_t * outMajor,uint32_t * outMinor)108*89c4ff92SAndroid Build Coastguard Worker void GetVersion(uint32_t* outMajor, uint32_t* outMinor)
109*89c4ff92SAndroid Build Coastguard Worker {
110*89c4ff92SAndroid Build Coastguard Worker     if (!outMajor || !outMinor)
111*89c4ff92SAndroid Build Coastguard Worker     {
112*89c4ff92SAndroid Build Coastguard Worker         return;
113*89c4ff92SAndroid Build Coastguard Worker     }
114*89c4ff92SAndroid Build Coastguard Worker 
115*89c4ff92SAndroid Build Coastguard Worker     armnn::BackendVersion apiVersion = armnn::IBackendInternal::GetApiVersion();
116*89c4ff92SAndroid Build Coastguard Worker 
117*89c4ff92SAndroid Build Coastguard Worker     *outMajor = apiVersion.m_Major;
118*89c4ff92SAndroid Build Coastguard Worker     *outMinor = apiVersion.m_Minor;
119*89c4ff92SAndroid Build Coastguard Worker }
120*89c4ff92SAndroid Build Coastguard Worker 
BackendFactory()121*89c4ff92SAndroid Build Coastguard Worker void* BackendFactory()
122*89c4ff92SAndroid Build Coastguard Worker {
123*89c4ff92SAndroid Build Coastguard Worker     return new sdb::SampleDynamicBackend();
124*89c4ff92SAndroid Build Coastguard Worker }
125*89c4ff92SAndroid Build Coastguard Worker 
126*89c4ff92SAndroid Build Coastguard Worker 
127