blob: 77d42096579788eb576701627eca13f80079c18b [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
telsoa01c577f2c2018-08-31 09:22:23 +0100211// Depthwise Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000212struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
213{
214 DepthwiseConvolution2dQueueDescriptor()
215 : m_Weight(nullptr)
216 , m_Bias(nullptr)
217 {
218 }
219
James Conroy1f58f032021-04-27 17:13:27 +0100220 const ConstTensorHandle* m_Weight;
221 const ConstTensorHandle* m_Bias;
telsoa014fcda012018-03-09 14:13:49 +0000222
223 void Validate(const WorkloadInfo& workloadInfo) const;
224};
225
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000226struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
227{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000228 DetectionPostProcessQueueDescriptor()
229 : m_Anchors(nullptr)
230 {
231 }
232
James Conroy1f58f032021-04-27 17:13:27 +0100233 const ConstTensorHandle* m_Anchors;
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000234
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000235 void Validate(const WorkloadInfo& workloadInfo) const;
236};
237
telsoa01c577f2c2018-08-31 09:22:23 +0100238// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000239struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
240{
241 void Validate(const WorkloadInfo& workloadInfo) const;
242};
243
telsoa01c577f2c2018-08-31 09:22:23 +0100244// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000245struct AdditionQueueDescriptor : QueueDescriptor
246{
247 void Validate(const WorkloadInfo& workloadInfo) const;
248};
249
telsoa01c577f2c2018-08-31 09:22:23 +0100250// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000251struct MultiplicationQueueDescriptor : QueueDescriptor
252{
253 void Validate(const WorkloadInfo& workloadInfo) const;
254};
255
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100256// Division layer workload data.
257struct DivisionQueueDescriptor : QueueDescriptor
258{
259 void Validate(const WorkloadInfo& workloadInfo) const;
260};
261
David Beckc2044fe2018-09-05 15:00:38 +0100262// Subtraction layer workload data.
263struct SubtractionQueueDescriptor : QueueDescriptor
264{
265 void Validate(const WorkloadInfo& workloadInfo) const;
266};
267
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000268// Maximum layer workload data.
269struct MaximumQueueDescriptor : QueueDescriptor
270{
271 void Validate(const WorkloadInfo& workloadInfo) const;
272};
273
narpra01a6bf9122018-09-10 09:50:09 +0100274// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100275struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100276{
277 void Validate(const WorkloadInfo& workloadInfo) const;
278};
279
jimfly012c9322a2018-09-19 10:59:49 +0100280// Pad layer workload data
281struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
282{
283 void Validate(const WorkloadInfo& workloadInfo) const;
284};
285
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000286struct QuantizeQueueDescriptor : QueueDescriptor
287{
288 void Validate(const WorkloadInfo& workloadInfo) const;
289};
290
Teresa Charlincedd34f2020-03-30 11:17:30 +0100291// Deprecated use ComparisonQueueDescriptor instead
FrancisMurtagh20995952018-12-17 12:11:36 +0000292struct EqualQueueDescriptor : QueueDescriptor
293{
294 void Validate(const WorkloadInfo& workloadInfo) const;
295};
296
telsoa01c577f2c2018-08-31 09:22:23 +0100297// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000298struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
299{
300 BatchNormalizationQueueDescriptor()
301 : m_Mean(nullptr)
302 , m_Variance(nullptr)
303 , m_Beta(nullptr)
304 , m_Gamma(nullptr)
305 {
306 }
307
James Conroy1f58f032021-04-27 17:13:27 +0100308 const ConstTensorHandle* m_Mean;
309 const ConstTensorHandle* m_Variance;
310 const ConstTensorHandle* m_Beta;
311 const ConstTensorHandle* m_Gamma;
telsoa014fcda012018-03-09 14:13:49 +0000312
313 void Validate(const WorkloadInfo& workloadInfo) const;
314};
315
Finn Williams2605b232020-06-10 15:53:46 +0100316struct RankQueueDescriptor : QueueDescriptor
317{
318 void Validate(const WorkloadInfo& workloadInfo) const;
319};
320
telsoa014fcda012018-03-09 14:13:49 +0000321struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
322{
323 void Validate(const WorkloadInfo& workloadInfo) const;
324};
325
Teresa Charlina9075df2019-06-27 15:41:57 +0100326struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
327{
328 void Validate(const WorkloadInfo& workloadInfo) const;
329};
330
telsoa014fcda012018-03-09 14:13:49 +0000331struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
332{
333 FakeQuantizationQueueDescriptor()
334 : m_Min(nullptr)
335 , m_Max(nullptr)
336 {
337 }
338
James Conroy1f58f032021-04-27 17:13:27 +0100339 const ConstTensorHandle* m_Min;
340 const ConstTensorHandle* m_Max;
telsoa014fcda012018-03-09 14:13:49 +0000341
342 void Validate(const WorkloadInfo& workloadInfo) const;
343};
344
Kevin Mayce5045a2019-10-02 14:07:47 +0100345struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
346{
Kevin Mayce5045a2019-10-02 14:07:47 +0100347 void Validate(const WorkloadInfo& workloadInfo) const;
348};
349
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100350struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000351{
352 void Validate(const WorkloadInfo& workloadInfo) const;
353};
354
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100355struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
356{
357 void Validate(const WorkloadInfo& workloadInfo) const;
358};
359
telsoa014fcda012018-03-09 14:13:49 +0000360struct ConstantQueueDescriptor : QueueDescriptor
361{
362 ConstantQueueDescriptor()
363 : m_LayerOutput(nullptr)
364 {
365 }
366
James Conroy1f58f032021-04-27 17:13:27 +0100367 const ConstTensorHandle* m_LayerOutput;
telsoa014fcda012018-03-09 14:13:49 +0000368
369 void Validate(const WorkloadInfo& workloadInfo) const;
370};
371
372struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
373{
374 void Validate(const WorkloadInfo& workloadInfo) const;
375};
376
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000377struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
378{
379 void Validate(const WorkloadInfo& workloadInfo) const;
380};
381
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100382struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
383{
384 void Validate(const WorkloadInfo& workloadInfo) const;
385};
386
telsoa014fcda012018-03-09 14:13:49 +0000387struct FloorQueueDescriptor : QueueDescriptor
388{
389 void Validate(const WorkloadInfo& workloadInfo) const;
390};
391
telsoa01c577f2c2018-08-31 09:22:23 +0100392struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
393{
394 LstmQueueDescriptor()
395 : m_InputToInputWeights(nullptr)
396 , m_InputToForgetWeights(nullptr)
397 , m_InputToCellWeights(nullptr)
398 , m_InputToOutputWeights(nullptr)
399 , m_RecurrentToInputWeights(nullptr)
400 , m_RecurrentToForgetWeights(nullptr)
401 , m_RecurrentToCellWeights(nullptr)
402 , m_RecurrentToOutputWeights(nullptr)
403 , m_CellToInputWeights(nullptr)
404 , m_CellToForgetWeights(nullptr)
405 , m_CellToOutputWeights(nullptr)
406 , m_InputGateBias(nullptr)
407 , m_ForgetGateBias(nullptr)
408 , m_CellBias(nullptr)
409 , m_OutputGateBias(nullptr)
410 , m_ProjectionWeights(nullptr)
411 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100412 , m_InputLayerNormWeights(nullptr)
413 , m_ForgetLayerNormWeights(nullptr)
414 , m_CellLayerNormWeights(nullptr)
415 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100416 {
417 }
418
James Conroy1f58f032021-04-27 17:13:27 +0100419 const ConstTensorHandle* m_InputToInputWeights;
420 const ConstTensorHandle* m_InputToForgetWeights;
421 const ConstTensorHandle* m_InputToCellWeights;
422 const ConstTensorHandle* m_InputToOutputWeights;
423 const ConstTensorHandle* m_RecurrentToInputWeights;
424 const ConstTensorHandle* m_RecurrentToForgetWeights;
425 const ConstTensorHandle* m_RecurrentToCellWeights;
426 const ConstTensorHandle* m_RecurrentToOutputWeights;
427 const ConstTensorHandle* m_CellToInputWeights;
428 const ConstTensorHandle* m_CellToForgetWeights;
429 const ConstTensorHandle* m_CellToOutputWeights;
430 const ConstTensorHandle* m_InputGateBias;
431 const ConstTensorHandle* m_ForgetGateBias;
432 const ConstTensorHandle* m_CellBias;
433 const ConstTensorHandle* m_OutputGateBias;
434 const ConstTensorHandle* m_ProjectionWeights;
435 const ConstTensorHandle* m_ProjectionBias;
436 const ConstTensorHandle* m_InputLayerNormWeights;
437 const ConstTensorHandle* m_ForgetLayerNormWeights;
438 const ConstTensorHandle* m_CellLayerNormWeights;
439 const ConstTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100440
441 void Validate(const WorkloadInfo& workloadInfo) const;
442};
443
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000444struct ConvertBf16ToFp32QueueDescriptor : QueueDescriptor
445{
446 void Validate(const WorkloadInfo& workloadInfo) const;
447};
448
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000449struct ConvertFp32ToBf16QueueDescriptor : QueueDescriptor
450{
451 void Validate(const WorkloadInfo& workloadInfo) const;
452};
453
telsoa01c577f2c2018-08-31 09:22:23 +0100454struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
455{
456 void Validate(const WorkloadInfo& workloadInfo) const;
457};
458
459struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
460{
461 void Validate(const WorkloadInfo& workloadInfo) const;
462};
463
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000464struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
465{
466 void Validate(const WorkloadInfo& workloadInfo) const;
467};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000468
469struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
470{
471 void Validate(const WorkloadInfo& workloadInfo) const;
472};
473
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000474// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000475struct MinimumQueueDescriptor : QueueDescriptor
476{
477 void Validate(const WorkloadInfo& workloadInfo) const;
478};
479
Teresa Charlin2b030d92020-03-27 16:40:56 +0000480// Deprecated use ComparisonQueueDescriptor instead
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000481struct GreaterQueueDescriptor : QueueDescriptor
482{
483 void Validate(const WorkloadInfo& workloadInfo) const;
484};
485
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000486struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000487{
janeil013fec1ea2019-11-07 09:47:20 +0000488 DebugQueueDescriptor() : m_Guid(0) {}
489
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000490 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000491
492 LayerGuid m_Guid;
493 std::string m_LayerName;
494 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000495};
496
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000497struct RsqrtQueueDescriptor : QueueDescriptor
498{
499 void Validate(const WorkloadInfo& workloadInfo) const;
500};
501
Teresa Charlin52664732020-06-29 16:27:03 +0100502struct GatherQueueDescriptor : QueueDescriptorWithParameters<GatherDescriptor>
narpra01b89b05f2019-01-16 09:53:09 +0000503{
504 void Validate(const WorkloadInfo& workloadInfo) const;
505};
506
Matteo Martincigh49124022019-01-11 13:25:59 +0000507struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
508{
509 PreCompiledQueueDescriptor()
510 : m_PreCompiledObject(nullptr)
511 {
512 }
513
Matteo Martincigh7997a352019-04-17 15:37:30 +0100514 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000515
516 void Validate(const WorkloadInfo& workloadInfo) const;
517};
518
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000519struct DequantizeQueueDescriptor : QueueDescriptor
520{
521 void Validate(const WorkloadInfo& workloadInfo) const;
522};
523
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100524struct MergeQueueDescriptor : QueueDescriptor
525{
526 void Validate(const WorkloadInfo& workloadInfo) const;
527};
528
Sadik Armaganeff363d2019-04-05 15:25:46 +0100529struct SwitchQueueDescriptor : QueueDescriptor
530{
531 void Validate(const WorkloadInfo& workloadInfo) const;
532};
533
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100534struct PreluQueueDescriptor : QueueDescriptor
535{
536 void Validate(const WorkloadInfo& workloadInfo) const;
537};
538
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100539struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
540{
541 TransposeConvolution2dQueueDescriptor() :
542 m_Weight(nullptr),
543 m_Bias(nullptr)
544 {}
545
James Conroy1f58f032021-04-27 17:13:27 +0100546 const ConstTensorHandle* m_Weight;
547 const ConstTensorHandle* m_Bias;
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100548
549 void Validate(const WorkloadInfo& workloadInfo) const;
550};
551
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000552struct TransposeQueueDescriptor : QueueDescriptorWithParameters<TransposeDescriptor>
553{
554 void Validate(const WorkloadInfo& workloadInfo) const;
555};
556
James Conroy586a9aa2020-03-20 08:49:33 +0000557struct QLstmQueueDescriptor : QueueDescriptorWithParameters<QLstmDescriptor>
558{
559 QLstmQueueDescriptor()
560 : m_InputToInputWeights(nullptr)
561 , m_InputToForgetWeights(nullptr)
562 , m_InputToCellWeights(nullptr)
563 , m_InputToOutputWeights(nullptr)
564 , m_RecurrentToInputWeights(nullptr)
565 , m_RecurrentToForgetWeights(nullptr)
566 , m_RecurrentToCellWeights(nullptr)
567 , m_RecurrentToOutputWeights(nullptr)
568 , m_CellToInputWeights(nullptr)
569 , m_CellToForgetWeights(nullptr)
570 , m_CellToOutputWeights(nullptr)
571 , m_InputGateBias(nullptr)
572 , m_ForgetGateBias(nullptr)
573 , m_CellBias(nullptr)
574 , m_OutputGateBias(nullptr)
575 , m_ProjectionWeights(nullptr)
576 , m_ProjectionBias(nullptr)
577 , m_InputLayerNormWeights(nullptr)
578 , m_ForgetLayerNormWeights(nullptr)
579 , m_CellLayerNormWeights(nullptr)
580 , m_OutputLayerNormWeights(nullptr)
581 {
582 }
583
James Conroy1f58f032021-04-27 17:13:27 +0100584 const ConstTensorHandle* m_InputToInputWeights;
585 const ConstTensorHandle* m_InputToForgetWeights;
586 const ConstTensorHandle* m_InputToCellWeights;
587 const ConstTensorHandle* m_InputToOutputWeights;
588 const ConstTensorHandle* m_RecurrentToInputWeights;
589 const ConstTensorHandle* m_RecurrentToForgetWeights;
590 const ConstTensorHandle* m_RecurrentToCellWeights;
591 const ConstTensorHandle* m_RecurrentToOutputWeights;
592 const ConstTensorHandle* m_CellToInputWeights;
593 const ConstTensorHandle* m_CellToForgetWeights;
594 const ConstTensorHandle* m_CellToOutputWeights;
595 const ConstTensorHandle* m_InputGateBias;
596 const ConstTensorHandle* m_ForgetGateBias;
597 const ConstTensorHandle* m_CellBias;
598 const ConstTensorHandle* m_OutputGateBias;
599 const ConstTensorHandle* m_ProjectionWeights;
600 const ConstTensorHandle* m_ProjectionBias;
601 const ConstTensorHandle* m_InputLayerNormWeights;
602 const ConstTensorHandle* m_ForgetLayerNormWeights;
603 const ConstTensorHandle* m_CellLayerNormWeights;
604 const ConstTensorHandle* m_OutputLayerNormWeights;
James Conroy586a9aa2020-03-20 08:49:33 +0000605
606 void Validate(const WorkloadInfo& workloadInfo) const;
607};
608
James Conroyee18dc82019-07-17 11:27:46 +0100609struct QuantizedLstmQueueDescriptor : QueueDescriptor
610{
611 QuantizedLstmQueueDescriptor()
612 : m_InputToInputWeights(nullptr)
613 , m_InputToForgetWeights(nullptr)
614 , m_InputToCellWeights(nullptr)
615 , m_InputToOutputWeights(nullptr)
616
617 , m_RecurrentToInputWeights(nullptr)
618 , m_RecurrentToForgetWeights(nullptr)
619 , m_RecurrentToCellWeights(nullptr)
620 , m_RecurrentToOutputWeights(nullptr)
621
622 , m_InputGateBias(nullptr)
623 , m_ForgetGateBias(nullptr)
624 , m_CellBias(nullptr)
625 , m_OutputGateBias(nullptr)
626 {}
627
James Conroy1f58f032021-04-27 17:13:27 +0100628 const ConstTensorHandle* m_InputToInputWeights;
629 const ConstTensorHandle* m_InputToForgetWeights;
630 const ConstTensorHandle* m_InputToCellWeights;
631 const ConstTensorHandle* m_InputToOutputWeights;
James Conroyee18dc82019-07-17 11:27:46 +0100632
James Conroy1f58f032021-04-27 17:13:27 +0100633 const ConstTensorHandle* m_RecurrentToInputWeights;
634 const ConstTensorHandle* m_RecurrentToForgetWeights;
635 const ConstTensorHandle* m_RecurrentToCellWeights;
636 const ConstTensorHandle* m_RecurrentToOutputWeights;
James Conroyee18dc82019-07-17 11:27:46 +0100637
James Conroy1f58f032021-04-27 17:13:27 +0100638 const ConstTensorHandle* m_InputGateBias;
639 const ConstTensorHandle* m_ForgetGateBias;
640 const ConstTensorHandle* m_CellBias;
641 const ConstTensorHandle* m_OutputGateBias;
James Conroyee18dc82019-07-17 11:27:46 +0100642
643 void Validate(const WorkloadInfo& workloadInfo) const;
644};
645
Kevin May868eb142019-09-04 17:29:31 +0100646struct AbsQueueDescriptor : QueueDescriptor
647{
648 void Validate(const WorkloadInfo& workloadInfo) const;
649};
650
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100651struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
652{
653 void Validate(const WorkloadInfo& workloadInfo) const;
654};
655
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100656struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
657{
658 void Validate(const WorkloadInfo& workloadInfo) const;
659};
660
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100661struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
662{
663 void Validate(const WorkloadInfo& workloadInfo) const;
664};
665
josh minor4a3c6102020-01-06 16:40:46 -0600666struct ElementwiseUnaryQueueDescriptor : QueueDescriptorWithParameters<ElementwiseUnaryDescriptor>
667{
668 void Validate(const WorkloadInfo& workloadInfo) const;
669};
670
James Conroyaba90cd2020-11-06 16:28:18 +0000671struct LogicalBinaryQueueDescriptor : QueueDescriptorWithParameters<LogicalBinaryDescriptor>
672{
673 void Validate(const WorkloadInfo& workloadInfo) const;
674};
675
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000676struct ReduceQueueDescriptor : QueueDescriptorWithParameters<ReduceDescriptor>
677{
678 void Validate(const WorkloadInfo& workloadInfo) const;
679};
680
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100681} // namespace armnn