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