diff options
author | Francis Murtagh <francis.murtagh@arm.com> | 2019-06-20 12:07:19 +0100 |
---|---|---|
committer | Francis Murtagh <francis.murtagh@arm.com> | 2019-06-20 12:07:30 +0100 |
commit | 47ea3c0e8d8d10906d04a0e7c537ffee68b0f819 (patch) | |
tree | ab160c7126820dd2b5766974256167fdc66d183a /src/backends/reference/workloads | |
parent | 51982472bfedf12e7d82cde6614617f94b2c86d0 (diff) | |
download | armnn-47ea3c0e8d8d10906d04a0e7c537ffee68b0f819.tar.gz |
IVGCVSW-3248 Refactor reference BatchToSpace workload
* Add Decoders and Encoders to workload to make it data type agnostic
* Merge float32 and Uint8 into single workload
Change-Id: I8adfa1898a63f13889eaaf55a31c26fd1e2d7ee8
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Diffstat (limited to 'src/backends/reference/workloads')
-rw-r--r-- | src/backends/reference/workloads/BatchToSpaceNd.cpp | 9 | ||||
-rw-r--r-- | src/backends/reference/workloads/BatchToSpaceNd.hpp | 7 | ||||
-rw-r--r-- | src/backends/reference/workloads/CMakeLists.txt | 6 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.cpp | 29 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.hpp | 23 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefBatchToSpaceNdWorkload.cpp (renamed from src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.cpp) | 13 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefBatchToSpaceNdWorkload.hpp (renamed from src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.hpp) | 4 | ||||
-rw-r--r-- | src/backends/reference/workloads/RefWorkloads.hpp | 3 |
8 files changed, 23 insertions, 71 deletions
diff --git a/src/backends/reference/workloads/BatchToSpaceNd.cpp b/src/backends/reference/workloads/BatchToSpaceNd.cpp index 5f64213b39..7efdb9b75c 100644 --- a/src/backends/reference/workloads/BatchToSpaceNd.cpp +++ b/src/backends/reference/workloads/BatchToSpaceNd.cpp @@ -37,8 +37,8 @@ void BatchToSpaceNd(const DataLayoutIndexed& dataLayout, const TensorInfo& outputTensorInfo, const std::vector<unsigned int>& blockShape, const std::vector<std::pair<unsigned int, unsigned int>>& cropsData, - const float* inputData, - float* outputData) + Decoder<float>& inputDecoder, + Encoder<float>& outputEncoder) { TensorShape inputShape = inputTensorInfo.GetShape(); @@ -90,7 +90,10 @@ void BatchToSpaceNd(const DataLayoutIndexed& dataLayout, { unsigned int outOffset = Offset(outputShape, outBatch, outH, outW, c, dataLayout); unsigned int inOffset = Offset(inputShape, inBatch, inH, inW, c, dataLayout); - outputData[outOffset] = inputData[inOffset]; + + outputEncoder[outOffset]; + inputDecoder[inOffset]; + outputEncoder.Set(inputDecoder.Get()); } } } diff --git a/src/backends/reference/workloads/BatchToSpaceNd.hpp b/src/backends/reference/workloads/BatchToSpaceNd.hpp index f08df93584..b757d3709c 100644 --- a/src/backends/reference/workloads/BatchToSpaceNd.hpp +++ b/src/backends/reference/workloads/BatchToSpaceNd.hpp @@ -9,6 +9,9 @@ #include <backendsCommon/Workload.hpp> #include <backendsCommon/WorkloadData.hpp> +#include "BaseIterator.hpp" +#include "Decoders.hpp" +#include "Encoders.hpp" #include <DataLayoutIndexed.hpp> @@ -20,6 +23,6 @@ void BatchToSpaceNd(const armnnUtils::DataLayoutIndexed& dataLayout, const TensorInfo& outputTensorInfo, const std::vector<unsigned int>& blockShape, const std::vector<std::pair<unsigned int, unsigned int>>& cropsData, - const float* inputData, - float* outputData); + Decoder<float>& inputDecoder, + Encoder<float>& outputEncoder); } // namespace armnn diff --git a/src/backends/reference/workloads/CMakeLists.txt b/src/backends/reference/workloads/CMakeLists.txt index ca35e273af..daa004345c 100644 --- a/src/backends/reference/workloads/CMakeLists.txt +++ b/src/backends/reference/workloads/CMakeLists.txt @@ -42,10 +42,8 @@ list(APPEND armnnRefBackendWorkloads_sources RefActivationWorkload.hpp RefBatchNormalizationWorkload.cpp RefBatchNormalizationWorkload.hpp - RefBatchToSpaceNdFloat32Workload.cpp - RefBatchToSpaceNdFloat32Workload.hpp - RefBatchToSpaceNdUint8Workload.cpp - RefBatchToSpaceNdUint8Workload.hpp + RefBatchToSpaceNdWorkload.cpp + RefBatchToSpaceNdWorkload.hpp RefConstantWorkload.cpp RefConstantWorkload.hpp RefConvertFp16ToFp32Workload.cpp diff --git a/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.cpp b/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.cpp deleted file mode 100644 index e4e108edb1..0000000000 --- a/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "BatchToSpaceNd.hpp" -#include "Profiling.hpp" -#include "RefBatchToSpaceNdUint8Workload.hpp" -#include "RefWorkloadUtils.hpp" - -namespace armnn -{ - -void RefBatchToSpaceNdUint8Workload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefBatchToSpaceNdUint8Workload_Execute"); - - const TensorInfo& inputInfo = GetTensorInfo(m_Data.m_Inputs[0]); - const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]); - auto dequantizedInputData = Dequantize(GetInputTensorDataU8(0, m_Data), inputInfo); - - std::vector<float> results(outputInfo.GetNumElements()); - BatchToSpaceNd(m_Data.m_Parameters.m_DataLayout, inputInfo, outputInfo, m_Data.m_Parameters.m_BlockShape, - m_Data.m_Parameters.m_Crops, dequantizedInputData.data(), results.data()); - - Quantize(GetOutputTensorDataU8(0, m_Data), results.data(), outputInfo); -} - -} //namespace armnn
\ No newline at end of file diff --git a/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.hpp b/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.hpp deleted file mode 100644 index 1f221c2f47..0000000000 --- a/src/backends/reference/workloads/RefBatchToSpaceNdUint8Workload.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include <backendsCommon/Workload.hpp> -#include <backendsCommon/WorkloadData.hpp> - -namespace armnn -{ - -class RefBatchToSpaceNdUint8Workload : public Uint8Workload<BatchToSpaceNdQueueDescriptor> -{ - -public: - using Uint8Workload<BatchToSpaceNdQueueDescriptor>::Uint8Workload; - - virtual void Execute() const override; -}; - -} // namespace armnn
\ No newline at end of file diff --git a/src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.cpp b/src/backends/reference/workloads/RefBatchToSpaceNdWorkload.cpp index bf246c272f..c293066d26 100644 --- a/src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.cpp +++ b/src/backends/reference/workloads/RefBatchToSpaceNdWorkload.cpp @@ -5,23 +5,24 @@ #include "BatchToSpaceNd.hpp" #include "Profiling.hpp" -#include "RefBatchToSpaceNdFloat32Workload.hpp" +#include "RefBatchToSpaceNdWorkload.hpp" #include "RefWorkloadUtils.hpp" namespace armnn { -void RefBatchToSpaceNdFloat32Workload::Execute() const +void RefBatchToSpaceNdWorkload::Execute() const { - ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefBatchToSpaceNdFloat32Workload_Execute"); + ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefBatchToSpaceNdWorkload_Execute"); const TensorInfo& inputInfo = GetTensorInfo(m_Data.m_Inputs[0]); const TensorInfo& outputInfo = GetTensorInfo(m_Data.m_Outputs[0]); - const float* inputData = GetInputTensorDataFloat(0, m_Data); - float* outputData = GetOutputTensorDataFloat(0, m_Data); + + std::unique_ptr<Decoder<float>> inputDecoder = MakeDecoder<float>(inputInfo, m_Data.m_Inputs[0]->Map()); + std::unique_ptr<Encoder<float>> outputEncoder = MakeEncoder<float>(outputInfo, m_Data.m_Outputs[0]->Map()); BatchToSpaceNd(m_Data.m_Parameters.m_DataLayout, inputInfo, outputInfo, m_Data.m_Parameters.m_BlockShape, - m_Data.m_Parameters.m_Crops, inputData, outputData); + m_Data.m_Parameters.m_Crops, *inputDecoder, *outputEncoder); } diff --git a/src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.hpp b/src/backends/reference/workloads/RefBatchToSpaceNdWorkload.hpp index 4977772c82..60577bab2e 100644 --- a/src/backends/reference/workloads/RefBatchToSpaceNdFloat32Workload.hpp +++ b/src/backends/reference/workloads/RefBatchToSpaceNdWorkload.hpp @@ -10,11 +10,11 @@ namespace armnn { -class RefBatchToSpaceNdFloat32Workload : public Float32Workload<BatchToSpaceNdQueueDescriptor> +class RefBatchToSpaceNdWorkload : public BaseWorkload<BatchToSpaceNdQueueDescriptor> { public: - using Float32Workload<BatchToSpaceNdQueueDescriptor>::Float32Workload; + using BaseWorkload<BatchToSpaceNdQueueDescriptor>::BaseWorkload; virtual void Execute() const override; }; diff --git a/src/backends/reference/workloads/RefWorkloads.hpp b/src/backends/reference/workloads/RefWorkloads.hpp index 056127aae6..90582812e7 100644 --- a/src/backends/reference/workloads/RefWorkloads.hpp +++ b/src/backends/reference/workloads/RefWorkloads.hpp @@ -15,8 +15,7 @@ #include "Pooling2d.hpp" #include "RefActivationWorkload.hpp" #include "RefBatchNormalizationWorkload.hpp" -#include "RefBatchToSpaceNdUint8Workload.hpp" -#include "RefBatchToSpaceNdFloat32Workload.hpp" +#include "RefBatchToSpaceNdWorkload.hpp" #include "RefConvolution2dWorkload.hpp" #include "RefConstantWorkload.hpp" #include "RefConcatWorkload.hpp" |