blob: ec1313df0c377e19ab15bfcc6e0f82d81391dbb7 [file] [log] [blame]
Matteo Martincighd0dc7702019-08-01 17:09:03 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Mike Kelly07810fc2020-11-12 10:58:48 +00006#include <armnn/BackendOptions.hpp>
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00007#include <armnn/backends/IBackendInternal.hpp>
Matteo Martincighd0dc7702019-08-01 17:09:03 +01008
9namespace armnn
10{
11
Matteo Martincighd0dc7702019-08-01 17:09:03 +010012IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
13{
14 return IMemoryManagerUniquePtr();
15}
16
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010017IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
Derek Lamberti901ea112019-12-10 22:07:09 +000018 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010019{
20 return IWorkloadFactoryPtr{};
21}
22
Sadik Armagan04a72972020-09-14 15:44:18 +010023IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
24 const IMemoryManagerSharedPtr& memoryManager,
25 const ModelOptions& modelOptions) const
26{
Sadik Armagana25886e2020-09-15 17:17:08 +010027 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010028 {
Sadik Armagana25886e2020-09-15 17:17:08 +010029 for (auto optionsGroup : modelOptions)
30 {
31 if (optionsGroup.GetBackendId() == GetId())
32 {
33 return IWorkloadFactoryPtr{};
34 }
35 }
Sadik Armagan04a72972020-09-14 15:44:18 +010036 }
Sadik Armagana25886e2020-09-15 17:17:08 +010037
38 return CreateWorkloadFactory(memoryManager);
Sadik Armagan04a72972020-09-14 15:44:18 +010039}
40
41IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
42 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
43 const ModelOptions& modelOptions) const
44{
Sadik Armagana25886e2020-09-15 17:17:08 +010045 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010046 {
Sadik Armagana25886e2020-09-15 17:17:08 +010047 for (auto optionsGroup : modelOptions)
48 {
49 if (optionsGroup.GetBackendId() == GetId())
50 {
51 return IWorkloadFactoryPtr{};
52 }
53 }
Sadik Armagan04a72972020-09-14 15:44:18 +010054 }
Sadik Armagana25886e2020-09-15 17:17:08 +010055
56 return CreateWorkloadFactory(tensorHandleFactoryRegistry);
Sadik Armagan04a72972020-09-14 15:44:18 +010057}
58
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +010059IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
60 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
61 const ModelOptions& modelOptions,
62 MemorySourceFlags inputFlags,
63 MemorySourceFlags outputFlags) const
64{
65 IgnoreUnused(inputFlags);
66 IgnoreUnused(outputFlags);
67 return CreateWorkloadFactory(tensorHandleFactoryRegistry, modelOptions);
68}
69
Matteo Martincighd0dc7702019-08-01 17:09:03 +010070IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
71{
72 return IBackendContextPtr{};
73}
74
Sadik Armagan045f6be2020-09-10 13:37:32 +010075IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
76 const ModelOptions&) const
77{
78 return IBackendSpecificModelContextPtr{};
79}
80
Colm Donelane49755b2020-01-29 15:22:43 +000081IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000082 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
Colm Donelane49755b2020-01-29 15:22:43 +000083{
84 return IBackendProfilingContextPtr{};
85}
86
Sadik Armagana25886e2020-09-15 17:17:08 +010087IBackendInternal::ILayerSupportSharedPtr IBackendInternal::GetLayerSupport(const ModelOptions& modelOptions) const
88{
89 if (!modelOptions.empty())
90 {
91 for (auto optionsGroup : modelOptions)
92 {
93 if (optionsGroup.GetBackendId() == GetId())
94 {
95 return ILayerSupportSharedPtr{};
96 }
97 }
98 }
99
100 return GetLayerSupport();
101}
102
Jan Eilers1b2654f2021-09-24 15:45:46 +0100103// Default implementation of OptimizeSubgraphView. Returns an untouched subgraph.
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100104// Override this method with a custom optimization implementation.
105OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
106{
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100107 OptimizationViews result;
Jan Eilers1b2654f2021-09-24 15:45:46 +0100108 result.AddUntouchedSubgraph(SubgraphView(subgraph));
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100109
110 return result;
111}
112
Mike Kelly07810fc2020-11-12 10:58:48 +0000113OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
114 const ModelOptions& /*modelOptions*/) const
115{
116 return OptimizeSubgraphView(subgraph);
117}
118
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100119bool IBackendInternal::SupportsTensorAllocatorAPI() const
120{
121 return !GetHandleFactoryPreferences().empty();
122}
123
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +0100124void IBackendInternal::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry,
125 MemorySourceFlags /*inputFlags*/,
126 MemorySourceFlags /*outputFlags*/)
127{
128 return RegisterTensorHandleFactories(registry);
129}
130
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100131ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory()
132{
133 auto favorites = GetHandleFactoryPreferences();
134 if (favorites.empty())
135 {
136 return ITensorHandleFactory::LegacyFactoryId;
137 }
138
139 return favorites[0];
140}
141
142std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
143{
144 return std::vector<ITensorHandleFactory::FactoryId>();
145}
146
147} // namespace armnn