xref: /aosp_15_r20/external/armnn/src/backends/reference/RefBackend.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include <armnn/backends/IBackendInternal.hpp>
8 
9 namespace armnn
10 {
11 // add new capabilities here..
12 const BackendCapabilities cpuRefCapabilities("CpuRef",
13                                              {
14                                                     {"NonConstWeights", true},
15                                                     {"AsyncExecution", true},
16                                                     {"ProtectedContentAllocation", false},
17                                                     {"ConstantTensorsAsInputs", true},
18                                                     {"PreImportIOTensors", true},
19                                                     {"ExternallyManagedMemory", true},
20                                                     {"MultiAxisPacking", false},
21                                                     {"SingleAxisPacking", true}
22                                              });
23 
24 const std::set<armnn::BackendCapability> oldCpuRefCapabilities {
25         armnn::BackendCapability::NonConstWeights,
26 };
27 
28 
29 class RefBackend : public IBackendInternal
30 {
31 public:
32     RefBackend()  = default;
33     ~RefBackend() = default;
34 
35     static const BackendId& GetIdStatic();
GetId() const36     const BackendId& GetId() const override { return GetIdStatic(); }
37 
38     IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
39 
40     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
41         const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
42 
43     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
44         class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
45 
46     IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
47 
48     IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
49         const IRuntime::CreationOptions& creationOptions, IBackendProfilingPtr& backendProfiling) override;
50 
51     IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
52 
53     OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph,
54                                            const ModelOptions& modelOptions) const override;
55 
56     std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
57 
58     void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
59 
GetCapabilities() const60     BackendCapabilities GetCapabilities() const override
61     {
62         return cpuRefCapabilities;
63     };
64 
65     std::unique_ptr<ICustomAllocator> GetDefaultAllocator() const override;
66 
67     ExecutionData CreateExecutionData(WorkingMemDescriptor& workingMemDescriptor) const override;
68 
69     void UpdateExecutionData(ExecutionData& executionData, WorkingMemDescriptor& workingMemDescriptor) const override;
70 };
71 
72 } // namespace armnn
73