blob: c742c0b2047f84e9e627ad64c6aba27f09749118 [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 gpuAccCapabilities("GpuAcc",
14 {
15 {"NonConstWeights", false},
Jan Eilers15fcc7e2021-07-14 13:50:15 +010016 {"AsyncExecution", false},
17 {"ProtectedContentAllocation", true}
Finn Williamsb9af86e2021-05-26 18:38:12 +010018 });
Sadik Armaganaede8ca2021-03-31 16:12:13 +010019
arovir014424b0a2018-10-04 10:46:04 +010020class ClBackend : public IBackendInternal
21{
22public:
Jan Eilers15fcc7e2021-07-14 13:50:15 +010023 ClBackend() : m_EnableCustomAllocator(false) {};
David Beck9efb57d2018-11-05 13:40:33 +000024 ~ClBackend() = default;
arovir014424b0a2018-10-04 10:46:04 +010025
David Beck3cc9a622018-10-12 10:38:31 +010026 static const BackendId& GetIdStatic();
27 const BackendId& GetId() const override { return GetIdStatic(); }
arovir014424b0a2018-10-04 10:46:04 +010028
Aron Virginas-Tar56055192018-11-12 18:10:43 +000029 IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager() const override;
30
31 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
32 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) const override;
33
Jan Eilerse9f0f0f2019-08-16 10:28:37 +010034 IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
35 TensorHandleFactoryRegistry& registry) const override;
36
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +010037 IWorkloadFactoryPtr CreateWorkloadFactory(const IMemoryManagerSharedPtr& memoryManager,
38 const ModelOptions& modelOptions) const override;
Sadik Armagan04a72972020-09-14 15:44:18 +010039
40 IWorkloadFactoryPtr CreateWorkloadFactory(class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
41 const ModelOptions& modelOptions) const override;
42
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +010043 IWorkloadFactoryPtr CreateWorkloadFactory(class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
44 const ModelOptions& modelOptions,
45 MemorySourceFlags inputFlags,
46 MemorySourceFlags outputFlags) const override;
47
Jan Eilerse9f0f0f2019-08-16 10:28:37 +010048 std::vector<ITensorHandleFactory::FactoryId> GetHandleFactoryPreferences() const override;
49
50 void RegisterTensorHandleFactories(TensorHandleFactoryRegistry& registry) override;
51
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +010052 void RegisterTensorHandleFactories(TensorHandleFactoryRegistry& registry,
53 MemorySourceFlags inputFlags,
54 MemorySourceFlags outputFlags) override;
55
David Beck1b61be52018-11-08 09:19:14 +000056 IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override;
Colm Donelan1aff3932020-02-05 17:48:59 +000057 IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
58 const IRuntime::CreationOptions&, IBackendProfilingPtr& backendProfiling) override;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000059
David Beck263e3492018-11-09 14:46:40 +000060 IBackendInternal::Optimizations GetOptimizations() const override;
David Beck111b5d92018-11-12 14:59:37 +000061 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport() const override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010062 IBackendInternal::ILayerSupportSharedPtr GetLayerSupport(const ModelOptions& modelOptions) const override;
Matteo Martincighadddddb2019-01-24 14:06:23 +000063
Mike Kelly07810fc2020-11-12 10:58:48 +000064 OptimizationViews OptimizeSubgraphView(const SubgraphView& subgraph,
65 const ModelOptions& modelOptions) const override;
Sadik Armagan045f6be2020-09-10 13:37:32 +010066
67 IBackendInternal::IBackendSpecificModelContextPtr CreateBackendSpecificModelContext(
68 const ModelOptions& modelOptions) const override;
Sadik Armaganaede8ca2021-03-31 16:12:13 +010069
Finn Williamsb9af86e2021-05-26 18:38:12 +010070 BackendCapabilities GetCapabilities() const override
71 {
72 return gpuAccCapabilities;
73 };
Jan Eilers15fcc7e2021-07-14 13:50:15 +010074
75 virtual bool UseCustomMemoryAllocator(armnn::Optional<std::string&> errMsg) override
76 {
77 IgnoreUnused(errMsg);
78
79 // Set flag to signal the backend to use a custom memory allocator
80 m_EnableCustomAllocator = true;
81
82 return m_EnableCustomAllocator;
83 }
84
85 bool m_EnableCustomAllocator;
arovir014424b0a2018-10-04 10:46:04 +010086};
87
Matteo Martincighadddddb2019-01-24 14:06:23 +000088} // namespace armnn