ArmNN
 21.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;
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 
159 {
160  void Validate(const WorkloadInfo& workloadInfo) const;
161 };
162 
163 // Fill layer workload data.
165 {
166  void Validate(const WorkloadInfo& workloadInfo) const;
167 };
168 
169 // Fully connected layer workload data.
171 {
173  : m_Weight(nullptr)
174  , m_Bias(nullptr)
175  {
176  }
177 
180 
181  void Validate(const WorkloadInfo& workloadInfo) const;
182 };
183 
184 // Permute layer workload data.
186 {
187  void Validate(const WorkloadInfo& workloadInfo) const;
188 };
189 
190 // Pooling 2D layer workload data.
192 {
193  void Validate(const WorkloadInfo& workloadInfo) const;
194 };
195 
196 // Convolution 2D layer workload data.
198 {
200  : m_Weight(nullptr)
201  , m_Bias(nullptr)
202  {
203  }
204 
207 
208  void Validate(const WorkloadInfo& workloadInfo) const;
209 };
210 
211 // Depthwise Convolution 2D layer workload data.
213 {
215  : m_Weight(nullptr)
216  , m_Bias(nullptr)
217  {
218  }
219 
222 
223  void Validate(const WorkloadInfo& workloadInfo) const;
224 };
225 
227 {
229  : m_Anchors(nullptr)
230  {
231  }
232 
234 
235  void Validate(const WorkloadInfo& workloadInfo) const;
236 };
237 
238 // Normalization layer workload data.
240 {
241  void Validate(const WorkloadInfo& workloadInfo) const;
242 };
243 
244 // Add layer workload data.
246 {
247  void Validate(const WorkloadInfo& workloadInfo) const;
248 };
249 
250 // Multiplication layer workload data.
252 {
253  void Validate(const WorkloadInfo& workloadInfo) const;
254 };
255 
256 // Division layer workload data.
258 {
259  void Validate(const WorkloadInfo& workloadInfo) const;
260 };
261 
262 // Subtraction layer workload data.
264 {
265  void Validate(const WorkloadInfo& workloadInfo) const;
266 };
267 
268 // Maximum layer workload data.
270 {
271  void Validate(const WorkloadInfo& workloadInfo) const;
272 };
273 
274 // Mean layer workload data.
276 {
277  void Validate(const WorkloadInfo& workloadInfo) const;
278 };
279 
280 // Pad layer workload data
282 {
283  void Validate(const WorkloadInfo& workloadInfo) const;
284 };
285 
287 {
288  void Validate(const WorkloadInfo& workloadInfo) const;
289 };
290 
291 // Deprecated use ComparisonQueueDescriptor instead
293 {
294  void Validate(const WorkloadInfo& workloadInfo) const;
295 };
296 
297 // Batch norm layer workload data.
299 {
301  : m_Mean(nullptr)
302  , m_Variance(nullptr)
303  , m_Beta(nullptr)
304  , m_Gamma(nullptr)
305  {
306  }
307 
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 {
328  void Validate(const WorkloadInfo& workloadInfo) const;
329 };
330 
332 {
334  : m_Min(nullptr)
335  , m_Max(nullptr)
336  {
337  }
338 
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 {
357  void Validate(const WorkloadInfo& workloadInfo) const;
358 };
359 
361 {
363  : m_LayerOutput(nullptr)
364  {
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 {
389  void Validate(const WorkloadInfo& workloadInfo) const;
390 };
391 
393 {
395  : m_InputToInputWeights(nullptr)
396  , m_InputToForgetWeights(nullptr)
397  , m_InputToCellWeights(nullptr)
398  , m_InputToOutputWeights(nullptr)
399  , m_RecurrentToInputWeights(nullptr)
400  , m_RecurrentToForgetWeights(nullptr)
401  , m_RecurrentToCellWeights(nullptr)
402  , m_RecurrentToOutputWeights(nullptr)
403  , m_CellToInputWeights(nullptr)
404  , m_CellToForgetWeights(nullptr)
405  , m_CellToOutputWeights(nullptr)
406  , m_InputGateBias(nullptr)
407  , m_ForgetGateBias(nullptr)
408  , m_CellBias(nullptr)
409  , m_OutputGateBias(nullptr)
410  , m_ProjectionWeights(nullptr)
411  , m_ProjectionBias(nullptr)
412  , m_InputLayerNormWeights(nullptr)
413  , m_ForgetLayerNormWeights(nullptr)
414  , m_CellLayerNormWeights(nullptr)
415  , m_OutputLayerNormWeights(nullptr)
416  {
417  }
418 
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 
470 {
471  void Validate(const WorkloadInfo& workloadInfo) const;
472 };
473 
474 // Minimum layer workload data.
476 {
477  void Validate(const WorkloadInfo& workloadInfo) const;
478 };
479 
480 // Deprecated use ComparisonQueueDescriptor instead
482 {
483  void Validate(const WorkloadInfo& workloadInfo) const;
484 };
485 
487 {
488  DebugQueueDescriptor() : m_Guid(0) {}
489 
490  void Validate(const WorkloadInfo& workloadInfo) const;
491 
493  std::string m_LayerName;
494  unsigned int m_SlotIndex;
495 };
496 
498 {
499  void Validate(const WorkloadInfo& workloadInfo) const;
500 };
501 
503 {
504  void Validate(const WorkloadInfo& workloadInfo) const;
505 };
506 
508 {
510  : m_PreCompiledObject(nullptr)
511  {
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 {
536  void Validate(const WorkloadInfo& workloadInfo) const;
537 };
538 
540 {
542  m_Weight(nullptr),
543  m_Bias(nullptr)
544  {}
545 
548 
549  void Validate(const WorkloadInfo& workloadInfo) const;
550 };
551 
553 {
554  void Validate(const WorkloadInfo& workloadInfo) const;
555 };
556 
558 {
560  : m_InputToInputWeights(nullptr)
561  , m_InputToForgetWeights(nullptr)
562  , m_InputToCellWeights(nullptr)
563  , m_InputToOutputWeights(nullptr)
564  , m_RecurrentToInputWeights(nullptr)
565  , m_RecurrentToForgetWeights(nullptr)
566  , m_RecurrentToCellWeights(nullptr)
567  , m_RecurrentToOutputWeights(nullptr)
568  , m_CellToInputWeights(nullptr)
569  , m_CellToForgetWeights(nullptr)
570  , m_CellToOutputWeights(nullptr)
571  , m_InputGateBias(nullptr)
572  , m_ForgetGateBias(nullptr)
573  , m_CellBias(nullptr)
574  , m_OutputGateBias(nullptr)
575  , m_ProjectionWeights(nullptr)
576  , m_ProjectionBias(nullptr)
577  , m_InputLayerNormWeights(nullptr)
578  , m_ForgetLayerNormWeights(nullptr)
579  , m_CellLayerNormWeights(nullptr)
580  , m_OutputLayerNormWeights(nullptr)
581  {
582  }
583 
605 
606  void Validate(const WorkloadInfo& workloadInfo) const;
607 };
608 
610 {
612  : m_InputToInputWeights(nullptr)
613  , m_InputToForgetWeights(nullptr)
614  , m_InputToCellWeights(nullptr)
615  , m_InputToOutputWeights(nullptr)
616 
617  , m_RecurrentToInputWeights(nullptr)
618  , m_RecurrentToForgetWeights(nullptr)
619  , m_RecurrentToCellWeights(nullptr)
620  , m_RecurrentToOutputWeights(nullptr)
621 
622  , m_InputGateBias(nullptr)
623  , m_ForgetGateBias(nullptr)
624  , m_CellBias(nullptr)
625  , m_OutputGateBias(nullptr)
626  {}
627 
632 
637 
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 
677 {
678  void Validate(const WorkloadInfo& workloadInfo) const;
679 };
680 
681 } // namespace armnn
const ConstTensorHandle * m_CellLayerNormWeights
const ConstTensorHandle * m_ProjectionWeights
const ConstTensorHandle * m_ProjectionWeights
const ConstTensorHandle * m_RecurrentToForgetWeights
const ConstTensorHandle * m_ForgetGateBias
QueueDescriptor & operator=(QueueDescriptor const &)=default
const ConstTensorHandle * m_InputToOutputWeights
std::vector< unsigned int > m_Origin
const ConstTensorHandle * m_LayerOutput
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_RecurrentToCellWeights
ViewOrigin(const std::vector< unsigned int > &origin)
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_CellToOutputWeights
const ConstTensorHandle * m_Variance
const ConstTensorHandle * m_CellToInputWeights
const ConstTensorHandle * m_Weight
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_Bias
const ConstTensorHandle * m_InputToOutputWeights
DetectionPostProcessQueueDescriptor()
void ValidateInputsOutputs(const std::string &descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const
const ConstTensorHandle * m_OutputLayerNormWeights
ViewOrigin(std::vector< unsigned int > const &origin)
Copyright (c) 2021 ARM Limited and Contributors.
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_Bias
const ConstTensorHandle * m_ForgetLayerNormWeights
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_CellLayerNormWeights
DataType
Definition: Types.hpp:36
std::vector< ViewOrigin > m_ViewOrigins
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_ForgetGateBias
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_CellToOutputWeights
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_InputLayerNormWeights
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_Weight
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_InputToForgetWeights
std::vector< ViewOrigin > m_ViewOrigins
const ConstTensorHandle * m_RecurrentToForgetWeights
DataType GetBiasDataType(DataType inputDataType)
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_ForgetGateBias
const T * GetAdditionalInformation() const
const ConstTensorHandle * m_CellToForgetWeights
const ConstTensorHandle * m_InputToOutputWeights
const ConstTensorHandle * m_ProjectionBias
const ConstTensorHandle * m_CellToForgetWeights
std::vector< ITensorHandle * > m_Outputs
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_ProjectionBias
const ConstTensorHandle * m_ForgetLayerNormWeights
Contains information about inputs and outputs to a layer.
const ConstTensorHandle * m_InputLayerNormWeights
const ConstTensorHandle * m_Anchors
const ConstTensorHandle * m_OutputGateBias
std::vector< ITensorHandle * > m_Inputs
const ConstTensorHandle * m_OutputLayerNormWeights
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_CellToInputWeights
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_RecurrentToForgetWeights
std::vector< unsigned int > m_Origin
const ConstTensorHandle * m_RecurrentToOutputWeights