1*89c4ff92SAndroid Build Coastguard Worker // 2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2017-2023 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 12*89c4ff92SAndroid Build Coastguard Worker // add new capabilities here.. 13*89c4ff92SAndroid Build Coastguard Worker const BackendCapabilities cpuAccCapabilities("CpuAcc", 14*89c4ff92SAndroid Build Coastguard Worker { 15*89c4ff92SAndroid Build Coastguard Worker {"NonConstWeights", true}, 16*89c4ff92SAndroid Build Coastguard Worker {"AsyncExecution", false}, 17*89c4ff92SAndroid Build Coastguard Worker {"ProtectedContentAllocation", false}, 18*89c4ff92SAndroid Build Coastguard Worker {"ConstantTensorsAsInputs", true}, 19*89c4ff92SAndroid Build Coastguard Worker {"PreImportIOTensors", false}, 20*89c4ff92SAndroid Build Coastguard Worker {"ExternallyManagedMemory", true}, 21*89c4ff92SAndroid Build Coastguard Worker {"MultiAxisPacking", false}, 22*89c4ff92SAndroid Build Coastguard Worker {"SingleAxisPacking", true} 23*89c4ff92SAndroid Build Coastguard Worker }); 24*89c4ff92SAndroid Build Coastguard Worker 25*89c4ff92SAndroid Build Coastguard Worker 26*89c4ff92SAndroid Build Coastguard Worker class NeonBackend : public IBackendInternal 27*89c4ff92SAndroid Build Coastguard Worker { 28*89c4ff92SAndroid Build Coastguard Worker public: 29*89c4ff92SAndroid Build Coastguard Worker NeonBackend() = default; 30*89c4ff92SAndroid Build Coastguard Worker ~NeonBackend() = default; 31*89c4ff92SAndroid Build Coastguard Worker 32*89c4ff92SAndroid Build Coastguard Worker static const BackendId& GetIdStatic(); GetId() const33*89c4ff92SAndroid Build Coastguard Worker const BackendId& GetId() const override { return GetIdStatic(); } 34*89c4ff92SAndroid Build Coastguard Worker 35*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override; 36*89c4ff92SAndroid Build Coastguard Worker 37*89c4ff92SAndroid Build Coastguard Worker IWorkloadFactoryPtr CreateWorkloadFactory( 38*89c4ff92SAndroid Build Coastguard Worker const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override; 39*89c4ff92SAndroid Build Coastguard Worker 40*89c4ff92SAndroid Build Coastguard Worker IWorkloadFactoryPtr CreateWorkloadFactory( 41*89c4ff92SAndroid Build Coastguard Worker class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override; 42*89c4ff92SAndroid Build Coastguard Worker 43*89c4ff92SAndroid Build Coastguard Worker IWorkloadFactoryPtr CreateWorkloadFactory( const IMemoryManagerSharedPtr& memoryManager, 44*89c4ff92SAndroid Build Coastguard Worker const ModelOptions& modelOptions) const override; 45*89c4ff92SAndroid Build Coastguard Worker 46*89c4ff92SAndroid Build Coastguard Worker IWorkloadFactoryPtr CreateWorkloadFactory(class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry, 47*89c4ff92SAndroid Build Coastguard Worker const ModelOptions& modelOptions) const override; 48*89c4ff92SAndroid Build Coastguard Worker 49*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override; 50*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext( 51*89c4ff92SAndroid Build Coastguard Worker const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override; 52*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override; 53*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::ILayerSupportSharedPtr GetLayerSupport(const ModelOptions& modelOptions) const override; 54*89c4ff92SAndroid Build Coastguard Worker 55*89c4ff92SAndroid Build Coastguard Worker OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph, 56*89c4ff92SAndroid Build Coastguard Worker const ModelOptions& modelOptions) const override; 57*89c4ff92SAndroid Build Coastguard Worker 58*89c4ff92SAndroid Build Coastguard Worker std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override; 59*89c4ff92SAndroid Build Coastguard Worker 60*89c4ff92SAndroid Build Coastguard Worker void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override; 61*89c4ff92SAndroid Build Coastguard Worker 62*89c4ff92SAndroid Build Coastguard Worker IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext( 63*89c4ff92SAndroid Build Coastguard Worker const ModelOptions& modelOptions) const override; 64*89c4ff92SAndroid Build Coastguard Worker GetCapabilities() const65*89c4ff92SAndroid Build Coastguard Worker BackendCapabilities GetCapabilities() const override 66*89c4ff92SAndroid Build Coastguard Worker { 67*89c4ff92SAndroid Build Coastguard Worker return cpuAccCapabilities; 68*89c4ff92SAndroid Build Coastguard Worker }; 69*89c4ff92SAndroid Build Coastguard Worker 70*89c4ff92SAndroid Build Coastguard Worker std::unique_ptr<ICustomAllocator> GetDefaultAllocator() const override; 71*89c4ff92SAndroid Build Coastguard Worker }; 72*89c4ff92SAndroid Build Coastguard Worker 73*89c4ff92SAndroid Build Coastguard Worker } // namespace armnn 74