diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-06-03 16:54:25 +0100 |
---|---|---|
committer | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-06-04 15:13:51 +0000 |
commit | 3122bd574a3d29774c535ca2136de361da626e88 (patch) | |
tree | c2fcc19be67f5a35c30d042b80ba3157ef87bd21 /src/backends/reference/workloads/BatchNormImpl.hpp | |
parent | 550fe36f687e73c78b57ebfeee9f98fd35f40f24 (diff) | |
download | armnn-3122bd574a3d29774c535ca2136de361da626e88.tar.gz |
IVGCVSW-3212 Refactor the Reference BatchNormalization workloads to
handle Float32 and QAsymm8 types
* Removed the type-specific workload implementations
* Added type-independent RefBatchNormalizationWorkload implementation
* Reworked BachNormImpl to use decoders/encoders
* Improved the validation of the BatchNorm queue descriptor
* Fixed unit tests where necessary
Change-Id: Icf3fa1332292d38ec2fa0b1cb984cab78426034b
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/backends/reference/workloads/BatchNormImpl.hpp')
-rw-r--r-- | src/backends/reference/workloads/BatchNormImpl.hpp | 62 |
1 files changed, 11 insertions, 51 deletions
diff --git a/src/backends/reference/workloads/BatchNormImpl.hpp b/src/backends/reference/workloads/BatchNormImpl.hpp index 799e7a327b..c0250b9e0f 100644 --- a/src/backends/reference/workloads/BatchNormImpl.hpp +++ b/src/backends/reference/workloads/BatchNormImpl.hpp @@ -5,60 +5,20 @@ #pragma once -#include "RefWorkloadUtils.hpp" -#include "TensorBufferArrayView.hpp" +#include "Encoders.hpp" +#include "Decoders.hpp" -#include <armnn/Tensor.hpp> - -#include <DataLayoutIndexed.hpp> - -#include <cmath> +#include <backendsCommon/WorkloadData.hpp> namespace armnn { -template<typename NormData> -static void BatchNormImpl(NormData data, - const float* varIn, - const float* meanIn, - const float* gammaIn, - const float* betaIn, - float* outputData, - const float* inputData) -{ - const TensorInfo& inputInfo = GetTensorInfo(data.m_Inputs[0]); - const TensorInfo& outputInfo = GetTensorInfo(data.m_Outputs[0]); - - TensorBufferArrayView<const float> input(inputInfo.GetShape(), - inputData, - data.m_Parameters.m_DataLayout); - TensorBufferArrayView<float> output(outputInfo.GetShape(), - outputData, - data.m_Parameters.m_DataLayout); - - armnnUtils::DataLayoutIndexed dataLayout(data.m_Parameters.m_DataLayout); - - for (unsigned int c = 0; c < inputInfo.GetShape()[dataLayout.GetChannelsIndex()]; c++) - { - float var = varIn[c]; - float mean = meanIn[c]; - float gamma = gammaIn[c]; - float beta = betaIn[c]; - - float mult = gamma / sqrtf(var + data.m_Parameters.m_Eps); - float add = beta - mult * mean; - - for (unsigned int n = 0; n < inputInfo.GetShape()[0]; n++) - { - for (unsigned int h = 0; h < inputInfo.GetShape()[dataLayout.GetHeightIndex()]; h++) - { - for (unsigned int w = 0; w < inputInfo.GetShape()[dataLayout.GetWidthIndex()]; w++) - { - output.Get(n, c, h, w) = mult * input.Get(n, c, h, w) + add; - } - } - } - } -} +void BatchNormImpl(const BatchNormalizationQueueDescriptor& data, + Decoder<float>& meanIn, + Decoder<float>& varIn, + Decoder<float>& betaIn, + Decoder<float>& gammaIn, + Decoder<float>& inputData, + Encoder<float>& outputData); -} //namespace armnn +} // namespace armnn |