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