ArmNN
 24.02
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 
8 #include "RefWorkloadUtils.hpp"
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 
21 namespace 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 {
28 public:
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 
37 private:
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 
48 void 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
armnn::Decoder< float >
armnn::DataLayout
DataLayout
Definition: Types.hpp:62
BaseIterator.hpp
TensorBufferArrayView.hpp
armnn::QuantizedMultiplierSmallerThanOne::QuantizedMultiplierSmallerThanOne
QuantizedMultiplierSmallerThanOne(float multiplier)
Constructs a QuantizedMultiplierSmallerThanOne which will multiply by the given multiplier.
Definition: ConvImpl.cpp:16
armnn::QuantizedMultiplierSmallerThanOne::operator*
int32_t operator*(int32_t rhs) const
The implementation of this function is adapted from Android NN's MultiplyByQuantizedMultiplierSmaller...
Definition: ConvImpl.cpp:41
armnn::TensorShape
Definition: Tensor.hpp:20
armnn::Encoder< float >
armnn::QuantizedMultiplierSmallerThanOne
Performs multiplication of an integer with a multiplier which is less than one, using quantized integ...
Definition: ConvImpl.hpp:26
RefWorkloadUtils.hpp
Tensor.hpp
Decoders.hpp
armnn
Copyright (c) 2021 ARM Limited and Contributors.
Definition: 01_00_quick_start.dox:6
armnn::Convolve
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:71
Encoders.hpp
DataLayoutIndexed.hpp