blob: e793b44cf41a0c9dabd6ee5f3018aa137a1f3d8a [file] [log] [blame]
Derek Lambertie3803ea2019-11-13 10:36:08 +00001//
Mike Kelly52e90bf2023-03-15 15:06:23 +00002// Copyright © 2019-2023 Arm Ltd. All rights reserved.
Derek Lambertie3803ea2019-11-13 10:36:08 +00003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Colm Donelan0c479742021-12-10 12:43:54 +00008#include <armnn/backends/WorkloadFactory.hpp>
Derek Lambertie3803ea2019-11-13 10:36:08 +00009
10namespace armnn
11{
12
13class WorkloadFactoryBase : public IWorkloadFactory
14{
15public:
16 bool SupportsSubTensors() const override
17 { return false; };
18
Derek Lamberti901ea112019-12-10 22:07:09 +000019 std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& /*parent*/,
20 TensorShape const& /*subTensorShape*/,
21 unsigned int const */*subTensorOrigin*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000022 { return nullptr; };
23
Derek Lamberti901ea112019-12-10 22:07:09 +000024 std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& /*descriptor*/,
25 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000026 { return nullptr; }
27
Derek Lamberti901ea112019-12-10 22:07:09 +000028 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/,
29 const bool /*IsMemoryManaged*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000030 { return nullptr; }
31
Derek Lamberti901ea112019-12-10 22:07:09 +000032 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/,
33 DataLayout /*dataLayout*/,
34 const bool /*IsMemoryManaged*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000035 { return nullptr; }
36
Teresa Charlin611c7fb2022-01-07 09:47:29 +000037 std::unique_ptr<IWorkload> CreateWorkload(LayerType /*type*/,
38 const QueueDescriptor& /*descriptor*/,
39 const WorkloadInfo& /*info*/) const override
40 { return nullptr; }
41
Derek Lamberti901ea112019-12-10 22:07:09 +000042 std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& /*descriptor*/,
43 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000044 { return nullptr; }
45
Mike Kelly52e90bf2023-03-15 15:06:23 +000046 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +000047 std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& /*descriptor*/,
48 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000049 { return nullptr; }
50
Derek Lamberti901ea112019-12-10 22:07:09 +000051 std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& /*descriptor*/,
52 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000053 { return nullptr; }
54
Derek Lamberti901ea112019-12-10 22:07:09 +000055 std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& /*descriptor*/,
56 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000057 { return nullptr; }
58
Derek Lamberti901ea112019-12-10 22:07:09 +000059 std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& /*descriptor*/,
60 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000061 { return nullptr; }
62
Derek Lamberti901ea112019-12-10 22:07:09 +000063 std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& /*descriptor*/,
64 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000065 { return nullptr; }
66
Derek Lamberti901ea112019-12-10 22:07:09 +000067 std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& /*descriptor*/,
68 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000069 { return nullptr; }
70
Derek Lamberti901ea112019-12-10 22:07:09 +000071 std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& /*descriptor*/,
72 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000073 { return nullptr; }
74
Derek Lamberti901ea112019-12-10 22:07:09 +000075 std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& /*descriptor*/,
76 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000077 { return nullptr; }
78
Derek Lamberti901ea112019-12-10 22:07:09 +000079 std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& /*descriptor*/,
80 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000081 { return nullptr; }
82
Derek Lamberti901ea112019-12-10 22:07:09 +000083 std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& /*descriptor*/,
84 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000085 { return nullptr; }
86
Derek Lamberti901ea112019-12-10 22:07:09 +000087 std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& /*descriptor*/,
88 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000089 { return nullptr; }
90
Derek Lamberti901ea112019-12-10 22:07:09 +000091 std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& /*descriptor*/,
92 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000093 { return nullptr; }
94
Derek Lamberti901ea112019-12-10 22:07:09 +000095 std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor& /*descriptor*/,
96 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000097 { return nullptr; }
98
Derek Lamberti901ea112019-12-10 22:07:09 +000099 std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& /*descriptor*/,
100 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000101 { return nullptr; }
102
Derek Lamberti901ea112019-12-10 22:07:09 +0000103 std::unique_ptr<IWorkload> CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor& /*descriptor*/,
104 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000105 { return nullptr; }
106
Mike Kelly52e90bf2023-03-15 15:06:23 +0000107 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +0000108 std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& /*descriptor*/,
109 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000110 { return nullptr; }
111
josh minor4a3c6102020-01-06 16:40:46 -0600112 std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
113 const WorkloadInfo& info) const override
114 {
Teresa Charlin611c7fb2022-01-07 09:47:29 +0000115 if (descriptor.m_Parameters.m_Operation == UnaryOperation::LogicalNot)
116 {
117 return CreateWorkload(armnn::LayerType::ElementwiseUnary, descriptor, info);
118 }
119 else
josh minor4a3c6102020-01-06 16:40:46 -0600120 {
Jan Eilers1b2654f2021-09-24 15:45:46 +0100121 { return nullptr; }
josh minor4a3c6102020-01-06 16:40:46 -0600122 }
josh minor4a3c6102020-01-06 16:40:46 -0600123 }
124
Derek Lamberti901ea112019-12-10 22:07:09 +0000125 std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& /*descriptor*/,
126 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000127 { return nullptr; }
128
Derek Lamberti901ea112019-12-10 22:07:09 +0000129 std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& /*descriptor*/,
130 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000131 { return nullptr; }
132
Derek Lamberti901ea112019-12-10 22:07:09 +0000133 std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& /*descriptor*/,
134 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000135 { return nullptr; }
136
Derek Lamberti901ea112019-12-10 22:07:09 +0000137 std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& /*descriptor*/,
138 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000139 { return nullptr; }
140
Derek Lamberti901ea112019-12-10 22:07:09 +0000141 std::unique_ptr<IWorkload> CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor& /*descriptor*/,
142 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000143 { return nullptr; }
144
Derek Lamberti901ea112019-12-10 22:07:09 +0000145 std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& /*descriptor*/,
146 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000147 { return nullptr; }
148
Derek Lamberti901ea112019-12-10 22:07:09 +0000149 std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& /*descriptor*/,
150 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000151 { return nullptr; }
152
Derek Lamberti901ea112019-12-10 22:07:09 +0000153 std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& /*descriptor*/,
154 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000155 { return nullptr; }
156
Mike Kelly52e90bf2023-03-15 15:06:23 +0000157 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +0000158 std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& /*descriptor*/,
159 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000160 { return nullptr; }
161
Derek Lamberti901ea112019-12-10 22:07:09 +0000162 std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& /*descriptor*/,
163 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000164 { return nullptr; }
165
Derek Lamberti901ea112019-12-10 22:07:09 +0000166 std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& /*descriptor*/,
167 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000168 { return nullptr; }
169
Derek Lamberti901ea112019-12-10 22:07:09 +0000170 std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& /*descriptor*/,
171 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000172 { return nullptr; }
173
Derek Lamberti901ea112019-12-10 22:07:09 +0000174 std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& /*descriptor*/,
175 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000176 { return nullptr; }
177
Mike Kelly52e90bf2023-03-15 15:06:23 +0000178 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +0000179 std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& /*descriptor*/,
180 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000181 { return nullptr; }
182
Mike Kelly52e90bf2023-03-15 15:06:23 +0000183 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +0000184 std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& /*descriptor*/,
185 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000186 { return nullptr; }
187
Derek Lamberti901ea112019-12-10 22:07:09 +0000188 std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& /*descriptor*/,
189 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000190 { return nullptr; }
191
Derek Lamberti901ea112019-12-10 22:07:09 +0000192 std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& /*descriptor*/,
193 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000194 { return nullptr; }
195
Derek Lamberti901ea112019-12-10 22:07:09 +0000196 std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& /*descriptor*/,
197 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000198 { return nullptr; }
199
Derek Lamberti901ea112019-12-10 22:07:09 +0000200 std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& /*descriptor*/,
201 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000202 { return nullptr; }
203
Derek Lamberti901ea112019-12-10 22:07:09 +0000204 std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& /*descriptor*/,
205 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000206 { return nullptr; }
207
Tamás Nyíri7b885b32021-10-26 14:47:57 +0100208 std::unique_ptr<IWorkload> CreatePooling3d(const Pooling3dQueueDescriptor& /*descriptor*/,
209 const WorkloadInfo& /*info*/) const override
210 { return nullptr; }
211
Derek Lamberti901ea112019-12-10 22:07:09 +0000212 std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& /*descriptor*/,
213 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000214 { return nullptr; }
215
Derek Lamberti901ea112019-12-10 22:07:09 +0000216 std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& /*descriptor*/,
217 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000218 { return nullptr; }
219
Derek Lamberti901ea112019-12-10 22:07:09 +0000220 std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& /*descriptor*/,
221 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000222 { return nullptr; }
223
Derek Lamberti901ea112019-12-10 22:07:09 +0000224 std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& /*descriptor*/,
225 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000226 { return nullptr; }
227
Finn Williams2605b232020-06-10 15:53:46 +0100228 std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& /*descriptor*/,
229 const WorkloadInfo& /*info*/) const override
230 { return nullptr; }
231
Derek Lamberti901ea112019-12-10 22:07:09 +0000232 std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& /*descriptor*/,
233 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000234 { return nullptr; }
235
Derek Lamberti901ea112019-12-10 22:07:09 +0000236 std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& /*descriptor*/,
237 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000238 { return nullptr; }
239
Derek Lamberti901ea112019-12-10 22:07:09 +0000240 std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& /*descriptor*/,
241 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000242 { return nullptr; }
243
Derek Lamberti901ea112019-12-10 22:07:09 +0000244 std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& /*descriptor*/,
245 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000246 { return nullptr; }
247
Derek Lamberti901ea112019-12-10 22:07:09 +0000248 std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& /*descriptor*/,
249 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000250 { return nullptr; }
251
Derek Lamberti901ea112019-12-10 22:07:09 +0000252 std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& /*descriptor*/,
253 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000254 { return nullptr; }
255
Mike Kelly52e90bf2023-03-15 15:06:23 +0000256 ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use CreateElementwiseBinary instead", "24.02")
Derek Lamberti901ea112019-12-10 22:07:09 +0000257 std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& /*descriptor*/,
258 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000259 { return nullptr; }
260
Derek Lamberti901ea112019-12-10 22:07:09 +0000261 std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& /*descriptor*/,
262 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000263 { return nullptr; }
264
Derek Lamberti901ea112019-12-10 22:07:09 +0000265 std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& /*descriptor*/,
266 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000267 { return nullptr; }
268
Derek Lamberti901ea112019-12-10 22:07:09 +0000269 std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& /*descriptor*/,
270 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000271 { return nullptr; }
272
Derek Lamberti901ea112019-12-10 22:07:09 +0000273 std::unique_ptr<IWorkload> CreateSwitch(const SwitchQueueDescriptor& /*descriptor*/,
274 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000275 { return nullptr; }
276
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000277 std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& /*descriptor*/,
278 const WorkloadInfo& /*info*/) const override
279 { return nullptr; }
280
Derek Lamberti901ea112019-12-10 22:07:09 +0000281 std::unique_ptr<IWorkload> CreateTransposeConvolution2d(const TransposeConvolution2dQueueDescriptor& /*descriptor*/,
282 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000283 { return nullptr; }
284};
285
286} //namespace armnn