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