ArmNN
 25.11
Loading...
Searching...
No Matches
ConvImpl.hpp
Go to the documentation of this file.
1//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
10#include "BaseIterator.hpp"
11#include "Decoders.hpp"
12#include "Encoders.hpp"
13
14#include <armnn/Tensor.hpp>
15
17
18#include <cmath>
19#include <limits>
20
21namespace armnn
22{
23
24/// Performs multiplication of an integer with a multiplier which is less than one,
25/// using quantized integer arithmetic which is consistent with AndroidNN's CPU executor.
27{
28public:
29 /// Constructs a QuantizedMultiplierSmallerThanOne which will multiply by the given multiplier.
30 /// This stores the appropriate integer quantities (derived from the given multiplier) for later use.
31 /// The implementation of this function is adapted from Android NN's QuantizeMultiplierSmallerThanOne().
32 QuantizedMultiplierSmallerThanOne(float multiplier);
33
34 /// The implementation of this function is adapted from Android NN's MultiplyByQuantizedMultiplierSmallerThanOne().
35 int32_t operator*(int32_t rhs) const;
36
37private:
38 /// The implementation of this function is adapted from gemmlowp's SaturatingRoundingDoublingHighMul().
39 static int32_t SaturatingRoundingDoublingHighMul(int32_t a, int32_t b);
40
41 /// The implementation of this function is adapted from gemmlowp's RoundingDivideByPOT().
42 static int32_t RoundingDivideByPOT(int32_t x, int exponent);
43
44 int32_t m_Multiplier;
45 int32_t m_RightShift;
46};
47
48void Convolve(const TensorShape& rInputShape,
49 Decoder<float>& rInputDecoder,
50 const TensorShape& rOutputShape,
51 Encoder<float>& rOutputEncoder,
52 const TensorShape& rFilterShape,
53 Decoder<float>& rFilterDecoder,
54 bool biasEnabled,
55 Decoder<float>* pBiasDecoder,
56 DataLayout dataLayout,
57 unsigned int paddingTop,
58 unsigned int paddingLeft,
59 unsigned int xStride,
60 unsigned int yStride,
61 unsigned int xDilation,
62 unsigned int yDilation,
63 bool depthwise = false);
64} //namespace armnn
Copyright (c) 2021 ARM Limited and Contributors.
DataLayout
Definition Types.hpp:63
void Convolve(const TensorShape &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rFilterShape, Decoder< float > &rFilterDecoder, bool biasEnabled, Decoder< float > *pBiasDecoder, DataLayout dataLayout, unsigned int paddingTop, unsigned int paddingLeft, unsigned int xStride, unsigned int yStride, unsigned int xDilation, unsigned int yDilation, bool depthwise)
Definition ConvImpl.cpp:68
QuantizedMultiplierSmallerThanOne(float multiplier)
Constructs a QuantizedMultiplierSmallerThanOne which will multiply by the given multiplier.
Definition ConvImpl.cpp:14
int32_t operator*(int32_t rhs) const
The implementation of this function is adapted from Android NN's MultiplyByQuantizedMultiplierSmaller...
Definition ConvImpl.cpp:37