blob: 8a2dd1fe7846f3e21025113cef3e7be0ea9a7a97 [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;
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
Ryan OSheaec6c6802020-06-05 17:17:06 +0100158// Fill layer workload data.
159struct FillQueueDescriptor : QueueDescriptorWithParameters<FillDescriptor>
160{
Ryan OSheaec6c6802020-06-05 17:17:06 +0100161 void Validate(const WorkloadInfo& workloadInfo) const;
162};
163
telsoa01c577f2c2018-08-31 09:22:23 +0100164// Fully connected layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000165struct FullyConnectedQueueDescriptor : QueueDescriptorWithParameters<FullyConnectedDescriptor>
166{
167 FullyConnectedQueueDescriptor()
168 : m_Weight(nullptr)
169 , m_Bias(nullptr)
170 {
171 }
172
173 const ConstCpuTensorHandle* m_Weight;
174 const ConstCpuTensorHandle* m_Bias;
175
176 void Validate(const WorkloadInfo& workloadInfo) const;
177};
178
telsoa01c577f2c2018-08-31 09:22:23 +0100179// Permute layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000180struct PermuteQueueDescriptor : QueueDescriptorWithParameters<PermuteDescriptor>
181{
182 void Validate(const WorkloadInfo& workloadInfo) const;
183};
184
telsoa01c577f2c2018-08-31 09:22:23 +0100185// Pooling 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000186struct Pooling2dQueueDescriptor : QueueDescriptorWithParameters<Pooling2dDescriptor>
187{
188 void Validate(const WorkloadInfo& workloadInfo) const;
189};
190
telsoa01c577f2c2018-08-31 09:22:23 +0100191// Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000192struct Convolution2dQueueDescriptor : QueueDescriptorWithParameters<Convolution2dDescriptor>
193{
194 Convolution2dQueueDescriptor()
195 : m_Weight(nullptr)
196 , m_Bias(nullptr)
197 {
198 }
199
200 const ConstCpuTensorHandle* m_Weight;
201 const ConstCpuTensorHandle* m_Bias;
202
203 void Validate(const WorkloadInfo& workloadInfo) const;
204};
205
telsoa01c577f2c2018-08-31 09:22:23 +0100206// Depthwise Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000207struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
208{
209 DepthwiseConvolution2dQueueDescriptor()
210 : m_Weight(nullptr)
211 , m_Bias(nullptr)
212 {
213 }
214
215 const ConstCpuTensorHandle* m_Weight;
216 const ConstCpuTensorHandle* m_Bias;
217
218 void Validate(const WorkloadInfo& workloadInfo) const;
219};
220
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000221struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
222{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000223 DetectionPostProcessQueueDescriptor()
224 : m_Anchors(nullptr)
225 {
226 }
227
228 const ConstCpuTensorHandle* m_Anchors;
229
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000230 void Validate(const WorkloadInfo& workloadInfo) const;
231};
232
telsoa01c577f2c2018-08-31 09:22:23 +0100233// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000234struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
235{
236 void Validate(const WorkloadInfo& workloadInfo) const;
237};
238
telsoa01c577f2c2018-08-31 09:22:23 +0100239// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000240struct AdditionQueueDescriptor : QueueDescriptor
241{
242 void Validate(const WorkloadInfo& workloadInfo) const;
243};
244
telsoa01c577f2c2018-08-31 09:22:23 +0100245// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000246struct MultiplicationQueueDescriptor : QueueDescriptor
247{
248 void Validate(const WorkloadInfo& workloadInfo) const;
249};
250
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100251// Division layer workload data.
252struct DivisionQueueDescriptor : QueueDescriptor
253{
254 void Validate(const WorkloadInfo& workloadInfo) const;
255};
256
David Beckc2044fe2018-09-05 15:00:38 +0100257// Subtraction layer workload data.
258struct SubtractionQueueDescriptor : QueueDescriptor
259{
260 void Validate(const WorkloadInfo& workloadInfo) const;
261};
262
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000263// Maximum layer workload data.
264struct MaximumQueueDescriptor : QueueDescriptor
265{
266 void Validate(const WorkloadInfo& workloadInfo) const;
267};
268
narpra01a6bf9122018-09-10 09:50:09 +0100269// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100270struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100271{
272 void Validate(const WorkloadInfo& workloadInfo) const;
273};
274
jimfly012c9322a2018-09-19 10:59:49 +0100275// Pad layer workload data
276struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
277{
278 void Validate(const WorkloadInfo& workloadInfo) const;
279};
280
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000281struct QuantizeQueueDescriptor : QueueDescriptor
282{
283 void Validate(const WorkloadInfo& workloadInfo) const;
284};
285
Teresa Charlincedd34f2020-03-30 11:17:30 +0100286// Deprecated use ComparisonQueueDescriptor instead
FrancisMurtagh20995952018-12-17 12:11:36 +0000287struct EqualQueueDescriptor : QueueDescriptor
288{
289 void Validate(const WorkloadInfo& workloadInfo) const;
290};
291
telsoa01c577f2c2018-08-31 09:22:23 +0100292// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000293struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
294{
295 BatchNormalizationQueueDescriptor()
296 : m_Mean(nullptr)
297 , m_Variance(nullptr)
298 , m_Beta(nullptr)
299 , m_Gamma(nullptr)
300 {
301 }
302
303 const ConstCpuTensorHandle* m_Mean;
304 const ConstCpuTensorHandle* m_Variance;
305 const ConstCpuTensorHandle* m_Beta;
306 const ConstCpuTensorHandle* m_Gamma;
307
308 void Validate(const WorkloadInfo& workloadInfo) const;
309};
310
Finn Williams2605b232020-06-10 15:53:46 +0100311struct RankQueueDescriptor : QueueDescriptor
312{
313 void Validate(const WorkloadInfo& workloadInfo) const;
314};
315
telsoa014fcda012018-03-09 14:13:49 +0000316struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
317{
318 void Validate(const WorkloadInfo& workloadInfo) const;
319};
320
Teresa Charlina9075df2019-06-27 15:41:57 +0100321struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
322{
323 void Validate(const WorkloadInfo& workloadInfo) const;
324};
325
telsoa014fcda012018-03-09 14:13:49 +0000326struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
327{
328 FakeQuantizationQueueDescriptor()
329 : m_Min(nullptr)
330 , m_Max(nullptr)
331 {
332 }
333
334 const ConstCpuTensorHandle* m_Min;
335 const ConstCpuTensorHandle* m_Max;
336
337 void Validate(const WorkloadInfo& workloadInfo) const;
338};
339
Kevin Mayce5045a2019-10-02 14:07:47 +0100340struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
341{
Kevin Mayce5045a2019-10-02 14:07:47 +0100342 void Validate(const WorkloadInfo& workloadInfo) const;
343};
344
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100345struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000346{
347 void Validate(const WorkloadInfo& workloadInfo) const;
348};
349
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100350struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
351{
352 void Validate(const WorkloadInfo& workloadInfo) const;
353};
354
telsoa014fcda012018-03-09 14:13:49 +0000355struct ConstantQueueDescriptor : QueueDescriptor
356{
357 ConstantQueueDescriptor()
358 : m_LayerOutput(nullptr)
359 {
360 }
361
362 const ConstCpuTensorHandle* m_LayerOutput;
363
364 void Validate(const WorkloadInfo& workloadInfo) const;
365};
366
367struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
368{
369 void Validate(const WorkloadInfo& workloadInfo) const;
370};
371
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000372struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
373{
374 void Validate(const WorkloadInfo& workloadInfo) const;
375};
376
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100377struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
378{
379 void Validate(const WorkloadInfo& workloadInfo) const;
380};
381
telsoa014fcda012018-03-09 14:13:49 +0000382struct FloorQueueDescriptor : QueueDescriptor
383{
384 void Validate(const WorkloadInfo& workloadInfo) const;
385};
386
telsoa01c577f2c2018-08-31 09:22:23 +0100387struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
388{
389 LstmQueueDescriptor()
390 : m_InputToInputWeights(nullptr)
391 , m_InputToForgetWeights(nullptr)
392 , m_InputToCellWeights(nullptr)
393 , m_InputToOutputWeights(nullptr)
394 , m_RecurrentToInputWeights(nullptr)
395 , m_RecurrentToForgetWeights(nullptr)
396 , m_RecurrentToCellWeights(nullptr)
397 , m_RecurrentToOutputWeights(nullptr)
398 , m_CellToInputWeights(nullptr)
399 , m_CellToForgetWeights(nullptr)
400 , m_CellToOutputWeights(nullptr)
401 , m_InputGateBias(nullptr)
402 , m_ForgetGateBias(nullptr)
403 , m_CellBias(nullptr)
404 , m_OutputGateBias(nullptr)
405 , m_ProjectionWeights(nullptr)
406 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100407 , m_InputLayerNormWeights(nullptr)
408 , m_ForgetLayerNormWeights(nullptr)
409 , m_CellLayerNormWeights(nullptr)
410 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100411 {
412 }
413
414 const ConstCpuTensorHandle* m_InputToInputWeights;
415 const ConstCpuTensorHandle* m_InputToForgetWeights;
416 const ConstCpuTensorHandle* m_InputToCellWeights;
417 const ConstCpuTensorHandle* m_InputToOutputWeights;
418 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
419 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
420 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
421 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
422 const ConstCpuTensorHandle* m_CellToInputWeights;
423 const ConstCpuTensorHandle* m_CellToForgetWeights;
424 const ConstCpuTensorHandle* m_CellToOutputWeights;
425 const ConstCpuTensorHandle* m_InputGateBias;
426 const ConstCpuTensorHandle* m_ForgetGateBias;
427 const ConstCpuTensorHandle* m_CellBias;
428 const ConstCpuTensorHandle* m_OutputGateBias;
429 const ConstCpuTensorHandle* m_ProjectionWeights;
430 const ConstCpuTensorHandle* m_ProjectionBias;
Jan Eilers38e05bd2019-06-26 13:10:09 +0100431 const ConstCpuTensorHandle* m_InputLayerNormWeights;
432 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
433 const ConstCpuTensorHandle* m_CellLayerNormWeights;
434 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100435
436 void Validate(const WorkloadInfo& workloadInfo) const;
437};
438
Narumol Prangnawarat7ddbbae2020-03-13 10:26:05 +0000439struct ConvertBf16ToFp32QueueDescriptor : QueueDescriptor
440{
441 void Validate(const WorkloadInfo& workloadInfo) const;
442};
443
Narumol Prangnawaratea54a012020-03-16 16:36:10 +0000444struct ConvertFp32ToBf16QueueDescriptor : QueueDescriptor
445{
446 void Validate(const WorkloadInfo& workloadInfo) const;
447};
448
telsoa01c577f2c2018-08-31 09:22:23 +0100449struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
450{
451 void Validate(const WorkloadInfo& workloadInfo) const;
452};
453
454struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
455{
456 void Validate(const WorkloadInfo& workloadInfo) const;
457};
458
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000459struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
460{
461 void Validate(const WorkloadInfo& workloadInfo) const;
462};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000463
464struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
465{
466 void Validate(const WorkloadInfo& workloadInfo) const;
467};
468
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000469// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000470struct MinimumQueueDescriptor : QueueDescriptor
471{
472 void Validate(const WorkloadInfo& workloadInfo) const;
473};
474
Teresa Charlin2b030d92020-03-27 16:40:56 +0000475// Deprecated use ComparisonQueueDescriptor instead
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000476struct GreaterQueueDescriptor : QueueDescriptor
477{
478 void Validate(const WorkloadInfo& workloadInfo) const;
479};
480
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000481struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000482{
janeil013fec1ea2019-11-07 09:47:20 +0000483 DebugQueueDescriptor() : m_Guid(0) {}
484
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000485 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000486
487 LayerGuid m_Guid;
488 std::string m_LayerName;
489 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000490};
491
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000492struct RsqrtQueueDescriptor : QueueDescriptor
493{
494 void Validate(const WorkloadInfo& workloadInfo) const;
495};
496
Teresa Charlin52664732020-06-29 16:27:03 +0100497struct GatherQueueDescriptor : QueueDescriptorWithParameters<GatherDescriptor>
narpra01b89b05f2019-01-16 09:53:09 +0000498{
499 void Validate(const WorkloadInfo& workloadInfo) const;
500};
501
Matteo Martincigh49124022019-01-11 13:25:59 +0000502struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
503{
504 PreCompiledQueueDescriptor()
505 : m_PreCompiledObject(nullptr)
506 {
507 }
508
Matteo Martincigh7997a352019-04-17 15:37:30 +0100509 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000510
511 void Validate(const WorkloadInfo& workloadInfo) const;
512};
513
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000514struct DequantizeQueueDescriptor : QueueDescriptor
515{
516 void Validate(const WorkloadInfo& workloadInfo) const;
517};
518
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100519struct MergeQueueDescriptor : QueueDescriptor
520{
521 void Validate(const WorkloadInfo& workloadInfo) const;
522};
523
Sadik Armaganeff363d2019-04-05 15:25:46 +0100524struct SwitchQueueDescriptor : QueueDescriptor
525{
526 void Validate(const WorkloadInfo& workloadInfo) const;
527};
528
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100529struct PreluQueueDescriptor : QueueDescriptor
530{
531 void Validate(const WorkloadInfo& workloadInfo) const;
532};
533
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100534struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
535{
536 TransposeConvolution2dQueueDescriptor() :
537 m_Weight(nullptr),
538 m_Bias(nullptr)
539 {}
540
541 const ConstCpuTensorHandle* m_Weight;
542 const ConstCpuTensorHandle* m_Bias;
543
544 void Validate(const WorkloadInfo& workloadInfo) const;
545};
546
Mike Kellyc9ea45a2020-02-28 18:11:58 +0000547struct TransposeQueueDescriptor : QueueDescriptorWithParameters<TransposeDescriptor>
548{
549 void Validate(const WorkloadInfo& workloadInfo) const;
550};
551
James Conroy586a9aa2020-03-20 08:49:33 +0000552struct QLstmQueueDescriptor : QueueDescriptorWithParameters<QLstmDescriptor>
553{
554 QLstmQueueDescriptor()
555 : m_InputToInputWeights(nullptr)
556 , m_InputToForgetWeights(nullptr)
557 , m_InputToCellWeights(nullptr)
558 , m_InputToOutputWeights(nullptr)
559 , m_RecurrentToInputWeights(nullptr)
560 , m_RecurrentToForgetWeights(nullptr)
561 , m_RecurrentToCellWeights(nullptr)
562 , m_RecurrentToOutputWeights(nullptr)
563 , m_CellToInputWeights(nullptr)
564 , m_CellToForgetWeights(nullptr)
565 , m_CellToOutputWeights(nullptr)
566 , m_InputGateBias(nullptr)
567 , m_ForgetGateBias(nullptr)
568 , m_CellBias(nullptr)
569 , m_OutputGateBias(nullptr)
570 , m_ProjectionWeights(nullptr)
571 , m_ProjectionBias(nullptr)
572 , m_InputLayerNormWeights(nullptr)
573 , m_ForgetLayerNormWeights(nullptr)
574 , m_CellLayerNormWeights(nullptr)
575 , m_OutputLayerNormWeights(nullptr)
576 {
577 }
578
579 const ConstCpuTensorHandle* m_InputToInputWeights;
580 const ConstCpuTensorHandle* m_InputToForgetWeights;
581 const ConstCpuTensorHandle* m_InputToCellWeights;
582 const ConstCpuTensorHandle* m_InputToOutputWeights;
583 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
584 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
585 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
586 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
587 const ConstCpuTensorHandle* m_CellToInputWeights;
588 const ConstCpuTensorHandle* m_CellToForgetWeights;
589 const ConstCpuTensorHandle* m_CellToOutputWeights;
590 const ConstCpuTensorHandle* m_InputGateBias;
591 const ConstCpuTensorHandle* m_ForgetGateBias;
592 const ConstCpuTensorHandle* m_CellBias;
593 const ConstCpuTensorHandle* m_OutputGateBias;
594 const ConstCpuTensorHandle* m_ProjectionWeights;
595 const ConstCpuTensorHandle* m_ProjectionBias;
596 const ConstCpuTensorHandle* m_InputLayerNormWeights;
597 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
598 const ConstCpuTensorHandle* m_CellLayerNormWeights;
599 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
600
601 void Validate(const WorkloadInfo& workloadInfo) const;
602};
603
James Conroyee18dc82019-07-17 11:27:46 +0100604struct QuantizedLstmQueueDescriptor : QueueDescriptor
605{
606 QuantizedLstmQueueDescriptor()
607 : m_InputToInputWeights(nullptr)
608 , m_InputToForgetWeights(nullptr)
609 , m_InputToCellWeights(nullptr)
610 , m_InputToOutputWeights(nullptr)
611
612 , m_RecurrentToInputWeights(nullptr)
613 , m_RecurrentToForgetWeights(nullptr)
614 , m_RecurrentToCellWeights(nullptr)
615 , m_RecurrentToOutputWeights(nullptr)
616
617 , m_InputGateBias(nullptr)
618 , m_ForgetGateBias(nullptr)
619 , m_CellBias(nullptr)
620 , m_OutputGateBias(nullptr)
621 {}
622
623 const ConstCpuTensorHandle* m_InputToInputWeights;
624 const ConstCpuTensorHandle* m_InputToForgetWeights;
625 const ConstCpuTensorHandle* m_InputToCellWeights;
626 const ConstCpuTensorHandle* m_InputToOutputWeights;
627
628 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
629 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
630 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
631 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
632
633 const ConstCpuTensorHandle* m_InputGateBias;
634 const ConstCpuTensorHandle* m_ForgetGateBias;
635 const ConstCpuTensorHandle* m_CellBias;
636 const ConstCpuTensorHandle* m_OutputGateBias;
637
638 void Validate(const WorkloadInfo& workloadInfo) const;
639};
640
Kevin May868eb142019-09-04 17:29:31 +0100641struct AbsQueueDescriptor : QueueDescriptor
642{
643 void Validate(const WorkloadInfo& workloadInfo) const;
644};
645
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100646struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
647{
648 void Validate(const WorkloadInfo& workloadInfo) const;
649};
650
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100651struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
652{
653 void Validate(const WorkloadInfo& workloadInfo) const;
654};
655
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100656struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
657{
658 void Validate(const WorkloadInfo& workloadInfo) const;
659};
660
josh minor4a3c6102020-01-06 16:40:46 -0600661struct ElementwiseUnaryQueueDescriptor : QueueDescriptorWithParameters<ElementwiseUnaryDescriptor>
662{
663 void Validate(const WorkloadInfo& workloadInfo) const;
664};
665
James Conroyaba90cd2020-11-06 16:28:18 +0000666struct LogicalBinaryQueueDescriptor : QueueDescriptorWithParameters<LogicalBinaryDescriptor>
667{
668 void Validate(const WorkloadInfo& workloadInfo) const;
669};
670
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000671struct ReduceQueueDescriptor : QueueDescriptorWithParameters<ReduceDescriptor>
672{
673 void Validate(const WorkloadInfo& workloadInfo) const;
674};
675
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100676} // namespace armnn