aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads/BatchNormImpl.hpp
diff options
context:
space:
mode:
authorMatteo Martincigh <matteo.martincigh@arm.com>2019-06-03 16:54:25 +0100
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>2019-06-04 15:13:51 +0000
commit3122bd574a3d29774c535ca2136de361da626e88 (patch)
treec2fcc19be67f5a35c30d042b80ba3157ef87bd21 /src/backends/reference/workloads/BatchNormImpl.hpp
parent550fe36f687e73c78b57ebfeee9f98fd35f40f24 (diff)
downloadarmnn-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.hpp62
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