ArmNN
 20.05
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 // Fully connected layer workload data.
142 {
144  : m_Weight(nullptr)
145  , m_Bias(nullptr)
146  {
147  }
148 
151 
152  void Validate(const WorkloadInfo& workloadInfo) const;
153 };
154 
155 // Permute layer workload data.
157 {
158  void Validate(const WorkloadInfo& workloadInfo) const;
159 };
160 
161 // Pooling 2D layer workload data.
163 {
164  void Validate(const WorkloadInfo& workloadInfo) const;
165 };
166 
167 // Convolution 2D layer workload data.
169 {
171  : m_Weight(nullptr)
172  , m_Bias(nullptr)
173  {
174  }
175 
178 
179  void Validate(const WorkloadInfo& workloadInfo) const;
180 };
181 
182 // Depthwise Convolution 2D layer workload data.
184 {
186  : m_Weight(nullptr)
187  , m_Bias(nullptr)
188  {
189  }
190 
193 
194  void Validate(const WorkloadInfo& workloadInfo) const;
195 };
196 
198 {
200  : m_Anchors(nullptr)
201  {
202  }
203 
205 
206  void Validate(const WorkloadInfo& workloadInfo) const;
207 };
208 
209 // Normalization layer workload data.
211 {
212  void Validate(const WorkloadInfo& workloadInfo) const;
213 };
214 
215 // Add layer workload data.
217 {
218  void Validate(const WorkloadInfo& workloadInfo) const;
219 };
220 
221 // Multiplication layer workload data.
223 {
224  void Validate(const WorkloadInfo& workloadInfo) const;
225 };
226 
227 // Division layer workload data.
229 {
230  void Validate(const WorkloadInfo& workloadInfo) const;
231 };
232 
233 // Subtraction layer workload data.
235 {
236  void Validate(const WorkloadInfo& workloadInfo) const;
237 };
238 
239 // Maximum layer workload data.
241 {
242  void Validate(const WorkloadInfo& workloadInfo) const;
243 };
244 
245 // Mean layer workload data.
247 {
248  void Validate(const WorkloadInfo& workloadInfo) const;
249 };
250 
251 // Pad layer workload data
253 {
254  void Validate(const WorkloadInfo& workloadInfo) const;
255 };
256 
258 {
259  void Validate(const WorkloadInfo& workloadInfo) const;
260 };
261 
262 // Deprecated use ComparisonQueueDescriptor instead
264 {
265  void Validate(const WorkloadInfo& workloadInfo) const;
266 };
267 
268 // Batch norm layer workload data.
270 {
272  : m_Mean(nullptr)
273  , m_Variance(nullptr)
274  , m_Beta(nullptr)
275  , m_Gamma(nullptr)
276  {
277  }
278 
283 
284  void Validate(const WorkloadInfo& workloadInfo) const;
285 };
286 
288 {
289  void Validate(const WorkloadInfo& workloadInfo) const;
290 };
291 
293 {
294  void Validate(const WorkloadInfo& workloadInfo) const;
295 };
296 
298 {
300  : m_Min(nullptr)
301  , m_Max(nullptr)
302  {
303  }
304 
307 
308  void Validate(const WorkloadInfo& workloadInfo) const;
309 };
310 
312 {
313  void Validate(const WorkloadInfo& workloadInfo) const;
314 };
315 
317 {
318  void Validate(const WorkloadInfo& workloadInfo) const;
319 };
320 
322 {
323  void Validate(const WorkloadInfo& workloadInfo) const;
324 };
325 
327 {
329  : m_LayerOutput(nullptr)
330  {
331  }
332 
334 
335  void Validate(const WorkloadInfo& workloadInfo) const;
336 };
337 
339 {
340  void Validate(const WorkloadInfo& workloadInfo) const;
341 };
342 
344 {
345  void Validate(const WorkloadInfo& workloadInfo) const;
346 };
347 
349 {
350  void Validate(const WorkloadInfo& workloadInfo) const;
351 };
352 
354 {
355  void Validate(const WorkloadInfo& workloadInfo) const;
356 };
357 
359 {
361  : m_InputToInputWeights(nullptr)
362  , m_InputToForgetWeights(nullptr)
363  , m_InputToCellWeights(nullptr)
364  , m_InputToOutputWeights(nullptr)
365  , m_RecurrentToInputWeights(nullptr)
366  , m_RecurrentToForgetWeights(nullptr)
367  , m_RecurrentToCellWeights(nullptr)
368  , m_RecurrentToOutputWeights(nullptr)
369  , m_CellToInputWeights(nullptr)
370  , m_CellToForgetWeights(nullptr)
371  , m_CellToOutputWeights(nullptr)
372  , m_InputGateBias(nullptr)
373  , m_ForgetGateBias(nullptr)
374  , m_CellBias(nullptr)
375  , m_OutputGateBias(nullptr)
376  , m_ProjectionWeights(nullptr)
377  , m_ProjectionBias(nullptr)
378  , m_InputLayerNormWeights(nullptr)
379  , m_ForgetLayerNormWeights(nullptr)
380  , m_CellLayerNormWeights(nullptr)
381  , m_OutputLayerNormWeights(nullptr)
382  {
383  }
384 
406 
407  void Validate(const WorkloadInfo& workloadInfo) const;
408 };
409 
411 {
412  void Validate(const WorkloadInfo& workloadInfo) const;
413 };
414 
416 {
417  void Validate(const WorkloadInfo& workloadInfo) const;
418 };
419 
421 {
422  void Validate(const WorkloadInfo& workloadInfo) const;
423 };
424 
426 {
427  void Validate(const WorkloadInfo& workloadInfo) const;
428 };
429 
431 {
432  void Validate(const WorkloadInfo& workloadInfo) const;
433 };
434 
436 {
437  void Validate(const WorkloadInfo& workloadInfo) const;
438 };
439 
440 // Minimum layer workload data.
442 {
443  void Validate(const WorkloadInfo& workloadInfo) const;
444 };
445 
446 // Deprecated use ComparisonQueueDescriptor instead
448 {
449  void Validate(const WorkloadInfo& workloadInfo) const;
450 };
451 
453 {
454  DebugQueueDescriptor() : m_Guid(0) {}
455 
456  void Validate(const WorkloadInfo& workloadInfo) const;
457 
459  std::string m_LayerName;
460  unsigned int m_SlotIndex;
461 };
462 
464 {
465  void Validate(const WorkloadInfo& workloadInfo) const;
466 };
467 
469 {
470  void Validate(const WorkloadInfo& workloadInfo) const;
471 };
472 
474 {
476  : m_PreCompiledObject(nullptr)
477  {
478  }
479 
481 
482  void Validate(const WorkloadInfo& workloadInfo) const;
483 };
484 
486 {
487  void Validate(const WorkloadInfo& workloadInfo) const;
488 };
489 
491 {
492  void Validate(const WorkloadInfo& workloadInfo) const;
493 };
494 
496 {
497  void Validate(const WorkloadInfo& workloadInfo) const;
498 };
499 
501 {
502  void Validate(const WorkloadInfo& workloadInfo) const;
503 };
504 
506 {
508  m_Weight(nullptr),
509  m_Bias(nullptr)
510  {}
511 
514 
515  void Validate(const WorkloadInfo& workloadInfo) const;
516 };
517 
519 {
520  void Validate(const WorkloadInfo& workloadInfo) const;
521 };
522 
524 {
526  : m_InputToInputWeights(nullptr)
527  , m_InputToForgetWeights(nullptr)
528  , m_InputToCellWeights(nullptr)
529  , m_InputToOutputWeights(nullptr)
530  , m_RecurrentToInputWeights(nullptr)
531  , m_RecurrentToForgetWeights(nullptr)
532  , m_RecurrentToCellWeights(nullptr)
533  , m_RecurrentToOutputWeights(nullptr)
534  , m_CellToInputWeights(nullptr)
535  , m_CellToForgetWeights(nullptr)
536  , m_CellToOutputWeights(nullptr)
537  , m_InputGateBias(nullptr)
538  , m_ForgetGateBias(nullptr)
539  , m_CellBias(nullptr)
540  , m_OutputGateBias(nullptr)
541  , m_ProjectionWeights(nullptr)
542  , m_ProjectionBias(nullptr)
543  , m_InputLayerNormWeights(nullptr)
544  , m_ForgetLayerNormWeights(nullptr)
545  , m_CellLayerNormWeights(nullptr)
546  , m_OutputLayerNormWeights(nullptr)
547  {
548  }
549 
571 
572  void Validate(const WorkloadInfo& workloadInfo) const;
573 };
574 
576 {
578  : m_InputToInputWeights(nullptr)
579  , m_InputToForgetWeights(nullptr)
580  , m_InputToCellWeights(nullptr)
581  , m_InputToOutputWeights(nullptr)
582 
583  , m_RecurrentToInputWeights(nullptr)
584  , m_RecurrentToForgetWeights(nullptr)
585  , m_RecurrentToCellWeights(nullptr)
586  , m_RecurrentToOutputWeights(nullptr)
587 
588  , m_InputGateBias(nullptr)
589  , m_ForgetGateBias(nullptr)
590  , m_CellBias(nullptr)
591  , m_OutputGateBias(nullptr)
592  {}
593 
598 
603 
608 
609  void Validate(const WorkloadInfo& workloadInfo) const;
610 };
611 
613 {
614  void Validate(const WorkloadInfo& workloadInfo) const;
615 };
616 
618 {
619  void Validate(const WorkloadInfo& workloadInfo) const;
620 };
621 
623 {
624  void Validate(const WorkloadInfo& workloadInfo) const;
625 };
626 
628 {
629  void Validate(const WorkloadInfo& workloadInfo) const;
630 };
631 
633 {
634  void Validate(const WorkloadInfo& workloadInfo) const;
635 };
636 
637 } // 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