blob: f2f70890409dc6a8858e5c0a66372086f82255fa [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
58struct MemCopyQueueDescriptor : QueueDescriptor
59{
60 void Validate(const WorkloadInfo& workloadInfo) const;
61};
62
63using InputQueueDescriptor = MemCopyQueueDescriptor;
64using OutputQueueDescriptor = MemCopyQueueDescriptor;
65
Derek Lambertif674aa02019-08-01 15:56:25 +010066struct MemImportQueueDescriptor : QueueDescriptor
67{
68 void Validate(const WorkloadInfo& workloadInfo) const;
69};
70
71struct MemSyncQueueDescriptor : QueueDescriptor
72{
73 void Validate(const WorkloadInfo& workloadInfo) const;
74};
75
telsoa01c577f2c2018-08-31 09:22:23 +010076// Softmax layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000077struct SoftmaxQueueDescriptor : QueueDescriptorWithParameters<SoftmaxDescriptor>
78{
79 void Validate(const WorkloadInfo& workloadInfo) const;
80};
81
telsoa01c577f2c2018-08-31 09:22:23 +010082// Splitter layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000083struct SplitterQueueDescriptor : QueueDescriptorWithParameters<ViewsDescriptor>
84{
85 struct ViewOrigin
86 {
87 ViewOrigin() {}
88 ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
89
telsoa01c577f2c2018-08-31 09:22:23 +010090 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +000091 std::vector<unsigned int> m_Origin;
92 };
93
telsoa01c577f2c2018-08-31 09:22:23 +010094 //View defines a tensor that will be carved from the input tensor.
95 //View origins are stored here, the extents are defined by sizes of the output tensors.
telsoa014fcda012018-03-09 14:13:49 +000096 std::vector<ViewOrigin> m_ViewOrigins;
97
98 void Validate(const WorkloadInfo& workloadInfo) const;
99};
100
Jim Flynne242f2d2019-05-22 14:24:13 +0100101// Concat layer workload data.
102struct ConcatQueueDescriptor : QueueDescriptorWithParameters<OriginsDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000103{
104 struct ViewOrigin
105 {
106 ViewOrigin() {}
107 ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
108
telsoa01c577f2c2018-08-31 09:22:23 +0100109 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +0000110 std::vector<unsigned int> m_Origin;
111 };
112
telsoa01c577f2c2018-08-31 09:22:23 +0100113 //View defines a sub-area of the output tensor that will be filled with the corresponding input tensor.
114 //View origins are stored here, the extents are defined by sizes of the input tensors.
telsoa014fcda012018-03-09 14:13:49 +0000115 std::vector<ViewOrigin> m_ViewOrigins;
116
117 void Validate(const WorkloadInfo& workloadInfo) const;
118};
119
Jim Flynne242f2d2019-05-22 14:24:13 +0100120// Deprecated. Use ConcatQueueDescriptor instead
121using MergerQueueDescriptor = ConcatQueueDescriptor;
122
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100123// Stack layer workload data.
124struct StackQueueDescriptor : QueueDescriptorWithParameters<StackDescriptor>
125{
126 void Validate(const WorkloadInfo& workloadInfo) const;
127};
128
telsoa01c577f2c2018-08-31 09:22:23 +0100129// Activation layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000130struct ActivationQueueDescriptor : QueueDescriptorWithParameters<ActivationDescriptor>
131{
132 void Validate(const WorkloadInfo& workloadInfo) const;
133};
134
Nikhil Rajee391d52019-09-05 17:50:44 +0100135struct ArgMinMaxQueueDescriptor : QueueDescriptorWithParameters<ArgMinMaxDescriptor>
136{
137 void Validate(const WorkloadInfo& workloadInfo) const;
138};
139
Ryan OSheaec6c6802020-06-05 17:17:06 +0100140// Fill layer workload data.
141struct FillQueueDescriptor : QueueDescriptorWithParameters<FillDescriptor>
142{
Ryan OSheaec6c6802020-06-05 17:17:06 +0100143 void Validate(const WorkloadInfo& workloadInfo) const;
144};
145
telsoa01c577f2c2018-08-31 09:22:23 +0100146// Fully connected layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000147struct FullyConnectedQueueDescriptor : QueueDescriptorWithParameters<FullyConnectedDescriptor>
148{
149 FullyConnectedQueueDescriptor()
150 : m_Weight(nullptr)
151 , m_Bias(nullptr)
152 {
153 }
154
155 const ConstCpuTensorHandle* m_Weight;
156 const ConstCpuTensorHandle* m_Bias;
157
158 void Validate(const WorkloadInfo& workloadInfo) const;
159};
160
telsoa01c577f2c2018-08-31 09:22:23 +0100161// Permute layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000162struct PermuteQueueDescriptor : QueueDescriptorWithParameters<PermuteDescriptor>
163{
164 void Validate(const WorkloadInfo& workloadInfo) const;
165};
166
telsoa01c577f2c2018-08-31 09:22:23 +0100167// Pooling 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000168struct Pooling2dQueueDescriptor : QueueDescriptorWithParameters<Pooling2dDescriptor>
169{
170 void Validate(const WorkloadInfo& workloadInfo) const;
171};
172
telsoa01c577f2c2018-08-31 09:22:23 +0100173// Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000174struct Convolution2dQueueDescriptor : QueueDescriptorWithParameters<Convolution2dDescriptor>
175{
176 Convolution2dQueueDescriptor()
177 : m_Weight(nullptr)
178 , m_Bias(nullptr)
179 {
180 }
181
182 const ConstCpuTensorHandle* m_Weight;
183 const ConstCpuTensorHandle* m_Bias;
184
185 void Validate(const WorkloadInfo& workloadInfo) const;
186};
187
telsoa01c577f2c2018-08-31 09:22:23 +0100188// Depthwise Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000189struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
190{
191 DepthwiseConvolution2dQueueDescriptor()
192 : m_Weight(nullptr)
193 , m_Bias(nullptr)
194 {
195 }
196
197 const ConstCpuTensorHandle* m_Weight;
198 const ConstCpuTensorHandle* m_Bias;
199
200 void Validate(const WorkloadInfo& workloadInfo) const;
201};
202
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000203struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
204{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000205 DetectionPostProcessQueueDescriptor()
206 : m_Anchors(nullptr)
207 {
208 }
209
210 const ConstCpuTensorHandle* m_Anchors;
211
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000212 void Validate(const WorkloadInfo& workloadInfo) const;
213};
214
telsoa01c577f2c2018-08-31 09:22:23 +0100215// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000216struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
217{
218 void Validate(const WorkloadInfo& workloadInfo) const;
219};
220
telsoa01c577f2c2018-08-31 09:22:23 +0100221// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000222struct AdditionQueueDescriptor : QueueDescriptor
223{
224 void Validate(const WorkloadInfo& workloadInfo) const;
225};
226
telsoa01c577f2c2018-08-31 09:22:23 +0100227// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000228struct MultiplicationQueueDescriptor : QueueDescriptor
229{
230 void Validate(const WorkloadInfo& workloadInfo) const;
231};
232
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100233// Division layer workload data.
234struct DivisionQueueDescriptor : QueueDescriptor
235{
236 void Validate(const WorkloadInfo& workloadInfo) const;
237};
238
David Beckc2044fe2018-09-05 15:00:38 +0100239// Subtraction layer workload data.
240struct SubtractionQueueDescriptor : QueueDescriptor
241{
242 void Validate(const WorkloadInfo& workloadInfo) const;
243};
244
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000245// Maximum layer workload data.
246struct MaximumQueueDescriptor : QueueDescriptor
247{
248 void Validate(const WorkloadInfo& workloadInfo) const;
249};
250
narpra01a6bf9122018-09-10 09:50:09 +0100251// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100252struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100253{
254 void Validate(const WorkloadInfo& workloadInfo) const;
255};
256
jimfly012c9322a2018-09-19 10:59:49 +0100257// Pad layer workload data
258struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
259{
260 void Validate(const WorkloadInfo& workloadInfo) const;
261};
262
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000263struct QuantizeQueueDescriptor : QueueDescriptor
264{
265 void Validate(const WorkloadInfo& workloadInfo) const;
266};
267
Teresa Charlincedd34f2020-03-30 11:17:30 +0100268// Deprecated use ComparisonQueueDescriptor instead
FrancisMurtagh20995952018-12-17 12:11:36 +0000269struct EqualQueueDescriptor : QueueDescriptor
270{
271 void Validate(const WorkloadInfo& workloadInfo) const;
272};
273
telsoa01c577f2c2018-08-31 09:22:23 +0100274// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000275struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
276{
277 BatchNormalizationQueueDescriptor()
278 : m_Mean(nullptr)
279 , m_Variance(nullptr)
280 , m_Beta(nullptr)
281 , m_Gamma(nullptr)
282 {
283 }
284
285 const ConstCpuTensorHandle* m_Mean;
286 const ConstCpuTensorHandle* m_Variance;
287 const ConstCpuTensorHandle* m_Beta;
288 const ConstCpuTensorHandle* m_Gamma;
289
290 void Validate(const WorkloadInfo& workloadInfo) const;
291};
292
293struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
294{
295 void Validate(const WorkloadInfo& workloadInfo) const;
296};
297
Teresa Charlina9075df2019-06-27 15:41:57 +0100298struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
299{
300 void Validate(const WorkloadInfo& workloadInfo) const;
301};
302
telsoa014fcda012018-03-09 14:13:49 +0000303struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
304{
305 FakeQuantizationQueueDescriptor()
306 : m_Min(nullptr)
307 , m_Max(nullptr)
308 {
309 }
310
311 const ConstCpuTensorHandle* m_Min;
312 const ConstCpuTensorHandle* m_Max;
313
314 void Validate(const WorkloadInfo& workloadInfo) const;
315};
316
Kevin Mayce5045a2019-10-02 14:07:47 +0100317struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
318{
Kevin Mayce5045a2019-10-02 14:07:47 +0100319 void Validate(const WorkloadInfo& workloadInfo) const;
320};
321
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100322struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000323{
324 void Validate(const WorkloadInfo& workloadInfo) const;
325};
326
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100327struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
328{
329 void Validate(const WorkloadInfo& workloadInfo) const;
330};
331
telsoa014fcda012018-03-09 14:13:49 +0000332struct ConstantQueueDescriptor : QueueDescriptor
333{
334 ConstantQueueDescriptor()
335 : m_LayerOutput(nullptr)
336 {
337 }
338
339 const ConstCpuTensorHandle* m_LayerOutput;
340
341 void Validate(const WorkloadInfo& workloadInfo) const;
342};
343
344struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
345{
346 void Validate(const WorkloadInfo& workloadInfo) const;
347};
348
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000349struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
350{
351 void Validate(const WorkloadInfo& workloadInfo) const;
352};
353
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100354struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
355{
356 void Validate(const WorkloadInfo& workloadInfo) const;
357};
358
telsoa014fcda012018-03-09 14:13:49 +0000359struct FloorQueueDescriptor : QueueDescriptor
360{
361 void Validate(const WorkloadInfo& workloadInfo) const;
362};
363
telsoa01c577f2c2018-08-31 09:22:23 +0100364struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
365{
366 LstmQueueDescriptor()
367 : m_InputToInputWeights(nullptr)
368 , m_InputToForgetWeights(nullptr)
369 , m_InputToCellWeights(nullptr)
370 , m_InputToOutputWeights(nullptr)
371 , m_RecurrentToInputWeights(nullptr)
372 , m_RecurrentToForgetWeights(nullptr)
373 , m_RecurrentToCellWeights(nullptr)
374 , m_RecurrentToOutputWeights(nullptr)
375 , m_CellToInputWeights(nullptr)
376 , m_CellToForgetWeights(nullptr)
377 , m_CellToOutputWeights(nullptr)
378 , m_InputGateBias(nullptr)
379 , m_ForgetGateBias(nullptr)
380 , m_CellBias(nullptr)
381 , m_OutputGateBias(nullptr)
382 , m_ProjectionWeights(nullptr)
383 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100384 , m_InputLayerNormWeights(nullptr)
385 , m_ForgetLayerNormWeights(nullptr)
386 , m_CellLayerNormWeights(nullptr)
387 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100388 {
389 }
390
391 const ConstCpuTensorHandle* m_InputToInputWeights;
392 const ConstCpuTensorHandle* m_InputToForgetWeights;
393 const ConstCpuTensorHandle* m_InputToCellWeights;
394 const ConstCpuTensorHandle* m_InputToOutputWeights;
395 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
396 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
397 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
398 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
399 const ConstCpuTensorHandle* m_CellToInputWeights;
400 const ConstCpuTensorHandle* m_CellToForgetWeights;
401 const ConstCpuTensorHandle* m_CellToOutputWeights;
402 const ConstCpuTensorHandle* m_InputGateBias;
403 const ConstCpuTensorHandle* m_ForgetGateBias;
404 const ConstCpuTensorHandle* m_CellBias;
405 const ConstCpuTensorHandle* m_OutputGateBias;
406 const ConstCpuTensorHandle* m_ProjectionWeights;
407 const ConstCpuTensorHandle* m_ProjectionBias;
Jan Eilers38e05bd2019-06-26 13:10:09 +0100408 const ConstCpuTensorHandle* m_InputLayerNormWeights;
409 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
410 const ConstCpuTensorHandle* m_CellLayerNormWeights;
411 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100412
413 void Validate(const WorkloadInfo& workloadInfo) const;
414};
415
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000416struct ConvertBf16ToFp32QueueDescriptor : QueueDescriptor
417{
418 void Validate(const WorkloadInfo& workloadInfo) const;
419};
420
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000421struct ConvertFp32ToBf16QueueDescriptor : QueueDescriptor
422{
423 void Validate(const WorkloadInfo& workloadInfo) const;
424};
425
telsoa01c577f2c2018-08-31 09:22:23 +0100426struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
427{
428 void Validate(const WorkloadInfo& workloadInfo) const;
429};
430
431struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
432{
433 void Validate(const WorkloadInfo& workloadInfo) const;
434};
435
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000436struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
437{
438 void Validate(const WorkloadInfo& workloadInfo) const;
439};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000440
441struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
442{
443 void Validate(const WorkloadInfo& workloadInfo) const;
444};
445
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000446// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000447struct MinimumQueueDescriptor : QueueDescriptor
448{
449 void Validate(const WorkloadInfo& workloadInfo) const;
450};
451
Teresa Charlin2b030d92020-03-27 16:40:56 +0000452// Deprecated use ComparisonQueueDescriptor instead
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000453struct GreaterQueueDescriptor : QueueDescriptor
454{
455 void Validate(const WorkloadInfo& workloadInfo) const;
456};
457
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000458struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000459{
janeil013fec1ea2019-11-07 09:47:20 +0000460 DebugQueueDescriptor() : m_Guid(0) {}
461
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000462 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000463
464 LayerGuid m_Guid;
465 std::string m_LayerName;
466 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000467};
468
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000469struct RsqrtQueueDescriptor : QueueDescriptor
470{
471 void Validate(const WorkloadInfo& workloadInfo) const;
472};
473
narpra01b89b05f2019-01-16 09:53:09 +0000474struct GatherQueueDescriptor : QueueDescriptor
475{
476 void Validate(const WorkloadInfo& workloadInfo) const;
477};
478
Matteo Martincigh49124022019-01-11 13:25:59 +0000479struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
480{
481 PreCompiledQueueDescriptor()
482 : m_PreCompiledObject(nullptr)
483 {
484 }
485
Matteo Martincigh7997a352019-04-17 15:37:30 +0100486 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000487
488 void Validate(const WorkloadInfo& workloadInfo) const;
489};
490
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000491struct DequantizeQueueDescriptor : QueueDescriptor
492{
493 void Validate(const WorkloadInfo& workloadInfo) const;
494};
495
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100496struct MergeQueueDescriptor : QueueDescriptor
497{
498 void Validate(const WorkloadInfo& workloadInfo) const;
499};
500
Sadik Armaganeff363d2019-04-05 15:25:46 +0100501struct SwitchQueueDescriptor : QueueDescriptor
502{
503 void Validate(const WorkloadInfo& workloadInfo) const;
504};
505
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100506struct PreluQueueDescriptor : QueueDescriptor
507{
508 void Validate(const WorkloadInfo& workloadInfo) const;
509};
510
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100511struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
512{
513 TransposeConvolution2dQueueDescriptor() :
514 m_Weight(nullptr),
515 m_Bias(nullptr)
516 {}
517
518 const ConstCpuTensorHandle* m_Weight;
519 const ConstCpuTensorHandle* m_Bias;
520
521 void Validate(const WorkloadInfo& workloadInfo) const;
522};
523
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000524struct TransposeQueueDescriptor : QueueDescriptorWithParameters<TransposeDescriptor>
525{
526 void Validate(const WorkloadInfo& workloadInfo) const;
527};
528
James Conroy586a9aa2020-03-20 08:49:33 +0000529struct QLstmQueueDescriptor : QueueDescriptorWithParameters<QLstmDescriptor>
530{
531 QLstmQueueDescriptor()
532 : m_InputToInputWeights(nullptr)
533 , m_InputToForgetWeights(nullptr)
534 , m_InputToCellWeights(nullptr)
535 , m_InputToOutputWeights(nullptr)
536 , m_RecurrentToInputWeights(nullptr)
537 , m_RecurrentToForgetWeights(nullptr)
538 , m_RecurrentToCellWeights(nullptr)
539 , m_RecurrentToOutputWeights(nullptr)
540 , m_CellToInputWeights(nullptr)
541 , m_CellToForgetWeights(nullptr)
542 , m_CellToOutputWeights(nullptr)
543 , m_InputGateBias(nullptr)
544 , m_ForgetGateBias(nullptr)
545 , m_CellBias(nullptr)
546 , m_OutputGateBias(nullptr)
547 , m_ProjectionWeights(nullptr)
548 , m_ProjectionBias(nullptr)
549 , m_InputLayerNormWeights(nullptr)
550 , m_ForgetLayerNormWeights(nullptr)
551 , m_CellLayerNormWeights(nullptr)
552 , m_OutputLayerNormWeights(nullptr)
553 {
554 }
555
556 const ConstCpuTensorHandle* m_InputToInputWeights;
557 const ConstCpuTensorHandle* m_InputToForgetWeights;
558 const ConstCpuTensorHandle* m_InputToCellWeights;
559 const ConstCpuTensorHandle* m_InputToOutputWeights;
560 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
561 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
562 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
563 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
564 const ConstCpuTensorHandle* m_CellToInputWeights;
565 const ConstCpuTensorHandle* m_CellToForgetWeights;
566 const ConstCpuTensorHandle* m_CellToOutputWeights;
567 const ConstCpuTensorHandle* m_InputGateBias;
568 const ConstCpuTensorHandle* m_ForgetGateBias;
569 const ConstCpuTensorHandle* m_CellBias;
570 const ConstCpuTensorHandle* m_OutputGateBias;
571 const ConstCpuTensorHandle* m_ProjectionWeights;
572 const ConstCpuTensorHandle* m_ProjectionBias;
573 const ConstCpuTensorHandle* m_InputLayerNormWeights;
574 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
575 const ConstCpuTensorHandle* m_CellLayerNormWeights;
576 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
577
578 void Validate(const WorkloadInfo& workloadInfo) const;
579};
580
James Conroyee18dc82019-07-17 11:27:46 +0100581struct QuantizedLstmQueueDescriptor : QueueDescriptor
582{
583 QuantizedLstmQueueDescriptor()
584 : m_InputToInputWeights(nullptr)
585 , m_InputToForgetWeights(nullptr)
586 , m_InputToCellWeights(nullptr)
587 , m_InputToOutputWeights(nullptr)
588
589 , m_RecurrentToInputWeights(nullptr)
590 , m_RecurrentToForgetWeights(nullptr)
591 , m_RecurrentToCellWeights(nullptr)
592 , m_RecurrentToOutputWeights(nullptr)
593
594 , m_InputGateBias(nullptr)
595 , m_ForgetGateBias(nullptr)
596 , m_CellBias(nullptr)
597 , m_OutputGateBias(nullptr)
598 {}
599
600 const ConstCpuTensorHandle* m_InputToInputWeights;
601 const ConstCpuTensorHandle* m_InputToForgetWeights;
602 const ConstCpuTensorHandle* m_InputToCellWeights;
603 const ConstCpuTensorHandle* m_InputToOutputWeights;
604
605 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
606 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
607 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
608 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
609
610 const ConstCpuTensorHandle* m_InputGateBias;
611 const ConstCpuTensorHandle* m_ForgetGateBias;
612 const ConstCpuTensorHandle* m_CellBias;
613 const ConstCpuTensorHandle* m_OutputGateBias;
614
615 void Validate(const WorkloadInfo& workloadInfo) const;
616};
617
Kevin May868eb142019-09-04 17:29:31 +0100618struct AbsQueueDescriptor : QueueDescriptor
619{
620 void Validate(const WorkloadInfo& workloadInfo) const;
621};
622
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100623struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
624{
625 void Validate(const WorkloadInfo& workloadInfo) const;
626};
627
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100628struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
629{
630 void Validate(const WorkloadInfo& workloadInfo) const;
631};
632
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100633struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
634{
635 void Validate(const WorkloadInfo& workloadInfo) const;
636};
637
josh minor4a3c6102020-01-06 16:40:46 -0600638struct ElementwiseUnaryQueueDescriptor : QueueDescriptorWithParameters<ElementwiseUnaryDescriptor>
639{
640 void Validate(const WorkloadInfo& workloadInfo) const;
641};
642
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100643} // namespace armnn