blob: 6a96a4ad7f19ba4c27727f2f339c7d4310156942 [file] [log] [blame]
telsoa014fcda012018-03-09 14:13:49 +00001//
2// 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
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00007#include "CpuTensorHandleFwd.hpp"
telsoa014fcda012018-03-09 14:13:49 +00008
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <InternalTypes.hpp>
10
Jim Flynne242f2d2019-05-22 14:24:13 +010011#include <armnn/Deprecated.hpp>
David Beck0dbe0ee2018-09-24 15:59:27 +010012#include <armnn/Descriptors.hpp>
13#include <armnn/Exceptions.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000014#include <armnn/Types.hpp>
15#include <armnn/Tensor.hpp>
David Beck0dbe0ee2018-09-24 15:59:27 +010016
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +000017#include <backendsCommon/OutputHandler.hpp>
18#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,
34 unsigned int numExpectedIn, unsigned int numExpectedOut) const;
35
36
37protected:
38 ~QueueDescriptor() = default;
39 QueueDescriptor() = default;
40 QueueDescriptor(QueueDescriptor const&) = default;
41 QueueDescriptor& operator=(QueueDescriptor const&) = default;
42};
43
telsoa01c577f2c2018-08-31 09:22:23 +010044// Base class for queue descriptors which contain parameters.
telsoa014fcda012018-03-09 14:13:49 +000045template <typename LayerDescriptor>
46struct QueueDescriptorWithParameters : public QueueDescriptor
47{
48 LayerDescriptor m_Parameters;
49
50protected:
51 ~QueueDescriptorWithParameters() = default;
52 QueueDescriptorWithParameters() = default;
53 QueueDescriptorWithParameters(QueueDescriptorWithParameters const&) = default;
54 QueueDescriptorWithParameters& operator=(QueueDescriptorWithParameters const&) = default;
55};
56
57struct MemCopyQueueDescriptor : QueueDescriptor
58{
59 void Validate(const WorkloadInfo& workloadInfo) const;
60};
61
62using InputQueueDescriptor = MemCopyQueueDescriptor;
63using OutputQueueDescriptor = MemCopyQueueDescriptor;
64
Derek Lambertif674aa02019-08-01 15:56:25 +010065struct MemImportQueueDescriptor : QueueDescriptor
66{
67 void Validate(const WorkloadInfo& workloadInfo) const;
68};
69
70struct MemSyncQueueDescriptor : QueueDescriptor
71{
72 void Validate(const WorkloadInfo& workloadInfo) const;
73};
74
telsoa01c577f2c2018-08-31 09:22:23 +010075// Softmax layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000076struct SoftmaxQueueDescriptor : QueueDescriptorWithParameters<SoftmaxDescriptor>
77{
78 void Validate(const WorkloadInfo& workloadInfo) const;
79};
80
telsoa01c577f2c2018-08-31 09:22:23 +010081// Splitter layer workload data.
telsoa014fcda012018-03-09 14:13:49 +000082struct SplitterQueueDescriptor : QueueDescriptorWithParameters<ViewsDescriptor>
83{
84 struct ViewOrigin
85 {
86 ViewOrigin() {}
87 ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
88
telsoa01c577f2c2018-08-31 09:22:23 +010089 //View origin (size of the vector is the same as number of dimensions of the view).
telsoa014fcda012018-03-09 14:13:49 +000090 std::vector<unsigned int> m_Origin;
91 };
92
telsoa01c577f2c2018-08-31 09:22:23 +010093 //View defines a tensor that will be carved from the input tensor.
94 //View origins are stored here, the extents are defined by sizes of the output tensors.
telsoa014fcda012018-03-09 14:13:49 +000095 std::vector<ViewOrigin> m_ViewOrigins;
96
97 void Validate(const WorkloadInfo& workloadInfo) const;
98};
99
Jim Flynne242f2d2019-05-22 14:24:13 +0100100// Concat layer workload data.
101struct ConcatQueueDescriptor : QueueDescriptorWithParameters<OriginsDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000102{
103 struct ViewOrigin
104 {
105 ViewOrigin() {}
106 ViewOrigin(const std::vector<unsigned int>& 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 sub-area of the output tensor that will be filled with the corresponding input tensor.
113 //View origins are stored here, the extents are defined by sizes of the input 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// Deprecated. Use ConcatQueueDescriptor instead
120using MergerQueueDescriptor = ConcatQueueDescriptor;
121
Matthew Jackson2b8c1da2019-07-04 14:59:16 +0100122// Stack layer workload data.
123struct StackQueueDescriptor : QueueDescriptorWithParameters<StackDescriptor>
124{
125 void Validate(const WorkloadInfo& workloadInfo) const;
126};
127
telsoa01c577f2c2018-08-31 09:22:23 +0100128// Activation layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000129struct ActivationQueueDescriptor : QueueDescriptorWithParameters<ActivationDescriptor>
130{
131 void Validate(const WorkloadInfo& workloadInfo) const;
132};
133
Nikhil Rajee391d52019-09-05 17:50:44 +0100134struct ArgMinMaxQueueDescriptor : QueueDescriptorWithParameters<ArgMinMaxDescriptor>
135{
136 void Validate(const WorkloadInfo& workloadInfo) const;
137};
138
telsoa01c577f2c2018-08-31 09:22:23 +0100139// Fully connected layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000140struct FullyConnectedQueueDescriptor : QueueDescriptorWithParameters<FullyConnectedDescriptor>
141{
142 FullyConnectedQueueDescriptor()
143 : m_Weight(nullptr)
144 , m_Bias(nullptr)
145 {
146 }
147
148 const ConstCpuTensorHandle* m_Weight;
149 const ConstCpuTensorHandle* m_Bias;
150
151 void Validate(const WorkloadInfo& workloadInfo) const;
152};
153
telsoa01c577f2c2018-08-31 09:22:23 +0100154// Permute layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000155struct PermuteQueueDescriptor : QueueDescriptorWithParameters<PermuteDescriptor>
156{
157 void Validate(const WorkloadInfo& workloadInfo) const;
158};
159
telsoa01c577f2c2018-08-31 09:22:23 +0100160// Pooling 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000161struct Pooling2dQueueDescriptor : QueueDescriptorWithParameters<Pooling2dDescriptor>
162{
163 void Validate(const WorkloadInfo& workloadInfo) const;
164};
165
telsoa01c577f2c2018-08-31 09:22:23 +0100166// Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000167struct Convolution2dQueueDescriptor : QueueDescriptorWithParameters<Convolution2dDescriptor>
168{
169 Convolution2dQueueDescriptor()
170 : m_Weight(nullptr)
171 , m_Bias(nullptr)
172 {
173 }
174
175 const ConstCpuTensorHandle* m_Weight;
176 const ConstCpuTensorHandle* m_Bias;
177
178 void Validate(const WorkloadInfo& workloadInfo) const;
179};
180
telsoa01c577f2c2018-08-31 09:22:23 +0100181// Depthwise Convolution 2D layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000182struct DepthwiseConvolution2dQueueDescriptor : QueueDescriptorWithParameters<DepthwiseConvolution2dDescriptor>
183{
184 DepthwiseConvolution2dQueueDescriptor()
185 : m_Weight(nullptr)
186 , m_Bias(nullptr)
187 {
188 }
189
190 const ConstCpuTensorHandle* m_Weight;
191 const ConstCpuTensorHandle* m_Bias;
192
193 void Validate(const WorkloadInfo& workloadInfo) const;
194};
195
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000196struct DetectionPostProcessQueueDescriptor : QueueDescriptorWithParameters<DetectionPostProcessDescriptor>
197{
Narumol Prangnawaratbc67cef2019-01-31 15:31:54 +0000198 DetectionPostProcessQueueDescriptor()
199 : m_Anchors(nullptr)
200 {
201 }
202
203 const ConstCpuTensorHandle* m_Anchors;
204
Narumol Prangnawarat94dd5d82019-01-23 18:06:26 +0000205 void Validate(const WorkloadInfo& workloadInfo) const;
206};
207
telsoa01c577f2c2018-08-31 09:22:23 +0100208// Normalization layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000209struct NormalizationQueueDescriptor : QueueDescriptorWithParameters<NormalizationDescriptor>
210{
211 void Validate(const WorkloadInfo& workloadInfo) const;
212};
213
telsoa01c577f2c2018-08-31 09:22:23 +0100214// Add layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000215struct AdditionQueueDescriptor : QueueDescriptor
216{
217 void Validate(const WorkloadInfo& workloadInfo) const;
218};
219
telsoa01c577f2c2018-08-31 09:22:23 +0100220// Multiplication layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000221struct MultiplicationQueueDescriptor : QueueDescriptor
222{
223 void Validate(const WorkloadInfo& workloadInfo) const;
224};
225
Francis Murtaghe7a86a42018-08-29 12:42:10 +0100226// Division layer workload data.
227struct DivisionQueueDescriptor : QueueDescriptor
228{
229 void Validate(const WorkloadInfo& workloadInfo) const;
230};
231
David Beckc2044fe2018-09-05 15:00:38 +0100232// Subtraction layer workload data.
233struct SubtractionQueueDescriptor : QueueDescriptor
234{
235 void Validate(const WorkloadInfo& workloadInfo) const;
236};
237
Nattapat Chaimanowong5a4304a2018-11-28 10:44:37 +0000238// Maximum layer workload data.
239struct MaximumQueueDescriptor : QueueDescriptor
240{
241 void Validate(const WorkloadInfo& workloadInfo) const;
242};
243
narpra01a6bf9122018-09-10 09:50:09 +0100244// Mean layer workload data.
narpra0132b90462018-09-13 11:07:48 +0100245struct MeanQueueDescriptor : QueueDescriptorWithParameters<MeanDescriptor>
narpra01a6bf9122018-09-10 09:50:09 +0100246{
247 void Validate(const WorkloadInfo& workloadInfo) const;
248};
249
jimfly012c9322a2018-09-19 10:59:49 +0100250// Pad layer workload data
251struct PadQueueDescriptor : QueueDescriptorWithParameters<PadDescriptor>
252{
253 void Validate(const WorkloadInfo& workloadInfo) const;
254};
255
Derek Lambertia9cca6a2019-03-25 15:41:58 +0000256struct QuantizeQueueDescriptor : QueueDescriptor
257{
258 void Validate(const WorkloadInfo& workloadInfo) const;
259};
260
FrancisMurtagh20995952018-12-17 12:11:36 +0000261// Equal layer workload data
262struct EqualQueueDescriptor : QueueDescriptor
263{
264 void Validate(const WorkloadInfo& workloadInfo) const;
265};
266
telsoa01c577f2c2018-08-31 09:22:23 +0100267// Batch norm layer workload data.
telsoa014fcda012018-03-09 14:13:49 +0000268struct BatchNormalizationQueueDescriptor : QueueDescriptorWithParameters<BatchNormalizationDescriptor>
269{
270 BatchNormalizationQueueDescriptor()
271 : m_Mean(nullptr)
272 , m_Variance(nullptr)
273 , m_Beta(nullptr)
274 , m_Gamma(nullptr)
275 {
276 }
277
278 const ConstCpuTensorHandle* m_Mean;
279 const ConstCpuTensorHandle* m_Variance;
280 const ConstCpuTensorHandle* m_Beta;
281 const ConstCpuTensorHandle* m_Gamma;
282
283 void Validate(const WorkloadInfo& workloadInfo) const;
284};
285
286struct ResizeBilinearQueueDescriptor : QueueDescriptorWithParameters<ResizeBilinearDescriptor>
287{
288 void Validate(const WorkloadInfo& workloadInfo) const;
289};
290
Teresa Charlina9075df2019-06-27 15:41:57 +0100291struct ResizeQueueDescriptor : QueueDescriptorWithParameters<ResizeDescriptor>
292{
293 void Validate(const WorkloadInfo& workloadInfo) const;
294};
295
telsoa014fcda012018-03-09 14:13:49 +0000296struct FakeQuantizationQueueDescriptor : QueueDescriptorWithParameters<FakeQuantizationDescriptor>
297{
298 FakeQuantizationQueueDescriptor()
299 : m_Min(nullptr)
300 , m_Max(nullptr)
301 {
302 }
303
304 const ConstCpuTensorHandle* m_Min;
305 const ConstCpuTensorHandle* m_Max;
306
307 void Validate(const WorkloadInfo& workloadInfo) const;
308};
309
Kevin Mayce5045a2019-10-02 14:07:47 +0100310struct InstanceNormalizationQueueDescriptor : QueueDescriptorWithParameters<InstanceNormalizationDescriptor>
311{
Kevin Mayce5045a2019-10-02 14:07:47 +0100312 void Validate(const WorkloadInfo& workloadInfo) const;
313};
314
Matteo Martincighbcd3c852018-09-28 14:14:12 +0100315struct L2NormalizationQueueDescriptor : QueueDescriptorWithParameters<L2NormalizationDescriptor>
telsoa014fcda012018-03-09 14:13:49 +0000316{
317 void Validate(const WorkloadInfo& workloadInfo) const;
318};
319
Aron Virginas-Tarf982dea2019-10-11 14:07:53 +0100320struct LogSoftmaxQueueDescriptor : QueueDescriptorWithParameters<LogSoftmaxDescriptor>
321{
322 void Validate(const WorkloadInfo& workloadInfo) const;
323};
324
telsoa014fcda012018-03-09 14:13:49 +0000325struct ConstantQueueDescriptor : QueueDescriptor
326{
327 ConstantQueueDescriptor()
328 : m_LayerOutput(nullptr)
329 {
330 }
331
332 const ConstCpuTensorHandle* m_LayerOutput;
333
334 void Validate(const WorkloadInfo& workloadInfo) const;
335};
336
337struct ReshapeQueueDescriptor : QueueDescriptorWithParameters<ReshapeDescriptor>
338{
339 void Validate(const WorkloadInfo& workloadInfo) const;
340};
341
Nattapat Chaimanowong207ef9a2018-11-02 10:57:25 +0000342struct SpaceToBatchNdQueueDescriptor : QueueDescriptorWithParameters<SpaceToBatchNdDescriptor>
343{
344 void Validate(const WorkloadInfo& workloadInfo) const;
345};
346
Aron Virginas-Tar972af152019-06-11 14:14:03 +0100347struct SpaceToDepthQueueDescriptor : QueueDescriptorWithParameters<SpaceToDepthDescriptor>
348{
349 void Validate(const WorkloadInfo& workloadInfo) const;
350};
351
telsoa014fcda012018-03-09 14:13:49 +0000352struct FloorQueueDescriptor : QueueDescriptor
353{
354 void Validate(const WorkloadInfo& workloadInfo) const;
355};
356
telsoa01c577f2c2018-08-31 09:22:23 +0100357struct LstmQueueDescriptor : QueueDescriptorWithParameters<LstmDescriptor>
358{
359 LstmQueueDescriptor()
360 : m_InputToInputWeights(nullptr)
361 , m_InputToForgetWeights(nullptr)
362 , m_InputToCellWeights(nullptr)
363 , m_InputToOutputWeights(nullptr)
364 , m_RecurrentToInputWeights(nullptr)
365 , m_RecurrentToForgetWeights(nullptr)
366 , m_RecurrentToCellWeights(nullptr)
367 , m_RecurrentToOutputWeights(nullptr)
368 , m_CellToInputWeights(nullptr)
369 , m_CellToForgetWeights(nullptr)
370 , m_CellToOutputWeights(nullptr)
371 , m_InputGateBias(nullptr)
372 , m_ForgetGateBias(nullptr)
373 , m_CellBias(nullptr)
374 , m_OutputGateBias(nullptr)
375 , m_ProjectionWeights(nullptr)
376 , m_ProjectionBias(nullptr)
Jan Eilers38e05bd2019-06-26 13:10:09 +0100377 , m_InputLayerNormWeights(nullptr)
378 , m_ForgetLayerNormWeights(nullptr)
379 , m_CellLayerNormWeights(nullptr)
380 , m_OutputLayerNormWeights(nullptr)
telsoa01c577f2c2018-08-31 09:22:23 +0100381 {
382 }
383
384 const ConstCpuTensorHandle* m_InputToInputWeights;
385 const ConstCpuTensorHandle* m_InputToForgetWeights;
386 const ConstCpuTensorHandle* m_InputToCellWeights;
387 const ConstCpuTensorHandle* m_InputToOutputWeights;
388 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
389 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
390 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
391 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
392 const ConstCpuTensorHandle* m_CellToInputWeights;
393 const ConstCpuTensorHandle* m_CellToForgetWeights;
394 const ConstCpuTensorHandle* m_CellToOutputWeights;
395 const ConstCpuTensorHandle* m_InputGateBias;
396 const ConstCpuTensorHandle* m_ForgetGateBias;
397 const ConstCpuTensorHandle* m_CellBias;
398 const ConstCpuTensorHandle* m_OutputGateBias;
399 const ConstCpuTensorHandle* m_ProjectionWeights;
400 const ConstCpuTensorHandle* m_ProjectionBias;
Jan Eilers38e05bd2019-06-26 13:10:09 +0100401 const ConstCpuTensorHandle* m_InputLayerNormWeights;
402 const ConstCpuTensorHandle* m_ForgetLayerNormWeights;
403 const ConstCpuTensorHandle* m_CellLayerNormWeights;
404 const ConstCpuTensorHandle* m_OutputLayerNormWeights;
telsoa01c577f2c2018-08-31 09:22:23 +0100405
406 void Validate(const WorkloadInfo& workloadInfo) const;
407};
408
409struct ConvertFp16ToFp32QueueDescriptor : QueueDescriptor
410{
411 void Validate(const WorkloadInfo& workloadInfo) const;
412};
413
414struct ConvertFp32ToFp16QueueDescriptor : QueueDescriptor
415{
416 void Validate(const WorkloadInfo& workloadInfo) const;
417};
418
Éanna Ó Catháin4e1e1362018-11-12 11:36:34 +0000419struct BatchToSpaceNdQueueDescriptor : QueueDescriptorWithParameters<BatchToSpaceNdDescriptor>
420{
421 void Validate(const WorkloadInfo& workloadInfo) const;
422};
Conor Kennedy430b5d82018-11-14 15:28:28 +0000423
424struct StridedSliceQueueDescriptor : QueueDescriptorWithParameters<StridedSliceDescriptor>
425{
426 void Validate(const WorkloadInfo& workloadInfo) const;
427};
428
Éanna Ó Catháin20e58802018-12-04 10:29:06 +0000429// Minimum layer workload data.
kevmay0190539692018-11-29 08:40:19 +0000430struct MinimumQueueDescriptor : QueueDescriptor
431{
432 void Validate(const WorkloadInfo& workloadInfo) const;
433};
434
Matteo Martincigh59a950c2018-12-13 12:48:25 +0000435struct GreaterQueueDescriptor : QueueDescriptor
436{
437 void Validate(const WorkloadInfo& workloadInfo) const;
438};
439
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000440struct DebugQueueDescriptor : QueueDescriptor
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000441{
janeil013fec1ea2019-11-07 09:47:20 +0000442 DebugQueueDescriptor() : m_Guid(0) {}
443
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000444 void Validate(const WorkloadInfo& workloadInfo) const;
Nattapat Chaimanowong964e9552019-03-26 11:03:26 +0000445
446 LayerGuid m_Guid;
447 std::string m_LayerName;
448 unsigned int m_SlotIndex;
Nattapat Chaimanowonga9a1cf12018-12-03 16:06:49 +0000449};
450
Mohamed Nour Abouelseouda1d3c6a2018-12-27 12:39:16 +0000451struct RsqrtQueueDescriptor : QueueDescriptor
452{
453 void Validate(const WorkloadInfo& workloadInfo) const;
454};
455
narpra01b89b05f2019-01-16 09:53:09 +0000456struct GatherQueueDescriptor : QueueDescriptor
457{
458 void Validate(const WorkloadInfo& workloadInfo) const;
459};
460
Matteo Martincigh49124022019-01-11 13:25:59 +0000461struct PreCompiledQueueDescriptor : QueueDescriptorWithParameters<PreCompiledDescriptor>
462{
463 PreCompiledQueueDescriptor()
464 : m_PreCompiledObject(nullptr)
465 {
466 }
467
Matteo Martincigh7997a352019-04-17 15:37:30 +0100468 void* m_PreCompiledObject;
Matteo Martincigh49124022019-01-11 13:25:59 +0000469
470 void Validate(const WorkloadInfo& workloadInfo) const;
471};
472
Nattapat Chaimanowonge4294fd2019-03-28 09:56:53 +0000473struct DequantizeQueueDescriptor : QueueDescriptor
474{
475 void Validate(const WorkloadInfo& workloadInfo) const;
476};
477
Nattapat Chaimanowong1f886302019-04-05 13:37:19 +0100478struct MergeQueueDescriptor : QueueDescriptor
479{
480 void Validate(const WorkloadInfo& workloadInfo) const;
481};
482
Sadik Armaganeff363d2019-04-05 15:25:46 +0100483struct SwitchQueueDescriptor : QueueDescriptor
484{
485 void Validate(const WorkloadInfo& workloadInfo) const;
486};
487
Matteo Martincigh0e406ee2019-06-12 15:42:18 +0100488struct PreluQueueDescriptor : QueueDescriptor
489{
490 void Validate(const WorkloadInfo& workloadInfo) const;
491};
492
Aron Virginas-Tar639fb042019-06-20 14:28:19 +0100493struct TransposeConvolution2dQueueDescriptor : QueueDescriptorWithParameters<TransposeConvolution2dDescriptor>
494{
495 TransposeConvolution2dQueueDescriptor() :
496 m_Weight(nullptr),
497 m_Bias(nullptr)
498 {}
499
500 const ConstCpuTensorHandle* m_Weight;
501 const ConstCpuTensorHandle* m_Bias;
502
503 void Validate(const WorkloadInfo& workloadInfo) const;
504};
505
James Conroyee18dc82019-07-17 11:27:46 +0100506struct QuantizedLstmQueueDescriptor : QueueDescriptor
507{
508 QuantizedLstmQueueDescriptor()
509 : m_InputToInputWeights(nullptr)
510 , m_InputToForgetWeights(nullptr)
511 , m_InputToCellWeights(nullptr)
512 , m_InputToOutputWeights(nullptr)
513
514 , m_RecurrentToInputWeights(nullptr)
515 , m_RecurrentToForgetWeights(nullptr)
516 , m_RecurrentToCellWeights(nullptr)
517 , m_RecurrentToOutputWeights(nullptr)
518
519 , m_InputGateBias(nullptr)
520 , m_ForgetGateBias(nullptr)
521 , m_CellBias(nullptr)
522 , m_OutputGateBias(nullptr)
523 {}
524
525 const ConstCpuTensorHandle* m_InputToInputWeights;
526 const ConstCpuTensorHandle* m_InputToForgetWeights;
527 const ConstCpuTensorHandle* m_InputToCellWeights;
528 const ConstCpuTensorHandle* m_InputToOutputWeights;
529
530 const ConstCpuTensorHandle* m_RecurrentToInputWeights;
531 const ConstCpuTensorHandle* m_RecurrentToForgetWeights;
532 const ConstCpuTensorHandle* m_RecurrentToCellWeights;
533 const ConstCpuTensorHandle* m_RecurrentToOutputWeights;
534
535 const ConstCpuTensorHandle* m_InputGateBias;
536 const ConstCpuTensorHandle* m_ForgetGateBias;
537 const ConstCpuTensorHandle* m_CellBias;
538 const ConstCpuTensorHandle* m_OutputGateBias;
539
540 void Validate(const WorkloadInfo& workloadInfo) const;
541};
542
Kevin May868eb142019-09-04 17:29:31 +0100543struct AbsQueueDescriptor : QueueDescriptor
544{
545 void Validate(const WorkloadInfo& workloadInfo) const;
546};
547
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100548struct SliceQueueDescriptor : QueueDescriptorWithParameters<SliceDescriptor>
549{
550 void Validate(const WorkloadInfo& workloadInfo) const;
551};
552
Aron Virginas-Tardd6247f2019-09-19 14:31:17 +0100553struct DepthToSpaceQueueDescriptor : QueueDescriptorWithParameters<DepthToSpaceDescriptor>
554{
555 void Validate(const WorkloadInfo& workloadInfo) const;
556};
557
Aron Virginas-Tar77bfb5e2019-10-16 17:45:38 +0100558struct ComparisonQueueDescriptor : QueueDescriptorWithParameters<ComparisonDescriptor>
559{
560 void Validate(const WorkloadInfo& workloadInfo) const;
561};
562
Aron Virginas-Tar636ab402019-09-16 14:27:45 +0100563} // namespace armnn