From 6905941332e243c518bc30ed18c5a222fb50a90a Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Fri, 17 May 2019 13:03:57 +0100 Subject: IVGCVSW-3117 Rename ClMergerWorkload to ClConcatWorkload Change-Id: Ie0394336a772afa7b075eb562ac5191c8b3ec9f3 Signed-off-by: Jim Flynn --- src/backends/cl/ClLayerSupport.cpp | 4 +- src/backends/cl/ClWorkloadFactory.cpp | 2 +- src/backends/cl/backend.mk | 2 +- src/backends/cl/test/ClCreateWorkloadTests.cpp | 14 ++-- src/backends/cl/workloads/CMakeLists.txt | 4 +- src/backends/cl/workloads/ClConcatWorkload.cpp | 100 +++++++++++++++++++++++++ src/backends/cl/workloads/ClConcatWorkload.hpp | 30 ++++++++ src/backends/cl/workloads/ClMergerWorkload.cpp | 100 ------------------------- src/backends/cl/workloads/ClMergerWorkload.hpp | 30 -------- src/backends/cl/workloads/ClWorkloads.hpp | 2 +- 10 files changed, 144 insertions(+), 144 deletions(-) create mode 100644 src/backends/cl/workloads/ClConcatWorkload.cpp create mode 100644 src/backends/cl/workloads/ClConcatWorkload.hpp delete mode 100644 src/backends/cl/workloads/ClMergerWorkload.cpp delete mode 100644 src/backends/cl/workloads/ClMergerWorkload.hpp diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index a557870cea..2ce5179045 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -30,7 +30,7 @@ #include "workloads/ClLstmFloatWorkload.hpp" #include "workloads/ClMaximumWorkload.hpp" #include "workloads/ClMeanWorkload.hpp" -#include "workloads/ClMergerWorkload.hpp" +#include "workloads/ClConcatWorkload.hpp" #include "workloads/ClMinimumWorkload.hpp" #include "workloads/ClMultiplicationWorkload.hpp" #include "workloads/ClNormalizationFloatWorkload.hpp" @@ -452,7 +452,7 @@ bool ClLayerSupport::IsMergerSupported(const std::vector inpu unsigned int concatInnerAxis = (descriptor.GetNumDimensions() - descriptor.GetConcatAxis()) - 1; if(concatInnerAxis < 3) // Width, height, or channels { - FORWARD_WORKLOAD_VALIDATE_FUNC(ClMergerWorkloadValidate, + FORWARD_WORKLOAD_VALIDATE_FUNC(ClConcatWorkloadValidate, reasonIfUnsupported, inputs, output, diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index e4097a1b50..400926966e 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -158,7 +158,7 @@ std::unique_ptr ClWorkloadFactory::CreateSplitter(const SplitterQueue std::unique_ptr ClWorkloadFactory::CreateMerger(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info); } std::unique_ptr ClWorkloadFactory::CreateFullyConnected( diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index 283ebcad89..2dc4d9cbbf 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -24,6 +24,7 @@ BACKEND_SOURCES := \ workloads/ClAdditionWorkload.cpp \ workloads/ClBatchNormalizationFloatWorkload.cpp \ workloads/ClBatchToSpaceNdWorkload.cpp \ + workloads/ClConcatWorkload.cpp \ workloads/ClConstantWorkload.cpp \ workloads/ClConvertFp16ToFp32Workload.cpp \ workloads/ClConvertFp32ToFp16Workload.cpp \ @@ -37,7 +38,6 @@ BACKEND_SOURCES := \ workloads/ClLstmFloatWorkload.cpp \ workloads/ClMaximumWorkload.cpp \ workloads/ClMeanWorkload.cpp \ - workloads/ClMergerWorkload.cpp \ workloads/ClMinimumWorkload.cpp \ workloads/ClMultiplicationWorkload.cpp \ workloads/ClNormalizationFloatWorkload.cpp \ diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index c5f685dc94..7f08b80a14 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -564,7 +564,7 @@ static void ClSplitterMergerTest() ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workloads = - CreateSplitterMergerWorkloadTest + CreateSplitterMergerWorkloadTest (factory, graph); auto wlSplitter = std::move(workloads.first); @@ -823,32 +823,32 @@ static void ClCreateMergerWorkloadTest(std::initializer_list outpu BOOST_AUTO_TEST_CASE(CreateMergerDim0Float32Workload) { - ClCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); + ClCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); } BOOST_AUTO_TEST_CASE(CreateMergerDim1Float32Workload) { - ClCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); + ClCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); } BOOST_AUTO_TEST_CASE(CreateMergerDim3Float32Workload) { - ClCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); + ClCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); } BOOST_AUTO_TEST_CASE(CreateMergerDim0Uint8Workload) { - ClCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); + ClCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); } BOOST_AUTO_TEST_CASE(CreateMergerDim1Uint8Workload) { - ClCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); + ClCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); } BOOST_AUTO_TEST_CASE(CreateMergerDim3Uint8Workload) { - ClCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); + ClCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/backends/cl/workloads/CMakeLists.txt b/src/backends/cl/workloads/CMakeLists.txt index d5dccb607c..abbed0e754 100644 --- a/src/backends/cl/workloads/CMakeLists.txt +++ b/src/backends/cl/workloads/CMakeLists.txt @@ -12,6 +12,8 @@ list(APPEND armnnClBackendWorkloads_sources ClBatchNormalizationFloatWorkload.hpp ClBatchToSpaceNdWorkload.cpp ClBatchToSpaceNdWorkload.hpp + ClConcatWorkload.cpp + ClConcatWorkload.hpp ClConstantWorkload.cpp ClConstantWorkload.hpp ClConvertFp16ToFp32Workload.cpp @@ -38,8 +40,6 @@ list(APPEND armnnClBackendWorkloads_sources ClMaximumWorkload.hpp ClMeanWorkload.cpp ClMeanWorkload.hpp - ClMergerWorkload.cpp - ClMergerWorkload.hpp ClMinimumWorkload.cpp ClMinimumWorkload.hpp ClMultiplicationWorkload.cpp diff --git a/src/backends/cl/workloads/ClConcatWorkload.cpp b/src/backends/cl/workloads/ClConcatWorkload.cpp new file mode 100644 index 0000000000..ee4ba6b65f --- /dev/null +++ b/src/backends/cl/workloads/ClConcatWorkload.cpp @@ -0,0 +1,100 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#include "ClConcatWorkload.hpp" +#include "ClWorkloadUtils.hpp" +#include +#include +#include +#include + +#include + +#include + +namespace armnn +{ +using namespace armcomputetensorutils; + +namespace +{ +size_t CalcAxis(const MergerDescriptor& desc) +{ + return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1; +} +} //namespace + +arm_compute::Status ClConcatWorkloadValidate(const std::vector& inputs, + const TensorInfo& output, + const MergerDescriptor& descriptor) +{ + std::vector aclInputs; + for (const TensorInfo* input : inputs) + { + arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, armnn::DataLayout::NCHW); + aclInputs.emplace_back(aclInputInfo); + } + const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output); + std::vector aclInputPtrs; + for (arm_compute::ITensorInfo& input : aclInputs) + { + aclInputPtrs.emplace_back(&input); + } + + size_t aclAxis = CalcAxis(descriptor); + return arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis); +} + +ClConcatWorkload::ClConcatWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info) +: BaseWorkload(descriptor, info) +{ + bool allInputsAreSubtensors = true; + + // Check that all inputs are sub-tensors + for (auto input : descriptor.m_Inputs) + { + if (!input->GetParent()) + { + // Non sub-tensor input found so we need to execute the merger function + allInputsAreSubtensors = false; + break; + } + } + + if (allInputsAreSubtensors) + { + // Can skip configuring the merger function since it's not executed + return; + } + + std::vector aclInputs; + for (auto input : m_Data.m_Inputs) + { + arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast(input)->GetTensor(); + aclInputs.emplace_back(&aclInput); + } + arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast( + m_Data.m_Outputs[0])->GetTensor(); + + // Create the layer function + m_Layer.reset(new arm_compute::CLConcatenateLayer()); + + // Configure input and output tensors + size_t aclAxis = CalcAxis(descriptor.m_Parameters); + m_Layer->configure(aclInputs, &output, aclAxis); + + // Prepare + m_Layer->prepare(); +} + +void ClConcatWorkload::Execute() const +{ + if (m_Layer) + { + ARMNN_SCOPED_PROFILING_EVENT_CL("ClConcatWorkload_Execute"); + m_Layer->run(); + } +} + +} //namespace armnn \ No newline at end of file diff --git a/src/backends/cl/workloads/ClConcatWorkload.hpp b/src/backends/cl/workloads/ClConcatWorkload.hpp new file mode 100644 index 0000000000..106193d090 --- /dev/null +++ b/src/backends/cl/workloads/ClConcatWorkload.hpp @@ -0,0 +1,30 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include + +namespace armnn +{ + +arm_compute::Status ClConcatWorkloadValidate(const std::vector& inputs, + const TensorInfo& output, + const MergerDescriptor& descriptor); + +class ClConcatWorkload : public BaseWorkload +{ +public: + ClConcatWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info); + + void Execute() const override; + +private: + mutable std::unique_ptr m_Layer; +}; + +} //namespace armnn diff --git a/src/backends/cl/workloads/ClMergerWorkload.cpp b/src/backends/cl/workloads/ClMergerWorkload.cpp deleted file mode 100644 index 610acb91fb..0000000000 --- a/src/backends/cl/workloads/ClMergerWorkload.cpp +++ /dev/null @@ -1,100 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// -#include "ClMergerWorkload.hpp" -#include "ClWorkloadUtils.hpp" -#include -#include -#include -#include - -#include - -#include - -namespace armnn -{ -using namespace armcomputetensorutils; - -namespace -{ -size_t CalcAxis(const MergerDescriptor& desc) -{ - return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1; -} -} //namespace - -arm_compute::Status ClMergerWorkloadValidate(const std::vector& inputs, - const TensorInfo& output, - const MergerDescriptor& descriptor) -{ - std::vector aclInputs; - for (const TensorInfo* input : inputs) - { - arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(*input, armnn::DataLayout::NCHW); - aclInputs.emplace_back(aclInputInfo); - } - const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output); - std::vector aclInputPtrs; - for (arm_compute::ITensorInfo& input : aclInputs) - { - aclInputPtrs.emplace_back(&input); - } - - size_t aclAxis = CalcAxis(descriptor); - return arm_compute::CLConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis); -} - -ClMergerWorkload::ClMergerWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info) -: BaseWorkload(descriptor, info) -{ - bool allInputsAreSubtensors = true; - - // Check that all inputs are sub-tensors - for (auto input : descriptor.m_Inputs) - { - if (!input->GetParent()) - { - // Non sub-tensor input found so we need to execute the merger function - allInputsAreSubtensors = false; - break; - } - } - - if (allInputsAreSubtensors) - { - // Can skip configuring the merger function since it's not executed - return; - } - - std::vector aclInputs; - for (auto input : m_Data.m_Inputs) - { - arm_compute::ICLTensor& aclInput = boost::polymorphic_pointer_downcast(input)->GetTensor(); - aclInputs.emplace_back(&aclInput); - } - arm_compute::ICLTensor& output = boost::polymorphic_pointer_downcast( - m_Data.m_Outputs[0])->GetTensor(); - - // Create the layer function - m_Layer.reset(new arm_compute::CLConcatenateLayer()); - - // Configure input and output tensors - size_t aclAxis = CalcAxis(descriptor.m_Parameters); - m_Layer->configure(aclInputs, &output, aclAxis); - - // Prepare - m_Layer->prepare(); -} - -void ClMergerWorkload::Execute() const -{ - if (m_Layer) - { - ARMNN_SCOPED_PROFILING_EVENT_CL("ClMergerWorkload_Execute"); - m_Layer->run(); - } -} - -} //namespace armnn \ No newline at end of file diff --git a/src/backends/cl/workloads/ClMergerWorkload.hpp b/src/backends/cl/workloads/ClMergerWorkload.hpp deleted file mode 100644 index 1c2f823b7a..0000000000 --- a/src/backends/cl/workloads/ClMergerWorkload.hpp +++ /dev/null @@ -1,30 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include - -namespace armnn -{ - -arm_compute::Status ClMergerWorkloadValidate(const std::vector& inputs, - const TensorInfo& output, - const MergerDescriptor& descriptor); - -class ClMergerWorkload : public BaseWorkload -{ -public: - ClMergerWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info); - - void Execute() const override; - -private: - mutable std::unique_ptr m_Layer; -}; - -} //namespace armnn diff --git a/src/backends/cl/workloads/ClWorkloads.hpp b/src/backends/cl/workloads/ClWorkloads.hpp index 36f2b90609..7e0170cac3 100644 --- a/src/backends/cl/workloads/ClWorkloads.hpp +++ b/src/backends/cl/workloads/ClWorkloads.hpp @@ -17,7 +17,7 @@ #include "ClGreaterWorkload.hpp" #include "ClL2NormalizationFloatWorkload.hpp" #include "ClLstmFloatWorkload.hpp" -#include "ClMergerWorkload.hpp" +#include "ClConcatWorkload.hpp" #include "ClMaximumWorkload.hpp" #include "ClMeanWorkload.hpp" #include "ClMinimumWorkload.hpp" -- cgit v1.2.1