diff options
Diffstat (limited to 'src/backends/cl')
-rw-r--r-- | src/backends/cl/ClLayerSupport.cpp | 2 | ||||
-rw-r--r-- | src/backends/cl/ClWorkloadFactory.cpp | 2 | ||||
-rw-r--r-- | src/backends/cl/backend.mk | 4 | ||||
-rw-r--r-- | src/backends/cl/workloads/CMakeLists.txt | 8 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp | 39 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp | 26 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp | 40 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp | 23 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp (renamed from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp) | 36 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp (renamed from src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp) | 15 | ||||
-rw-r--r-- | src/backends/cl/workloads/ClWorkloads.hpp | 3 |
11 files changed, 40 insertions, 158 deletions
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 09dfab9924..434b069092 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -20,7 +20,7 @@ #include "workloads/ClConvertFp16ToFp32Workload.hpp" #include "workloads/ClConvertFp32ToFp16Workload.hpp" #include "workloads/ClConvolution2dWorkload.hpp" -#include "workloads/ClDepthwiseConvolutionBaseWorkload.hpp" +#include "workloads/ClDepthwiseConvolutionWorkload.hpp" #include "workloads/ClDivisionFloatWorkload.hpp" #include "workloads/ClL2NormalizationFloatWorkload.hpp" #include "workloads/ClMultiplicationWorkload.hpp" diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 2e074450dd..c00d0ba5f0 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -150,7 +150,7 @@ std::unique_ptr<armnn::IWorkload> ClWorkloadFactory::CreateConvolution2d(const C std::unique_ptr<IWorkload> ClWorkloadFactory::CreateDepthwiseConvolution2d( const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload<ClDepthwiseConvolutionFloatWorkload, ClDepthwiseConvolutionUint8Workload>(descriptor, info); + return std::make_unique<ClDepthwiseConvolutionWorkload>(descriptor, info); } std::unique_ptr<armnn::IWorkload> ClWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor, diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index c86940cda1..04b8b9e69c 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -22,9 +22,7 @@ BACKEND_SOURCES := \ workloads/ClConvertFp16ToFp32Workload.cpp \ workloads/ClConvertFp32ToFp16Workload.cpp \ workloads/ClConvolution2dWorkload.cpp \ - workloads/ClDepthwiseConvolutionBaseWorkload.cpp \ - workloads/ClDepthwiseConvolutionFloatWorkload.cpp \ - workloads/ClDepthwiseConvolutionUint8Workload.cpp \ + workloads/ClDepthwiseConvolutionWorkload.cpp \ workloads/ClDivisionFloatWorkload.cpp \ workloads/ClFloorFloatWorkload.cpp \ workloads/ClFullyConnectedWorkload.cpp \ diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index 5a1653e8e3..4d1c1bf5c3 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -25,12 +25,8 @@ list(APPEND armnnClBackendWorkloads_sources ClConvertFp32ToFp16Workload.hpp ClConvolution2dWorkload.cpp ClConvolution2dWorkload.hpp - ClDepthwiseConvolutionBaseWorkload.cpp - ClDepthwiseConvolutionBaseWorkload.hpp - ClDepthwiseConvolutionFloatWorkload.cpp - ClDepthwiseConvolutionFloatWorkload.hpp - ClDepthwiseConvolutionUint8Workload.cpp - ClDepthwiseConvolutionUint8Workload.hpp + ClDepthwiseConvolutionWorkload.cpp + ClDepthwiseConvolutionWorkload.hpp ClDivisionFloatWorkload.cpp ClDivisionFloatWorkload.hpp ClFloorFloatWorkload.cpp diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp deleted file mode 100644 index 17ecd29307..0000000000 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.cpp +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClDepthwiseConvolutionFloatWorkload.hpp" - -#include <backends/CpuTensorHandle.hpp> - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -ClDepthwiseConvolutionFloatWorkload::ClDepthwiseConvolutionFloatWorkload( - const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) - : ClDepthwiseConvolutionBaseWorkload(descriptor, info) -{ - InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight); - - if (m_BiasTensor) - { - InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias); - } - - m_DepthwiseConvolutionLayer->prepare(); - FreeUnusedTensors(); -} - -void ClDepthwiseConvolutionFloatWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionFloatWorkload_Execute"); - BOOST_ASSERT(m_DepthwiseConvolutionLayer); - - m_DepthwiseConvolutionLayer->run(); -} - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp deleted file mode 100644 index 4f9d5f332e..0000000000 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionFloatWorkload.hpp +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include "ClDepthwiseConvolutionBaseWorkload.hpp" - -namespace armnn -{ - -class ClDepthwiseConvolutionFloatWorkload : public ClDepthwiseConvolutionBaseWorkload<DataType::Float16, - DataType::Float32> -{ -public: - ClDepthwiseConvolutionFloatWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info); - void Execute() const override; -}; - -} //namespace armnn - - - - diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp deleted file mode 100644 index 22922e4df6..0000000000 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.cpp +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClDepthwiseConvolutionUint8Workload.hpp" - -#include <backends/CpuTensorHandle.hpp> - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -ClDepthwiseConvolutionUint8Workload::ClDepthwiseConvolutionUint8Workload( - const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) - : ClDepthwiseConvolutionBaseWorkload(descriptor, info) -{ - InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight); - - if (m_BiasTensor) - { - InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias); - } - - m_DepthwiseConvolutionLayer->prepare(); - FreeUnusedTensors(); -} - -void ClDepthwiseConvolutionUint8Workload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionUint8Workload_Execute"); - BOOST_ASSERT(m_DepthwiseConvolutionLayer); - - m_DepthwiseConvolutionLayer->run(); -} - -} //namespace armnn - diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp deleted file mode 100644 index b9f676de94..0000000000 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionUint8Workload.hpp +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include "ClDepthwiseConvolutionBaseWorkload.hpp" - -namespace armnn -{ - -class ClDepthwiseConvolutionUint8Workload : public ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8> -{ -public: - ClDepthwiseConvolutionUint8Workload(const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info); - void Execute() const override; -}; - -} //namespace armnn - - diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp index 53ac3bae99..142cbc230f 100644 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.cpp +++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.cpp @@ -3,15 +3,18 @@ // SPDX-License-Identifier: MIT // -#include "ClDepthwiseConvolutionBaseWorkload.hpp" +#include "ClDepthwiseConvolutionWorkload.hpp" #include "TypeUtils.hpp" +#include "ClWorkloadUtils.hpp" #include <backends/aclCommon/ArmComputeUtils.hpp> #include <backends/aclCommon/ArmComputeTensorUtils.hpp> #include <backends/cl/ClTensorHandle.hpp> #include <backends/CpuTensorHandle.hpp> +#include <arm_compute/runtime/CL/functions/CLDepthwiseConvolutionLayer.h> + namespace armnn { @@ -49,11 +52,10 @@ arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& inp aclDepthMultiplier); } -template<armnn::DataType... dataTypes> -ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWorkload( +ClDepthwiseConvolutionWorkload::ClDepthwiseConvolutionWorkload( const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) - : TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>(descriptor, info) + : BaseWorkload<DepthwiseConvolution2dQueueDescriptor>(descriptor, info) { auto& weightInfo = m_Data.m_Weight->GetTensorInfo(); @@ -74,8 +76,7 @@ ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWork m_Data.m_Parameters.m_PadBottom, arm_compute::DimensionRoundingType::FLOOR); - std::string name = std::string("ClDepthwiseConvolution") + - GetDataTypeName(m_Data.m_Weight->GetTensorInfo().GetDataType()) + "Workload"; + std::string name = std::string("ClDepthwiseConvolutionWorkload"); m_Data.ValidateInputsOutputs(name, 1, 1); arm_compute::ICLTensor& input = static_cast<IClTensorHandle*>(m_Data.m_Inputs[0])->GetTensor(); @@ -109,17 +110,30 @@ ClDepthwiseConvolutionBaseWorkload<dataTypes...>::ClDepthwiseConvolutionBaseWork } BOOST_ASSERT(m_DepthwiseConvolutionLayer); + + InitializeArmComputeClTensorData(*m_KernelTensor, m_Data.m_Weight); + + if (m_BiasTensor) + { + InitializeArmComputeClTensorData(*m_BiasTensor, m_Data.m_Bias); + } + + m_DepthwiseConvolutionLayer->prepare(); + FreeUnusedTensors(); } -template<armnn::DataType... dataTypes> -void ClDepthwiseConvolutionBaseWorkload<dataTypes...>::FreeUnusedTensors() +void ClDepthwiseConvolutionWorkload::FreeUnusedTensors() { FreeTensorIfUnused(m_KernelTensor); FreeTensorIfUnused(m_BiasTensor); } -// Generate known implementations for linker -template class ClDepthwiseConvolutionBaseWorkload<DataType::Float16, DataType::Float32>; -template class ClDepthwiseConvolutionBaseWorkload<DataType::QuantisedAsymm8>; +void ClDepthwiseConvolutionWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT_CL("ClDepthwiseConvolutionWorkload_Execute"); + BOOST_ASSERT(m_DepthwiseConvolutionLayer); + + m_DepthwiseConvolutionLayer->run(); +} } // namespace armnn diff --git a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp index 27aec8ecdd..cde9f50d38 100644 --- a/src/backends/cl/workloads/ClDepthwiseConvolutionBaseWorkload.hpp +++ b/src/backends/cl/workloads/ClDepthwiseConvolutionWorkload.hpp @@ -7,7 +7,9 @@ #include <backends/Workload.hpp> -#include <arm_compute/runtime/CL/CLFunctions.h> +#include <arm_compute/runtime/IFunction.h> +#include <arm_compute/core/Error.h> +#include <arm_compute/runtime/CL/CLTensor.h> namespace armnn { @@ -18,14 +20,15 @@ arm_compute::Status ClDepthwiseConvolutionWorkloadValidate(const TensorInfo& inp const TensorInfo& weights, const Optional<TensorInfo>& biases); -template<armnn::DataType... dataTypes> -class ClDepthwiseConvolutionBaseWorkload : public TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...> +class ClDepthwiseConvolutionWorkload : public BaseWorkload<DepthwiseConvolution2dQueueDescriptor> { public: - using TypedWorkload<DepthwiseConvolution2dQueueDescriptor, dataTypes...>::m_Data; + using BaseWorkload<DepthwiseConvolution2dQueueDescriptor>::m_Data; - ClDepthwiseConvolutionBaseWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info); + ClDepthwiseConvolutionWorkload(const DepthwiseConvolution2dQueueDescriptor& descriptor, + const WorkloadInfo& info); + + void Execute() const override; protected: std::unique_ptr<arm_compute::IFunction> m_DepthwiseConvolutionLayer; diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index 0ef8fd34bf..6574d43659 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -13,8 +13,7 @@ #include "ClConstantFloatWorkload.hpp" #include "ClConstantUint8Workload.hpp" #include "ClConvolution2dWorkload.hpp" -#include "ClDepthwiseConvolutionFloatWorkload.hpp" -#include "ClDepthwiseConvolutionUint8Workload.hpp" +#include "ClDepthwiseConvolutionWorkload.hpp" #include "ClDivisionFloatWorkload.hpp" #include "ClFloorFloatWorkload.hpp" #include "ClFullyConnectedWorkload.hpp" |