ArmNN
 20.08
WorkloadData.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #pragma once
6 
9 
10 #include <InternalTypes.hpp>
11 
12 #include <armnn/Deprecated.hpp>
13 #include <armnn/Descriptors.hpp>
14 #include <armnn/Exceptions.hpp>
15 #include <armnn/Types.hpp>
16 #include <armnn/Tensor.hpp>
17 
19 
20 namespace armnn
21 {
22 
23 //A helper function that returns the bias data type required for given input data type.
24 DataType GetBiasDataType(DataType inputDataType);
25 
26 struct WorkloadInfo;
27 
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,
35  unsigned int numExpectedOut) const;
36 
37 
38 protected:
39  ~QueueDescriptor() = default;
40  QueueDescriptor() = default;
41  QueueDescriptor(QueueDescriptor const&) = default;
42  QueueDescriptor& operator=(QueueDescriptor const&) = default;
43 };
44 
45 // Base class for queue descriptors which contain parameters.
46 template <typename LayerDescriptor>
48 {
49  LayerDescriptor m_Parameters;
50 
51 protected:
52  ~QueueDescriptorWithParameters() = default;
56 };
57 
59 {
60  void Validate(const WorkloadInfo& workloadInfo) const;
61 };
62 
65 
67 {
68  void Validate(const WorkloadInfo& workloadInfo) const;
69 };
70 
72 {
73  void Validate(const WorkloadInfo& workloadInfo) const;
74 };
75 
76 // Softmax layer workload data.
78 {
79  void Validate(const WorkloadInfo& workloadInfo) const;
80 };
81 
82 // Splitter layer workload data.
84 {
85  struct ViewOrigin
86  {
88  ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
89 
90  //View origin (size of the vector is the same as number of dimensions of the view).
91  std::vector<unsigned int> m_Origin;
92  };
93 
94  //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.
96  std::vector<ViewOrigin> m_ViewOrigins;
97 
98  void Validate(const WorkloadInfo& workloadInfo) const;
99 };
100 
101 // Concat layer workload data.
103 {
104  struct ViewOrigin
105  {
107  ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
108 
109  //View origin (size of the vector is the same as number of dimensions of the view).
110  std::vector<unsigned int> m_Origin;
111  };
112 
113  //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.
115  std::vector<ViewOrigin> m_ViewOrigins;
116 
117  void Validate(const WorkloadInfo& workloadInfo) const;
118 };
119 
120 // Deprecated. Use ConcatQueueDescriptor instead
122 
123 // Stack layer workload data.
125 {
126  void Validate(const WorkloadInfo& workloadInfo) const;
127 };
128 
129 // Activation layer workload data.
131 {
132  void Validate(const WorkloadInfo& workloadInfo) const;
133 };
134 
136 {
137  void Validate(const WorkloadInfo& workloadInfo) const;
138 };
139 
140 // Fill layer workload data.
142 {
143  void Validate(const WorkloadInfo& workloadInfo) const;
144 };
145 
146 // Fully connected layer workload data.
148 {
150  : m_Weight(nullptr)
151  , m_Bias(nullptr)
152  {
153  }
154 
157 
158  void Validate(const WorkloadInfo& workloadInfo) const;
159 };
160 
161 // Permute layer workload data.
163 {
164  void Validate(const WorkloadInfo& workloadInfo) const;
165 };
166 
167 // Pooling 2D layer workload data.
169 {
170  void Validate(const WorkloadInfo& workloadInfo) const;
171 };
172 
173 // Convolution 2D layer workload data.
175 {
177  : m_Weight(nullptr)
178  , m_Bias(nullptr)
179  {
180  }
181 
184 
185  void Validate(const WorkloadInfo& workloadInfo) const;
186 };
187 
188 // Depthwise Convolution 2D layer workload data.
190 {
192  : m_Weight(nullptr)
193  , m_Bias(nullptr)
194  {
195  }
196 
199 
200  void Validate(const WorkloadInfo& workloadInfo) const;
201 };
202 
204 {
206  : m_Anchors(nullptr)
207  {
208  }
209 
211 
212  void Validate(const WorkloadInfo& workloadInfo) const;
213 };
214 
215 // Normalization layer workload data.
217 {
218  void Validate(const WorkloadInfo& workloadInfo) const;
219 };
220 
221 // Add layer workload data.
223 {
224  void Validate(const WorkloadInfo& workloadInfo) const;
225 };
226 
227 // Multiplication layer workload data.
229 {
230  void Validate(const WorkloadInfo& workloadInfo) const;
231 };
232 
233 // Division layer workload data.
235 {
236  void Validate(const WorkloadInfo& workloadInfo) const;
237 };
238 
239 // Subtraction layer workload data.
241 {
242  void Validate(const WorkloadInfo& workloadInfo) const;
243 };
244 
245 // Maximum layer workload data.
247 {
248  void Validate(const WorkloadInfo& workloadInfo) const;
249 };
250 
251 // Mean layer workload data.
253 {
254  void Validate(const WorkloadInfo& workloadInfo) const;
255 };
256 
257 // Pad layer workload data
259 {
260  void Validate(const WorkloadInfo& workloadInfo) const;
261 };
262 
264 {
265  void Validate(const WorkloadInfo& workloadInfo) const;
266 };
267 
268 // Deprecated use ComparisonQueueDescriptor instead
270 {
271  void Validate(const WorkloadInfo& workloadInfo) const;
272 };
273 
274 // Batch norm layer workload data.
276 {
278  : m_Mean(nullptr)
279  , m_Variance(nullptr)
280  , m_Beta(nullptr)
281  , m_Gamma(nullptr)
282  {
283  }
284 
289 
290  void Validate(const WorkloadInfo& workloadInfo) const;
291 };
292 
294 {
295  void Validate(const WorkloadInfo& workloadInfo) const;
296 };
297 
299 {
300  void Validate(const WorkloadInfo& workloadInfo) const;
301 };
302 
304 {
305  void Validate(const WorkloadInfo& workloadInfo) const;
306 };
307 
309 {
311  : m_Min(nullptr)
312  , m_Max(nullptr)
313  {
314  }
315 
318 
319  void Validate(const WorkloadInfo& workloadInfo) const;
320 };
321 
323 {
324  void Validate(const WorkloadInfo& workloadInfo) const;
325 };
326 
328 {
329  void Validate(const WorkloadInfo& workloadInfo) const;
330 };
331 
333 {
334  void Validate(const WorkloadInfo& workloadInfo) const;
335 };
336 
338 {
340  : m_LayerOutput(nullptr)
341  {
342  }
343 
345 
346  void Validate(const WorkloadInfo& workloadInfo) const;
347 };
348 
350 {
351  void Validate(const WorkloadInfo& workloadInfo) const;
352 };
353 
355 {
356  void Validate(const WorkloadInfo& workloadInfo) const;
357 };
358 
360 {
361  void Validate(const WorkloadInfo& workloadInfo) const;
362 };
363 
365 {
366  void Validate(const WorkloadInfo& workloadInfo) const;
367 };
368 
370 {
372  : m_InputToInputWeights(nullptr)
373  , m_InputToForgetWeights(nullptr)
374  , m_InputToCellWeights(nullptr)
375  , m_InputToOutputWeights(nullptr)
376  , m_RecurrentToInputWeights(nullptr)
377  , m_RecurrentToForgetWeights(nullptr)
378  , m_RecurrentToCellWeights(nullptr)
379  , m_RecurrentToOutputWeights(nullptr)
380  , m_CellToInputWeights(nullptr)
381  , m_CellToForgetWeights(nullptr)
382  , m_CellToOutputWeights(nullptr)
383  , m_InputGateBias(nullptr)
384  , m_ForgetGateBias(nullptr)
385  , m_CellBias(nullptr)
386  , m_OutputGateBias(nullptr)
387  , m_ProjectionWeights(nullptr)
388  , m_ProjectionBias(nullptr)
389  , m_InputLayerNormWeights(nullptr)
390  , m_ForgetLayerNormWeights(nullptr)
391  , m_CellLayerNormWeights(nullptr)
392  , m_OutputLayerNormWeights(nullptr)
393  {
394  }
395 
417 
418  void Validate(const WorkloadInfo& workloadInfo) const;
419 };
420 
422 {
423  void Validate(const WorkloadInfo& workloadInfo) const;
424 };
425 
427 {
428  void Validate(const WorkloadInfo& workloadInfo) const;
429 };
430 
432 {
433  void Validate(const WorkloadInfo& workloadInfo) const;
434 };
435 
437 {
438  void Validate(const WorkloadInfo& workloadInfo) const;
439 };
440 
442 {
443  void Validate(const WorkloadInfo& workloadInfo) const;
444 };
445 
447 {
448  void Validate(const WorkloadInfo& workloadInfo) const;
449 };
450 
451 // Minimum layer workload data.
453 {
454  void Validate(const WorkloadInfo& workloadInfo) const;
455 };
456 
457 // Deprecated use ComparisonQueueDescriptor instead
459 {
460  void Validate(const WorkloadInfo& workloadInfo) const;
461 };
462 
464 {
465  DebugQueueDescriptor() : m_Guid(0) {}
466 
467  void Validate(const WorkloadInfo& workloadInfo) const;
468 
470  std::string m_LayerName;
471  unsigned int m_SlotIndex;
472 };
473 
475 {
476  void Validate(const WorkloadInfo& workloadInfo) const;
477 };
478 
480 {
481  void Validate(const WorkloadInfo& workloadInfo) const;
482 };
483 
485 {
487  : m_PreCompiledObject(nullptr)
488  {
489  }
490 
492 
493  void Validate(const WorkloadInfo& workloadInfo) const;
494 };
495 
497 {
498  void Validate(const WorkloadInfo& workloadInfo) const;
499 };
500 
502 {
503  void Validate(const WorkloadInfo& workloadInfo) const;
504 };
505 
507 {
508  void Validate(const WorkloadInfo& workloadInfo) const;
509 };
510 
512 {
513  void Validate(const WorkloadInfo& workloadInfo) const;
514 };
515 
517 {
519  m_Weight(nullptr),
520  m_Bias(nullptr)
521  {}
522 
525 
526  void Validate(const WorkloadInfo& workloadInfo) const;
527 };
528 
530 {
531  void Validate(const WorkloadInfo& workloadInfo) const;
532 };
533 
535 {
537  : m_InputToInputWeights(nullptr)
538  , m_InputToForgetWeights(nullptr)
539  , m_InputToCellWeights(nullptr)
540  , m_InputToOutputWeights(nullptr)
541  , m_RecurrentToInputWeights(nullptr)
542  , m_RecurrentToForgetWeights(nullptr)
543  , m_RecurrentToCellWeights(nullptr)
544  , m_RecurrentToOutputWeights(nullptr)
545  , m_CellToInputWeights(nullptr)
546  , m_CellToForgetWeights(nullptr)
547  , m_CellToOutputWeights(nullptr)
548  , m_InputGateBias(nullptr)
549  , m_ForgetGateBias(nullptr)
550  , m_CellBias(nullptr)
551  , m_OutputGateBias(nullptr)
552  , m_ProjectionWeights(nullptr)
553  , m_ProjectionBias(nullptr)
554  , m_InputLayerNormWeights(nullptr)
555  , m_ForgetLayerNormWeights(nullptr)
556  , m_CellLayerNormWeights(nullptr)
557  , m_OutputLayerNormWeights(nullptr)
558  {
559  }
560 
582 
583  void Validate(const WorkloadInfo& workloadInfo) const;
584 };
585 
587 {
589  : m_InputToInputWeights(nullptr)
590  , m_InputToForgetWeights(nullptr)
591  , m_InputToCellWeights(nullptr)
592  , m_InputToOutputWeights(nullptr)
593 
594  , m_RecurrentToInputWeights(nullptr)
595  , m_RecurrentToForgetWeights(nullptr)
596  , m_RecurrentToCellWeights(nullptr)
597  , m_RecurrentToOutputWeights(nullptr)
598 
599  , m_InputGateBias(nullptr)
600  , m_ForgetGateBias(nullptr)
601  , m_CellBias(nullptr)
602  , m_OutputGateBias(nullptr)
603  {}
604 
609 
614 
619 
620  void Validate(const WorkloadInfo& workloadInfo) const;
621 };
622 
624 {
625  void Validate(const WorkloadInfo& workloadInfo) const;
626 };
627 
629 {
630  void Validate(const WorkloadInfo& workloadInfo) const;
631 };
632 
634 {
635  void Validate(const WorkloadInfo& workloadInfo) const;
636 };
637 
639 {
640  void Validate(const WorkloadInfo& workloadInfo) const;
641 };
642 
644 {
645  void Validate(const WorkloadInfo& workloadInfo) const;
646 };
647 
648 } // namespace armnn
const ConstCpuTensorHandle * m_Max
const ConstCpuTensorHandle * m_CellToForgetWeights
const ConstCpuTensorHandle * m_Bias
const ConstCpuTensorHandle * m_RecurrentToForgetWeights
const ConstCpuTensorHandle * m_Gamma
const ConstCpuTensorHandle * m_InputGateBias
const ConstCpuTensorHandle * m_Beta
QueueDescriptor & operator=(QueueDescriptor const &)=default
std::vector< unsigned int > m_Origin
const ConstCpuTensorHandle * m_ProjectionWeights
const ConstCpuTensorHandle * m_RecurrentToForgetWeights
const ConstCpuTensorHandle * m_Weight
const ConstCpuTensorHandle * m_CellToOutputWeights
const ConstCpuTensorHandle * m_InputToCellWeights
const ConstCpuTensorHandle * m_InputToOutputWeights
ViewOrigin(const std::vector< unsigned int > &origin)
const ConstCpuTensorHandle * m_InputToCellWeights
const ConstCpuTensorHandle * m_ProjectionBias
const ConstCpuTensorHandle * m_ForgetLayerNormWeights
const ConstCpuTensorHandle * m_ProjectionBias
const ConstCpuTensorHandle * m_Mean
const ConstCpuTensorHandle * m_CellLayerNormWeights
const ConstCpuTensorHandle * m_LayerOutput
const ConstCpuTensorHandle * m_OutputGateBias
const ConstCpuTensorHandle * m_CellToInputWeights
const ConstCpuTensorHandle * m_RecurrentToCellWeights
const ConstCpuTensorHandle * m_Variance
const ConstCpuTensorHandle * m_RecurrentToInputWeights
const ConstCpuTensorHandle * m_CellLayerNormWeights
DetectionPostProcessQueueDescriptor()
void ValidateInputsOutputs(const std::string &descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const
ViewOrigin(std::vector< unsigned int > const &origin)
const ConstCpuTensorHandle * m_OutputGateBias
const ConstCpuTensorHandle * m_CellBias
Copyright (c) 2020 ARM Limited.
const ConstCpuTensorHandle * m_Min
const ConstCpuTensorHandle * m_CellToForgetWeights
const ConstCpuTensorHandle * m_CellBias
const ConstCpuTensorHandle * m_RecurrentToInputWeights
const ConstCpuTensorHandle * m_CellToOutputWeights
const ConstCpuTensorHandle * m_OutputLayerNormWeights
const ConstCpuTensorHandle * m_InputLayerNormWeights
const ConstCpuTensorHandle * m_OutputLayerNormWeights
DataType
Definition: Types.hpp:32
std::vector< ViewOrigin > m_ViewOrigins
const ConstCpuTensorHandle * m_ForgetGateBias
const ConstCpuTensorHandle * m_InputToForgetWeights
const ConstCpuTensorHandle * m_Weight
const ConstCpuTensorHandle * m_ForgetGateBias
const ConstCpuTensorHandle * m_InputToInputWeights
const ConstCpuTensorHandle * m_Anchors
const ConstCpuTensorHandle * m_RecurrentToInputWeights
const ConstCpuTensorHandle * m_RecurrentToCellWeights
std::vector< ViewOrigin > m_ViewOrigins
const ConstCpuTensorHandle * m_RecurrentToOutputWeights
DataType GetBiasDataType(DataType inputDataType)
const ConstCpuTensorHandle * m_CellToInputWeights
const ConstCpuTensorHandle * m_RecurrentToOutputWeights
const ConstCpuTensorHandle * m_RecurrentToOutputWeights
const ConstCpuTensorHandle * m_ForgetLayerNormWeights
const ConstCpuTensorHandle * m_CellBias
std::vector< ITensorHandle * > m_Outputs
const ConstCpuTensorHandle * m_OutputGateBias
const ConstCpuTensorHandle * m_InputGateBias
const ConstCpuTensorHandle * m_InputGateBias
Contains information about inputs and outputs to a layer.
const ConstCpuTensorHandle * m_RecurrentToCellWeights
const ConstCpuTensorHandle * m_InputToForgetWeights
std::vector< ITensorHandle * > m_Inputs
const ConstCpuTensorHandle * m_Bias
const ConstCpuTensorHandle * m_InputLayerNormWeights
const ConstCpuTensorHandle * m_RecurrentToForgetWeights
const ConstCpuTensorHandle * m_InputToOutputWeights
const ConstCpuTensorHandle * m_ForgetGateBias
const ConstCpuTensorHandle * m_InputToInputWeights
const ConstCpuTensorHandle * m_InputToOutputWeights
const ConstCpuTensorHandle * m_InputToInputWeights
const ConstCpuTensorHandle * m_ProjectionWeights
std::vector< unsigned int > m_Origin
const ConstCpuTensorHandle * m_InputToForgetWeights
const ConstCpuTensorHandle * m_InputToCellWeights