From a3600ba71978225e4d21399fb781d4850f2bb25f Mon Sep 17 00:00:00 2001 From: Sadik Armagan Date: Thu, 10 Oct 2019 10:43:20 +0100 Subject: IVGCVSW-3967 Avg_Pooling2d Fails on CL NHWC FP16 * Enable fp_mixed_precision flag for the failing test case Signed-off-by: Sadik Armagan Change-Id: If13552165eb6598a84d213b82847b56a8c5f2783 --- src/backends/cl/workloads/ClPooling2dWorkload.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/backends/cl/workloads') diff --git a/src/backends/cl/workloads/ClPooling2dWorkload.cpp b/src/backends/cl/workloads/ClPooling2dWorkload.cpp index 607bc58f38..bf899977d6 100644 --- a/src/backends/cl/workloads/ClPooling2dWorkload.cpp +++ b/src/backends/cl/workloads/ClPooling2dWorkload.cpp @@ -40,7 +40,20 @@ ClPooling2dWorkload::ClPooling2dWorkload( input.info()->set_data_layout(aclDataLayout); output.info()->set_data_layout(aclDataLayout); - arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(m_Data.m_Parameters); + // flag to use wider accumulators (32 bit instead of 16 for FP16) to improve accuracy + // enable fp_mixed_precision for the the FP16 cases that + // accumulation reaches a limit beyond which there is no more increment of the value + bool fpMixedPrecision = false; + if (input.info()->data_type() == arm_compute::DataType::F16 + && m_Data.m_Parameters.m_PoolType == PoolingAlgorithm::Average + && m_Data.m_Parameters.m_PoolWidth >= 100 + && input.info()->dimension(3) >= 5 + && input.info()->dimension(2) * input.info()->dimension(1) >= 3000) + { + fpMixedPrecision = true; + } + + arm_compute::PoolingLayerInfo layerInfo = BuildArmComputePoolingLayerInfo(m_Data.m_Parameters, fpMixedPrecision); // Run the layer. m_PoolingLayer.configure(&input, &output, layerInfo); -- cgit v1.2.1