From 55b1cda7d242ceb22963fd40370c2e6dbbb074ba Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Wed, 10 Oct 2018 14:51:27 +0100 Subject: IVGCVSW-1951 Remove type templating from ClConstantWorkload Change-Id: Ib2c9fe56c59aedabeff899a81a0afe260bd57c9f --- src/backends/cl/ClWorkloadFactory.cpp | 2 +- src/backends/cl/backend.mk | 4 +- src/backends/cl/workloads/CMakeLists.txt | 8 +-- .../cl/workloads/ClBaseConstantWorkload.cpp | 65 --------------------- .../cl/workloads/ClBaseConstantWorkload.hpp | 30 ---------- .../cl/workloads/ClConstantFloatWorkload.cpp | 18 ------ .../cl/workloads/ClConstantFloatWorkload.hpp | 20 ------- .../cl/workloads/ClConstantUint8Workload.cpp | 18 ------ .../cl/workloads/ClConstantUint8Workload.hpp | 20 ------- src/backends/cl/workloads/ClConstantWorkload.cpp | 68 ++++++++++++++++++++++ src/backends/cl/workloads/ClConstantWorkload.hpp | 25 ++++++++ src/backends/cl/workloads/ClWorkloads.hpp | 4 +- 12 files changed, 98 insertions(+), 184 deletions(-) delete mode 100644 src/backends/cl/workloads/ClBaseConstantWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClBaseConstantWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClConstantFloatWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClConstantFloatWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClConstantUint8Workload.cpp delete mode 100644 src/backends/cl/workloads/ClConstantUint8Workload.hpp create mode 100644 src/backends/cl/workloads/ClConstantWorkload.cpp create mode 100644 src/backends/cl/workloads/ClConstantWorkload.hpp diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 6315b5ab49..afb3720cdc 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -223,7 +223,7 @@ std::unique_ptr ClWorkloadFactory::CreateL2Normalization(const L2Norm std::unique_ptr ClWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return std::make_unique(descriptor, info); } std::unique_ptr ClWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index 04b8b9e69c..e233bfbb7b 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -15,10 +15,8 @@ BACKEND_SOURCES := \ workloads/ClActivationFloatWorkload.cpp \ workloads/ClActivationUint8Workload.cpp \ workloads/ClAdditionWorkload.cpp \ - workloads/ClBaseConstantWorkload.cpp \ workloads/ClBatchNormalizationFloatWorkload.cpp \ - workloads/ClConstantFloatWorkload.cpp \ - workloads/ClConstantUint8Workload.cpp \ + workloads/ClConstantWorkload.cpp \ workloads/ClConvertFp16ToFp32Workload.cpp \ workloads/ClConvertFp32ToFp16Workload.cpp \ workloads/ClConvolution2dWorkload.cpp \ diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index 4d1c1bf5c3..1e19bf5bf9 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -10,15 +10,11 @@ list(APPEND armnnClBackendWorkloads_sources ClActivationUint8Workload.hpp ClAdditionWorkload.cpp ClAdditionWorkload.hpp - ClBaseConstantWorkload.cpp - ClBaseConstantWorkload.hpp ClBaseMergerWorkload.hpp ClBatchNormalizationFloatWorkload.cpp ClBatchNormalizationFloatWorkload.hpp - ClConstantFloatWorkload.cpp - ClConstantFloatWorkload.hpp - ClConstantUint8Workload.cpp - ClConstantUint8Workload.hpp + ClConstantWorkload.cpp + ClConstantWorkload.hpp ClConvertFp16ToFp32Workload.cpp ClConvertFp16ToFp32Workload.hpp ClConvertFp32ToFp16Workload.cpp diff --git a/src/backends/cl/workloads/ClBaseConstantWorkload.cpp b/src/backends/cl/workloads/ClBaseConstantWorkload.cpp deleted file mode 100644 index 848ab5ade6..0000000000 --- a/src/backends/cl/workloads/ClBaseConstantWorkload.cpp +++ /dev/null @@ -1,65 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClBaseConstantWorkload.hpp" - -#include -#include -#include -#include - -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -template class ClBaseConstantWorkload; -template class ClBaseConstantWorkload; - -template -void ClBaseConstantWorkload::Execute() const -{ - // The intermediate tensor held by the corresponding layer output handler can be initialised with the given data - // on the first inference, then reused for subsequent inferences. - // The initialisation cannot happen at workload construction time since the ACL kernel for the next layer may not - // have been configured at the time. - if (!m_RanOnce) - { - const ConstantQueueDescriptor& data = this->m_Data; - - BOOST_ASSERT(data.m_LayerOutput != nullptr); - arm_compute::CLTensor& output = static_cast(data.m_Outputs[0])->GetTensor(); - arm_compute::DataType computeDataType = static_cast(data.m_Outputs[0])->GetDataType(); - - switch (computeDataType) - { - case arm_compute::DataType::F16: - { - CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); - break; - } - case arm_compute::DataType::F32: - { - CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); - break; - } - case arm_compute::DataType::QASYMM8: - { - CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); - break; - } - default: - { - BOOST_ASSERT_MSG(false, "Unknown data type"); - break; - } - } - - m_RanOnce = true; - } -} - - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClBaseConstantWorkload.hpp b/src/backends/cl/workloads/ClBaseConstantWorkload.hpp deleted file mode 100644 index f7a23a9162..0000000000 --- a/src/backends/cl/workloads/ClBaseConstantWorkload.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -namespace armnn -{ -template -class ClBaseConstantWorkload : public TypedWorkload -{ -public: - ClBaseConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) - : TypedWorkload(descriptor, info) - , m_RanOnce(false) - { - } - - void Execute() const override; - -private: - mutable bool m_RanOnce; -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantFloatWorkload.cpp b/src/backends/cl/workloads/ClConstantFloatWorkload.cpp deleted file mode 100644 index 1565047c22..0000000000 --- a/src/backends/cl/workloads/ClConstantFloatWorkload.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClConstantFloatWorkload.hpp" -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -void ClConstantFloatWorkload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClConstantFloatWorkload_Execute"); - ClBaseConstantWorkload::Execute(); -} - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantFloatWorkload.hpp b/src/backends/cl/workloads/ClConstantFloatWorkload.hpp deleted file mode 100644 index 0cbeaad9ea..0000000000 --- a/src/backends/cl/workloads/ClConstantFloatWorkload.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include "ClBaseConstantWorkload.hpp" - -namespace armnn -{ -class ClConstantFloatWorkload : public ClBaseConstantWorkload -{ -public: - using ClBaseConstantWorkload::ClBaseConstantWorkload; - void Execute() const override; -}; - - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantUint8Workload.cpp b/src/backends/cl/workloads/ClConstantUint8Workload.cpp deleted file mode 100644 index a5ef0321cd..0000000000 --- a/src/backends/cl/workloads/ClConstantUint8Workload.cpp +++ /dev/null @@ -1,18 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "ClConstantUint8Workload.hpp" -#include "ClWorkloadUtils.hpp" - -namespace armnn -{ - -void ClConstantUint8Workload::Execute() const -{ - ARMNN_SCOPED_PROFILING_EVENT_CL("ClConstantUint8Workload_Execute"); - ClBaseConstantWorkload::Execute(); -} - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantUint8Workload.hpp b/src/backends/cl/workloads/ClConstantUint8Workload.hpp deleted file mode 100644 index 30556dc0d6..0000000000 --- a/src/backends/cl/workloads/ClConstantUint8Workload.hpp +++ /dev/null @@ -1,20 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include "ClBaseConstantWorkload.hpp" - -namespace armnn -{ - -class ClConstantUint8Workload : public ClBaseConstantWorkload -{ -public: - using ClBaseConstantWorkload::ClBaseConstantWorkload; - void Execute() const override; -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantWorkload.cpp b/src/backends/cl/workloads/ClConstantWorkload.cpp new file mode 100644 index 0000000000..eee6dbdd55 --- /dev/null +++ b/src/backends/cl/workloads/ClConstantWorkload.cpp @@ -0,0 +1,68 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "ClConstantWorkload.hpp" + +#include +#include +#include +#include + +#include "ClWorkloadUtils.hpp" + +namespace armnn +{ + +ClConstantWorkload::ClConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) + : BaseWorkload(descriptor, info) + , m_RanOnce(false) +{ +} + +void ClConstantWorkload::Execute() const +{ + ARMNN_SCOPED_PROFILING_EVENT_CL("ClConstantWorkload_Execute"); + + // The intermediate tensor held by the corresponding layer output handler can be initialised with the given data + // on the first inference, then reused for subsequent inferences. + // The initialisation cannot happen at workload construction time since the ACL kernel for the next layer may not + // have been configured at the time. + if (!m_RanOnce) + { + const ConstantQueueDescriptor& data = this->m_Data; + + BOOST_ASSERT(data.m_LayerOutput != nullptr); + arm_compute::CLTensor& output = static_cast(data.m_Outputs[0])->GetTensor(); + arm_compute::DataType computeDataType = static_cast(data.m_Outputs[0])->GetDataType(); + + switch (computeDataType) + { + case arm_compute::DataType::F16: + { + CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); + break; + } + case arm_compute::DataType::F32: + { + CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); + break; + } + case arm_compute::DataType::QASYMM8: + { + CopyArmComputeClTensorData(output, data.m_LayerOutput->GetConstTensor()); + break; + } + default: + { + BOOST_ASSERT_MSG(false, "Unknown data type"); + break; + } + } + + m_RanOnce = true; + } +} + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClConstantWorkload.hpp b/src/backends/cl/workloads/ClConstantWorkload.hpp new file mode 100644 index 0000000000..ccdbf069fd --- /dev/null +++ b/src/backends/cl/workloads/ClConstantWorkload.hpp @@ -0,0 +1,25 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include + +namespace armnn +{ +class ClConstantWorkload : public BaseWorkload +{ +public: + ClConstantWorkload(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info); + + void Execute() const override; + +private: + mutable bool m_RanOnce; +}; + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index 6574d43659..e03f6a5955 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -7,11 +7,9 @@ #include "ClActivationFloatWorkload.hpp" #include "ClActivationUint8Workload.hpp" #include "ClAdditionWorkload.hpp" -#include "ClBaseConstantWorkload.hpp" +#include "ClConstantWorkload.hpp" #include "ClBaseMergerWorkload.hpp" #include "ClBatchNormalizationFloatWorkload.hpp" -#include "ClConstantFloatWorkload.hpp" -#include "ClConstantUint8Workload.hpp" #include "ClConvolution2dWorkload.hpp" #include "ClDepthwiseConvolutionWorkload.hpp" #include "ClDivisionFloatWorkload.hpp" -- cgit v1.2.1