ArmNN
 21.02
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;
33 
34  void ValidateInputsOutputs(const std::string& descName,
35  unsigned int numExpectedIn,
36  unsigned int numExpectedOut) const;
37 
38  template<typename T>
39  const T* GetAdditionalInformation() const
40  {
41  return static_cast<T*>(m_AdditionalInfoObject);
42  }
43 
44 protected:
45  ~QueueDescriptor() = default;
47  : m_AdditionalInfoObject(nullptr)
48  {}
49  QueueDescriptor(QueueDescriptor const&) = default;
50  QueueDescriptor& operator=(QueueDescriptor const&) = default;
51 };
52 
53 // Base class for queue descriptors which contain parameters.
54 template <typename LayerDescriptor>
56 {
57  LayerDescriptor m_Parameters;
58 
59 protected:
60  ~QueueDescriptorWithParameters() = default;
64 };
65 
67 {
68  void Validate(const WorkloadInfo& workloadInfo) const;
69 };
70 
72 {
73  void Validate(const WorkloadInfo& workloadInfo) const;
74 };
75 
77 {
78  void Validate(const WorkloadInfo& workloadInfo) const;
79 };
80 
83 
85 {
86  void Validate(const WorkloadInfo& workloadInfo) const;
87 };
88 
90 {
91  void Validate(const WorkloadInfo& workloadInfo) const;
92 };
93 
94 // Softmax layer workload data.
96 {
97  void Validate(const WorkloadInfo& workloadInfo) const;
98 };
99 
100 // Splitter layer workload data.
102 {
103  struct ViewOrigin
104  {
106  ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
107 
108  //View origin (size of the vector is the same as number of dimensions of the view).
109  std::vector<unsigned int> m_Origin;
110  };
111 
112  //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.
114  std::vector<ViewOrigin> m_ViewOrigins;
115 
116  void Validate(const WorkloadInfo& workloadInfo) const;
117 };
118 
119 // Concat layer workload data.
121 {
122  struct ViewOrigin
123  {
125  ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
126 
127  //View origin (size of the vector is the same as number of dimensions of the view).
128  std::vector<unsigned int> m_Origin;
129  };
130 
131  //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.
133  std::vector<ViewOrigin> m_ViewOrigins;
134 
135  void Validate(const WorkloadInfo& workloadInfo) const;
136 };
137 
138 // Deprecated. Use ConcatQueueDescriptor instead
140 
141 // Stack layer workload data.
143 {
144  void Validate(const WorkloadInfo& workloadInfo) const;
145 };
146 
147 // Activation layer workload data.
149 {
150  void Validate(const WorkloadInfo& workloadInfo) const;
151 };
152 
154 {
155  void Validate(const WorkloadInfo& workloadInfo) const;
156 };
157 
158 // Fill layer workload data.
160 {
161  void Validate(const WorkloadInfo& workloadInfo) const;
162 };
163 
164 // Fully connected layer workload data.
166 {
168  : m_Weight(nullptr)
169  , m_Bias(nullptr)
170  {
171  }
172 
175 
176  void Validate(const WorkloadInfo& workloadInfo) const;
177 };
178 
179 // Permute layer workload data.
181 {
182  void Validate(const WorkloadInfo& workloadInfo) const;
183 };
184 
185 // Pooling 2D layer workload data.
187 {
188  void Validate(const WorkloadInfo& workloadInfo) const;
189 };
190 
191 // Convolution 2D layer workload data.
193 {
195  : m_Weight(nullptr)
196  , m_Bias(nullptr)
197  {
198  }
199 
202 
203  void Validate(const WorkloadInfo& workloadInfo) const;
204 };
205 
206 // Depthwise Convolution 2D layer workload data.
208 {
210  : m_Weight(nullptr)
211  , m_Bias(nullptr)
212  {
213  }
214 
217 
218  void Validate(const WorkloadInfo& workloadInfo) const;
219 };
220 
222 {
224  : m_Anchors(nullptr)
225  {
226  }
227 
229 
230  void Validate(const WorkloadInfo& workloadInfo) const;
231 };
232 
233 // Normalization layer workload data.
235 {
236  void Validate(const WorkloadInfo& workloadInfo) const;
237 };
238 
239 // Add layer workload data.
241 {
242  void Validate(const WorkloadInfo& workloadInfo) const;
243 };
244 
245 // Multiplication layer workload data.
247 {
248  void Validate(const WorkloadInfo& workloadInfo) const;
249 };
250 
251 // Division layer workload data.
253 {
254  void Validate(const WorkloadInfo& workloadInfo) const;
255 };
256 
257 // Subtraction layer workload data.
259 {
260  void Validate(const WorkloadInfo& workloadInfo) const;
261 };
262 
263 // Maximum layer workload data.
265 {
266  void Validate(const WorkloadInfo& workloadInfo) const;
267 };
268 
269 // Mean layer workload data.
271 {
272  void Validate(const WorkloadInfo& workloadInfo) const;
273 };
274 
275 // Pad layer workload data
277 {
278  void Validate(const WorkloadInfo& workloadInfo) const;
279 };
280 
282 {
283  void Validate(const WorkloadInfo& workloadInfo) const;
284 };
285 
286 // Deprecated use ComparisonQueueDescriptor instead
288 {
289  void Validate(const WorkloadInfo& workloadInfo) const;
290 };
291 
292 // Batch norm layer workload data.
294 {
296  : m_Mean(nullptr)
297  , m_Variance(nullptr)
298  , m_Beta(nullptr)
299  , m_Gamma(nullptr)
300  {
301  }
302 
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_Min(nullptr)
330  , m_Max(nullptr)
331  {
332  }
333 
336 
337  void Validate(const WorkloadInfo& workloadInfo) const;
338 };
339 
341 {
342  void Validate(const WorkloadInfo& workloadInfo) const;
343 };
344 
346 {
347  void Validate(const WorkloadInfo& workloadInfo) const;
348 };
349 
351 {
352  void Validate(const WorkloadInfo& workloadInfo) const;
353 };
354 
356 {
358  : m_LayerOutput(nullptr)
359  {
360  }
361 
363 
364  void Validate(const WorkloadInfo& workloadInfo) const;
365 };
366 
368 {
369  void Validate(const WorkloadInfo& workloadInfo) const;
370 };
371 
373 {
374  void Validate(const WorkloadInfo& workloadInfo) const;
375 };
376 
378 {
379  void Validate(const WorkloadInfo& workloadInfo) const;
380 };
381 
383 {
384  void Validate(const WorkloadInfo& workloadInfo) const;
385 };
386 
388 {
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)
407  , m_InputLayerNormWeights(nullptr)
408  , m_ForgetLayerNormWeights(nullptr)
409  , m_CellLayerNormWeights(nullptr)
410  , m_OutputLayerNormWeights(nullptr)
411  {
412  }
413 
435 
436  void Validate(const WorkloadInfo& workloadInfo) const;
437 };
438 
440 {
441  void Validate(const WorkloadInfo& workloadInfo) const;
442 };
443 
445 {
446  void Validate(const WorkloadInfo& workloadInfo) const;
447 };
448 
450 {
451  void Validate(const WorkloadInfo& workloadInfo) const;
452 };
453 
455 {
456  void Validate(const WorkloadInfo& workloadInfo) const;
457 };
458 
460 {
461  void Validate(const WorkloadInfo& workloadInfo) const;
462 };
463 
465 {
466  void Validate(const WorkloadInfo& workloadInfo) const;
467 };
468 
469 // Minimum layer workload data.
471 {
472  void Validate(const WorkloadInfo& workloadInfo) const;
473 };
474 
475 // Deprecated use ComparisonQueueDescriptor instead
477 {
478  void Validate(const WorkloadInfo& workloadInfo) const;
479 };
480 
482 {
483  DebugQueueDescriptor() : m_Guid(0) {}
484 
485  void Validate(const WorkloadInfo& workloadInfo) const;
486 
488  std::string m_LayerName;
489  unsigned int m_SlotIndex;
490 };
491 
493 {
494  void Validate(const WorkloadInfo& workloadInfo) const;
495 };
496 
498 {
499  void Validate(const WorkloadInfo& workloadInfo) const;
500 };
501 
503 {
505  : m_PreCompiledObject(nullptr)
506  {
507  }
508 
510 
511  void Validate(const WorkloadInfo& workloadInfo) const;
512 };
513 
515 {
516  void Validate(const WorkloadInfo& workloadInfo) const;
517 };
518 
520 {
521  void Validate(const WorkloadInfo& workloadInfo) const;
522 };
523 
525 {
526  void Validate(const WorkloadInfo& workloadInfo) const;
527 };
528 
530 {
531  void Validate(const WorkloadInfo& workloadInfo) const;
532 };
533 
535 {
537  m_Weight(nullptr),
538  m_Bias(nullptr)
539  {}
540 
543 
544  void Validate(const WorkloadInfo& workloadInfo) const;
545 };
546 
548 {
549  void Validate(const WorkloadInfo& workloadInfo) const;
550 };
551 
553 {
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 
600 
601  void Validate(const WorkloadInfo& workloadInfo) const;
602 };
603 
605 {
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 
627 
632 
637 
638  void Validate(const WorkloadInfo& workloadInfo) const;
639 };
640 
642 {
643  void Validate(const WorkloadInfo& workloadInfo) const;
644 };
645 
647 {
648  void Validate(const WorkloadInfo& workloadInfo) const;
649 };
650 
652 {
653  void Validate(const WorkloadInfo& workloadInfo) const;
654 };
655 
657 {
658  void Validate(const WorkloadInfo& workloadInfo) const;
659 };
660 
662 {
663  void Validate(const WorkloadInfo& workloadInfo) const;
664 };
665 
667 {
668  void Validate(const WorkloadInfo& workloadInfo) const;
669 };
670 
672 {
673  void Validate(const WorkloadInfo& workloadInfo) const;
674 };
675 
676 } // 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) 2021 ARM Limited and Contributors.
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 T * GetAdditionalInformation() const
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