From 22f0f2bc3d8d8e460200ae353dcea42157d9ad39 Mon Sep 17 00:00:00 2001 From: nikraj01 Date: Thu, 30 May 2019 17:29:32 +0100 Subject: IVGCVSW-3194 Refactor SpaceToBatchNd workload Change-Id: Iac2ded9b20c37299e3de51465dcbfb5a7bfc52d5 Signed-off-by: nikraj01 --- src/backends/reference/RefWorkloadFactory.cpp | 6 ++++- .../workloads/RefSpaceToBatchNdWorkload.cpp | 18 +++++-------- .../workloads/RefSpaceToBatchNdWorkload.hpp | 16 ++--------- .../reference/workloads/SpaceToBatchNd.cpp | 31 +++++++++++----------- .../reference/workloads/SpaceToBatchNd.hpp | 9 ++++--- 5 files changed, 34 insertions(+), 46 deletions(-) diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index 71b1cb034d..bf2339756c 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -278,7 +278,11 @@ std::unique_ptr RefWorkloadFactory::CreateReshape(const ReshapeQueueD std::unique_ptr RefWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + if (IsFloat16(info)) + { + return MakeWorkload(descriptor, info); + } + return std::make_unique(descriptor, info); } std::unique_ptr RefWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, diff --git a/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.cpp b/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.cpp index 4d2bb05daa..1a721fe389 100644 --- a/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.cpp +++ b/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.cpp @@ -12,23 +12,17 @@ namespace armnn { -template -void RefSpaceToBatchNdWorkload::Execute() const +void RefSpaceToBatchNdWorkload::Execute() const { - using T = ResolveType; - - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, GetName() + "_Execute"); + ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefSpaceToBatchNdWorkload_Execute"); const TensorInfo& inputInfo = GetTensorInfo(m_Data.m_Inputs[0]); - const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]); + std::unique_ptr> decoder = MakeDecoder(inputInfo, m_Data.m_Inputs[0]->Map()); - const T* inputData = GetInputTensorData(0, m_Data); - T* outputData = GetOutputTensorData(0, m_Data); + const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]); + std::unique_ptr> encoder = MakeEncoder(outputInfo, m_Data.m_Outputs[0]->Map()); - SpaceToBatchNd(inputInfo, outputInfo, m_Data.m_Parameters, inputData, outputData); + SpaceToBatchNd(inputInfo, outputInfo, m_Data.m_Parameters, *decoder, *encoder); } -template class RefSpaceToBatchNdWorkload; -template class RefSpaceToBatchNdWorkload; - } //namespace armnn diff --git a/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.hpp b/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.hpp index 3a08662ff7..0deb9e1194 100644 --- a/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.hpp +++ b/src/backends/reference/workloads/RefSpaceToBatchNdWorkload.hpp @@ -11,23 +11,11 @@ namespace armnn { -template -class RefSpaceToBatchNdWorkload : public TypedWorkload +class RefSpaceToBatchNdWorkload : public BaseWorkload { public: - static const std::string& GetName() - { - static const std::string name = std::string("RefSpaceToBatchNd") + GetDataTypeName(DataType) + "Workload"; - return name; - } - - using TypedWorkload::m_Data; - using TypedWorkload::TypedWorkload; - + using BaseWorkload::BaseWorkload; void Execute() const override; }; -using RefSpaceToBatchNdFloat32Workload = RefSpaceToBatchNdWorkload; -using RefSpaceToBatchNdUint8Workload = RefSpaceToBatchNdWorkload; - } //namespace armnn diff --git a/src/backends/reference/workloads/SpaceToBatchNd.cpp b/src/backends/reference/workloads/SpaceToBatchNd.cpp index 51e45a8c3f..0bc2396973 100644 --- a/src/backends/reference/workloads/SpaceToBatchNd.cpp +++ b/src/backends/reference/workloads/SpaceToBatchNd.cpp @@ -31,12 +31,11 @@ unsigned int GetOffset(const TensorShape& shape, } } -template void SpaceToBatchNd(const TensorInfo& inputInfo, const TensorInfo& outputInfo, const SpaceToBatchNdDescriptor& params, - const T* inputData, - T* outputData) + Decoder& inputData, + Encoder& outputData) { DataLayoutIndexed dataLayout = params.m_DataLayout; @@ -83,7 +82,9 @@ void SpaceToBatchNd(const TensorInfo& inputInfo, outW, c, dataLayout); - outputData[outOffset] = 0; + outputData += outOffset; + outputData.Set(0); + outputData -= outOffset; } } else @@ -104,7 +105,11 @@ void SpaceToBatchNd(const TensorInfo& inputInfo, c, dataLayout); - outputData[outOffset] = inputData[inOffset]; + outputData += outOffset; + inputData += inOffset; + outputData.Set(inputData.Get()); + inputData -= inOffset; + outputData -= outOffset; } } } @@ -112,16 +117,10 @@ void SpaceToBatchNd(const TensorInfo& inputInfo, } } -template void SpaceToBatchNd(const TensorInfo& inputInfo, - const TensorInfo& outputInfo, - const SpaceToBatchNdDescriptor& params, - const float* inputData, - float* outData); - -template void SpaceToBatchNd(const TensorInfo& inputInfo, - const TensorInfo& outputInfo, - const SpaceToBatchNdDescriptor& params, - const uint8_t* inputData, - uint8_t* outData); +void SpaceToBatchNd(const TensorInfo& inputInfo, + const TensorInfo& outputInfo, + const SpaceToBatchNdDescriptor& params, + Decoder& inputData, + Encoder& outData); } //namespace armnn diff --git a/src/backends/reference/workloads/SpaceToBatchNd.hpp b/src/backends/reference/workloads/SpaceToBatchNd.hpp index e74e457a72..57c9b6bc25 100644 --- a/src/backends/reference/workloads/SpaceToBatchNd.hpp +++ b/src/backends/reference/workloads/SpaceToBatchNd.hpp @@ -5,17 +5,20 @@ #pragma once +#include "BaseIterator.hpp" +#include "Decoders.hpp" +#include "Encoders.hpp" + #include #include "armnn/Tensor.hpp" namespace armnn { -template void SpaceToBatchNd(const TensorInfo& inputInfo, const TensorInfo& outputInfo, const SpaceToBatchNdDescriptor& params, - const T* inputData, - T* outputData); + Decoder& inputData, + Encoder& outputData); } //namespace armnn -- cgit v1.2.1