xref: /aosp_15_r20/external/armnn/src/backends/reference/workloads/LstmUtils.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "BaseIterator.hpp"
9 #include <armnn/backends/TensorHandle.hpp>
10 
11 // Helper functions ported from the Android code base
12 // Refer to: android/external/tensorflow/tensorflow/contrib/lite/kernels/internal/reference/portable_tensor_utils.cc
13 
14 
15 void VectorBatchVectorAdd(armnn::Decoder<float>& vector,
16                           uint32_t vSize,
17                           armnn::Decoder<float>& batchVector,
18                           uint32_t nBatch,
19                           armnn::Encoder<float>& outResult );
20 
21 // Layer norm for each batch.
22 // normalization_epsilon is added to avoid divergence.
23 void MeanStddevNormalization(armnn::Decoder<float>& input_vector,
24                              armnn::Encoder<float>& output_vector,
25                              uint32_t v_size,
26                              uint32_t n_batch,
27                              float normalization_epsilon);
28 
29 void ZeroVector(armnn::Encoder<float>& vector,
30                 uint32_t vSize);
31 
32 void MatrixBatchVectorMultiplyAccumulate(armnn::Decoder<float>& matrix,
33                                          uint32_t mRows,
34                                          uint32_t mCols,
35                                          armnn::Decoder<float>& vector,
36                                          uint32_t nBatch,
37                                          armnn::Encoder<float>& outResult);
38 
39 void VectorBatchVectorAssign(armnn::Decoder<float>& vector,
40                              uint32_t vSize,
41                              uint32_t nBatch,
42                              armnn::Encoder<float>& outBatchVector);
43 
44 void VectorBatchVectorCwiseProductAccumulate(armnn::Decoder<float>& vector,
45                                              uint32_t vSize,
46                                              armnn::Decoder<float>& batchVector,
47                                              uint32_t nBatch,
48                                              armnn::Encoder<float>& outResult);
49 
50 void VectorBatchVectorCwiseProduct(armnn::Decoder<float>& vector,
51                                    uint32_t vSize,
52                                    armnn::Decoder<float>& batchVector,
53                                    uint32_t nBatch,
54                                    armnn::Encoder<float>& outResult);
55 
56 void Sub1Vector(armnn::Decoder<float>& vector,
57                 uint32_t vSize,
58                 armnn::Encoder<float>& result);
59 
60 
61 void VectorVectorCwiseProduct(armnn::Decoder<float>& vector1,
62                               armnn::Decoder<float>& vector2,
63                               uint32_t vSize,
64                               armnn::Encoder<float>& outResult);
65 
66 void VectorVectorCwiseProductAccumulate(armnn::Decoder<float>& vector1,
67                                         armnn::Decoder<float>& vector2,
68                                         uint32_t vSize,
69                                         armnn::Encoder<float>& outResult);
70 
71 float Clip(float f,
72            float absLimit);
73 
74 void ClipVector(armnn::Decoder<float>& vector,
75                 uint32_t vSize,
76                 float absLimit,
77                 armnn::Encoder<float>& outResult);
78 
79 void CopyVector(armnn::Decoder<float>& vector,
80                 uint32_t vSize,
81                 armnn::Encoder<float>& outResult);
82 
83 void SetActivationParameters(uint32_t activation,
84                              armnn::ActivationFunction& outArmnnActivation,
85                              float& outA,
86                              float& outB);
87 
88 std::unique_ptr<armnn::ScopedTensorHandle> AssignScopedTensorHandle(const armnn::ConstTensorHandle *ptr);
89