xref: /aosp_15_r20/external/armnn/include/armnn/backends/WorkloadFactory.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
7 #include "ITensorHandle.hpp"
8 #include "Workload.hpp"
9 
10 #include <armnn/Optional.hpp>
11 #include <armnn/INetwork.hpp>
12 #include <armnn/TensorFwd.hpp>
13 
14 #include <memory>
15 
16 namespace armnn
17 {
18 
19 class Layer;
20 
21 // Workload factory interface for compute backends.
22 class IWorkloadFactory
23 {
24 public:
~IWorkloadFactory()25     virtual ~IWorkloadFactory() { }
26 
AfterWorkloadsCreated()27     virtual void AfterWorkloadsCreated() {};
28 
29     virtual const BackendId& GetBackendId() const = 0;
30 
31     static bool IsLayerSupported(const BackendId& backendId,
32                                  const IConnectableLayer& layer,
33                                  Optional<DataType> dataType,
34                                  std::string& outReasonIfUnsupported);
35 
36     static bool IsLayerSupported(const IConnectableLayer& layer,
37                                  Optional<DataType> dataType,
38                                  std::string& outReasonIfUnsupported);
39 
40     static bool IsLayerSupported(const IConnectableLayer& layer,
41                                  Optional<DataType> dataType,
42                                  std::string& outReasonIfUnsupported,
43                                  const ModelOptions& modelOptions);
44 
45     static bool IsLayerSupported(const BackendId& backendId,
46                                  const IConnectableLayer& layer,
47                                  Optional<DataType> dataType,
48                                  std::string& outReasonIfUnsupported,
49                                  const ModelOptions& modelOptions);
50 
51     virtual bool SupportsSubTensors() const = 0;
52 
53     ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateSubTensorHandle instead")
54     virtual std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& parent,
55                                                                  TensorShape const& subTensorShape,
56                                                                  unsigned int const* subTensorOrigin
57                                                                 ) const = 0;
58 
59     ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
60     virtual std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
61                                                               const bool IsMemoryManaged = true) const = 0;
62 
63     ARMNN_DEPRECATED_MSG("Use ITensorHandleFactory::CreateTensorHandle instead")
64     virtual std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& tensorInfo,
65                                                               DataLayout dataLayout,
66                                                               const bool IsMemoryManaged = true) const = 0;
67 
68     virtual std::unique_ptr<IWorkload> CreateWorkload(LayerType type,
69                                                       const QueueDescriptor& descriptor,
70                                                       const WorkloadInfo& info) const;
71 
72     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
73     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
74     virtual std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& descriptor,
75                                                    const WorkloadInfo& info) const;
76 
77     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
78     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
79     virtual std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& descriptor,
80                                                         const WorkloadInfo&              info) const;
81 
82     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
83     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
84     virtual std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& descriptor,
85                                                       const WorkloadInfo&            info) const;
86 
87     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
88     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
89     virtual std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor,
90                                                        const WorkloadInfo&            info) const;
91 
92     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
93     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
94     virtual std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& descriptor,
95                                                                 const WorkloadInfo& info) const;
96 
97     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
98     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
99     virtual std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor,
100                                                             const WorkloadInfo& Info) const;
101 
102     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
103     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
104     virtual std::unique_ptr<IWorkload> CreateCast(const CastQueueDescriptor& descriptor,
105                                                   const WorkloadInfo& Info) const;
106 
107     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
108     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
109     virtual std::unique_ptr<IWorkload> CreateChannelShuffle(const ChannelShuffleQueueDescriptor& descriptor,
110                                                             const WorkloadInfo& info) const;
111 
112     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
113     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
114     virtual std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& descriptor,
115                                                         const WorkloadInfo& Info) const;
116 
117     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
118     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
119     virtual std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& descriptor,
120                                                     const WorkloadInfo&          info) const;
121 
122     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
123     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
124     virtual std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& descriptor,
125                                                       const WorkloadInfo& info) const;
126 
127     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
128     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
129     virtual std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& descriptor,
130                                                                const WorkloadInfo& info) const;
131 
132     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
133     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
134     virtual std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& descriptor,
135                                                                const WorkloadInfo& info) const;
136 
137     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
138     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
139     virtual std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor,
140                                                            const WorkloadInfo& info) const;
141 
142     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
143     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
144     virtual std::unique_ptr<IWorkload> CreateConvolution3d(const Convolution3dQueueDescriptor& descriptor,
145                                                            const WorkloadInfo& info) const;
146 
147     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
148     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
149     virtual std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& descriptor,
150                                                    const WorkloadInfo& info) const;
151 
152     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
153     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
154     virtual std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor,
155                                                           const WorkloadInfo& info) const;
156 
157     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
158     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
159     virtual std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(
160         const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const;
161 
162     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
163     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
164     virtual std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& descriptor,
165                                                         const WorkloadInfo& info) const;
166 
167     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
168     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
169     virtual std::unique_ptr<IWorkload> CreateDetectionPostProcess(
170         const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info) const;
171 
172     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
173     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
174     virtual std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& descriptor,
175                                                       const WorkloadInfo& info) const;
176 
177     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
178     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
179     virtual std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
180                                                               const WorkloadInfo& Info) const;
181 
182     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
183     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
184     virtual std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& descriptor,
185                                                               const WorkloadInfo& info) const;
186 
187     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
188     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
189     virtual std::unique_ptr<IWorkload> CreateFill(const FillQueueDescriptor& descriptor,
190                                                   const WorkloadInfo&        info) const;
191 
192     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
193     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
194     virtual std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& descriptor,
195                                                    const WorkloadInfo& info) const;
196 
197     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
198     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
199     virtual std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor,
200                                                             const WorkloadInfo&                  info) const;
201 
202     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
203     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
204     virtual std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& descriptor,
205                                                     const WorkloadInfo& info) const;
206 
207     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
208     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
209     virtual std::unique_ptr<IWorkload> CreateInstanceNormalization(
210         const InstanceNormalizationQueueDescriptor& descriptor,
211         const WorkloadInfo& info) const;
212 
213     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
214     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
215     virtual std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor,
216                                                              const WorkloadInfo& info) const;
217 
218     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
219     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
220     virtual std::unique_ptr<IWorkload> CreateLogicalBinary(const LogicalBinaryQueueDescriptor& descriptor,
221                                                            const WorkloadInfo& Info) const;
222 
223     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
224     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
225     virtual std::unique_ptr<IWorkload> CreateLogicalUnary(const ElementwiseUnaryQueueDescriptor& descriptor,
226                                                           const WorkloadInfo& Info) const;
227 
228     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
229     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
230     virtual std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& descriptor,
231                                                         const WorkloadInfo& info) const;
232 
233     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
234     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
235     virtual std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& descriptor,
236                                                   const WorkloadInfo& info) const;
237 
238     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
239     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
240     virtual std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& descriptor,
241                                                      const WorkloadInfo& info) const;
242 
243     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
244     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
245     virtual std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& descriptor,
246                                                   const WorkloadInfo& Info) const;
247 
248     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
249     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
250     virtual std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& descriptor,
251                                                      const WorkloadInfo& info) const;
252 
253     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
254     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
255     virtual std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& descriptor,
256                                                        const WorkloadInfo& info) const;
257 
258     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
259     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
260     virtual std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& descriptor,
261                                                     const WorkloadInfo& info) const;
262 
263     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
264     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
265     virtual std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& descriptor,
266                                                      const WorkloadInfo& info) const;
267 
268     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
269     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
270     virtual std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& descriptor,
271                                                             const WorkloadInfo&                  info) const;
272 
273     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
274     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
275     virtual std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& descriptor,
276                                                            const WorkloadInfo&                 info) const;
277 
278     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
279     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
280     virtual std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& descriptor,
281                                                     const WorkloadInfo& info) const;
282 
283     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
284     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
285     virtual std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& descriptor,
286                                                  const WorkloadInfo& Info) const;
287 
288     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
289     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
290     virtual std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& descriptor,
291                                                      const WorkloadInfo&           info) const;
292 
293     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
294     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
295     virtual std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& descriptor,
296                                                        const WorkloadInfo&           info) const;
297 
298     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
299     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
300     virtual std::unique_ptr<IWorkload> CreatePooling3d(const Pooling3dQueueDescriptor& descriptor,
301                                                        const WorkloadInfo&           info) const;
302 
303     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
304     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
305     virtual std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor,
306                                                          const WorkloadInfo& info) const;
307 
308     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
309     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
310     virtual std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& descriptor,
311                                                    const WorkloadInfo& info) const;
312 
313     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
314     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
315     virtual std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& descriptor,
316                                                       const WorkloadInfo& Info) const;
317 
318     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
319     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
320     virtual std::unique_ptr<IWorkload> CreateQLstm(const QLstmQueueDescriptor& descriptor,
321                                                    const WorkloadInfo& info) const;
322 
323     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
324     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
325     virtual std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& descriptor,
326                                                            const WorkloadInfo& info) const;
327 
328     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
329     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
330     virtual std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& descriptor,
331                                                   const WorkloadInfo& info) const;
332 
333     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
334     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
335     virtual std::unique_ptr<IWorkload> CreateReduce(const ReduceQueueDescriptor& descriptor,
336                                                     const WorkloadInfo& info) const;
337 
338     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
339     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
340     virtual std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& descriptor,
341                                                      const WorkloadInfo& info) const;
342 
343     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
344     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
345     virtual std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& descriptor,
346                                                     const WorkloadInfo& info) const;
347 
348     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
349     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
350     virtual std::unique_ptr<IWorkload> CreateShape(const ShapeQueueDescriptor& descriptor,
351                                                    const WorkloadInfo& info) const;
352 
353     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
354     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
355     virtual std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& descriptor,
356                                                    const WorkloadInfo& info) const;
357 
358     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
359     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
360     virtual std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& descriptor,
361                                                      const WorkloadInfo&           info) const;
362 
363     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
364     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
365     virtual std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor,
366                                                             const WorkloadInfo& info) const;
367 
368     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
369     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
370     virtual std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& descriptor,
371                                                           const WorkloadInfo& info) const;
372 
373     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
374     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
375     virtual std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& descriptor,
376                                                          const WorkloadInfo& info) const;
377 
378     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
379     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
380     virtual std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& descriptor,
381                                                       const WorkloadInfo&            info) const;
382 
383     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
384     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
385     virtual std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& descriptor,
386                                                    const WorkloadInfo& info) const;
387 
388     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
389     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
390     virtual std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor,
391                                                           const WorkloadInfo& Info) const;
392 
393     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
394     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
395     virtual std::unique_ptr<IWorkload> CreateSwitch(const SwitchQueueDescriptor& descriptor,
396                                                     const WorkloadInfo& Info) const;
397 
398     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
399     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
400     virtual std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& descriptor,
401                                                        const WorkloadInfo& info) const;
402 
403     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
404     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
405     virtual std::unique_ptr<IWorkload> CreateTransposeConvolution2d(
406         const TransposeConvolution2dQueueDescriptor& descriptor,
407         const WorkloadInfo& info) const;
408 
409     ARMNN_DEPRECATED_MSG_REMOVAL_DATE("Use ABI stable "
410     "CreateWorkload(LayerType, const QueueDescriptor&, const WorkloadInfo& info) instead.", "23.08")
411     virtual std::unique_ptr<IWorkload> CreateUnidirectionalSequenceLstm(
412         const UnidirectionalSequenceLstmQueueDescriptor& descriptor,
413         const WorkloadInfo& info) const;
414 
415 private:
416     static bool IsLayerConfigurationSupported(const BackendId& backendId,
417                                        const IConnectableLayer& connectableLayer,
418                                        Optional<DataType> dataType,
419                                        std::string& outReasonIfUnsupported,
420                                        const ModelOptions& modelOptions = {});
421 };
422 
423 } // namespace armnn
424