blob: 7f06012cd7200a820d0a06eccc4ecbb754fd30f9 [file] [log] [blame]
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "BaseIterator.hpp"
Colm Donelan0c479742021-12-10 12:43:54 +00009#include <armnn/backends/TensorHandle.hpp>
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010010
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010011// 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
Jan Eilers38e05bd2019-06-26 13:10:09 +010014
15void 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.
23void 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
29void ZeroVector(armnn::Encoder<float>& vector,
30 uint32_t vSize);
31
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010032void MatrixBatchVectorMultiplyAccumulate(armnn::Decoder<float>& matrix,
33 uint32_t mRows,
34 uint32_t mCols,
35 armnn::Decoder<float>& vector,
36 uint32_t nBatch,
Jan Eilers38e05bd2019-06-26 13:10:09 +010037 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010038
39void VectorBatchVectorAssign(armnn::Decoder<float>& vector,
40 uint32_t vSize,
41 uint32_t nBatch,
Jan Eilers38e05bd2019-06-26 13:10:09 +010042 armnn::Encoder<float>& outBatchVector);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010043
44void VectorBatchVectorCwiseProductAccumulate(armnn::Decoder<float>& vector,
45 uint32_t vSize,
46 armnn::Decoder<float>& batchVector,
47 uint32_t nBatch,
Jan Eilers38e05bd2019-06-26 13:10:09 +010048 armnn::Encoder<float>& outResult);
49
50void VectorBatchVectorCwiseProduct(armnn::Decoder<float>& vector,
51 uint32_t vSize,
52 armnn::Decoder<float>& batchVector,
53 uint32_t nBatch,
54 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010055
56void Sub1Vector(armnn::Decoder<float>& vector,
57 uint32_t vSize,
Jan Eilers38e05bd2019-06-26 13:10:09 +010058 armnn::Encoder<float>& result);
59
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010060
61void VectorVectorCwiseProduct(armnn::Decoder<float>& vector1,
62 armnn::Decoder<float>& vector2,
63 uint32_t vSize,
Jan Eilers38e05bd2019-06-26 13:10:09 +010064 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010065
66void VectorVectorCwiseProductAccumulate(armnn::Decoder<float>& vector1,
67 armnn::Decoder<float>& vector2,
68 uint32_t vSize,
Jan Eilers38e05bd2019-06-26 13:10:09 +010069 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010070
71float Clip(float f,
Jan Eilers38e05bd2019-06-26 13:10:09 +010072 float absLimit);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010073
74void ClipVector(armnn::Decoder<float>& vector,
75 uint32_t vSize,
76 float absLimit,
Jan Eilers38e05bd2019-06-26 13:10:09 +010077 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010078
79void CopyVector(armnn::Decoder<float>& vector,
80 uint32_t vSize,
Jan Eilers38e05bd2019-06-26 13:10:09 +010081 armnn::Encoder<float>& outResult);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010082
83void SetActivationParameters(uint32_t activation,
84 armnn::ActivationFunction& outArmnnActivation,
85 float& outA,
Jan Eilers38e05bd2019-06-26 13:10:09 +010086 float& outB);
Nattapat Chaimanowongeb2b3292019-05-07 12:02:30 +010087
James Conroy1f58f032021-04-27 17:13:27 +010088std::unique_ptr<armnn::ScopedTensorHandle> AssignScopedTensorHandle(const armnn::ConstTensorHandle *ptr);