blob: 7d355ea9ca744f30a53398db5a43286c50e2f23b [file] [log] [blame]
arovir014424b0a2018-10-04 10:46:04 +01001//
Ryan OSheab4c49342023-07-25 14:28:27 +01002// Copyright © 2022-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
9namespace armnn
10{
Finn Williamsb9af86e2021-05-26 18:38:12 +010011// add new capabilities here..
12const BackendCapabilities cpuRefCapabilities("CpuRef",
13 {
14 {"NonConstWeights", true},
Matthew Sloyan81beae32021-07-13 19:46:11 +010015 {"AsyncExecution", true},
Finn Williamsdbf5f312021-08-26 11:08:01 +010016 {"ProtectedContentAllocation", false},
17 {"ConstantTensorsAsInputs", true},
Finn Williams8636bc72021-10-02 15:06:39 +010018 {"PreImportIOTensors", true},
Finn Williamsb1aad422021-10-28 19:07:32 +010019 {"ExternallyManagedMemory", true},
Sadik Armaganb8a26d82021-10-04 15:13:11 +010020 {"MultiAxisPacking", false},
Ryan OSheab4c49342023-07-25 14:28:27 +010021 {"SingleAxisPacking", true},
22 {"HasFp16", true}
Finn Williamsb9af86e2021-05-26 18:38:12 +010023 });
arovir014424b0a2018-10-04 10:46:04 +010024
Finn Williamsb9af86e2021-05-26 18:38:12 +010025const std::set<armnn::BackendCapability> oldCpuRefCapabilities {
26 armnn::BackendCapability::NonConstWeights,
Sadik Armaganf0a6dec2021-03-25 07:46:55 +000027};
28
Finn Williamsb9af86e2021-05-26 18:38:12 +010029
arovir014424b0a2018-10-04 10:46:04 +010030class RefBackend : public IBackendInternal
31{
32public:
David Beck9efb57d2018-11-05 13:40:33 +000033 RefBackend() = default;
34 ~RefBackend() = default;
arovir014424b0a2018-10-04 10:46:04 +010035
David Beck3cc9a622018-10-12 10:38:31 +010036 static const BackendId& GetIdStatic();
37 const BackendId& GetId() const override { return GetIdStatic(); }
arovir014424b0a2018-10-04 10:46:04 +010038
Aron Virginas-Tar56055192018-11-12 18:10:43 +000039 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
40
41 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
42 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
43
Ferran Balaguerbfeb2712019-08-07 15:14:56 +010044 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
45 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
46
David Beck263e3492018-11-09 14:46:40 +000047 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000048
Colm Donelane49755b2020-01-29 15:22:43 +000049 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000050 const IRuntime::CreationOptions& creationOptions, IBackendProfilingPtr& backendProfiling) override;
Colm Donelane49755b2020-01-29 15:22:43 +000051
David Beck111b5d92018-11-12 14:59:37 +000052 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
Matteo Martincighadddddb2019-01-24 14:06:23 +000053
Cathal Corbett3883b272022-07-22 16:03:36 +010054 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph,
55 const ModelOptions& modelOptions) const override;
Ferran Balaguerbfeb2712019-08-07 15:14:56 +010056
57 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
58
59 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
Sadik Armaganf0a6dec2021-03-25 07:46:55 +000060
Finn Williamsb9af86e2021-05-26 18:38:12 +010061 BackendCapabilities GetCapabilities() const override
62 {
63 return cpuRefCapabilities;
64 };
Francis Murtaghe8d7ccb2021-10-14 17:30:24 +010065
66 std::unique_ptr<ICustomAllocator> GetDefaultAllocator() const override;
Matthew Sloyan2d213a72022-06-30 17:13:04 +010067
68 ExecutionData CreateExecutionData(WorkingMemDescriptor& workingMemDescriptor) const override;
69
70 void UpdateExecutionData(ExecutionData& executionData, WorkingMemDescriptor& workingMemDescriptor) const override;
arovir014424b0a2018-10-04 10:46:04 +010071};
72
Matteo Martincighadddddb2019-01-24 14:06:23 +000073} // namespace armnn