From b6de7a1444c09c0eb44c84a923c45c041b1f6092 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Tue, 18 Jul 2023 12:03:41 +0100 Subject: IVGCVSW-7830 Clean up * Follow up review to clean up whitespace and copyright errors mentioned in https://review.mlplatform.org/c/ml/armnn/+/9885 * Added BinaryElementwiseOperation to .dot files * Refactored ConnectedToSplitterWithMoreThan4Dims function to more generally useful ConnectedToLayerType function Signed-off-by: Mike Kelly Change-Id: I0e3d0895888f3a3f0a9758ce30bc031aba50812b --- src/armnn/Network.cpp | 2 +- src/armnn/SerializeLayerParameters.cpp | 6 ++++++ src/armnn/SerializeLayerParameters.hpp | 5 +++++ src/backends/backendsCommon/OptimizationViews.cpp | 2 +- src/backends/backendsCommon/SubgraphUtils.hpp | 15 +++++++++------ .../backendsCommon/test/OptimizedNetworkTests.cpp | 4 ++-- src/backends/cl/backend.mk | 2 +- src/backends/neon/CMakeLists.txt | 2 +- src/backends/neon/NeonBackend.cpp | 2 +- src/backends/neon/NeonTensorHandle.cpp | 6 +++--- src/backends/neon/backend.mk | 2 +- src/backends/neon/workloads/CMakeLists.txt | 2 +- 12 files changed, 32 insertions(+), 18 deletions(-) diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 010fa0076b..27e91ae39c 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -1322,7 +1322,7 @@ OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl* optNetObjPtr, parentOut->Disconnect(inputSlot); for (unsigned int out = deletedLayer->GetOutputSlot(in -1).GetNumConnections(); out > 0; --out) { - InputSlot *childIn = deletedLayer->GetOutputSlot(in - 1).GetConnection(out -1); + InputSlot* childIn = deletedLayer->GetOutputSlot(in - 1).GetConnection(out -1); deletedLayer->GetOutputSlot(in - 1).Disconnect(*childIn); parentOut->Connect(*childIn); } diff --git a/src/armnn/SerializeLayerParameters.cpp b/src/armnn/SerializeLayerParameters.cpp index c318d5273f..67520a72d6 100644 --- a/src/armnn/SerializeLayerParameters.cpp +++ b/src/armnn/SerializeLayerParameters.cpp @@ -187,6 +187,12 @@ void StringifyLayerParameters::Serialize( fn("DataLayout", GetDataLayoutName(desc.m_DataLayout)); } +void StringifyLayerParameters::Serialize(ParameterStringifyFunction& fn, + const ElementwiseBinaryDescriptor& desc) +{ + fn("BinaryOperation", GetBinaryOperationAsCString(desc.m_Operation)); +} + void StringifyLayerParameters::Serialize(ParameterStringifyFunction& fn, const ElementwiseUnaryDescriptor& desc) { diff --git a/src/armnn/SerializeLayerParameters.hpp b/src/armnn/SerializeLayerParameters.hpp index b786c53882..b90f9d85e8 100644 --- a/src/armnn/SerializeLayerParameters.hpp +++ b/src/armnn/SerializeLayerParameters.hpp @@ -75,6 +75,11 @@ template <> struct StringifyLayerParameters static void Serialize(ParameterStringifyFunction& fn, const DepthwiseConvolution2dDescriptor& desc); }; +template <> struct StringifyLayerParameters +{ + static void Serialize(ParameterStringifyFunction& fn, const ElementwiseBinaryDescriptor& desc); +}; + template <> struct StringifyLayerParameters { static void Serialize(ParameterStringifyFunction& fn, const ElementwiseUnaryDescriptor& desc); diff --git a/src/backends/backendsCommon/OptimizationViews.cpp b/src/backends/backendsCommon/OptimizationViews.cpp index a358f88520..c9a8c7dde5 100644 --- a/src/backends/backendsCommon/OptimizationViews.cpp +++ b/src/backends/backendsCommon/OptimizationViews.cpp @@ -64,7 +64,7 @@ bool OptimizationViews::Validate(const armnn::SubgraphView& originalSubgraph) co for (auto& substitution : m_SuccesfulOptimizations) { bool validSubstitution = true; - const SubgraphView &replacement = substitution.m_ReplacementSubgraph; + const SubgraphView& replacement = substitution.m_ReplacementSubgraph; const SubgraphView& old = substitution.m_SubstitutableSubgraph; validSubstitution &= replacement.GetIInputSlots().size() == old.GetIInputSlots().size(); validSubstitution &= replacement.GetIOutputSlots().size() == old.GetIOutputSlots().size(); diff --git a/src/backends/backendsCommon/SubgraphUtils.hpp b/src/backends/backendsCommon/SubgraphUtils.hpp index 823da76f29..9f2cdba6ef 100644 --- a/src/backends/backendsCommon/SubgraphUtils.hpp +++ b/src/backends/backendsCommon/SubgraphUtils.hpp @@ -33,7 +33,7 @@ public: { case armnn::LayerType::BatchMatMul: { - auto desc = static_cast(descriptor); + auto desc = static_cast(descriptor); m_Result = desc.m_DataLayoutX == DataLayout::NCHW || desc.m_DataLayoutY == DataLayout::NCHW; break; } @@ -219,12 +219,14 @@ inline bool ConnectedToLayerWithNCHW(Layer* baseLayer) return false; } -/// Checks if the Layer is connected to a Splitter Layer through a Tensor that has more than 4 dimensions. -inline bool ConnectedToSplitterWithMoreThan4Dims(Layer* baseLayer) +/// Checks the Layer's Connections to see if it's connected to a Layer with the provided layerType. If dimSize is +/// provided will also check if the connecting Tensor has more than that number of dimensions +inline bool ConnectedToLayerType(Layer* baseLayer, LayerType layerType, unsigned int dimSize = 0) { Layer& parentLayer = baseLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetOwningLayer(); - TensorInfo parentTensorInfo = baseLayer->GetInputSlot(0).GetConnectedOutputSlot()->GetTensorInfo(); - if (parentTensorInfo.GetNumDimensions() > 4 && parentLayer.GetType() == LayerType::Splitter) + TensorInfo parentTensorInfo = baseLayer->GetInputSlot(0).GetTensorInfo(); + + if (parentTensorInfo.GetNumDimensions() > dimSize && parentLayer.GetType() == layerType) { return true; } @@ -232,7 +234,8 @@ inline bool ConnectedToSplitterWithMoreThan4Dims(Layer* baseLayer) { Layer& nextLayer = baseLayer->GetOutputSlot(0).GetConnection(i)->GetOwningLayer(); TensorInfo nextTensorInfo = baseLayer->GetOutputSlot(0).GetConnection(i)->GetTensorInfo(); - if (nextTensorInfo.GetNumDimensions() > 4 && nextLayer.GetType() == LayerType::Splitter) + + if (nextTensorInfo.GetNumDimensions() > dimSize && nextLayer.GetType() == layerType) { return true; } diff --git a/src/backends/backendsCommon/test/OptimizedNetworkTests.cpp b/src/backends/backendsCommon/test/OptimizedNetworkTests.cpp index ce1eea4194..d8e8f60cd8 100644 --- a/src/backends/backendsCommon/test/OptimizedNetworkTests.cpp +++ b/src/backends/backendsCommon/test/OptimizedNetworkTests.cpp @@ -54,8 +54,8 @@ TEST_CASE("SerializeToDot") " edge [fontsize=8 fontcolor=\"blue\" fontname=\"arial-bold\"];\n" " " << inputId << " [label=\"{Input|Guid : " << inputId << "\\lLayerType : Input\\l" "BackendID : CpuRef\\l}\"];\n" - " " << addId << " [label=\"{ElementwiseBinary|Guid : " << addId << "\\lLayerType : ElementwiseBinary\\l" - "BackendID : CpuRef\\l}\"];\n" + " " << addId << " [label=\"{ElementwiseBinary|BinaryOperation : Add\\lGuid : " << addId << + "\\lLayerType : ElementwiseBinary\\lBackendID : CpuRef\\l}\"];\n" " " << outputId << " [label=\"{Output|Guid : " << outputId << "\\lLayerType : Output\\l" "BackendID : CpuRef\\l}\"];\n" " " << inputId << " -> " << addId << " [label=< [4] >];\n" diff --git a/src/backends/cl/backend.mk b/src/backends/cl/backend.mk index f4b9fac740..5ceab700e4 100644 --- a/src/backends/cl/backend.mk +++ b/src/backends/cl/backend.mk @@ -1,5 +1,5 @@ # -# Copyright © 2017,2023 ARM Ltd and Contributors. All rights reserved. +# Copyright © 2017-2023 ARM Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT # diff --git a/src/backends/neon/CMakeLists.txt b/src/backends/neon/CMakeLists.txt index 5934221ec1..1c077731c4 100644 --- a/src/backends/neon/CMakeLists.txt +++ b/src/backends/neon/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright © 2017 Arm Ltd. All rights reserved. +# Copyright © 2017-2020,2022-2023 Arm Ltd. All rights reserved. # SPDX-License-Identifier: MIT # diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 60e25672ae..5fd1202659 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -518,7 +518,7 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph } // Cannot remove a Reshape if it's connected to a SplitterLayer through a Tensor that has more than // 4 dimensions - if (ConnectedToSplitterWithMoreThan4Dims(baseLayer)) + if (ConnectedToLayerType(baseLayer, LayerType::Splitter, 4)) { continue; } diff --git a/src/backends/neon/NeonTensorHandle.cpp b/src/backends/neon/NeonTensorHandle.cpp index 819805aa59..b1ab946324 100644 --- a/src/backends/neon/NeonTensorHandle.cpp +++ b/src/backends/neon/NeonTensorHandle.cpp @@ -29,17 +29,17 @@ NeonTensorDecorator::NeonTensorDecorator(arm_compute::ITensor *parent, const Ten m_Original = parent; } -arm_compute::ITensorInfo *NeonTensorDecorator::info() const +arm_compute::ITensorInfo* NeonTensorDecorator::info() const { return &m_TensorInfo; } -arm_compute::ITensorInfo *NeonTensorDecorator::info() +arm_compute::ITensorInfo* NeonTensorDecorator::info() { return &m_TensorInfo; } -uint8_t *NeonTensorDecorator::buffer() const +uint8_t* NeonTensorDecorator::buffer() const { return m_Original->buffer(); } diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk index 4150845f58..0e99c683cf 100644 --- a/src/backends/neon/backend.mk +++ b/src/backends/neon/backend.mk @@ -1,5 +1,5 @@ # -# Copyright © 2017,2023 ARM Ltd and Contributors. All rights reserved. +# Copyright © 2017-2023 ARM Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT # diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt index f3f12842c1..53f2be750a 100644 --- a/src/backends/neon/workloads/CMakeLists.txt +++ b/src/backends/neon/workloads/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright © 2017,2023 Arm Ltd and Contributors. All rights reserved. +# Copyright © 2017-2020,2022-2023 Arm Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT # -- cgit v1.2.1