blob: 2855957e31ba8dc09313a23940937c5ee74dddc7 [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{
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},
16 {"ConstantTensorsAsInputs", true}
Finn Williamsb9af86e2021-05-26 18:38:12 +010017 });
arovir014424b0a2018-10-04 10:46:04 +010018
Finn Williamsb9af86e2021-05-26 18:38:12 +010019const std::set<armnn::BackendCapability> oldCpuRefCapabilities {
20 armnn::BackendCapability::NonConstWeights,
Sadik Armaganf0a6dec2021-03-25 07:46:55 +000021};
22
Finn Williamsb9af86e2021-05-26 18:38:12 +010023
arovir014424b0a2018-10-04 10:46:04 +010024class RefBackend : public IBackendInternal
25{
26public:
David Beck9efb57d2018-11-05 13:40:33 +000027 RefBackend() = default;
28 ~RefBackend() = default;
arovir014424b0a2018-10-04 10:46:04 +010029
David Beck3cc9a622018-10-12 10:38:31 +010030 static const BackendId& GetIdStatic();
31 const BackendId& GetId() const override { return GetIdStatic(); }
arovir014424b0a2018-10-04 10:46:04 +010032
Aron Virginas-Tar56055192018-11-12 18:10:43 +000033 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
34
35 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
36 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
37
Ferran Balaguerbfeb2712019-08-07 15:14:56 +010038 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
39 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override;
40
David Beck263e3492018-11-09 14:46:40 +000041 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000042
Colm Donelane49755b2020-01-29 15:22:43 +000043 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000044 const IRuntime::CreationOptions& creationOptions, IBackendProfilingPtr& backendProfiling) override;
Colm Donelane49755b2020-01-29 15:22:43 +000045
David Beck263e3492018-11-09 14:46:40 +000046 IBackendInternal::Optimizations GetOptimizations() const override;
David Beck111b5d92018-11-12 14:59:37 +000047 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
Matteo Martincighadddddb2019-01-24 14:06:23 +000048
Matteo Martincighc3ba50e2019-05-22 14:28:16 +010049 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph) const override;
Ferran Balaguerbfeb2712019-08-07 15:14:56 +010050
51 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
52
53 void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override;
Sadik Armaganf0a6dec2021-03-25 07:46:55 +000054
Finn Williamsb9af86e2021-05-26 18:38:12 +010055 BackendCapabilities GetCapabilities() const override
56 {
57 return cpuRefCapabilities;
58 };
59
Sadik Armaganf0a6dec2021-03-25 07:46:55 +000060 bool HasCapability(BackendCapability capabilityClass) const override;
arovir014424b0a2018-10-04 10:46:04 +010061};
62
Matteo Martincighadddddb2019-01-24 14:06:23 +000063} // namespace armnn