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