blob: ef5258b657065019c8c194c25e54decd6a4fee3e [file] [log] [blame]
arovir014424b0a2018-10-04 10:46:04 +01001//
Teresa Charlinb75fc932023-01-23 13:16:26 +00002// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved.
arovir014424b0a2018-10-04 10:46:04 +01003// 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
Ryan OSheab4c49342023-07-25 14:28:27 +01009#include <arm_compute/core/CPP/CPPTypes.h>
10
arovir014424b0a2018-10-04 10:46:04 +010011namespace armnn
12{
13
Finn Williamsb9af86e2021-05-26 18:38:12 +010014// add new capabilities here..
Finn Williamsb1aad422021-10-28 19:07:32 +010015const BackendCapabilities cpuAccCapabilities("CpuAcc",
Finn Williamsb9af86e2021-05-26 18:38:12 +010016 {
Teresa Charlinb75fc932023-01-23 13:16:26 +000017 {"NonConstWeights", true},
Finn Williamsdbf5f312021-08-26 11:08:01 +010018 {"AsyncExecution", false},
19 {"ProtectedContentAllocation", false},
Cathal Corbett4452baf2022-05-13 09:55:59 +010020 {"ConstantTensorsAsInputs", true},
Sadik Armaganc8402632021-09-10 11:40:54 +010021 {"PreImportIOTensors", false},
Finn Williamsb1aad422021-10-28 19:07:32 +010022 {"ExternallyManagedMemory", true},
Sadik Armaganb8a26d82021-10-04 15:13:11 +010023 {"MultiAxisPacking", false},
Ryan OSheab4c49342023-07-25 14:28:27 +010024 {"SingleAxisPacking", true},
25 {"HasFp16", arm_compute::CPUInfo::get().has_fp16()}
Finn Williamsb9af86e2021-05-26 18:38:12 +010026 });
27
Sadik Armaganaede8ca2021-03-31 16:12:13 +010028
arovir014424b0a2018-10-04 10:46:04 +010029class NeonBackend : public IBackendInternal
30{
31public:
David Beck9efb57d2018-11-05 13:40:33 +000032 NeonBackend() = default;
33 ~NeonBackend() = default;
arovir014424b0a2018-10-04 10:46:04 +010034
David Beck3cc9a622018-10-12 10:38:31 +010035 static const BackendId& GetIdStatic();
36 const BackendId& GetId() const override { return GetIdStatic(); }
arovir014424b0a2018-10-04 10:46:04 +010037
Aron Virginas-Tar56055192018-11-12 18:10:43 +000038 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
39
40 IWorkloadFactoryPtr CreateWorkloadFactory(
41 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
42
Narumol Prangnawarat4e3e8182019-08-14 12:25:50 +010043 IWorkloadFactoryPtr CreateWorkloadFactory(
44 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
45
Sadik Armagan04a72972020-09-14 15:44:18 +010046 IWorkloadFactoryPtr CreateWorkloadFactory( const IMemoryManagerSharedPtr& memoryManager,
47 const ModelOptions& modelOptions) const override;
48
49 IWorkloadFactoryPtr CreateWorkloadFactory(class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
50 const ModelOptions& modelOptions) const override;
51
David Beck263e3492018-11-09 14:46:40 +000052 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
Colm Donelan1aff3932020-02-05 17:48:59 +000053 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
54 const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override;
David Beck111b5d92018-11-12 14:59:37 +000055 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010056 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport(const ModelOptions& modelOptions) const override;
Matteo Martincighadddddb2019-01-24 14:06:23 +000057
Mike Kelly80512b02022-05-16 23:10:42 +010058 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph,
59 const ModelOptions& modelOptions) const override;
Narumol Prangnawarat4e3e8182019-08-14 12:25:50 +010060
61 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
62
63 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010064
65 IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
66 const ModelOptions& modelOptions) const override;
Sadik Armaganaede8ca2021-03-31 16:12:13 +010067
Finn Williamsb9af86e2021-05-26 18:38:12 +010068 BackendCapabilities GetCapabilities() const override
69 {
70 return cpuAccCapabilities;
71 };
Francis Murtaghe8d7ccb2021-10-14 17:30:24 +010072
73 std::unique_ptr<ICustomAllocator> GetDefaultAllocator() const override;
arovir014424b0a2018-10-04 10:46:04 +010074};
75
Matteo Martincighadddddb2019-01-24 14:06:23 +000076} // namespace armnn