blob: d28ac3bfcd87fbc59e33d67f3001afa6bbf912ee [file] [log] [blame]
arovir014424b0a2018-10-04 10:46:04 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00007#include <armnn/backends/IBackendInternal.hpp>
arovir014424b0a2018-10-04 10:46:04 +01008
9namespace armnn
10{
11
Finn Williamsb9af86e2021-05-26 18:38:12 +010012// add new capabilities here..
13const BackendCapabilities cpuAccCapabilities("GpuAcc",
14 {
15 {"NonConstWeights", false},
Finn Williamsdbf5f312021-08-26 11:08:01 +010016 {"AsyncExecution", false},
17 {"ProtectedContentAllocation", false},
18 {"ConstantTensorsAsInputs", false},
Sadik Armaganc8402632021-09-10 11:40:54 +010019 {"PreImportIOTensors", false},
20 {"ExternallyManagedMemory", false},
21 {"MultiAxisPacking", false}
Finn Williamsb9af86e2021-05-26 18:38:12 +010022 });
23
Sadik Armaganaede8ca2021-03-31 16:12:13 +010024
arovir014424b0a2018-10-04 10:46:04 +010025class NeonBackend : public IBackendInternal
26{
27public:
David Beck9efb57d2018-11-05 13:40:33 +000028 NeonBackend() = default;
29 ~NeonBackend() = default;
arovir014424b0a2018-10-04 10:46:04 +010030
David Beck3cc9a622018-10-12 10:38:31 +010031 static const BackendId& GetIdStatic();
32 const BackendId& GetId() const override { return GetIdStatic(); }
arovir014424b0a2018-10-04 10:46:04 +010033
Aron Virginas-Tar56055192018-11-12 18:10:43 +000034 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
35
36 IWorkloadFactoryPtr CreateWorkloadFactory(
37 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
38
Narumol Prangnawarat4e3e8182019-08-14 12:25:50 +010039 IWorkloadFactoryPtr CreateWorkloadFactory(
40 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
41
Sadik Armagan04a72972020-09-14 15:44:18 +010042 IWorkloadFactoryPtr CreateWorkloadFactory( const IMemoryManagerSharedPtr& memoryManager,
43 const ModelOptions& modelOptions) const override;
44
45 IWorkloadFactoryPtr CreateWorkloadFactory(class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
46 const ModelOptions& modelOptions) const override;
47
David Beck263e3492018-11-09 14:46:40 +000048 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
Colm Donelan1aff3932020-02-05 17:48:59 +000049 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
50 const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override;
David Beck111b5d92018-11-12 14:59:37 +000051 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010052 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport(const ModelOptions& modelOptions) const override;
Matteo Martincighadddddb2019-01-24 14:06:23 +000053
Matteo Martincighc3ba50e2019-05-22 14:28:16 +010054 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const override;
Narumol Prangnawarat4e3e8182019-08-14 12:25:50 +010055
56 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
57
58 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010059
60 IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
61 const ModelOptions& modelOptions) const override;
Sadik Armaganaede8ca2021-03-31 16:12:13 +010062
Finn Williamsb9af86e2021-05-26 18:38:12 +010063 BackendCapabilities GetCapabilities() const override
64 {
65 return cpuAccCapabilities;
66 };
arovir014424b0a2018-10-04 10:46:04 +010067};
68
Matteo Martincighadddddb2019-01-24 14:06:23 +000069} // namespace armnn