From ac9e096a574db91fbcc42c2ee919a1d1e57b7fd3 Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Wed, 10 Oct 2018 17:18:35 +0100 Subject: IVGCVSW-1951 Remove type templating from ClPooling2dWorkload Change-Id: Iaa3158487b58964d8a3b98acadde7c10172a3860 --- src/backends/cl/ClLayerSupport.cpp | 2 +- src/backends/cl/ClWorkloadFactory.cpp | 2 +- src/backends/cl/backend.mk | 4 +- src/backends/cl/test/ClCreateWorkloadTests.cpp | 12 ++--- src/backends/cl/workloads/CMakeLists.txt | 8 +--- .../cl/workloads/ClPooling2dBaseWorkload.cpp | 51 -------------------- .../cl/workloads/ClPooling2dBaseWorkload.hpp | 33 ------------- .../cl/workloads/ClPooling2dFloatWorkload.cpp | 26 ---------- .../cl/workloads/ClPooling2dFloatWorkload.hpp | 22 --------- .../cl/workloads/ClPooling2dUint8Workload.cpp | 27 ----------- .../cl/workloads/ClPooling2dUint8Workload.hpp | 25 ---------- src/backends/cl/workloads/ClPooling2dWorkload.cpp | 55 ++++++++++++++++++++++ src/backends/cl/workloads/ClPooling2dWorkload.hpp | 33 +++++++++++++ src/backends/cl/workloads/ClWorkloads.hpp | 3 +- 14 files changed, 100 insertions(+), 203 deletions(-) delete mode 100644 src/backends/cl/workloads/ClPooling2dBaseWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClPooling2dBaseWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClPooling2dFloatWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClPooling2dFloatWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClPooling2dUint8Workload.cpp delete mode 100644 src/backends/cl/workloads/ClPooling2dUint8Workload.hpp create mode 100644 src/backends/cl/workloads/ClPooling2dWorkload.cpp create mode 100644 src/backends/cl/workloads/ClPooling2dWorkload.hpp diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 124fc8c230..9088da8645 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -26,7 +26,7 @@ #include "workloads/ClNormalizationFloatWorkload.hpp" #include "workloads/ClPadWorkload.hpp" #include "workloads/ClPermuteWorkload.hpp" -#include "workloads/ClPooling2dBaseWorkload.hpp" +#include "workloads/ClPooling2dWorkload.hpp" #include "workloads/ClSoftmaxBaseWorkload.hpp" #include "workloads/ClSubtractionWorkload.hpp" #endif diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index d293759bc9..fa86840e5f 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -138,7 +138,7 @@ std::unique_ptr ClWorkloadFactory::CreatePermute(const Permute std::unique_ptr ClWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return std::make_unique(descriptor, info); } std::unique_ptr ClWorkloadFactory::CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index d5aa945ee2..810bb20859 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -29,9 +29,7 @@ BACKEND_SOURCES := \ workloads/ClNormalizationFloatWorkload.cpp \ workloads/ClPadWorkload.cpp \ workloads/ClPermuteWorkload.cpp \ - workloads/ClPooling2dBaseWorkload.cpp \ - workloads/ClPooling2dFloatWorkload.cpp \ - workloads/ClPooling2dUint8Workload.cpp \ + workloads/ClPooling2dWorkload.cpp \ workloads/ClReshapeFloatWorkload.cpp \ workloads/ClReshapeUint8Workload.cpp \ workloads/ClResizeBilinearFloatWorkload.cpp \ diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index d3bae440bd..29f7cddc44 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -338,13 +338,13 @@ BOOST_AUTO_TEST_CASE(CreateNormalizationFloat16NhwcWorkload) ClNormalizationWorkloadTest(DataLayout::NHWC); } -template +template static void ClPooling2dWorkloadTest(DataLayout dataLayout) { Graph graph; ClWorkloadFactory factory; - auto workload = CreatePooling2dWorkloadTest(factory, graph, dataLayout); + auto workload = CreatePooling2dWorkloadTest(factory, graph, dataLayout); std::initializer_list inputShape = (dataLayout == DataLayout::NCHW) ? std::initializer_list({3, 2, 5, 5}) : std::initializer_list({3, 5, 5, 2}); @@ -362,22 +362,22 @@ static void ClPooling2dWorkloadTest(DataLayout dataLayout) BOOST_AUTO_TEST_CASE(CreatePooling2dFloatNchwWorkload) { - ClPooling2dWorkloadTest(DataLayout::NCHW); + ClPooling2dWorkloadTest(DataLayout::NCHW); } BOOST_AUTO_TEST_CASE(CreatePooling2dFloatNhwcWorkload) { - ClPooling2dWorkloadTest(DataLayout::NHWC); + ClPooling2dWorkloadTest(DataLayout::NHWC); } BOOST_AUTO_TEST_CASE(CreatePooling2dFloat16NchwWorkload) { - ClPooling2dWorkloadTest(DataLayout::NCHW); + ClPooling2dWorkloadTest(DataLayout::NCHW); } BOOST_AUTO_TEST_CASE(CreatePooling2dFloat16NhwcWorkload) { - ClPooling2dWorkloadTest(DataLayout::NHWC); + ClPooling2dWorkloadTest(DataLayout::NHWC); } template diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index e7877f2d45..222748b89a 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -39,12 +39,8 @@ list(APPEND armnnClBackendWorkloads_sources ClPadWorkload.hpp ClPermuteWorkload.cpp ClPermuteWorkload.hpp - ClPooling2dBaseWorkload.cpp - ClPooling2dBaseWorkload.hpp - ClPooling2dFloatWorkload.cpp - ClPooling2dFloatWorkload.hpp - ClPooling2dUint8Workload.cpp - ClPooling2dUint8Workload.hpp + ClPooling2dWorkload.cpp + ClPooling2dWorkload.hpp ClReshapeFloatWorkload.cpp ClReshapeFloatWorkload.hpp ClReshapeUint8Workload.cpp diff --git a/src/backends/cl/workloads/ClPooling2dBaseWorkload.cpp b/src/backends/cl/workloads/ClPooling2dBaseWorkload.cpp deleted file mode 100644 index e61ad4f28e..0000000000 --- a/src/backends/cl/workloads/ClPooling2dBaseWorkload.cpp +++ /dev/null @@ -1,51 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClPooling2dBaseWorkload.hpp" -#include -#include -#include -#include - -namespace armnn -{ -using namespace armcomputetensorutils; - -arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input, - const TensorInfo& output, - const Pooling2dDescriptor& descriptor) -{ - const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout); - const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout); - - arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor); - - return arm_compute::CLPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo); -} - -template -ClPooling2dBaseWorkload::ClPooling2dBaseWorkload( - const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info, const std::string& name) - : TypedWorkload(descriptor, info) -{ - m_Data.ValidateInputsOutputs(name, 1, 1); - - arm_compute::ICLTensor& input = static_cast(m_Data.m_Inputs[0])->GetTensor(); - arm_compute::ICLTensor& output = static_cast(m_Data.m_Outputs[0])->GetTensor(); - - arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout); - input.info()->set_data_layout(aclDataLayout); - output.info()->set_data_layout(aclDataLayout); - - arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(m_Data.m_Parameters); - - // Run the layer. - m_PoolingLayer.configure(&input, &output, layerInfo); -} - -template class ClPooling2dBaseWorkload; -template class ClPooling2dBaseWorkload; - -} diff --git a/src/backends/cl/workloads/ClPooling2dBaseWorkload.hpp b/src/backends/cl/workloads/ClPooling2dBaseWorkload.hpp deleted file mode 100644 index 8f9db08ddc..0000000000 --- a/src/backends/cl/workloads/ClPooling2dBaseWorkload.hpp +++ /dev/null @@ -1,33 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -namespace armnn -{ - -arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input, - const TensorInfo& output, - const Pooling2dDescriptor& descriptor); - -// Base class template providing an implementation of the Pooling2d layer common to all data types. -template -class ClPooling2dBaseWorkload : public TypedWorkload -{ -public: - using TypedWorkload::m_Data; - - ClPooling2dBaseWorkload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info, - const std::string& name); - -protected: - mutable arm_compute::CLPoolingLayer m_PoolingLayer; -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClPooling2dFloatWorkload.cpp b/src/backends/cl/workloads/ClPooling2dFloatWorkload.cpp deleted file mode 100644 index dc9d17f0ae..0000000000 --- a/src/backends/cl/workloads/ClPooling2dFloatWorkload.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClPooling2dFloatWorkload.hpp" - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -ClPooling2dFloatWorkload::ClPooling2dFloatWorkload(const Pooling2dQueueDescriptor& descriptor, - const WorkloadInfo& info) - : ClPooling2dBaseWorkload(descriptor, info, "ClPooling2dFloatWorkload") -{ -} - -void ClPooling2dFloatWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClPooling2dFloatWorkload_Execute"); - m_PoolingLayer.run(); -} - -} //namespace armnn - diff --git a/src/backends/cl/workloads/ClPooling2dFloatWorkload.hpp b/src/backends/cl/workloads/ClPooling2dFloatWorkload.hpp deleted file mode 100644 index ba9294c40f..0000000000 --- a/src/backends/cl/workloads/ClPooling2dFloatWorkload.hpp +++ /dev/null @@ -1,22 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include "ClPooling2dBaseWorkload.hpp" - -namespace armnn -{ -class ClPooling2dFloatWorkload : public ClPooling2dBaseWorkload -{ -public: - ClPooling2dFloatWorkload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info); - void Execute() const override; - -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClPooling2dUint8Workload.cpp b/src/backends/cl/workloads/ClPooling2dUint8Workload.cpp deleted file mode 100644 index 0b4b15f806..0000000000 --- a/src/backends/cl/workloads/ClPooling2dUint8Workload.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClPooling2dUint8Workload.hpp" - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -ClPooling2dUint8Workload::ClPooling2dUint8Workload(const Pooling2dQueueDescriptor& descriptor, - const WorkloadInfo& info) - : ClPooling2dBaseWorkload(descriptor, info, "ClPooling2dUint8Workload") -{ -} - -void ClPooling2dUint8Workload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClPooling2dUint8Workload_Execute"); - m_PoolingLayer.run(); -} - -} //namespace armnn - - diff --git a/src/backends/cl/workloads/ClPooling2dUint8Workload.hpp b/src/backends/cl/workloads/ClPooling2dUint8Workload.hpp deleted file mode 100644 index b07f955343..0000000000 --- a/src/backends/cl/workloads/ClPooling2dUint8Workload.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include "ClPooling2dBaseWorkload.hpp" - -namespace armnn -{ - -class ClPooling2dUint8Workload : public ClPooling2dBaseWorkload -{ -public: - ClPooling2dUint8Workload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info); - void Execute() const override; - -}; - -} //namespace armnn - - diff --git a/src/backends/cl/workloads/ClPooling2dWorkload.cpp b/src/backends/cl/workloads/ClPooling2dWorkload.cpp new file mode 100644 index 0000000000..255f57341e --- /dev/null +++ b/src/backends/cl/workloads/ClPooling2dWorkload.cpp @@ -0,0 +1,55 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "ClPooling2dWorkload.hpp" +#include +#include +#include +#include + +#include "ClWorkloadUtils.hpp" + +namespace armnn +{ +using namespace armcomputetensorutils; + +arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const Pooling2dDescriptor& descriptor) +{ + const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout); + const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout); + + arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(descriptor); + + return arm_compute::CLPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo); +} + +ClPooling2dWorkload::ClPooling2dWorkload( + const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info) + : BaseWorkload(descriptor, info) +{ + m_Data.ValidateInputsOutputs("ClPooling2dWorkload", 1, 1); + + arm_compute::ICLTensor& input = static_cast(m_Data.m_Inputs[0])->GetTensor(); + arm_compute::ICLTensor& output = static_cast(m_Data.m_Outputs[0])->GetTensor(); + + arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout); + input.info()->set_data_layout(aclDataLayout); + output.info()->set_data_layout(aclDataLayout); + + arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(m_Data.m_Parameters); + + // Run the layer. + m_PoolingLayer.configure(&input, &output, layerInfo); +} + +void ClPooling2dWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT_CL("ClPooling2dWorkload_Execute"); + m_PoolingLayer.run(); +} + +} diff --git a/src/backends/cl/workloads/ClPooling2dWorkload.hpp b/src/backends/cl/workloads/ClPooling2dWorkload.hpp new file mode 100644 index 0000000000..0812e33a52 --- /dev/null +++ b/src/backends/cl/workloads/ClPooling2dWorkload.hpp @@ -0,0 +1,33 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include + +namespace armnn +{ + +arm_compute::Status ClPooling2dWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const Pooling2dDescriptor& descriptor); + +class ClPooling2dWorkload : public BaseWorkload +{ +public: + using BaseWorkload::m_Data; + + ClPooling2dWorkload(const Pooling2dQueueDescriptor& descriptor, + const WorkloadInfo& info); + + void Execute() const override; + +private: + mutable arm_compute::CLPoolingLayer m_PoolingLayer; +}; + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index 8257218291..e2dede68e2 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -20,8 +20,7 @@ #include "ClNormalizationFloatWorkload.hpp" #include "ClPermuteWorkload.hpp" #include "ClPadWorkload.hpp" -#include "ClPooling2dFloatWorkload.hpp" -#include "ClPooling2dUint8Workload.hpp" +#include "ClPooling2dWorkload.hpp" #include "ClReshapeFloatWorkload.hpp" #include "ClReshapeUint8Workload.hpp" #include "ClResizeBilinearFloatWorkload.hpp" -- cgit v1.2.1