blob: c563626b288903626a7e777739785ca2bb7388d3 [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
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00007#include <armnn/backends/CpuTensorHandleFwd.hpp>
8#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;
32
33 void ValidateInputsOutputs(const std::string& descName,
Narumol Prangnawarat867eba52020-02-03 12:29:56 +000034 unsigned int numExpectedIn,
35 unsigned int numExpectedOut) const;
telsoa014fcda012018-03-09 14:13:49 +000036
37
38protected:
39 ~QueueDescriptor() = default;
40 QueueDescriptor() = default;
41 QueueDescriptor(QueueDescriptor const&) = default;
42 QueueDescriptor& operator=(QueueDescriptor const&) = default;
43};
44
telsoa01c577f2c2018-08-31 09:22:23 +010045// Base class for queue descriptors which contain parameters.
telsoa014fcda012018-03-09 14:13:49 +000046template <typename LayerDescriptor>
47struct QueueDescriptorWithParameters : public QueueDescriptor
48{
49 LayerDescriptor m_Parameters;
50
51protected:
52 ~QueueDescriptorWithParameters() = default;
53 QueueDescriptorWithParameters() = default;
54 QueueDescriptorWithParameters(QueueDescriptorWithParameters const&) = default;
55 QueueDescriptorWithParameters& operator=(QueueDescriptorWithParameters const&) = default;
56};
57
Jim Flynn68db06f2020-10-06 10:14:50 +010058struct MapQueueDescriptor : QueueDescriptor
59{
60 void Validate(const WorkloadInfo& workloadInfo) const;
61};
62
Jim Flynn3a40ea52020-10-08 11:42:30 +010063struct UnmapQueueDescriptor : QueueDescriptor
64{
65 void Validate(const WorkloadInfo& workloadInfo) const;
66};
67
telsoa014fcda012018-03-09 14:13:49 +000068struct MemCopyQueueDescriptor : QueueDescriptor
69{
70 void Validate(const WorkloadInfo& workloadInfo) const;
71};
72
73using InputQueueDescriptor = MemCopyQueueDescriptor;
74using OutputQueueDescriptor = MemCopyQueueDescriptor;
75
Derek Lambertif674aa02019-08-01 15:56:25 +010076struct MemImportQueueDescriptor : QueueDescriptor
77{
78 void Validate(const WorkloadInfo& workloadInfo) const;
79};
80
81struct MemSyncQueueDescriptor : QueueDescriptor
82{
83 void Validate(const WorkloadInfo& workloadInfo) const;
84};
85
telsoa01c577f2c2018-08-31 09:22:23 +010086// Softmax layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000087struct SoftmaxQueueDescriptor : QueueDescriptorWithParameters<SoftmaxDescriptor>
88{
89 void Validate(const WorkloadInfo& workloadInfo) const;
90};
91
telsoa01c577f2c2018-08-31 09:22:23 +010092// Splitter layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000093struct SplitterQueueDescriptor : QueueDescriptorWithParameters<ViewsDescriptor>
94{
95 struct ViewOrigin
96 {
97 ViewOrigin() {}
98 ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
99
telsoa01c577f2c2018-08-31 09:22:23 +0100100 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +0000101 std::vector<unsigned int> m_Origin;
102 };
103
telsoa01c577f2c2018-08-31 09:22:23 +0100104 //View defines a tensor that will be carved from the input tensor.
105 //View origins are stored here, the extents are defined by sizes of the output tensors.
telsoa014fcda012018-03-09 14:13:49 +0000106 std::vector<ViewOrigin> m_ViewOrigins;
107
108 void Validate(const WorkloadInfo& workloadInfo) const;
109};
110
Jim Flynne242f2d2019-05-22 14:24:13 +0100111// Concat layer workload data.
112struct ConcatQueueDescriptor : QueueDescriptorWithParameters<OriginsDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000113{
114 struct ViewOrigin
115 {
116 ViewOrigin() {}
117 ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
118
telsoa01c577f2c2018-08-31 09:22:23 +0100119 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +0000120 std::vector<unsigned int> m_Origin;
121 };
122
telsoa01c577f2c2018-08-31 09:22:23 +0100123 //View defines a sub-area of the output tensor that will be filled with the corresponding input tensor.
124 //View origins are stored here, the extents are defined by sizes of the input tensors.
telsoa014fcda012018-03-09 14:13:49 +0000125 std::vector<ViewOrigin> m_ViewOrigins;
126
127 void Validate(const WorkloadInfo& workloadInfo) const;
128};
129
Jim Flynne242f2d2019-05-22 14:24:13 +0100130// Deprecated. Use ConcatQueueDescriptor instead
131using MergerQueueDescriptor = ConcatQueueDescriptor;
132
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100133// Stack layer workload data.
134struct StackQueueDescriptor : QueueDescriptorWithParameters<StackDescriptor>
135{
136 void Validate(const WorkloadInfo& workloadInfo) const;
137};
138
telsoa01c577f2c2018-08-31 09:22:23 +0100139// Activation layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000140struct ActivationQueueDescriptor : QueueDescriptorWithParameters<ActivationDescriptor>
141{
142 void Validate(const WorkloadInfo& workloadInfo) const;
143};
144
Nikhil Rajee391d52019-09-05 17:50:44 +0100145struct ArgMinMaxQueueDescriptor : QueueDescriptorWithParameters<ArgMinMaxDescriptor>
146{
147 void Validate(const WorkloadInfo& workloadInfo) const;
148};
149
Ryan OSheaec6c6802020-06-05 17:17:06 +0100150// Fill layer workload data.
151struct FillQueueDescriptor : QueueDescriptorWithParameters<FillDescriptor>
152{
Ryan OSheaec6c6802020-06-05 17:17:06 +0100153 void Validate(const WorkloadInfo& workloadInfo) const;
154};
155
telsoa01c577f2c2018-08-31 09:22:23 +0100156// Fully connected layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000157struct FullyConnectedQueueDescriptor : QueueDescriptorWithParameters<FullyConnectedDescriptor>
158{
159 FullyConnectedQueueDescriptor()
160 : m_Weight(nullptr)
161 , m_Bias(nullptr)
162 {
163 }
164
165 const ConstCpuTensorHandle* m_Weight;
166 const ConstCpuTensorHandle* m_Bias;
167
168 void Validate(const WorkloadInfo& workloadInfo) const;
169};
170
telsoa01c577f2c2018-08-31 09:22:23 +0100171// Permute layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000172struct PermuteQueueDescriptor : QueueDescriptorWithParameters<PermuteDescriptor>
173{
174 void Validate(const WorkloadInfo& workloadInfo) const;
175};
176
telsoa01c577f2c2018-08-31 09:22:23 +0100177// Pooling 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000178struct Pooling2dQueueDescriptor : QueueDescriptorWithParameters<Pooling2dDescriptor>
179{
180 void Validate(const WorkloadInfo& workloadInfo) const;
181};
182
telsoa01c577f2c2018-08-31 09:22:23 +0100183// Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000184struct Convolution2dQueueDescriptor : QueueDescriptorWithParameters<Convolution2dDescriptor>
185{
186 Convolution2dQueueDescriptor()
187 : m_Weight(nullptr)
188 , m_Bias(nullptr)
189 {
190 }
191
192 const ConstCpuTensorHandle* m_Weight;
193 const ConstCpuTensorHandle* m_Bias;
194
195 void Validate(const WorkloadInfo& workloadInfo) const;
196};
197
telsoa01c577f2c2018-08-31 09:22:23 +0100198// Depthwise Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000199struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
200{
201 DepthwiseConvolution2dQueueDescriptor()
202 : m_Weight(nullptr)
203 , m_Bias(nullptr)
204 {
205 }
206
207 const ConstCpuTensorHandle* m_Weight;
208 const ConstCpuTensorHandle* m_Bias;
209
210 void Validate(const WorkloadInfo& workloadInfo) const;
211};
212
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000213struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
214{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000215 DetectionPostProcessQueueDescriptor()
216 : m_Anchors(nullptr)
217 {
218 }
219
220 const ConstCpuTensorHandle* m_Anchors;
221
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000222 void Validate(const WorkloadInfo& workloadInfo) const;
223};
224
telsoa01c577f2c2018-08-31 09:22:23 +0100225// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000226struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
227{
228 void Validate(const WorkloadInfo& workloadInfo) const;
229};
230
telsoa01c577f2c2018-08-31 09:22:23 +0100231// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000232struct AdditionQueueDescriptor : QueueDescriptor
233{
234 void Validate(const WorkloadInfo& workloadInfo) const;
235};
236
telsoa01c577f2c2018-08-31 09:22:23 +0100237// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000238struct MultiplicationQueueDescriptor : QueueDescriptor
239{
240 void Validate(const WorkloadInfo& workloadInfo) const;
241};
242
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100243// Division layer workload data.
244struct DivisionQueueDescriptor : QueueDescriptor
245{
246 void Validate(const WorkloadInfo& workloadInfo) const;
247};
248
David Beckc2044fe2018-09-05 15:00:38 +0100249// Subtraction layer workload data.
250struct SubtractionQueueDescriptor : QueueDescriptor
251{
252 void Validate(const WorkloadInfo& workloadInfo) const;
253};
254
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000255// Maximum layer workload data.
256struct MaximumQueueDescriptor : QueueDescriptor
257{
258 void Validate(const WorkloadInfo& workloadInfo) const;
259};
260
narpra01a6bf9122018-09-10 09:50:09 +0100261// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100262struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100263{
264 void Validate(const WorkloadInfo& workloadInfo) const;
265};
266
jimfly012c9322a2018-09-19 10:59:49 +0100267// Pad layer workload data
268struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
269{
270 void Validate(const WorkloadInfo& workloadInfo) const;
271};
272
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000273struct QuantizeQueueDescriptor : QueueDescriptor
274{
275 void Validate(const WorkloadInfo& workloadInfo) const;
276};
277
Teresa Charlincedd34f2020-03-30 11:17:30 +0100278// Deprecated use ComparisonQueueDescriptor instead
FrancisMurtagh20995952018-12-17 12:11:36 +0000279struct EqualQueueDescriptor : QueueDescriptor
280{
281 void Validate(const WorkloadInfo& workloadInfo) const;
282};
283
telsoa01c577f2c2018-08-31 09:22:23 +0100284// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000285struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
286{
287 BatchNormalizationQueueDescriptor()
288 : m_Mean(nullptr)
289 , m_Variance(nullptr)
290 , m_Beta(nullptr)
291 , m_Gamma(nullptr)
292 {
293 }
294
295 const ConstCpuTensorHandle* m_Mean;
296 const ConstCpuTensorHandle* m_Variance;
297 const ConstCpuTensorHandle* m_Beta;
298 const ConstCpuTensorHandle* m_Gamma;
299
300 void Validate(const WorkloadInfo& workloadInfo) const;
301};
302
Finn Williams2605b232020-06-10 15:53:46 +0100303struct RankQueueDescriptor : QueueDescriptor
304{
305 void Validate(const WorkloadInfo& workloadInfo) const;
306};
307
telsoa014fcda012018-03-09 14:13:49 +0000308struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
309{
310 void Validate(const WorkloadInfo& workloadInfo) const;
311};
312
Teresa Charlina9075df2019-06-27 15:41:57 +0100313struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
314{
315 void Validate(const WorkloadInfo& workloadInfo) const;
316};
317
telsoa014fcda012018-03-09 14:13:49 +0000318struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
319{
320 FakeQuantizationQueueDescriptor()
321 : m_Min(nullptr)
322 , m_Max(nullptr)
323 {
324 }
325
326 const ConstCpuTensorHandle* m_Min;
327 const ConstCpuTensorHandle* m_Max;
328
329 void Validate(const WorkloadInfo& workloadInfo) const;
330};
331
Kevin Mayce5045a2019-10-02 14:07:47 +0100332struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
333{
Kevin Mayce5045a2019-10-02 14:07:47 +0100334 void Validate(const WorkloadInfo& workloadInfo) const;
335};
336
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100337struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000338{
339 void Validate(const WorkloadInfo& workloadInfo) const;
340};
341
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100342struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
343{
344 void Validate(const WorkloadInfo& workloadInfo) const;
345};
346
telsoa014fcda012018-03-09 14:13:49 +0000347struct ConstantQueueDescriptor : QueueDescriptor
348{
349 ConstantQueueDescriptor()
350 : m_LayerOutput(nullptr)
351 {
352 }
353
354 const ConstCpuTensorHandle* m_LayerOutput;
355
356 void Validate(const WorkloadInfo& workloadInfo) const;
357};
358
359struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
360{
361 void Validate(const WorkloadInfo& workloadInfo) const;
362};
363
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000364struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
365{
366 void Validate(const WorkloadInfo& workloadInfo) const;
367};
368
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100369struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
370{
371 void Validate(const WorkloadInfo& workloadInfo) const;
372};
373
telsoa014fcda012018-03-09 14:13:49 +0000374struct FloorQueueDescriptor : QueueDescriptor
375{
376 void Validate(const WorkloadInfo& workloadInfo) const;
377};
378
telsoa01c577f2c2018-08-31 09:22:23 +0100379struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
380{
381 LstmQueueDescriptor()
382 : m_InputToInputWeights(nullptr)
383 , m_InputToForgetWeights(nullptr)
384 , m_InputToCellWeights(nullptr)
385 , m_InputToOutputWeights(nullptr)
386 , m_RecurrentToInputWeights(nullptr)
387 , m_RecurrentToForgetWeights(nullptr)
388 , m_RecurrentToCellWeights(nullptr)
389 , m_RecurrentToOutputWeights(nullptr)
390 , m_CellToInputWeights(nullptr)
391 , m_CellToForgetWeights(nullptr)
392 , m_CellToOutputWeights(nullptr)
393 , m_InputGateBias(nullptr)
394 , m_ForgetGateBias(nullptr)
395 , m_CellBias(nullptr)
396 , m_OutputGateBias(nullptr)
397 , m_ProjectionWeights(nullptr)
398 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100399 , m_InputLayerNormWeights(nullptr)
400 , m_ForgetLayerNormWeights(nullptr)
401 , m_CellLayerNormWeights(nullptr)
402 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100403 {
404 }
405
406 const ConstCpuTensorHandle* m_InputToInputWeights;
407 const ConstCpuTensorHandle* m_InputToForgetWeights;
408 const ConstCpuTensorHandle* m_InputToCellWeights;
409 const ConstCpuTensorHandle* m_InputToOutputWeights;
410 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
411 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
412 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
413 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
414 const ConstCpuTensorHandle* m_CellToInputWeights;
415 const ConstCpuTensorHandle* m_CellToForgetWeights;
416 const ConstCpuTensorHandle* m_CellToOutputWeights;
417 const ConstCpuTensorHandle* m_InputGateBias;
418 const ConstCpuTensorHandle* m_ForgetGateBias;
419 const ConstCpuTensorHandle* m_CellBias;
420 const ConstCpuTensorHandle* m_OutputGateBias;
421 const ConstCpuTensorHandle* m_ProjectionWeights;
422 const ConstCpuTensorHandle* m_ProjectionBias;
Jan Eilers38e05bd2019-06-26 13:10:09 +0100423 const ConstCpuTensorHandle* m_InputLayerNormWeights;
424 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
425 const ConstCpuTensorHandle* m_CellLayerNormWeights;
426 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100427
428 void Validate(const WorkloadInfo& workloadInfo) const;
429};
430
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000431struct ConvertBf16ToFp32QueueDescriptor : QueueDescriptor
432{
433 void Validate(const WorkloadInfo& workloadInfo) const;
434};
435
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000436struct ConvertFp32ToBf16QueueDescriptor : QueueDescriptor
437{
438 void Validate(const WorkloadInfo& workloadInfo) const;
439};
440
telsoa01c577f2c2018-08-31 09:22:23 +0100441struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
442{
443 void Validate(const WorkloadInfo& workloadInfo) const;
444};
445
446struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
447{
448 void Validate(const WorkloadInfo& workloadInfo) const;
449};
450
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000451struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
452{
453 void Validate(const WorkloadInfo& workloadInfo) const;
454};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000455
456struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
457{
458 void Validate(const WorkloadInfo& workloadInfo) const;
459};
460
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000461// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000462struct MinimumQueueDescriptor : QueueDescriptor
463{
464 void Validate(const WorkloadInfo& workloadInfo) const;
465};
466
Teresa Charlin2b030d92020-03-27 16:40:56 +0000467// Deprecated use ComparisonQueueDescriptor instead
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000468struct GreaterQueueDescriptor : QueueDescriptor
469{
470 void Validate(const WorkloadInfo& workloadInfo) const;
471};
472
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000473struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000474{
janeil013fec1ea2019-11-07 09:47:20 +0000475 DebugQueueDescriptor() : m_Guid(0) {}
476
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000477 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000478
479 LayerGuid m_Guid;
480 std::string m_LayerName;
481 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000482};
483
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000484struct RsqrtQueueDescriptor : QueueDescriptor
485{
486 void Validate(const WorkloadInfo& workloadInfo) const;
487};
488
Teresa Charlin52664732020-06-29 16:27:03 +0100489struct GatherQueueDescriptor : QueueDescriptorWithParameters<GatherDescriptor>
narpra01b89b05f2019-01-16 09:53:09 +0000490{
491 void Validate(const WorkloadInfo& workloadInfo) const;
492};
493
Matteo Martincigh49124022019-01-11 13:25:59 +0000494struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
495{
496 PreCompiledQueueDescriptor()
497 : m_PreCompiledObject(nullptr)
498 {
499 }
500
Matteo Martincigh7997a352019-04-17 15:37:30 +0100501 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000502
503 void Validate(const WorkloadInfo& workloadInfo) const;
504};
505
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000506struct DequantizeQueueDescriptor : QueueDescriptor
507{
508 void Validate(const WorkloadInfo& workloadInfo) const;
509};
510
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100511struct MergeQueueDescriptor : QueueDescriptor
512{
513 void Validate(const WorkloadInfo& workloadInfo) const;
514};
515
Sadik Armaganeff363d2019-04-05 15:25:46 +0100516struct SwitchQueueDescriptor : QueueDescriptor
517{
518 void Validate(const WorkloadInfo& workloadInfo) const;
519};
520
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100521struct PreluQueueDescriptor : QueueDescriptor
522{
523 void Validate(const WorkloadInfo& workloadInfo) const;
524};
525
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100526struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
527{
528 TransposeConvolution2dQueueDescriptor() :
529 m_Weight(nullptr),
530 m_Bias(nullptr)
531 {}
532
533 const ConstCpuTensorHandle* m_Weight;
534 const ConstCpuTensorHandle* m_Bias;
535
536 void Validate(const WorkloadInfo& workloadInfo) const;
537};
538
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000539struct TransposeQueueDescriptor : QueueDescriptorWithParameters<TransposeDescriptor>
540{
541 void Validate(const WorkloadInfo& workloadInfo) const;
542};
543
James Conroy586a9aa2020-03-20 08:49:33 +0000544struct QLstmQueueDescriptor : QueueDescriptorWithParameters<QLstmDescriptor>
545{
546 QLstmQueueDescriptor()
547 : m_InputToInputWeights(nullptr)
548 , m_InputToForgetWeights(nullptr)
549 , m_InputToCellWeights(nullptr)
550 , m_InputToOutputWeights(nullptr)
551 , m_RecurrentToInputWeights(nullptr)
552 , m_RecurrentToForgetWeights(nullptr)
553 , m_RecurrentToCellWeights(nullptr)
554 , m_RecurrentToOutputWeights(nullptr)
555 , m_CellToInputWeights(nullptr)
556 , m_CellToForgetWeights(nullptr)
557 , m_CellToOutputWeights(nullptr)
558 , m_InputGateBias(nullptr)
559 , m_ForgetGateBias(nullptr)
560 , m_CellBias(nullptr)
561 , m_OutputGateBias(nullptr)
562 , m_ProjectionWeights(nullptr)
563 , m_ProjectionBias(nullptr)
564 , m_InputLayerNormWeights(nullptr)
565 , m_ForgetLayerNormWeights(nullptr)
566 , m_CellLayerNormWeights(nullptr)
567 , m_OutputLayerNormWeights(nullptr)
568 {
569 }
570
571 const ConstCpuTensorHandle* m_InputToInputWeights;
572 const ConstCpuTensorHandle* m_InputToForgetWeights;
573 const ConstCpuTensorHandle* m_InputToCellWeights;
574 const ConstCpuTensorHandle* m_InputToOutputWeights;
575 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
576 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
577 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
578 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
579 const ConstCpuTensorHandle* m_CellToInputWeights;
580 const ConstCpuTensorHandle* m_CellToForgetWeights;
581 const ConstCpuTensorHandle* m_CellToOutputWeights;
582 const ConstCpuTensorHandle* m_InputGateBias;
583 const ConstCpuTensorHandle* m_ForgetGateBias;
584 const ConstCpuTensorHandle* m_CellBias;
585 const ConstCpuTensorHandle* m_OutputGateBias;
586 const ConstCpuTensorHandle* m_ProjectionWeights;
587 const ConstCpuTensorHandle* m_ProjectionBias;
588 const ConstCpuTensorHandle* m_InputLayerNormWeights;
589 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
590 const ConstCpuTensorHandle* m_CellLayerNormWeights;
591 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
592
593 void Validate(const WorkloadInfo& workloadInfo) const;
594};
595
James Conroyee18dc82019-07-17 11:27:46 +0100596struct QuantizedLstmQueueDescriptor : QueueDescriptor
597{
598 QuantizedLstmQueueDescriptor()
599 : m_InputToInputWeights(nullptr)
600 , m_InputToForgetWeights(nullptr)
601 , m_InputToCellWeights(nullptr)
602 , m_InputToOutputWeights(nullptr)
603
604 , m_RecurrentToInputWeights(nullptr)
605 , m_RecurrentToForgetWeights(nullptr)
606 , m_RecurrentToCellWeights(nullptr)
607 , m_RecurrentToOutputWeights(nullptr)
608
609 , m_InputGateBias(nullptr)
610 , m_ForgetGateBias(nullptr)
611 , m_CellBias(nullptr)
612 , m_OutputGateBias(nullptr)
613 {}
614
615 const ConstCpuTensorHandle* m_InputToInputWeights;
616 const ConstCpuTensorHandle* m_InputToForgetWeights;
617 const ConstCpuTensorHandle* m_InputToCellWeights;
618 const ConstCpuTensorHandle* m_InputToOutputWeights;
619
620 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
621 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
622 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
623 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
624
625 const ConstCpuTensorHandle* m_InputGateBias;
626 const ConstCpuTensorHandle* m_ForgetGateBias;
627 const ConstCpuTensorHandle* m_CellBias;
628 const ConstCpuTensorHandle* m_OutputGateBias;
629
630 void Validate(const WorkloadInfo& workloadInfo) const;
631};
632
Kevin May868eb142019-09-04 17:29:31 +0100633struct AbsQueueDescriptor : QueueDescriptor
634{
635 void Validate(const WorkloadInfo& workloadInfo) const;
636};
637
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100638struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
639{
640 void Validate(const WorkloadInfo& workloadInfo) const;
641};
642
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100643struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
644{
645 void Validate(const WorkloadInfo& workloadInfo) const;
646};
647
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100648struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
649{
650 void Validate(const WorkloadInfo& workloadInfo) const;
651};
652
josh minor4a3c6102020-01-06 16:40:46 -0600653struct ElementwiseUnaryQueueDescriptor : QueueDescriptorWithParameters<ElementwiseUnaryDescriptor>
654{
655 void Validate(const WorkloadInfo& workloadInfo) const;
656};
657
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100658} // namespace armnn