From e06757e605e4d0c5618dd58b4c8599dc96fabf7e Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Thu, 11 Oct 2018 15:39:18 +0100 Subject: IVGCVSW-1951 Remove type templating from ClActivationWorkload Change-Id: I200adcef35b861a412e7beef8043d5c7dddba443 --- src/backends/cl/ClLayerSupport.cpp | 2 +- src/backends/cl/ClWorkloadFactory.cpp | 2 +- src/backends/cl/backend.mk | 3 +- src/backends/cl/test/ClCreateWorkloadTests.cpp | 18 +++---- src/backends/cl/workloads/CMakeLists.txt | 6 +-- .../cl/workloads/ClActivationFloatWorkload.cpp | 56 -------------------- .../cl/workloads/ClActivationFloatWorkload.hpp | 29 ----------- .../cl/workloads/ClActivationUint8Workload.cpp | 44 ---------------- .../cl/workloads/ClActivationUint8Workload.hpp | 29 ----------- src/backends/cl/workloads/ClActivationWorkload.cpp | 59 ++++++++++++++++++++++ src/backends/cl/workloads/ClActivationWorkload.hpp | 28 ++++++++++ src/backends/cl/workloads/ClWorkloads.hpp | 3 +- 12 files changed, 102 insertions(+), 177 deletions(-) delete mode 100644 src/backends/cl/workloads/ClActivationFloatWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClActivationFloatWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClActivationUint8Workload.cpp delete mode 100644 src/backends/cl/workloads/ClActivationUint8Workload.hpp create mode 100644 src/backends/cl/workloads/ClActivationWorkload.cpp create mode 100644 src/backends/cl/workloads/ClActivationWorkload.hpp diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 68563944b4..124fc8c230 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -12,7 +12,7 @@ #ifdef ARMCOMPUTECL_ENABLED #include "workloads/ClAdditionWorkload.hpp" -#include "workloads/ClActivationFloatWorkload.hpp" +#include "workloads/ClActivationWorkload.hpp" #include "workloads/ClBatchNormalizationFloatWorkload.hpp" #include "workloads/ClConvertFp16ToFp32Workload.hpp" #include "workloads/ClConvertFp32ToFp16Workload.hpp" diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index afb3720cdc..189509a6a5 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -100,7 +100,7 @@ std::unique_ptr ClWorkloadFactory::CreateOutput(const OutputQueueDesc std::unique_ptr ClWorkloadFactory::CreateActivation(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return std::make_unique(descriptor, info); } std::unique_ptr ClWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index e233bfbb7b..ac2e7718c9 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -12,8 +12,7 @@ BACKEND_SOURCES := \ ClContextControl.cpp \ ClLayerSupport.cpp \ ClWorkloadFactory.cpp \ - workloads/ClActivationFloatWorkload.cpp \ - workloads/ClActivationUint8Workload.cpp \ + workloads/ClActivationWorkload.cpp \ workloads/ClAdditionWorkload.cpp \ workloads/ClBatchNormalizationFloatWorkload.cpp \ workloads/ClConstantWorkload.cpp \ diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index 6ec89aa579..6ac47fd4d6 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -22,13 +22,13 @@ boost::test_tools::predicate_result CompareIClTensorHandleShape(IClTensorHandle* BOOST_FIXTURE_TEST_SUITE(CreateWorkloadCl, ClContextControlFixture) -template +template static void ClCreateActivationWorkloadTest() { Graph graph; ClWorkloadFactory factory; - auto workload = CreateActivationWorkloadTest(factory, graph); + auto workload = CreateActivationWorkloadTest(factory, graph); // Checks that inputs/outputs are as we expect them (see definition of CreateActivationWorkloadTest). ActivationQueueDescriptor queueDescriptor = workload->GetData(); @@ -41,12 +41,12 @@ static void ClCreateActivationWorkloadTest() BOOST_AUTO_TEST_CASE(CreateActivationFloatWorkload) { - ClCreateActivationWorkloadTest(); + ClCreateActivationWorkloadTest(); } BOOST_AUTO_TEST_CASE(CreateActivationFloat16Workload) { - ClCreateActivationWorkloadTest(); + ClCreateActivationWorkloadTest(); } template wlSplitter; - std::unique_ptr wlActiv0_0; - std::unique_ptr wlActiv0_1; - std::unique_ptr wlActiv1_0; - std::unique_ptr wlActiv1_1; + std::unique_ptr wlActiv0_0; + std::unique_ptr wlActiv0_1; + std::unique_ptr wlActiv1_0; + std::unique_ptr wlActiv1_1; CreateSplitterMultipleInputsOneOutputWorkloadTest(factory, graph, wlSplitter, wlActiv0_0, wlActiv0_1, + ClActivationWorkload, armnn::DataType::Float32>(factory, graph, wlSplitter, wlActiv0_0, wlActiv0_1, wlActiv1_0, wlActiv1_1); //Checks that the index of inputs/outputs matches what we declared on InputDescriptor construction. diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index 1e19bf5bf9..7ff04a774f 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -4,10 +4,8 @@ # list(APPEND armnnClBackendWorkloads_sources - ClActivationFloatWorkload.cpp - ClActivationFloatWorkload.hpp - ClActivationUint8Workload.cpp - ClActivationUint8Workload.hpp + ClActivationWorkload.cpp + ClActivationWorkload.hpp ClAdditionWorkload.cpp ClAdditionWorkload.hpp ClBaseMergerWorkload.hpp diff --git a/src/backends/cl/workloads/ClActivationFloatWorkload.cpp b/src/backends/cl/workloads/ClActivationFloatWorkload.cpp deleted file mode 100644 index cbaac9d226..0000000000 --- a/src/backends/cl/workloads/ClActivationFloatWorkload.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClActivationFloatWorkload.hpp" -#include -#include - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ -arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input, - const TensorInfo& output, - const ActivationDescriptor& descriptor) -{ - const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input); - const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output); - - const arm_compute::ActivationLayerInfo activationLayerInfo = - ConvertActivationDescriptorToAclActivationLayerInfo(descriptor); - - if (input.GetDataType() == DataType::QuantisedAsymm8 && - activationLayerInfo.activation() == arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC) - { - return arm_compute::Status{arm_compute::ErrorCode::RUNTIME_ERROR, - "CL: Logistic Activations unsupported with QAsymm8 data type."}; - } - - return arm_compute::CLActivationLayer::validate(&aclInput, - &aclOutput, - activationLayerInfo); -} - -ClActivationFloatWorkload::ClActivationFloatWorkload(const ActivationQueueDescriptor& descriptor, - const WorkloadInfo& info) - : FloatWorkload(descriptor, info) -{ - m_Data.ValidateInputsOutputs("ClActivationFloatWorkload", 1, 1); - - const arm_compute::ActivationLayerInfo activationLayerInfo = - ConvertActivationDescriptorToAclActivationLayerInfo(m_Data.m_Parameters); - - arm_compute::ICLTensor& input = static_cast(m_Data.m_Inputs[0])->GetTensor(); - arm_compute::ICLTensor& output = static_cast(m_Data.m_Outputs[0])->GetTensor(); - m_ActivationLayer.configure(&input, &output, activationLayerInfo); -} - -void ClActivationFloatWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClActivationFloatWorkload_Execute"); - m_ActivationLayer.run(); -} - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClActivationFloatWorkload.hpp b/src/backends/cl/workloads/ClActivationFloatWorkload.hpp deleted file mode 100644 index cb560a791b..0000000000 --- a/src/backends/cl/workloads/ClActivationFloatWorkload.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -namespace armnn -{ -arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input, - const TensorInfo& output, - const ActivationDescriptor& descriptor); - -// Activation layer execution. -class ClActivationFloatWorkload : public FloatWorkload -{ -public: - ClActivationFloatWorkload(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info); - void Execute() const override; - -private: - mutable arm_compute::CLActivationLayer m_ActivationLayer; -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClActivationUint8Workload.cpp b/src/backends/cl/workloads/ClActivationUint8Workload.cpp deleted file mode 100644 index ad6b73074b..0000000000 --- a/src/backends/cl/workloads/ClActivationUint8Workload.cpp +++ /dev/null @@ -1,44 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClActivationUint8Workload.hpp" -#include - -#include -#include -#include - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -ClActivationUint8Workload::ClActivationUint8Workload(const ActivationQueueDescriptor& descriptor, - const WorkloadInfo& info) - : Uint8Workload(descriptor, info) -{ - auto activation = ConvertActivationFunctionToAclActivationFunction(m_Data.m_Parameters.m_Function); - arm_compute::ActivationLayerInfo layerInfo(activation, - m_Data.m_Parameters.m_A, - m_Data.m_Parameters.m_B); - - m_Data.ValidateInputsOutputs("ClActivationUint8Workload", 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(); - - m_ActivationLayer.configure(&input, &output, layerInfo); -} - -void ClActivationUint8Workload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClActivationUint8Workload_Execute"); - - m_ActivationLayer.run(); -} - -} //namespace Armnn - - diff --git a/src/backends/cl/workloads/ClActivationUint8Workload.hpp b/src/backends/cl/workloads/ClActivationUint8Workload.hpp deleted file mode 100644 index d0b7d3a78f..0000000000 --- a/src/backends/cl/workloads/ClActivationUint8Workload.hpp +++ /dev/null @@ -1,29 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -namespace armnn -{ - -// Activation layer execution. -class ClActivationUint8Workload : public Uint8Workload -{ -public: - ClActivationUint8Workload(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info); - void Execute() const override; - -private: - mutable arm_compute::CLActivationLayer m_ActivationLayer; -}; - -} //namespace armnn - - - diff --git a/src/backends/cl/workloads/ClActivationWorkload.cpp b/src/backends/cl/workloads/ClActivationWorkload.cpp new file mode 100644 index 0000000000..426af9f16d --- /dev/null +++ b/src/backends/cl/workloads/ClActivationWorkload.cpp @@ -0,0 +1,59 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "ClActivationWorkload.hpp" + +#include "ClWorkloadUtils.hpp" + +#include +#include +#include +#include + +namespace armnn +{ +arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const ActivationDescriptor& descriptor) +{ + const arm_compute::TensorInfo aclInput = armcomputetensorutils::BuildArmComputeTensorInfo(input); + const arm_compute::TensorInfo aclOutput = armcomputetensorutils::BuildArmComputeTensorInfo(output); + + const arm_compute::ActivationLayerInfo activationLayerInfo = + ConvertActivationDescriptorToAclActivationLayerInfo(descriptor); + + if (input.GetDataType() == DataType::QuantisedAsymm8 && + activationLayerInfo.activation() == arm_compute::ActivationLayerInfo::ActivationFunction::LOGISTIC) + { + return arm_compute::Status{arm_compute::ErrorCode::RUNTIME_ERROR, + "CL: Logistic Activations unsupported with QAsymm8 data type."}; + } + + return arm_compute::CLActivationLayer::validate(&aclInput, + &aclOutput, + activationLayerInfo); +} + +ClActivationWorkload::ClActivationWorkload(const ActivationQueueDescriptor& descriptor, + const WorkloadInfo& info) + : BaseWorkload(descriptor, info) +{ + m_Data.ValidateInputsOutputs("ClActivationWorkload", 1, 1); + + const arm_compute::ActivationLayerInfo activationLayerInfo = + ConvertActivationDescriptorToAclActivationLayerInfo(m_Data.m_Parameters); + + arm_compute::ICLTensor& input = static_cast(m_Data.m_Inputs[0])->GetTensor(); + arm_compute::ICLTensor& output = static_cast(m_Data.m_Outputs[0])->GetTensor(); + m_ActivationLayer.configure(&input, &output, activationLayerInfo); +} + +void ClActivationWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT_CL("ClActivationWorkload_Execute"); + m_ActivationLayer.run(); +} + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClActivationWorkload.hpp b/src/backends/cl/workloads/ClActivationWorkload.hpp new file mode 100644 index 0000000000..c1f6de2601 --- /dev/null +++ b/src/backends/cl/workloads/ClActivationWorkload.hpp @@ -0,0 +1,28 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include + +namespace armnn +{ +arm_compute::Status ClActivationWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const ActivationDescriptor& descriptor); + +class ClActivationWorkload : public BaseWorkload +{ +public: + ClActivationWorkload(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info); + void Execute() const override; + +private: + mutable arm_compute::CLActivationLayer m_ActivationLayer; +}; + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index e03f6a5955..a01d9d809c 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -4,8 +4,7 @@ // #pragma once -#include "ClActivationFloatWorkload.hpp" -#include "ClActivationUint8Workload.hpp" +#include "ClActivationWorkload.hpp" #include "ClAdditionWorkload.hpp" #include "ClConstantWorkload.hpp" #include "ClBaseMergerWorkload.hpp" -- cgit v1.2.1