blob: 295202324e1410f98d97d288f24ea2a45d8c25a7 [file] [log] [blame]
Derek Lambertie3803ea2019-11-13 10:36:08 +00001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "WorkloadFactory.hpp"
9
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
Derek Lamberti901ea112019-12-10 22:07:09 +000037 std::unique_ptr<IWorkload> CreateAbs(const AbsQueueDescriptor& /*descriptor*/,
38 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000039 { return nullptr; }
40
Derek Lamberti901ea112019-12-10 22:07:09 +000041 std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& /*descriptor*/,
42 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000043 { return nullptr; }
44
Derek Lamberti901ea112019-12-10 22:07:09 +000045 std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& /*descriptor*/,
46 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000047 { return nullptr; }
48
Derek Lamberti901ea112019-12-10 22:07:09 +000049 std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& /*descriptor*/,
50 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000051 { return nullptr; }
52
Derek Lamberti901ea112019-12-10 22:07:09 +000053 std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& /*descriptor*/,
54 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000055 { return nullptr; }
56
Derek Lamberti901ea112019-12-10 22:07:09 +000057 std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& /*descriptor*/,
58 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000059 { return nullptr; }
60
Derek Lamberti901ea112019-12-10 22:07:09 +000061 std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& /*descriptor*/,
62 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000063 { return nullptr; }
64
Derek Lamberti901ea112019-12-10 22:07:09 +000065 std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& /*descriptor*/,
66 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000067 { return nullptr; }
68
Derek Lamberti901ea112019-12-10 22:07:09 +000069 std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& /*descriptor*/,
70 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000071 { return nullptr; }
72
Derek Lamberti901ea112019-12-10 22:07:09 +000073 std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& /*descriptor*/,
74 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000075 { return nullptr; }
76
Derek Lamberti901ea112019-12-10 22:07:09 +000077 std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& /*descriptor*/,
78 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000079 { return nullptr; }
80
Derek Lamberti901ea112019-12-10 22:07:09 +000081 std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& /*descriptor*/,
82 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000083 { return nullptr; }
84
Derek Lamberti901ea112019-12-10 22:07:09 +000085 std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& /*descriptor*/,
86 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000087 { return nullptr; }
88
Derek Lamberti901ea112019-12-10 22:07:09 +000089 std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& /*descriptor*/,
90 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000091 { return nullptr; }
92
Derek Lamberti901ea112019-12-10 22:07:09 +000093 std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor& /*descriptor*/,
94 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000095 { return nullptr; }
96
Derek Lamberti901ea112019-12-10 22:07:09 +000097 std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& /*descriptor*/,
98 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +000099 { return nullptr; }
100
Derek Lamberti901ea112019-12-10 22:07:09 +0000101 std::unique_ptr<IWorkload> CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor& /*descriptor*/,
102 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000103 { return nullptr; }
104
Derek Lamberti901ea112019-12-10 22:07:09 +0000105 std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& /*descriptor*/,
106 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000107 { return nullptr; }
108
josh minor4a3c6102020-01-06 16:40:46 -0600109 std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
110 const WorkloadInfo& info) const override
111 {
112 if (descriptor.m_Parameters.m_Operation == UnaryOperation::Abs)
113 {
114 AbsQueueDescriptor absDescriptor;
115 return CreateAbs(absDescriptor, info);
116 }
117 else if (descriptor.m_Parameters.m_Operation == UnaryOperation::Rsqrt)
118 {
119 RsqrtQueueDescriptor rsqrtDescriptor;
120 return CreateRsqrt(rsqrtDescriptor, info);
121 }
Narumol Prangnawarat0c95f4c2020-11-18 16:52:07 +0000122 else if (descriptor.m_Parameters.m_Operation == UnaryOperation::LogicalNot)
123 {
124 return CreateLogicalUnary(descriptor, info);
125 }
josh minor4a3c6102020-01-06 16:40:46 -0600126 return nullptr;
127 }
128
Derek Lamberti901ea112019-12-10 22:07:09 +0000129 std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& /*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> CreateFloor(const FloorQueueDescriptor& /*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> CreateFullyConnected(const FullyConnectedQueueDescriptor& /*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> CreateGather(const GatherQueueDescriptor& /*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> CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor& /*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> CreateL2Normalization(const L2NormalizationQueueDescriptor& /*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> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& /*descriptor*/,
154 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000155 { return nullptr; }
156
Derek Lamberti901ea112019-12-10 22:07:09 +0000157 std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& /*descriptor*/,
158 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000159 { return nullptr; }
160
Derek Lamberti901ea112019-12-10 22:07:09 +0000161 std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& /*descriptor*/,
162 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000163 { return nullptr; }
164
Derek Lamberti901ea112019-12-10 22:07:09 +0000165 std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& /*descriptor*/,
166 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000167 { return nullptr; }
168
Derek Lamberti901ea112019-12-10 22:07:09 +0000169 std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& /*descriptor*/,
170 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000171 { return nullptr; }
172
Derek Lamberti901ea112019-12-10 22:07:09 +0000173 std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& /*descriptor*/,
174 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000175 { return nullptr; }
176
Derek Lamberti901ea112019-12-10 22:07:09 +0000177 std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& /*descriptor*/,
178 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000179 { return nullptr; }
180
Derek Lamberti901ea112019-12-10 22:07:09 +0000181 std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& /*descriptor*/,
182 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000183 { return nullptr; }
184
Derek Lamberti901ea112019-12-10 22:07:09 +0000185 std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& /*descriptor*/,
186 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000187 { return nullptr; }
188
Derek Lamberti901ea112019-12-10 22:07:09 +0000189 std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& /*descriptor*/,
190 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000191 { return nullptr; }
192
Derek Lamberti901ea112019-12-10 22:07:09 +0000193 std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& /*descriptor*/,
194 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000195 { return nullptr; }
196
Derek Lamberti901ea112019-12-10 22:07:09 +0000197 std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& /*descriptor*/,
198 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000199 { return nullptr; }
200
Derek Lamberti901ea112019-12-10 22:07:09 +0000201 std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& /*descriptor*/,
202 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000203 { return nullptr; }
204
Derek Lamberti901ea112019-12-10 22:07:09 +0000205 std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& /*descriptor*/,
206 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000207 { return nullptr; }
208
Derek Lamberti901ea112019-12-10 22:07:09 +0000209 std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& /*descriptor*/,
210 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000211 { return nullptr; }
212
Derek Lamberti901ea112019-12-10 22:07:09 +0000213 std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& /*descriptor*/,
214 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000215 { return nullptr; }
216
Derek Lamberti901ea112019-12-10 22:07:09 +0000217 std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& /*descriptor*/,
218 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000219 { return nullptr; }
220
Derek Lamberti901ea112019-12-10 22:07:09 +0000221 std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& /*descriptor*/,
222 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000223 { return nullptr; }
224
Finn Williams2605b232020-06-10 15:53:46 +0100225 std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& /*descriptor*/,
226 const WorkloadInfo& /*info*/) const override
227 { return nullptr; }
228
Derek Lamberti901ea112019-12-10 22:07:09 +0000229 std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& /*descriptor*/,
230 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000231 { return nullptr; }
232
Derek Lamberti901ea112019-12-10 22:07:09 +0000233 std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& /*descriptor*/,
234 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000235 { return nullptr; }
236
Derek Lamberti901ea112019-12-10 22:07:09 +0000237 std::unique_ptr<IWorkload> CreateRsqrt(const RsqrtQueueDescriptor& /*descriptor*/,
238 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000239 { return nullptr; }
240
Derek Lamberti901ea112019-12-10 22:07:09 +0000241 std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& /*descriptor*/,
242 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000243 { return nullptr; }
244
Derek Lamberti901ea112019-12-10 22:07:09 +0000245 std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& /*descriptor*/,
246 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000247 { return nullptr; }
248
Derek Lamberti901ea112019-12-10 22:07:09 +0000249 std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& /*descriptor*/,
250 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000251 { return nullptr; }
252
Derek Lamberti901ea112019-12-10 22:07:09 +0000253 std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& /*descriptor*/,
254 const WorkloadInfo& /*info*/) const override
Derek Lambertie3803ea2019-11-13 10:36:08 +0000255 { return nullptr; }
256
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