blob: 36653bdc0dd39741b9d8be76c0327d5416b7a1ec [file] [log] [blame]
Laurent Carlier749294b2020-06-01 09:03:17 +01001//
telsoa014fcda012018-03-09 14:13:49 +00002// Copyright © 2017 Arm Ltd. All rights reserved.
David Beckecb56cd2018-09-05 12:52:57 +01003// SPDX-License-Identifier: MIT
telsoa014fcda012018-03-09 14:13:49 +00004//
5#pragma once
6
James Conroy1f58f032021-04-27 17:13:27 +01007#include <armnn/backends/TensorHandleFwd.hpp>
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00008#include <armnn/backends/ITensorHandle.hpp>
telsoa014fcda012018-03-09 14:13:49 +00009
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000010#include <InternalTypes.hpp>
11
Jim Flynne242f2d2019-05-22 14:24:13 +010012#include <armnn/Deprecated.hpp>
David Beck0dbe0ee2018-09-24 15:59:27 +010013#include <armnn/Descriptors.hpp>
14#include <armnn/Exceptions.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000015#include <armnn/Types.hpp>
16#include <armnn/Tensor.hpp>
David Beck0dbe0ee2018-09-24 15:59:27 +010017
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000018#include <backendsCommon/WorkloadInfo.hpp>
telsoa014fcda012018-03-09 14:13:49 +000019
20namespace armnn
21{
22
telsoa01c577f2c2018-08-31 09:22:23 +010023//A helper function that returns the bias data type required for given input data type.
telsoa014fcda012018-03-09 14:13:49 +000024DataType GetBiasDataType(DataType inputDataType);
25
26struct WorkloadInfo;
27
28struct QueueDescriptor
29{
30 std::vector<ITensorHandle*> m_Inputs;
31 std::vector<ITensorHandle*> m_Outputs;
Keith Davisdf04d232020-10-23 17:20:05 +010032 void* m_AdditionalInfoObject;
telsoa014fcda012018-03-09 14:13:49 +000033
34 void ValidateInputsOutputs(const std::string& descName,
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000035 unsigned int numExpectedIn,
36 unsigned int numExpectedOut) const;
telsoa014fcda012018-03-09 14:13:49 +000037
Keith Davisdf04d232020-10-23 17:20:05 +010038 template<typename T>
Mike Kelly07810fc2020-11-12 10:58:48 +000039 const T* GetAdditionalInformation() const
Keith Davisdf04d232020-10-23 17:20:05 +010040 {
41 return static_cast<T*>(m_AdditionalInfoObject);
42 }
telsoa014fcda012018-03-09 14:13:49 +000043
44protected:
45 ~QueueDescriptor() = default;
Keith Davisdf04d232020-10-23 17:20:05 +010046 QueueDescriptor()
47 : m_AdditionalInfoObject(nullptr)
48 {}
telsoa014fcda012018-03-09 14:13:49 +000049 QueueDescriptor(QueueDescriptor const&) = default;
50 QueueDescriptor& operator=(QueueDescriptor const&) = default;
51};
52
telsoa01c577f2c2018-08-31 09:22:23 +010053// Base class for queue descriptors which contain parameters.
telsoa014fcda012018-03-09 14:13:49 +000054template <typename LayerDescriptor>
55struct QueueDescriptorWithParameters : public QueueDescriptor
56{
57 LayerDescriptor m_Parameters;
58
59protected:
60 ~QueueDescriptorWithParameters() = default;
61 QueueDescriptorWithParameters() = default;
62 QueueDescriptorWithParameters(QueueDescriptorWithParameters const&) = default;
63 QueueDescriptorWithParameters& operator=(QueueDescriptorWithParameters const&) = default;
64};
65
Jim Flynn68db06f2020-10-06 10:14:50 +010066struct MapQueueDescriptor : QueueDescriptor
67{
68 void Validate(const WorkloadInfo& workloadInfo) const;
69};
70
Jim Flynn3a40ea52020-10-08 11:42:30 +010071struct UnmapQueueDescriptor : QueueDescriptor
72{
73 void Validate(const WorkloadInfo& workloadInfo) const;
74};
75
telsoa014fcda012018-03-09 14:13:49 +000076struct MemCopyQueueDescriptor : QueueDescriptor
77{
78 void Validate(const WorkloadInfo& workloadInfo) const;
79};
80
81using InputQueueDescriptor = MemCopyQueueDescriptor;
82using OutputQueueDescriptor = MemCopyQueueDescriptor;
83
Derek Lambertif674aa02019-08-01 15:56:25 +010084struct MemImportQueueDescriptor : QueueDescriptor
85{
86 void Validate(const WorkloadInfo& workloadInfo) const;
87};
88
89struct MemSyncQueueDescriptor : QueueDescriptor
90{
91 void Validate(const WorkloadInfo& workloadInfo) const;
92};
93
telsoa01c577f2c2018-08-31 09:22:23 +010094// Softmax layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000095struct SoftmaxQueueDescriptor : QueueDescriptorWithParameters<SoftmaxDescriptor>
96{
97 void Validate(const WorkloadInfo& workloadInfo) const;
98};
99
telsoa01c577f2c2018-08-31 09:22:23 +0100100// Splitter layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000101struct SplitterQueueDescriptor : QueueDescriptorWithParameters<ViewsDescriptor>
102{
103 struct ViewOrigin
104 {
105 ViewOrigin() {}
106 ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
107
telsoa01c577f2c2018-08-31 09:22:23 +0100108 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +0000109 std::vector<unsigned int> m_Origin;
110 };
111
telsoa01c577f2c2018-08-31 09:22:23 +0100112 //View defines a tensor that will be carved from the input tensor.
113 //View origins are stored here, the extents are defined by sizes of the output tensors.
telsoa014fcda012018-03-09 14:13:49 +0000114 std::vector<ViewOrigin> m_ViewOrigins;
115
116 void Validate(const WorkloadInfo& workloadInfo) const;
117};
118
Jim Flynne242f2d2019-05-22 14:24:13 +0100119// Concat layer workload data.
120struct ConcatQueueDescriptor : QueueDescriptorWithParameters<OriginsDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000121{
122 struct ViewOrigin
123 {
124 ViewOrigin() {}
125 ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
126
telsoa01c577f2c2018-08-31 09:22:23 +0100127 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +0000128 std::vector<unsigned int> m_Origin;
129 };
130
telsoa01c577f2c2018-08-31 09:22:23 +0100131 //View defines a sub-area of the output tensor that will be filled with the corresponding input tensor.
132 //View origins are stored here, the extents are defined by sizes of the input tensors.
telsoa014fcda012018-03-09 14:13:49 +0000133 std::vector<ViewOrigin> m_ViewOrigins;
134
135 void Validate(const WorkloadInfo& workloadInfo) const;
136};
137
Jim Flynne242f2d2019-05-22 14:24:13 +0100138// Deprecated. Use ConcatQueueDescriptor instead
139using MergerQueueDescriptor = ConcatQueueDescriptor;
140
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100141// Stack layer workload data.
142struct StackQueueDescriptor : QueueDescriptorWithParameters<StackDescriptor>
143{
144 void Validate(const WorkloadInfo& workloadInfo) const;
145};
146
telsoa01c577f2c2018-08-31 09:22:23 +0100147// Activation layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000148struct ActivationQueueDescriptor : QueueDescriptorWithParameters<ActivationDescriptor>
149{
150 void Validate(const WorkloadInfo& workloadInfo) const;
151};
152
Nikhil Rajee391d52019-09-05 17:50:44 +0100153struct ArgMinMaxQueueDescriptor : QueueDescriptorWithParameters<ArgMinMaxDescriptor>
154{
155 void Validate(const WorkloadInfo& workloadInfo) const;
156};
157
mathad01b392e982021-04-07 12:07:30 +0100158struct CastQueueDescriptor : QueueDescriptor
159{
160 void Validate(const WorkloadInfo& workloadInfo) const;
161};
162
Ryan OSheaec6c6802020-06-05 17:17:06 +0100163// Fill layer workload data.
164struct FillQueueDescriptor : QueueDescriptorWithParameters<FillDescriptor>
165{
Ryan OSheaec6c6802020-06-05 17:17:06 +0100166 void Validate(const WorkloadInfo& workloadInfo) const;
167};
168
telsoa01c577f2c2018-08-31 09:22:23 +0100169// Fully connected layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000170struct FullyConnectedQueueDescriptor : QueueDescriptorWithParameters<FullyConnectedDescriptor>
171{
172 FullyConnectedQueueDescriptor()
173 : m_Weight(nullptr)
174 , m_Bias(nullptr)
175 {
176 }
177
James Conroy1f58f032021-04-27 17:13:27 +0100178 const ConstTensorHandle* m_Weight;
179 const ConstTensorHandle* m_Bias;
telsoa014fcda012018-03-09 14:13:49 +0000180
181 void Validate(const WorkloadInfo& workloadInfo) const;
182};
183
telsoa01c577f2c2018-08-31 09:22:23 +0100184// Permute layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000185struct PermuteQueueDescriptor : QueueDescriptorWithParameters<PermuteDescriptor>
186{
187 void Validate(const WorkloadInfo& workloadInfo) const;
188};
189
telsoa01c577f2c2018-08-31 09:22:23 +0100190// Pooling 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000191struct Pooling2dQueueDescriptor : QueueDescriptorWithParameters<Pooling2dDescriptor>
192{
193 void Validate(const WorkloadInfo& workloadInfo) const;
194};
195
telsoa01c577f2c2018-08-31 09:22:23 +0100196// Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000197struct Convolution2dQueueDescriptor : QueueDescriptorWithParameters<Convolution2dDescriptor>
198{
199 Convolution2dQueueDescriptor()
200 : m_Weight(nullptr)
201 , m_Bias(nullptr)
202 {
203 }
204
James Conroy1f58f032021-04-27 17:13:27 +0100205 const ConstTensorHandle* m_Weight;
206 const ConstTensorHandle* m_Bias;
telsoa014fcda012018-03-09 14:13:49 +0000207
208 void Validate(const WorkloadInfo& workloadInfo) const;
209};
210
Jan Eilers53ef7952021-06-02 12:01:25 +0100211/// Depthwise Convolution 2D layer workload data.
212///
213/// @note
214/// The weights are in the format [1, H, W, I*M]. Where I is the input channel size, M the depthwise mutliplier and
215/// H, W is the height and width of the filter kernel. If per channel quantization is applied
216/// the weights will be quantized along the last dimension/axis (I*M) which corresponds to the output channel size.
217/// If per channel quantization is applied the weights tensor will have I*M scales, one for each dimension
218/// of the quantization axis. You have to be aware of this when reshaping the weights tensor.
219/// Splitting the I*M axis, e.g. [1, H, W, I*M] --> [H, W, I, M], won't work without taking care of the
220/// corresponding quantization scales.
221/// If there is no per channel quantization applied reshaping the weights tensor won't cause any issues. There are
222/// preconfigured permutation functions available @link WorkloadUtils.hpp here.
223///
telsoa014fcda012018-03-09 14:13:49 +0000224struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
225{
226 DepthwiseConvolution2dQueueDescriptor()
227 : m_Weight(nullptr)
228 , m_Bias(nullptr)
229 {
230 }
231
James Conroy1f58f032021-04-27 17:13:27 +0100232 const ConstTensorHandle* m_Weight;
233 const ConstTensorHandle* m_Bias;
telsoa014fcda012018-03-09 14:13:49 +0000234
235 void Validate(const WorkloadInfo& workloadInfo) const;
236};
237
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000238struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
239{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000240 DetectionPostProcessQueueDescriptor()
241 : m_Anchors(nullptr)
242 {
243 }
244
James Conroy1f58f032021-04-27 17:13:27 +0100245 const ConstTensorHandle* m_Anchors;
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000246
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000247 void Validate(const WorkloadInfo& workloadInfo) const;
248};
249
telsoa01c577f2c2018-08-31 09:22:23 +0100250// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000251struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
252{
253 void Validate(const WorkloadInfo& workloadInfo) const;
254};
255
telsoa01c577f2c2018-08-31 09:22:23 +0100256// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000257struct AdditionQueueDescriptor : QueueDescriptor
258{
259 void Validate(const WorkloadInfo& workloadInfo) const;
260};
261
telsoa01c577f2c2018-08-31 09:22:23 +0100262// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000263struct MultiplicationQueueDescriptor : QueueDescriptor
264{
265 void Validate(const WorkloadInfo& workloadInfo) const;
266};
267
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100268// Division layer workload data.
269struct DivisionQueueDescriptor : QueueDescriptor
270{
271 void Validate(const WorkloadInfo& workloadInfo) const;
272};
273
David Beckc2044fe2018-09-05 15:00:38 +0100274// Subtraction layer workload data.
275struct SubtractionQueueDescriptor : QueueDescriptor
276{
277 void Validate(const WorkloadInfo& workloadInfo) const;
278};
279
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000280// Maximum layer workload data.
281struct MaximumQueueDescriptor : QueueDescriptor
282{
283 void Validate(const WorkloadInfo& workloadInfo) const;
284};
285
narpra01a6bf9122018-09-10 09:50:09 +0100286// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100287struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100288{
289 void Validate(const WorkloadInfo& workloadInfo) const;
290};
291
jimfly012c9322a2018-09-19 10:59:49 +0100292// Pad layer workload data
293struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
294{
295 void Validate(const WorkloadInfo& workloadInfo) const;
296};
297
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000298struct QuantizeQueueDescriptor : QueueDescriptor
299{
300 void Validate(const WorkloadInfo& workloadInfo) const;
301};
302
Teresa Charlincedd34f2020-03-30 11:17:30 +0100303// Deprecated use ComparisonQueueDescriptor instead
FrancisMurtagh20995952018-12-17 12:11:36 +0000304struct EqualQueueDescriptor : QueueDescriptor
305{
306 void Validate(const WorkloadInfo& workloadInfo) const;
307};
308
telsoa01c577f2c2018-08-31 09:22:23 +0100309// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000310struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
311{
312 BatchNormalizationQueueDescriptor()
313 : m_Mean(nullptr)
314 , m_Variance(nullptr)
315 , m_Beta(nullptr)
316 , m_Gamma(nullptr)
317 {
318 }
319
James Conroy1f58f032021-04-27 17:13:27 +0100320 const ConstTensorHandle* m_Mean;
321 const ConstTensorHandle* m_Variance;
322 const ConstTensorHandle* m_Beta;
323 const ConstTensorHandle* m_Gamma;
telsoa014fcda012018-03-09 14:13:49 +0000324
325 void Validate(const WorkloadInfo& workloadInfo) const;
326};
327
Finn Williams2605b232020-06-10 15:53:46 +0100328struct RankQueueDescriptor : QueueDescriptor
329{
330 void Validate(const WorkloadInfo& workloadInfo) const;
331};
332
telsoa014fcda012018-03-09 14:13:49 +0000333struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
334{
335 void Validate(const WorkloadInfo& workloadInfo) const;
336};
337
Teresa Charlina9075df2019-06-27 15:41:57 +0100338struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
339{
340 void Validate(const WorkloadInfo& workloadInfo) const;
341};
342
telsoa014fcda012018-03-09 14:13:49 +0000343struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
344{
345 FakeQuantizationQueueDescriptor()
346 : m_Min(nullptr)
347 , m_Max(nullptr)
348 {
349 }
350
James Conroy1f58f032021-04-27 17:13:27 +0100351 const ConstTensorHandle* m_Min;
352 const ConstTensorHandle* m_Max;
telsoa014fcda012018-03-09 14:13:49 +0000353
354 void Validate(const WorkloadInfo& workloadInfo) const;
355};
356
Kevin Mayce5045a2019-10-02 14:07:47 +0100357struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
358{
Kevin Mayce5045a2019-10-02 14:07:47 +0100359 void Validate(const WorkloadInfo& workloadInfo) const;
360};
361
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100362struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000363{
364 void Validate(const WorkloadInfo& workloadInfo) const;
365};
366
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100367struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
368{
369 void Validate(const WorkloadInfo& workloadInfo) const;
370};
371
telsoa014fcda012018-03-09 14:13:49 +0000372struct ConstantQueueDescriptor : QueueDescriptor
373{
374 ConstantQueueDescriptor()
375 : m_LayerOutput(nullptr)
376 {
377 }
378
James Conroy1f58f032021-04-27 17:13:27 +0100379 const ConstTensorHandle* m_LayerOutput;
telsoa014fcda012018-03-09 14:13:49 +0000380
381 void Validate(const WorkloadInfo& workloadInfo) const;
382};
383
384struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
385{
386 void Validate(const WorkloadInfo& workloadInfo) const;
387};
388
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000389struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
390{
391 void Validate(const WorkloadInfo& workloadInfo) const;
392};
393
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100394struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
395{
396 void Validate(const WorkloadInfo& workloadInfo) const;
397};
398
telsoa014fcda012018-03-09 14:13:49 +0000399struct FloorQueueDescriptor : QueueDescriptor
400{
401 void Validate(const WorkloadInfo& workloadInfo) const;
402};
403
telsoa01c577f2c2018-08-31 09:22:23 +0100404struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
405{
406 LstmQueueDescriptor()
407 : m_InputToInputWeights(nullptr)
408 , m_InputToForgetWeights(nullptr)
409 , m_InputToCellWeights(nullptr)
410 , m_InputToOutputWeights(nullptr)
411 , m_RecurrentToInputWeights(nullptr)
412 , m_RecurrentToForgetWeights(nullptr)
413 , m_RecurrentToCellWeights(nullptr)
414 , m_RecurrentToOutputWeights(nullptr)
415 , m_CellToInputWeights(nullptr)
416 , m_CellToForgetWeights(nullptr)
417 , m_CellToOutputWeights(nullptr)
418 , m_InputGateBias(nullptr)
419 , m_ForgetGateBias(nullptr)
420 , m_CellBias(nullptr)
421 , m_OutputGateBias(nullptr)
422 , m_ProjectionWeights(nullptr)
423 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100424 , m_InputLayerNormWeights(nullptr)
425 , m_ForgetLayerNormWeights(nullptr)
426 , m_CellLayerNormWeights(nullptr)
427 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100428 {
429 }
430
James Conroy1f58f032021-04-27 17:13:27 +0100431 const ConstTensorHandle* m_InputToInputWeights;
432 const ConstTensorHandle* m_InputToForgetWeights;
433 const ConstTensorHandle* m_InputToCellWeights;
434 const ConstTensorHandle* m_InputToOutputWeights;
435 const ConstTensorHandle* m_RecurrentToInputWeights;
436 const ConstTensorHandle* m_RecurrentToForgetWeights;
437 const ConstTensorHandle* m_RecurrentToCellWeights;
438 const ConstTensorHandle* m_RecurrentToOutputWeights;
439 const ConstTensorHandle* m_CellToInputWeights;
440 const ConstTensorHandle* m_CellToForgetWeights;
441 const ConstTensorHandle* m_CellToOutputWeights;
442 const ConstTensorHandle* m_InputGateBias;
443 const ConstTensorHandle* m_ForgetGateBias;
444 const ConstTensorHandle* m_CellBias;
445 const ConstTensorHandle* m_OutputGateBias;
446 const ConstTensorHandle* m_ProjectionWeights;
447 const ConstTensorHandle* m_ProjectionBias;
448 const ConstTensorHandle* m_InputLayerNormWeights;
449 const ConstTensorHandle* m_ForgetLayerNormWeights;
450 const ConstTensorHandle* m_CellLayerNormWeights;
451 const ConstTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100452
453 void Validate(const WorkloadInfo& workloadInfo) const;
454};
455
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000456struct ConvertBf16ToFp32QueueDescriptor : QueueDescriptor
457{
458 void Validate(const WorkloadInfo& workloadInfo) const;
459};
460
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000461struct ConvertFp32ToBf16QueueDescriptor : QueueDescriptor
462{
463 void Validate(const WorkloadInfo& workloadInfo) const;
464};
465
telsoa01c577f2c2018-08-31 09:22:23 +0100466struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
467{
468 void Validate(const WorkloadInfo& workloadInfo) const;
469};
470
471struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
472{
473 void Validate(const WorkloadInfo& workloadInfo) const;
474};
475
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000476struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
477{
478 void Validate(const WorkloadInfo& workloadInfo) const;
479};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000480
481struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
482{
483 void Validate(const WorkloadInfo& workloadInfo) const;
484};
485
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000486// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000487struct MinimumQueueDescriptor : QueueDescriptor
488{
489 void Validate(const WorkloadInfo& workloadInfo) const;
490};
491
Teresa Charlin2b030d92020-03-27 16:40:56 +0000492// Deprecated use ComparisonQueueDescriptor instead
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000493struct GreaterQueueDescriptor : QueueDescriptor
494{
495 void Validate(const WorkloadInfo& workloadInfo) const;
496};
497
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000498struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000499{
janeil013fec1ea2019-11-07 09:47:20 +0000500 DebugQueueDescriptor() : m_Guid(0) {}
501
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000502 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000503
504 LayerGuid m_Guid;
505 std::string m_LayerName;
506 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000507};
508
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000509struct RsqrtQueueDescriptor : QueueDescriptor
510{
511 void Validate(const WorkloadInfo& workloadInfo) const;
512};
513
Teresa Charlin52664732020-06-29 16:27:03 +0100514struct GatherQueueDescriptor : QueueDescriptorWithParameters<GatherDescriptor>
narpra01b89b05f2019-01-16 09:53:09 +0000515{
516 void Validate(const WorkloadInfo& workloadInfo) const;
517};
518
Matteo Martincigh49124022019-01-11 13:25:59 +0000519struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
520{
521 PreCompiledQueueDescriptor()
522 : m_PreCompiledObject(nullptr)
523 {
524 }
525
Matteo Martincigh7997a352019-04-17 15:37:30 +0100526 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000527
528 void Validate(const WorkloadInfo& workloadInfo) const;
529};
530
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000531struct DequantizeQueueDescriptor : QueueDescriptor
532{
533 void Validate(const WorkloadInfo& workloadInfo) const;
534};
535
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100536struct MergeQueueDescriptor : QueueDescriptor
537{
538 void Validate(const WorkloadInfo& workloadInfo) const;
539};
540
Sadik Armaganeff363d2019-04-05 15:25:46 +0100541struct SwitchQueueDescriptor : QueueDescriptor
542{
543 void Validate(const WorkloadInfo& workloadInfo) const;
544};
545
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100546struct PreluQueueDescriptor : QueueDescriptor
547{
548 void Validate(const WorkloadInfo& workloadInfo) const;
549};
550
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100551struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
552{
553 TransposeConvolution2dQueueDescriptor() :
554 m_Weight(nullptr),
555 m_Bias(nullptr)
556 {}
557
James Conroy1f58f032021-04-27 17:13:27 +0100558 const ConstTensorHandle* m_Weight;
559 const ConstTensorHandle* m_Bias;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100560
561 void Validate(const WorkloadInfo& workloadInfo) const;
562};
563
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000564struct TransposeQueueDescriptor : QueueDescriptorWithParameters<TransposeDescriptor>
565{
566 void Validate(const WorkloadInfo& workloadInfo) const;
567};
568
James Conroy586a9aa2020-03-20 08:49:33 +0000569struct QLstmQueueDescriptor : QueueDescriptorWithParameters<QLstmDescriptor>
570{
571 QLstmQueueDescriptor()
572 : m_InputToInputWeights(nullptr)
573 , m_InputToForgetWeights(nullptr)
574 , m_InputToCellWeights(nullptr)
575 , m_InputToOutputWeights(nullptr)
576 , m_RecurrentToInputWeights(nullptr)
577 , m_RecurrentToForgetWeights(nullptr)
578 , m_RecurrentToCellWeights(nullptr)
579 , m_RecurrentToOutputWeights(nullptr)
580 , m_CellToInputWeights(nullptr)
581 , m_CellToForgetWeights(nullptr)
582 , m_CellToOutputWeights(nullptr)
583 , m_InputGateBias(nullptr)
584 , m_ForgetGateBias(nullptr)
585 , m_CellBias(nullptr)
586 , m_OutputGateBias(nullptr)
587 , m_ProjectionWeights(nullptr)
588 , m_ProjectionBias(nullptr)
589 , m_InputLayerNormWeights(nullptr)
590 , m_ForgetLayerNormWeights(nullptr)
591 , m_CellLayerNormWeights(nullptr)
592 , m_OutputLayerNormWeights(nullptr)
593 {
594 }
595
James Conroy1f58f032021-04-27 17:13:27 +0100596 const ConstTensorHandle* m_InputToInputWeights;
597 const ConstTensorHandle* m_InputToForgetWeights;
598 const ConstTensorHandle* m_InputToCellWeights;
599 const ConstTensorHandle* m_InputToOutputWeights;
600 const ConstTensorHandle* m_RecurrentToInputWeights;
601 const ConstTensorHandle* m_RecurrentToForgetWeights;
602 const ConstTensorHandle* m_RecurrentToCellWeights;
603 const ConstTensorHandle* m_RecurrentToOutputWeights;
604 const ConstTensorHandle* m_CellToInputWeights;
605 const ConstTensorHandle* m_CellToForgetWeights;
606 const ConstTensorHandle* m_CellToOutputWeights;
607 const ConstTensorHandle* m_InputGateBias;
608 const ConstTensorHandle* m_ForgetGateBias;
609 const ConstTensorHandle* m_CellBias;
610 const ConstTensorHandle* m_OutputGateBias;
611 const ConstTensorHandle* m_ProjectionWeights;
612 const ConstTensorHandle* m_ProjectionBias;
613 const ConstTensorHandle* m_InputLayerNormWeights;
614 const ConstTensorHandle* m_ForgetLayerNormWeights;
615 const ConstTensorHandle* m_CellLayerNormWeights;
616 const ConstTensorHandle* m_OutputLayerNormWeights;
James Conroy586a9aa2020-03-20 08:49:33 +0000617
618 void Validate(const WorkloadInfo& workloadInfo) const;
619};
620
James Conroyee18dc82019-07-17 11:27:46 +0100621struct QuantizedLstmQueueDescriptor : QueueDescriptor
622{
623 QuantizedLstmQueueDescriptor()
624 : m_InputToInputWeights(nullptr)
625 , m_InputToForgetWeights(nullptr)
626 , m_InputToCellWeights(nullptr)
627 , m_InputToOutputWeights(nullptr)
628
629 , m_RecurrentToInputWeights(nullptr)
630 , m_RecurrentToForgetWeights(nullptr)
631 , m_RecurrentToCellWeights(nullptr)
632 , m_RecurrentToOutputWeights(nullptr)
633
634 , m_InputGateBias(nullptr)
635 , m_ForgetGateBias(nullptr)
636 , m_CellBias(nullptr)
637 , m_OutputGateBias(nullptr)
638 {}
639
James Conroy1f58f032021-04-27 17:13:27 +0100640 const ConstTensorHandle* m_InputToInputWeights;
641 const ConstTensorHandle* m_InputToForgetWeights;
642 const ConstTensorHandle* m_InputToCellWeights;
643 const ConstTensorHandle* m_InputToOutputWeights;
James Conroyee18dc82019-07-17 11:27:46 +0100644
James Conroy1f58f032021-04-27 17:13:27 +0100645 const ConstTensorHandle* m_RecurrentToInputWeights;
646 const ConstTensorHandle* m_RecurrentToForgetWeights;
647 const ConstTensorHandle* m_RecurrentToCellWeights;
648 const ConstTensorHandle* m_RecurrentToOutputWeights;
James Conroyee18dc82019-07-17 11:27:46 +0100649
James Conroy1f58f032021-04-27 17:13:27 +0100650 const ConstTensorHandle* m_InputGateBias;
651 const ConstTensorHandle* m_ForgetGateBias;
652 const ConstTensorHandle* m_CellBias;
653 const ConstTensorHandle* m_OutputGateBias;
James Conroyee18dc82019-07-17 11:27:46 +0100654
655 void Validate(const WorkloadInfo& workloadInfo) const;
656};
657
Kevin May868eb142019-09-04 17:29:31 +0100658struct AbsQueueDescriptor : QueueDescriptor
659{
660 void Validate(const WorkloadInfo& workloadInfo) const;
661};
662
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100663struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
664{
665 void Validate(const WorkloadInfo& workloadInfo) const;
666};
667
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100668struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
669{
670 void Validate(const WorkloadInfo& workloadInfo) const;
671};
672
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100673struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
674{
675 void Validate(const WorkloadInfo& workloadInfo) const;
676};
677
josh minor4a3c6102020-01-06 16:40:46 -0600678struct ElementwiseUnaryQueueDescriptor : QueueDescriptorWithParameters<ElementwiseUnaryDescriptor>
679{
680 void Validate(const WorkloadInfo& workloadInfo) const;
681};
682
James Conroyaba90cd2020-11-06 16:28:18 +0000683struct LogicalBinaryQueueDescriptor : QueueDescriptorWithParameters<LogicalBinaryDescriptor>
684{
685 void Validate(const WorkloadInfo& workloadInfo) const;
686};
687
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000688struct ReduceQueueDescriptor : QueueDescriptorWithParameters<ReduceDescriptor>
689{
690 void Validate(const WorkloadInfo& workloadInfo) const;
691};
692
Keith Davis3ae3f972021-05-21 16:33:48 +0100693struct ShapeQueueDescriptor : QueueDescriptor
694{
695 void Validate(const WorkloadInfo& workloadInfo) const;
696};
697
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100698} // namespace armnn