From ca5c82af9269e7fd7ed17c7df9780a75fdaa733e Mon Sep 17 00:00:00 2001 From: Teresa Charlin Date: Tue, 28 Mar 2023 11:00:36 +0100 Subject: IVGCVSW-7507 Pass m_Crops in BatchToSpaceND CpuAcc and GpuAcc workloads Signed-off-by: Teresa Charlin Change-Id: I902c9187eefe7595271312fdc16273f7aa3d41cd --- src/backends/aclCommon/ArmComputeTensorUtils.hpp | 10 ++- src/backends/cl/test/ClLayerTests.cpp | 72 ++++++++++++++++++++++ .../cl/workloads/ClBatchToSpaceNdWorkload.cpp | 49 ++++++++------- src/backends/neon/test/NeonLayerTests.cpp | 26 +++++++- .../neon/workloads/NeonBatchToSpaceNdWorkload.cpp | 11 +++- 5 files changed, 141 insertions(+), 27 deletions(-) (limited to 'src/backends') diff --git a/src/backends/aclCommon/ArmComputeTensorUtils.hpp b/src/backends/aclCommon/ArmComputeTensorUtils.hpp index 1f07fa949c..0c2ff878e1 100644 --- a/src/backends/aclCommon/ArmComputeTensorUtils.hpp +++ b/src/backends/aclCommon/ArmComputeTensorUtils.hpp @@ -108,7 +108,7 @@ unsigned int ComputeDepthwiseConv2dDepthMultiplier(armnn::DataLayout layout, const arm_compute::TensorShape& weightsShape, const arm_compute::TensorShape& inputShape); -/// Utility function used to setup an arm_compute::PadStrideInfo object from an armnn layer descriptor. +/// Utility function used to setup an arm_compute::PadStrideInfo object from an ArmNN layer descriptor. template arm_compute::PadStrideInfo BuildArmComputePadStrideInfo(const Descriptor &descriptor) { @@ -121,6 +121,14 @@ arm_compute::PadStrideInfo BuildArmComputePadStrideInfo(const Descriptor &descri arm_compute::DimensionRoundingType::FLOOR); } +/// Utility function used to setup an arm_compute::CropInfo object from an ArmNN layer descriptor. +template +arm_compute::CropInfo BuildArmComputeCropInfo(const Descriptor& descriptor) +{ + return arm_compute::CropInfo(descriptor.m_Crops[1].first, descriptor.m_Crops[1].second, + descriptor.m_Crops[0].first, descriptor.m_Crops[0].second); +} + /// Sets up the given ArmCompute tensor's dimensions based on the given ArmNN tensor. template void BuildArmComputeTensor(Tensor& tensor, const armnn::TensorInfo& tensorInfo) diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp index 10e2a54c9f..1ad1de8e04 100644 --- a/src/backends/cl/test/ClLayerTests.cpp +++ b/src/backends/cl/test/ClLayerTests.cpp @@ -109,6 +109,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat322, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat323, ClContextControlFixture, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat324, + ClContextControlFixture, + BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat325, + ClContextControlFixture, + BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat326, + ClContextControlFixture, + BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcFloat327, + ClContextControlFixture, + BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat321, ClContextControlFixture, @@ -119,6 +131,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat322, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat323, ClContextControlFixture, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat324, + ClContextControlFixture, + BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat325, + ClContextControlFixture, + BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat326, + ClContextControlFixture, + BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwFloat327, + ClContextControlFixture, + BatchToSpaceNdNchwTest7) ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt1, ClContextControlFixture, @@ -129,6 +153,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt2, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt3, ClContextControlFixture, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt14, + ClContextControlFixture, + BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt5, + ClContextControlFixture, + BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt6, + ClContextControlFixture, + BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcInt7, + ClContextControlFixture, + BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt1, ClContextControlFixture, @@ -139,6 +175,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt2, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt3, ClContextControlFixture, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt4, + ClContextControlFixture, + BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt5, + ClContextControlFixture, + BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt6, + ClContextControlFixture, + BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwInt7, + ClContextControlFixture, + BatchToSpaceNdNchwTest7) ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint1, ClContextControlFixture, @@ -149,6 +197,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint2, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint3, ClContextControlFixture, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint4, + ClContextControlFixture, + BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint5, + ClContextControlFixture, + BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint6, + ClContextControlFixture, + BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNhwcUint7, + ClContextControlFixture, + BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint1, ClContextControlFixture, @@ -159,6 +219,18 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint2, ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint3, ClContextControlFixture, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint14, + ClContextControlFixture, + BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint5, + ClContextControlFixture, + BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint6, + ClContextControlFixture, + BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_FIXTURE_WITH_THF(BatchToSpaceNdNchwUint7, + ClContextControlFixture, + BatchToSpaceNdNchwTest7) // Fully Connected ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleFullyConnected, diff --git a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp b/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp index 8a9a33b16b..ad3a602f48 100644 --- a/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp +++ b/src/backends/cl/workloads/ClBatchToSpaceNdWorkload.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017, 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -17,6 +17,29 @@ namespace armnn { using namespace armcomputetensorutils; +arm_compute::Status ClBatchToSpaceNdWorkloadValidate(const TensorInfo& input, + const TensorInfo& output, + const BatchToSpaceNdDescriptor& descriptor) +{ + DataLayout dataLayout = descriptor.m_DataLayout; + const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout); + + // ArmNN blockShape is [H, W] Cl asks for W, H + int32_t blockHeight = armnn::numeric_cast(descriptor.m_BlockShape[0]); + int32_t blockWidth = armnn::numeric_cast(descriptor.m_BlockShape[1]); + + const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout); + + const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor); + + const arm_compute::Status aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&aclInputInfo, + blockWidth, + blockHeight, + &aclOutputInfo, + cropInfo); + return aclStatus; +} + ClBatchToSpaceNdWorkload::ClBatchToSpaceNdWorkload(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& info, const arm_compute::CLCompileContext& clCompileContext) @@ -42,9 +65,11 @@ ClBatchToSpaceNdWorkload::ClBatchToSpaceNdWorkload(const BatchToSpaceNdQueueDesc arm_compute::ICLTensor& output = static_cast(m_Data.m_Outputs[0])->GetTensor(); output.info()->set_data_layout(aclDataLayout); + const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor.m_Parameters); + { ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "ClBatchToSpaceNdWorkload_configure"); - m_Layer.configure(clCompileContext, &input, blockWidth, blockHeight, &output); + m_Layer.configure(clCompileContext, &input, blockWidth, blockHeight, &output, cropInfo); } } @@ -54,24 +79,4 @@ void ClBatchToSpaceNdWorkload::Execute() const RunClFunction(m_Layer, CHECK_LOCATION()); } -arm_compute::Status ClBatchToSpaceNdWorkloadValidate(const TensorInfo& input, - const TensorInfo& output, - const BatchToSpaceNdDescriptor& descriptor) -{ - DataLayout dataLayout = descriptor.m_DataLayout; - const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, dataLayout); - - // ArmNN blockShape is [H, W] Cl asks for W, H - int32_t blockHeight = armnn::numeric_cast(descriptor.m_BlockShape[0]); - int32_t blockWidth = armnn::numeric_cast(descriptor.m_BlockShape[1]); - - const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, dataLayout); - - const arm_compute::Status aclStatus = arm_compute::CLBatchToSpaceLayer::validate(&aclInputInfo, - blockWidth, - blockHeight, - &aclOutputInfo); - return aclStatus; -} - } //namespace armnn diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp index 2512821a85..d825d3d809 100644 --- a/src/backends/neon/test/NeonLayerTests.cpp +++ b/src/backends/neon/test/NeonLayerTests.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2017-2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -29,26 +29,50 @@ using FactoryType = NeonWorkloadFactory; ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat321, BatchToSpaceNdNhwcTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat322, BatchToSpaceNdNhwcTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat323, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat324, BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat325, BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat326, BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcFloat327, BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat321, BatchToSpaceNdNchwTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat322, BatchToSpaceNdNchwTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat323, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat324, BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat325, BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat326, BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwFloat327, BatchToSpaceNdNchwTest7) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt1, BatchToSpaceNdNhwcTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt2, BatchToSpaceNdNhwcTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt3, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt4, BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt5, BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt6, BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcInt7, BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt1, BatchToSpaceNdNchwTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt2, BatchToSpaceNdNchwTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt3, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt4, BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt5, BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt6, BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwInt7, BatchToSpaceNdNchwTest7) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint1, BatchToSpaceNdNhwcTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint2, BatchToSpaceNdNhwcTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint3, BatchToSpaceNdNhwcTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint4, BatchToSpaceNdNhwcTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint5, BatchToSpaceNdNhwcTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint6, BatchToSpaceNdNhwcTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNhwcUint7, BatchToSpaceNdNhwcTest7) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint1, BatchToSpaceNdNchwTest1) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint2, BatchToSpaceNdNchwTest2) ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint3, BatchToSpaceNdNchwTest3) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint4, BatchToSpaceNdNchwTest4) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint5, BatchToSpaceNdNchwTest5) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint6, BatchToSpaceNdNchwTest6) +ARMNN_AUTO_TEST_CASE_WITH_THF(BatchToSpaceNdNchwUint7, BatchToSpaceNdNchwTest7) // Batch Mat Mul ARMNN_AUTO_TEST_CASE_WITH_THF(BatchMatMul2DSimpleFloat32, BatchMatMul2DSimpleTest); diff --git a/src/backends/neon/workloads/NeonBatchToSpaceNdWorkload.cpp b/src/backends/neon/workloads/NeonBatchToSpaceNdWorkload.cpp index 3f477bc452..05b5899bdd 100644 --- a/src/backends/neon/workloads/NeonBatchToSpaceNdWorkload.cpp +++ b/src/backends/neon/workloads/NeonBatchToSpaceNdWorkload.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// Copyright © 2020, 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -28,10 +28,13 @@ arm_compute::Status NeonBatchToSpaceNdWorkloadValidate(const TensorInfo& input, int32_t blockHeight = armnn::numeric_cast(descriptor.m_BlockShape[0]); int32_t blockWidth = armnn::numeric_cast(descriptor.m_BlockShape[1]); + const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor); + const arm_compute::Status aclStatus = arm_compute::NEBatchToSpaceLayer::validate(&aclInputInfo, blockWidth, blockHeight, - &aclOutputInfo); + &aclOutputInfo, + cropInfo); return aclStatus; } @@ -60,8 +63,10 @@ NeonBatchToSpaceNdWorkload::NeonBatchToSpaceNdWorkload(const BatchToSpaceNdQueue int32_t blockHeight = armnn::numeric_cast(descriptor.m_Parameters.m_BlockShape[0]); int32_t blockWidth = armnn::numeric_cast(descriptor.m_Parameters.m_BlockShape[1]); + const arm_compute::CropInfo cropInfo = BuildArmComputeCropInfo(descriptor.m_Parameters); + m_Layer.reset(new arm_compute::NEBatchToSpaceLayer()); - m_Layer->configure(&input, blockWidth, blockHeight, &output); + m_Layer->configure(&input, blockWidth, blockHeight, &output, cropInfo); m_Layer->prepare(); } -- cgit v1.2.1