From 39d487d3e2834a6d3024c92a519d84aa05f87925 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Fri, 17 May 2019 15:44:36 +0100 Subject: IVGCVSW-3117 Rename NeonMergerWorkload to NeonConcatWorkload Change-Id: I9a373a31bfabbe0f691d7f9e240ac08e072b2c7d Signed-off-by: Jim Flynn --- src/backends/neon/NeonLayerSupport.cpp | 4 +- src/backends/neon/NeonWorkloadFactory.cpp | 2 +- src/backends/neon/backend.mk | 2 +- src/backends/neon/test/NeonCreateWorkloadTests.cpp | 14 +-- src/backends/neon/workloads/CMakeLists.txt | 4 +- src/backends/neon/workloads/NeonConcatWorkload.cpp | 103 +++++++++++++++++++++ src/backends/neon/workloads/NeonConcatWorkload.hpp | 34 +++++++ src/backends/neon/workloads/NeonMergerWorkload.cpp | 103 --------------------- src/backends/neon/workloads/NeonMergerWorkload.hpp | 34 ------- src/backends/neon/workloads/NeonWorkloads.hpp | 2 +- 10 files changed, 151 insertions(+), 151 deletions(-) create mode 100644 src/backends/neon/workloads/NeonConcatWorkload.cpp create mode 100644 src/backends/neon/workloads/NeonConcatWorkload.hpp delete mode 100644 src/backends/neon/workloads/NeonMergerWorkload.cpp delete mode 100644 src/backends/neon/workloads/NeonMergerWorkload.hpp diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index 9bd48cf860..f4599ff8e4 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -26,7 +26,7 @@ #include "workloads/NeonL2NormalizationFloatWorkload.hpp" #include "workloads/NeonMaximumWorkload.hpp" #include "workloads/NeonMeanWorkload.hpp" -#include "workloads/NeonMergerWorkload.hpp" +#include "workloads/NeonConcatWorkload.hpp" #include "workloads/NeonMinimumWorkload.hpp" #include "workloads/NeonMultiplicationWorkload.hpp" #include "workloads/NeonNormalizationFloatWorkload.hpp" @@ -336,7 +336,7 @@ bool NeonLayerSupport::IsMergerSupported(const std::vector in unsigned int concatInnerAxis = (descriptor.GetNumDimensions() - descriptor.GetConcatAxis()) - 1; if(concatInnerAxis < 3) // Width, height, or channels { - FORWARD_WORKLOAD_VALIDATE_FUNC(NeonMergerWorkloadValidate, + FORWARD_WORKLOAD_VALIDATE_FUNC(NeonConcatWorkloadValidate, reasonIfUnsupported, inputs, output, diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 8db5f9ad84..c49ff3a36c 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -123,7 +123,7 @@ std::unique_ptr NeonWorkloadFactory::CreateSplitter(const SplitterQue std::unique_ptr NeonWorkloadFactory::CreateMerger(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info); } std::unique_ptr NeonWorkloadFactory::CreateFullyConnected( diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk index c06d05f3cc..6824879ac9 100644 --- a/src/backends/neon/backend.mk +++ b/src/backends/neon/backend.mk @@ -22,6 +22,7 @@ BACKEND_SOURCES := \ workloads/NeonActivationWorkload.cpp \ workloads/NeonAdditionWorkload.cpp \ workloads/NeonBatchNormalizationWorkload.cpp \ + workloads/NeonConcatWorkload.cpp \ workloads/NeonConstantWorkload.cpp \ workloads/NeonConvertFp16ToFp32Workload.cpp \ workloads/NeonConvertFp32ToFp16Workload.cpp \ @@ -34,7 +35,6 @@ BACKEND_SOURCES := \ workloads/NeonLstmFloatWorkload.cpp \ workloads/NeonMaximumWorkload.cpp \ workloads/NeonMeanWorkload.cpp \ - workloads/NeonMergerWorkload.cpp \ workloads/NeonMinimumWorkload.cpp \ workloads/NeonMultiplicationWorkload.cpp \ workloads/NeonNormalizationFloatWorkload.cpp \ diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp index d4065898a8..b41d62f7eb 100644 --- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp +++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp @@ -517,7 +517,7 @@ BOOST_AUTO_TEST_CASE(CreateSplitterMerger) NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); auto workloads = - CreateSplitterMergerWorkloadTest(factory, graph); auto wlSplitter = std::move(workloads.first); @@ -654,32 +654,32 @@ static void NeonCreateMergerWorkloadTest(std::initializer_list out BOOST_AUTO_TEST_CASE(CreateMergerDim0Float32Workload) { - NeonCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); + NeonCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); } BOOST_AUTO_TEST_CASE(CreateMergerDim1Float32Workload) { - NeonCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); + NeonCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); } BOOST_AUTO_TEST_CASE(CreateMergerDim3Float32Workload) { - NeonCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); + NeonCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); } BOOST_AUTO_TEST_CASE(CreateMergerDim0Uint8Workload) { - NeonCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); + NeonCreateMergerWorkloadTest({ 4, 3, 2, 5 }, 0); } BOOST_AUTO_TEST_CASE(CreateMergerDim1Uint8Workload) { - NeonCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); + NeonCreateMergerWorkloadTest({ 2, 6, 2, 5 }, 1); } BOOST_AUTO_TEST_CASE(CreateMergerDim3Uint8Workload) { - NeonCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); + NeonCreateMergerWorkloadTest({ 2, 3, 2, 10 }, 3); } BOOST_AUTO_TEST_SUITE_END() diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt index 3bbf64d4fb..f1c773dc4c 100644 --- a/src/backends/neon/workloads/CMakeLists.txt +++ b/src/backends/neon/workloads/CMakeLists.txt @@ -10,6 +10,8 @@ list(APPEND armnnNeonBackendWorkloads_sources NeonAdditionWorkload.hpp NeonBatchNormalizationWorkload.cpp NeonBatchNormalizationWorkload.hpp + NeonConcatWorkload.cpp + NeonConcatWorkload.hpp NeonConstantWorkload.cpp NeonConstantWorkload.hpp NeonConvertFp16ToFp32Workload.cpp @@ -34,8 +36,6 @@ list(APPEND armnnNeonBackendWorkloads_sources NeonMaximumWorkload.hpp NeonMeanWorkload.cpp NeonMeanWorkload.hpp - NeonMergerWorkload.cpp - NeonMergerWorkload.hpp NeonMinimumWorkload.cpp NeonMinimumWorkload.hpp NeonMultiplicationWorkload.cpp diff --git a/src/backends/neon/workloads/NeonConcatWorkload.cpp b/src/backends/neon/workloads/NeonConcatWorkload.cpp new file mode 100644 index 0000000000..91f81090ce --- /dev/null +++ b/src/backends/neon/workloads/NeonConcatWorkload.cpp @@ -0,0 +1,103 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "NeonConcatWorkload.hpp" + +#include "NeonWorkloadUtils.hpp" + +#include +#include +#include + + + +namespace armnn +{ +using namespace armcomputetensorutils; + +namespace +{ +size_t CalcAxis(const armnn::MergerDescriptor& desc) +{ + return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1; +} +} //namespace + +arm_compute::Status NeonConcatWorkloadValidate(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::NEConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis); +} + +NeonConcatWorkload::NeonConcatWorkload( +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::ITensor& aclInput = boost::polymorphic_pointer_downcast(input)->GetTensor(); + aclInputs.emplace_back(&aclInput); + } + arm_compute::ITensor& output = boost::polymorphic_pointer_downcast( + m_Data.m_Outputs[0])->GetTensor(); + + // Create the layer function + m_Layer.reset(new arm_compute::NEConcatenateLayer()); + + // Configure input and output tensors + size_t aclAxis = CalcAxis(descriptor.m_Parameters); + m_Layer->configure(aclInputs, &output, aclAxis); + + // Prepare + m_Layer->prepare(); +} + +void NeonConcatWorkload::Execute() const +{ + if (m_Layer) + { + ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonConcatWorkload_Execute"); + m_Layer->run(); + } +} + +} //namespace armnn + diff --git a/src/backends/neon/workloads/NeonConcatWorkload.hpp b/src/backends/neon/workloads/NeonConcatWorkload.hpp new file mode 100644 index 0000000000..e5a8d15055 --- /dev/null +++ b/src/backends/neon/workloads/NeonConcatWorkload.hpp @@ -0,0 +1,34 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include + +#include +#include +#include + +#include + +namespace armnn +{ +arm_compute::Status NeonConcatWorkloadValidate(const std::vector& inputs, + const TensorInfo& output, + const MergerDescriptor& descriptor); + +class NeonConcatWorkload : public BaseWorkload +{ +public: + NeonConcatWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info); + + using BaseWorkload::BaseWorkload; + void Execute() const override; + +private: + std::unique_ptr m_Layer; +}; + +} //namespace armnn diff --git a/src/backends/neon/workloads/NeonMergerWorkload.cpp b/src/backends/neon/workloads/NeonMergerWorkload.cpp deleted file mode 100644 index 64d4d93d97..0000000000 --- a/src/backends/neon/workloads/NeonMergerWorkload.cpp +++ /dev/null @@ -1,103 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#include "NeonMergerWorkload.hpp" - -#include "NeonWorkloadUtils.hpp" - -#include -#include -#include - - - -namespace armnn -{ -using namespace armcomputetensorutils; - -namespace -{ -size_t CalcAxis(const armnn::MergerDescriptor& desc) -{ - return (desc.GetNumDimensions() - desc.GetConcatAxis()) - 1; -} -} //namespace - -arm_compute::Status NeonMergerWorkloadValidate(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::NEConcatenateLayer::validate(aclInputPtrs, &aclOutputInfo, aclAxis); -} - -NeonMergerWorkload::NeonMergerWorkload( -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::ITensor& aclInput = boost::polymorphic_pointer_downcast(input)->GetTensor(); - aclInputs.emplace_back(&aclInput); - } - arm_compute::ITensor& output = boost::polymorphic_pointer_downcast( - m_Data.m_Outputs[0])->GetTensor(); - - // Create the layer function - m_Layer.reset(new arm_compute::NEConcatenateLayer()); - - // Configure input and output tensors - size_t aclAxis = CalcAxis(descriptor.m_Parameters); - m_Layer->configure(aclInputs, &output, aclAxis); - - // Prepare - m_Layer->prepare(); -} - -void NeonMergerWorkload::Execute() const -{ - if (m_Layer) - { - ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonMergerWorkload_Execute"); - m_Layer->run(); - } -} - -} //namespace armnn - diff --git a/src/backends/neon/workloads/NeonMergerWorkload.hpp b/src/backends/neon/workloads/NeonMergerWorkload.hpp deleted file mode 100644 index 1dd9309aff..0000000000 --- a/src/backends/neon/workloads/NeonMergerWorkload.hpp +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -#include -#include -#include - -#include - -namespace armnn -{ -arm_compute::Status NeonMergerWorkloadValidate(const std::vector& inputs, - const TensorInfo& output, - const MergerDescriptor& descriptor); - -class NeonMergerWorkload : public BaseWorkload -{ -public: - NeonMergerWorkload(const MergerQueueDescriptor& descriptor, const WorkloadInfo& info); - - using BaseWorkload::BaseWorkload; - void Execute() const override; - -private: - std::unique_ptr m_Layer; -}; - -} //namespace armnn diff --git a/src/backends/neon/workloads/NeonWorkloads.hpp b/src/backends/neon/workloads/NeonWorkloads.hpp index 04ea14eff7..dc02aecfd7 100644 --- a/src/backends/neon/workloads/NeonWorkloads.hpp +++ b/src/backends/neon/workloads/NeonWorkloads.hpp @@ -19,7 +19,7 @@ #include "NeonLstmFloatWorkload.hpp" #include "NeonMaximumWorkload.hpp" #include "NeonMeanWorkload.hpp" -#include "NeonMergerWorkload.hpp" +#include "NeonConcatWorkload.hpp" #include "NeonMinimumWorkload.hpp" #include "NeonMultiplicationWorkload.hpp" #include "NeonNormalizationFloatWorkload.hpp" -- cgit v1.2.1