ArmNN
 25.11
Loading...
Searching...
No Matches
WorkloadData.hpp
Go to the documentation of this file.
1//
2// Copyright © 2021-2024 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
7#include "TensorHandle.hpp"
8
10#include <armnn/Descriptors.hpp>
11#include <armnn/Exceptions.hpp>
12#include <armnn/Types.hpp>
13#include <armnn/Tensor.hpp>
14#include <common/include/ProfilingGuid.hpp>
15
16namespace armnn
17{
18
19//A helper function that returns the bias data type required for given input data type.
20DataType GetBiasDataType(DataType inputDataType);
21
22struct WorkloadInfo;
23
25{
26 std::vector<ITensorHandle*> m_Inputs;
27 std::vector<ITensorHandle*> m_Outputs;
29
30 virtual ~QueueDescriptor() = default;
31
32 void ValidateTensorNumDimensions(const TensorInfo& tensor,
33 std::string const& descName,
34 unsigned int numDimensions,
35 std::string const& tensorName) const;
36
37 void ValidateTensorNumDimNumElem(const TensorInfo& tensorInfo,
38 unsigned int numDimension,
39 unsigned int numElements,
40 std::string const& tensorName) const;
41
42 void ValidateInputsOutputs(const std::string& descName,
43 unsigned int numExpectedIn,
44 unsigned int numExpectedOut) const;
45
46 template<typename T>
47 const T* GetAdditionalInformation() const
48 {
49 return static_cast<T*>(m_AdditionalInfoObject);
50 }
51
52 bool m_AllowExpandedDims = false;
53
54protected:
60};
61
62// Base class for queue descriptors which contain parameters.
63template <typename LayerDescriptor>
75
77{
78 void Validate(const WorkloadInfo& workloadInfo) const;
79};
80
82{
83 void Validate(const WorkloadInfo& workloadInfo) const;
84};
85
87{
88 void Validate(const WorkloadInfo& workloadInfo) const;
89};
90
93
95{
96 void Validate(const WorkloadInfo& workloadInfo) const;
97};
98
100{
101 void Validate(const WorkloadInfo& workloadInfo) const;
102};
103
104// Softmax layer workload data.
106{
107 void Validate(const WorkloadInfo& workloadInfo) const;
108};
109
110// Splitter layer workload data.
112{
114 {
116 ViewOrigin(std::vector<unsigned int> const& origin) : m_Origin(origin) {}
117
118 //View origin (size of the vector is the same as number of dimensions of the view).
119 std::vector<unsigned int> m_Origin;
120 };
121
122 //View defines a tensor that will be carved from the input tensor.
123 //View origins are stored here, the extents are defined by sizes of the output tensors.
124 std::vector<ViewOrigin> m_ViewOrigins;
125
126 void Validate(const WorkloadInfo& workloadInfo) const;
127};
128
129// Concat layer workload data.
131{
133 {
135 ViewOrigin(const std::vector<unsigned int>& origin) : m_Origin(origin) {}
136
137 //View origin (size of the vector is the same as number of dimensions of the view).
138 std::vector<unsigned int> m_Origin;
139 };
140
141 //View defines a sub-area of the output tensor that will be filled with the corresponding input tensor.
142 //View origins are stored here, the extents are defined by sizes of the input tensors.
143 std::vector<ViewOrigin> m_ViewOrigins;
144
145 void Validate(const WorkloadInfo& workloadInfo) const;
146};
147
148// Deprecated. Use ConcatQueueDescriptor instead
150
151// Stack layer workload data.
153{
154 void Validate(const WorkloadInfo& workloadInfo) const;
155};
156
157// Activation layer workload data.
159{
160 void Validate(const WorkloadInfo& workloadInfo) const;
161};
162
164{
165 void Validate(const WorkloadInfo& workloadInfo) const;
166};
167
169{
170 void Validate(const WorkloadInfo& workloadInfo) const;
171};
172
173// Fill layer workload data.
175{
176 void Validate(const WorkloadInfo& workloadInfo) const;
177};
178
179// Fully connected layer workload data.
181{
182 void Validate(const WorkloadInfo& workloadInfo) const;
183};
184
186{
187 void Validate(const WorkloadInfo& workloadInfo) const;
188};
189
190// Permute layer workload data.
192{
193 void Validate(const WorkloadInfo& workloadInfo) const;
194};
195
196// Pooling 2D layer workload data.
198{
199 void Validate(const WorkloadInfo& workloadInfo) const;
200};
201
202// Pooling 3D layer workload data.
204{
205 void Validate(const WorkloadInfo& workloadInfo) const;
206};
207
208
209// Convolution 2D layer workload data.
211{
212 void Validate(const WorkloadInfo& workloadInfo) const;
213};
214
215// Convolution 3D layer workload data.
217{
218 void Validate(const WorkloadInfo& workloadInfo) const;
219};
220
221/// Depthwise Convolution 2D layer workload data.
222///
223/// @note
224/// The weights are in the format [1, H, W, I*M]. Where I is the input channel size, M the depthwise mutliplier and
225/// H, W is the height and width of the filter kernel. If per channel quantization is applied
226/// the weights will be quantized along the last dimension/axis (I*M) which corresponds to the output channel size.
227/// If per channel quantization is applied the weights tensor will have I*M scales, one for each dimension
228/// of the quantization axis. You have to be aware of this when reshaping the weights tensor.
229/// Splitting the I*M axis, e.g. [1, H, W, I*M] --> [H, W, I, M], won't work without taking care of the
230/// corresponding quantization scales.
231/// If there is no per channel quantization applied reshaping the weights tensor won't cause any issues. There are
232/// preconfigured permutation functions available @link WorkloadUtils.hpp here.
233///
235{
236 void Validate(const WorkloadInfo& workloadInfo) const;
237};
238
240{
242 : m_Anchors(nullptr)
243 {
244 }
245
247
248 void Validate(const WorkloadInfo& workloadInfo) const;
249};
250
251// Normalization layer workload data.
253{
254 void Validate(const WorkloadInfo& workloadInfo) const;
255};
256
257// Add layer workload data.
259{
260 void Validate(const WorkloadInfo& workloadInfo) const;
261};
262
263// Multiplication layer workload data.
265{
266 void Validate(const WorkloadInfo& workloadInfo) const;
267};
268
269// Division layer workload data.
271{
272 void Validate(const WorkloadInfo& workloadInfo) const;
273};
274
275// Subtraction layer workload data.
277{
278 void Validate(const WorkloadInfo& workloadInfo) const;
279};
280
281// Maximum layer workload data.
283{
284 void Validate(const WorkloadInfo& workloadInfo) const;
285};
286
287// Mean layer workload data.
289{
290 void Validate(const WorkloadInfo& workloadInfo) const;
291};
292
293// Pad layer workload data
295{
296 void Validate(const WorkloadInfo& workloadInfo) const;
297};
298
300{
301 void Validate(const WorkloadInfo& workloadInfo) const;
302};
303
304// Deprecated use ComparisonQueueDescriptor instead
306{
307 void Validate(const WorkloadInfo& workloadInfo) const;
308};
309
310// Batch norm layer workload data.
312{
314 : m_Mean(nullptr)
315 , m_Variance(nullptr)
316 , m_Beta(nullptr)
317 , m_Gamma(nullptr)
318 {
319 }
320
325
326 void Validate(const WorkloadInfo& workloadInfo) const;
327};
328
330{
331 void Validate(const WorkloadInfo& workloadInfo) const;
332};
333
335{
336 void Validate(const WorkloadInfo& workloadInfo) const;
337};
338
340{
342 : m_Min(nullptr)
343 , m_Max(nullptr)
344 {
345 }
346
349
350 void Validate(const WorkloadInfo& workloadInfo) const;
351};
352
354{
355 void Validate(const WorkloadInfo& workloadInfo) const;
356};
357
359{
360 void Validate(const WorkloadInfo& workloadInfo) const;
361};
362
364{
365 void Validate(const WorkloadInfo& workloadInfo) const;
366};
367
369{
371 : m_LayerOutput(nullptr)
372 {
373 }
374
376
377 void Validate(const WorkloadInfo& workloadInfo) const;
378};
379
381{
382 void Validate(const WorkloadInfo& workloadInfo) const;
383};
384
386{
387 void Validate(const WorkloadInfo& workloadInfo) const;
388};
389
391{
392 void Validate(const WorkloadInfo& workloadInfo) const;
393};
394
396{
397 void Validate(const WorkloadInfo& workloadInfo) const;
398};
399
401{
403 : m_InputToInputWeights(nullptr)
404 , m_InputToForgetWeights(nullptr)
405 , m_InputToCellWeights(nullptr)
406 , m_InputToOutputWeights(nullptr)
409 , m_RecurrentToCellWeights(nullptr)
411 , m_CellToInputWeights(nullptr)
412 , m_CellToForgetWeights(nullptr)
413 , m_CellToOutputWeights(nullptr)
414 , m_InputGateBias(nullptr)
415 , m_ForgetGateBias(nullptr)
416 , m_CellBias(nullptr)
417 , m_OutputGateBias(nullptr)
418 , m_ProjectionWeights(nullptr)
419 , m_ProjectionBias(nullptr)
420 , m_InputLayerNormWeights(nullptr)
421 , m_ForgetLayerNormWeights(nullptr)
422 , m_CellLayerNormWeights(nullptr)
423 , m_OutputLayerNormWeights(nullptr)
424 {
425 }
426
448
449 void Validate(const WorkloadInfo& workloadInfo) const;
450};
451
453{
454 void Validate(const WorkloadInfo& workloadInfo) const;
455};
456
458{
459 void Validate(const WorkloadInfo& workloadInfo) const;
460};
461
463{
464 void Validate(const WorkloadInfo& workloadInfo) const;
465};
466
468{
469 void Validate(const WorkloadInfo& workloadInfo) const;
470};
471
472// Minimum layer workload data.
474{
475 void Validate(const WorkloadInfo& workloadInfo) const;
476};
477
478// Deprecated use ComparisonQueueDescriptor instead
480{
481 void Validate(const WorkloadInfo& workloadInfo) const;
482};
483
485{
487
488 void Validate(const WorkloadInfo& workloadInfo) const;
489
491 std::string m_LayerName;
492 unsigned int m_SlotIndex;
493
495};
496
498{
499 void Validate(const WorkloadInfo& workloadInfo) const;
500};
501
503{
504 void Validate(const WorkloadInfo& workloadInfo) const;
505};
506
508{
509 void Validate(const WorkloadInfo& workloadInfo) const;
510};
511
513{
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{
541 void Validate(const WorkloadInfo& workloadInfo) const;
542};
543
545{
547 m_Weight(nullptr),
548 m_Bias(nullptr)
549 {}
550
553
554 void Validate(const WorkloadInfo& workloadInfo) const;
555};
556
558{
559 void Validate(const WorkloadInfo& workloadInfo) const;
560};
561
563{
565 : m_InputToInputWeights(nullptr)
566 , m_InputToForgetWeights(nullptr)
567 , m_InputToCellWeights(nullptr)
568 , m_InputToOutputWeights(nullptr)
571 , m_RecurrentToCellWeights(nullptr)
573 , m_CellToInputWeights(nullptr)
574 , m_CellToForgetWeights(nullptr)
575 , m_CellToOutputWeights(nullptr)
576 , m_InputGateBias(nullptr)
577 , m_ForgetGateBias(nullptr)
578 , m_CellBias(nullptr)
579 , m_OutputGateBias(nullptr)
580 , m_ProjectionWeights(nullptr)
581 , m_ProjectionBias(nullptr)
582 , m_InputLayerNormWeights(nullptr)
583 , m_ForgetLayerNormWeights(nullptr)
584 , m_CellLayerNormWeights(nullptr)
585 , m_OutputLayerNormWeights(nullptr)
586 {
587 }
588
610
611 void Validate(const WorkloadInfo& workloadInfo) const;
612};
613
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
682{
683 void Validate(const WorkloadInfo& workloadInfo) const;
684};
685
687{
688 void Validate(const WorkloadInfo& workloadInfo) const;
689};
690
692{
693 void Validate(const WorkloadInfo& workloadInfo) const;
694};
695
697{
699 : m_InputToInputWeights(nullptr)
700 , m_InputToForgetWeights(nullptr)
701 , m_InputToCellWeights(nullptr)
702 , m_InputToOutputWeights(nullptr)
705 , m_RecurrentToCellWeights(nullptr)
707 , m_CellToInputWeights(nullptr)
708 , m_CellToForgetWeights(nullptr)
709 , m_CellToOutputWeights(nullptr)
710 , m_InputGateBias(nullptr)
711 , m_ForgetGateBias(nullptr)
712 , m_CellBias(nullptr)
713 , m_OutputGateBias(nullptr)
714 , m_ProjectionWeights(nullptr)
715 , m_ProjectionBias(nullptr)
716 , m_InputLayerNormWeights(nullptr)
717 , m_ForgetLayerNormWeights(nullptr)
718 , m_CellLayerNormWeights(nullptr)
719 , m_OutputLayerNormWeights(nullptr)
720 {
721 }
722
744
745 void Validate(const WorkloadInfo& workloadInfo) const;
746};
747
749{
750 void Validate(const WorkloadInfo& workloadInfo) const;
751};
752
754{
755 void Validate(const WorkloadInfo& workloadInfo) const;
756};
757
759{
760 void Validate(const WorkloadInfo& workloadInfo) const;
761};
762
764{
765 void Validate(const WorkloadInfo& workloadInfo) const;
766};
767
769{
770 void Validate(const WorkloadInfo& workloadInfo) const;
771};
772
774{
775 void Validate(const WorkloadInfo& workloadInfo) const;
776};
777
778} // namespace armnn
arm::pipe::ProfilingGuid LayerGuid
Define LayerGuid type.
Definition Types.hpp:26
Copyright (c) 2021 ARM Limited and Contributors.
MemCopyQueueDescriptor InputQueueDescriptor
ConcatQueueDescriptor MergerQueueDescriptor
MemCopyQueueDescriptor OutputQueueDescriptor
DataType GetBiasDataType(DataType inputDataType)
DataType
Definition Types.hpp:49
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
ViewOrigin(const std::vector< unsigned int > &origin)
std::vector< unsigned int > m_Origin
void Validate(const WorkloadInfo &workloadInfo) const
std::vector< ViewOrigin > m_ViewOrigins
void Validate(const WorkloadInfo &workloadInfo) const
const ConstTensorHandle * m_LayerOutput
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
Depthwise Convolution 2D layer workload data.
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
DetectionPostProcessQueueDescriptor()
const ConstTensorHandle * m_Anchors
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
const ConstTensorHandle * m_OutputLayerNormWeights
const ConstTensorHandle * m_InputToOutputWeights
const ConstTensorHandle * m_InputLayerNormWeights
const ConstTensorHandle * m_CellToForgetWeights
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_ForgetGateBias
const ConstTensorHandle * m_ProjectionWeights
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_CellToInputWeights
const ConstTensorHandle * m_CellToOutputWeights
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_ProjectionBias
const ConstTensorHandle * m_ForgetLayerNormWeights
const ConstTensorHandle * m_RecurrentToForgetWeights
const ConstTensorHandle * m_CellLayerNormWeights
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
const ConstTensorHandle * m_OutputLayerNormWeights
const ConstTensorHandle * m_InputToOutputWeights
const ConstTensorHandle * m_InputLayerNormWeights
const ConstTensorHandle * m_CellToForgetWeights
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_ForgetGateBias
const ConstTensorHandle * m_ProjectionWeights
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_CellToInputWeights
const ConstTensorHandle * m_CellToOutputWeights
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_ProjectionBias
const ConstTensorHandle * m_ForgetLayerNormWeights
const ConstTensorHandle * m_RecurrentToForgetWeights
const ConstTensorHandle * m_CellLayerNormWeights
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
const ConstTensorHandle * m_InputToOutputWeights
const ConstTensorHandle * m_RecurrentToInputWeights
const ConstTensorHandle * m_ForgetGateBias
const ConstTensorHandle * m_InputGateBias
const ConstTensorHandle * m_RecurrentToOutputWeights
const ConstTensorHandle * m_OutputGateBias
const ConstTensorHandle * m_CellBias
const ConstTensorHandle * m_InputToCellWeights
const ConstTensorHandle * m_InputToForgetWeights
const ConstTensorHandle * m_InputToInputWeights
const ConstTensorHandle * m_RecurrentToCellWeights
const ConstTensorHandle * m_RecurrentToForgetWeights
void ValidateTensorNumDimensions(const TensorInfo &tensor, std::string const &descName, unsigned int numDimensions, std::string const &tensorName) const
std::vector< ITensorHandle * > m_Inputs
virtual ~QueueDescriptor()=default
QueueDescriptor & operator=(QueueDescriptor const &)=default
std::vector< ITensorHandle * > m_Outputs
QueueDescriptor(QueueDescriptor const &)=default
void ValidateInputsOutputs(const std::string &descName, unsigned int numExpectedIn, unsigned int numExpectedOut) const
void ValidateTensorNumDimNumElem(const TensorInfo &tensorInfo, unsigned int numDimension, unsigned int numElements, std::string const &tensorName) const
const T * GetAdditionalInformation() const
QueueDescriptorWithParameters(QueueDescriptorWithParameters const &)=default
QueueDescriptorWithParameters & operator=(QueueDescriptorWithParameters const &)=default
virtual ~QueueDescriptorWithParameters()=default
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
ViewOrigin(std::vector< unsigned int > const &origin)
void Validate(const WorkloadInfo &workloadInfo) const
std::vector< ViewOrigin > m_ViewOrigins
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
void Validate(const WorkloadInfo &workloadInfo) const
Contains information about TensorInfos of a layer.