From 1ac690a12d4952acb8c06b41f0492ed47524b1f1 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Tue, 17 Nov 2020 11:41:38 +0000 Subject: MLCE-278-IVGCVSW-5530 FusedActivation issues * GetOverriddenDataType was returning incorrect quantization data * Optimized CpuAcc and GpuAcc SubGraphs fail validation on debug versions of ArmNN Signed-off-by: Mike Kelly Change-Id: Ie97935cc2af67bd9aeebc94b63dafa458bd1aa8c --- src/backends/cl/ClBackend.cpp | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) (limited to 'src/backends/cl') diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 57a5851650..80c7969e91 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -148,7 +148,16 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, auto it = subgraph.end(); bool isFastMathEnabled = false; + std::map untouched; + while (it != subgraph.begin()) + { + --it; + Layer& base = **it; + untouched.insert({base.GetGuid(), &base}); + } + + it = subgraph.end(); #if defined(ARMCOMPUTECL_ENABLED) IBackendInternal::IBackendSpecificModelContextPtr modelContextPtr = CreateBackendSpecificModelContext(modelOptions); @@ -161,7 +170,6 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, } } #endif - while (it != subgraph.begin()) { --it; @@ -199,9 +207,7 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, if (baseLayer->GetParameters().m_BiasEnabled) { - biases = GetOverriddenDataType(baseLayer->m_Bias->GetTensorInfo(), - GetOptionalBiasTypeFromWeightsType( - baseLayer->m_Weight->GetTensorInfo().GetDataType())); + biases = baseLayer->m_Bias->GetTensorInfo(); } arm_compute::Status status = ClConvolution2dWorkloadValidate( @@ -220,6 +226,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::DepthwiseConvolution2d) @@ -231,9 +239,7 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, if (baseLayer->GetParameters().m_BiasEnabled) { - biases = GetOverriddenDataType(baseLayer->m_Bias->GetTensorInfo(), - GetOptionalBiasTypeFromWeightsType( - baseLayer->m_Weight->GetTensorInfo().GetDataType())); + biases = baseLayer->m_Bias->GetTensorInfo(); } arm_compute::Status status = ClDepthwiseConvolutionWorkloadValidate( @@ -251,6 +257,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::FullyConnected) @@ -272,6 +280,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::BatchNormalization) @@ -302,6 +312,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, replacementLayer->m_Gamma = std::move(baseLayer->m_Gamma); replacementLayer->m_Mean = std::move(baseLayer->m_Mean); replacementLayer->m_Variance = std::move(baseLayer->m_Variance); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Addition) @@ -321,6 +333,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Division) @@ -340,6 +354,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Multiplication) @@ -359,6 +375,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } else if (base.GetType() == LayerType::Subtraction) @@ -378,6 +396,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, activationLayer, activationDesc, name); + untouched.erase(baseLayer->GetGuid()); + untouched.erase(activationLayer->GetGuid()); } } } @@ -386,11 +406,15 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, } } } - // end each optimization + if (optimizationViews.GetSubstitutions().empty()) { optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); } + else + { + ReportUntouchedLayers(optimizationViews, untouched); + } return optimizationViews; } -- cgit v1.2.1