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