diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2018-05-08 16:36:52 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:51:17 +0000 |
commit | 4497e8170793208aa0ccc409de72ad9f5c8a56ee (patch) | |
tree | b2a1520075143f002f81e9574bc7eb48d75cc3d1 | |
parent | e043767d068da389308507011d944e6db9e4d676 (diff) | |
download | ComputeLibrary-4497e8170793208aa0ccc409de72ad9f5c8a56ee.tar.gz |
COMPMID-1123 - Enabling Winograd 2x2,3x3 and Winograd 4x4,3x3 without fast_math
Change-Id: I5ef3db4f84428f7980b97cf8e2c580f78ce021f8
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/130447
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Giorgio Arena <giorgio.arena@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
-rw-r--r-- | src/runtime/CL/functions/CLWinogradConvolutionLayer.cpp | 9 | ||||
-rw-r--r-- | tests/validation/CL/Winograd.cpp | 28 |
2 files changed, 9 insertions, 28 deletions
diff --git a/src/runtime/CL/functions/CLWinogradConvolutionLayer.cpp b/src/runtime/CL/functions/CLWinogradConvolutionLayer.cpp index 025a16b4fb..49753ad080 100644 --- a/src/runtime/CL/functions/CLWinogradConvolutionLayer.cpp +++ b/src/runtime/CL/functions/CLWinogradConvolutionLayer.cpp @@ -33,13 +33,13 @@ using namespace arm_compute; namespace { -Size2D winograd_output_tile(const Size2D &input_dims, const Size2D &kernel_dims, bool enable_fast_math) +Size2D winograd_output_tile(const Size2D &input_dims, const Size2D &kernel_dims) { Size2D output_tile = Size2D{}; if(kernel_dims == Size2D(3U, 3U)) { - output_tile = ((input_dims.width <= 4 && input_dims.height <= 4) || !enable_fast_math) ? Size2D(2U, 2U) : Size2D(4U, 4U); + output_tile = (input_dims.width <= 4 && input_dims.height <= 4) ? Size2D(2U, 2U) : Size2D(4U, 4U); } else if(kernel_dims == Size2D(5U, 5U)) { @@ -56,7 +56,6 @@ bool check_support_fast_math(const Size2D &output_tile, const Size2D &kernel_siz std::vector<WinogradConfiguration> fast_math_winograd = { - WinogradConfiguration(std::pair<int, int>(4, 4), std::pair<int, int>(3, 3)), WinogradConfiguration(std::pair<int, int>(4, 4), std::pair<int, int>(5, 5)) }; @@ -83,7 +82,7 @@ void CLWinogradConvolutionLayer::configure(ICLTensor *input, const ICLTensor *we // Input shape, kernel size and output tile const Size2D input_dims = Size2D(input->info()->tensor_shape()[idx_width], input->info()->tensor_shape()[idx_height]); const Size2D kernel_size = Size2D(weights->info()->tensor_shape()[idx_width], weights->info()->tensor_shape()[idx_height]); - const Size2D output_tile = winograd_output_tile(input_dims, kernel_size, enable_fast_math); + const Size2D output_tile = winograd_output_tile(input_dims, kernel_size); // Check if the Winograd configuration requires fast math if(!enable_fast_math) @@ -140,7 +139,7 @@ Status CLWinogradConvolutionLayer::validate(const ITensorInfo *input, const ITen // Input shape, kernel size and output tile const Size2D input_dims = Size2D(input->tensor_shape()[idx_width], input->tensor_shape()[idx_height]); const Size2D kernel_size = Size2D(weights->tensor_shape()[idx_width], weights->tensor_shape()[idx_height]); - const Size2D output_tile = winograd_output_tile(input_dims, kernel_size, enable_fast_math); + const Size2D output_tile = winograd_output_tile(input_dims, kernel_size); // Check if the Winograd configuration requires fast math if(!enable_fast_math) diff --git a/tests/validation/CL/Winograd.cpp b/tests/validation/CL/Winograd.cpp index 91cb910ba1..a61dd3f8f4 100644 --- a/tests/validation/CL/Winograd.cpp +++ b/tests/validation/CL/Winograd.cpp @@ -52,7 +52,7 @@ namespace validation namespace { constexpr AbsoluteTolerance<float> tolerance_f32(0.001f); -constexpr AbsoluteTolerance<float> tolerance_fast_math_f32(0.1f); +constexpr AbsoluteTolerance<float> tolerance_convolution_layer_f32(0.1f); } // namespace using namespace arm_compute::misc::shape_calculator; @@ -364,23 +364,6 @@ DATA_TEST_CASE(Validate, framework::DatasetMode::ALL, zip(zip(zip(zip(zip( // clang-format on // *INDENT-ON* -using CLWinogradConvolutionLayerFixture = WinogradConvolutionLayerValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>; -FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFixture, framework::DatasetMode::PRECOMMIT, combine(combine(datasets::SmallWinogradConvolutionLayer3x3Dataset(), - framework::dataset::make("DataType", { DataType::F32 })), - framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) -{ - // Validate output - validate(CLAccessor(_target), _reference, tolerance_f32); -} - -FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFixture, framework::DatasetMode::NIGHTLY, combine(combine(datasets::LargeWinogradConvolutionLayer3x3Dataset(), - framework::dataset::make("DataType", { DataType::F32 })), - framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) -{ - // Validate output - validate(CLAccessor(_target), _reference, tolerance_f32); -} -TEST_SUITE(EnableFastMath) using CLWinogradConvolutionLayerFastMathFixture = WinogradConvolutionLayerFastMathValidationFixture<CLTensor, CLAccessor, CLWinogradConvolutionLayer, float>; TEST_SUITE(Conv3x3) FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::PRECOMMIT, @@ -389,7 +372,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, fram framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) { // Validate output - validate(CLAccessor(_target), _reference, tolerance_fast_math_f32); + validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32); } FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY, @@ -398,7 +381,7 @@ FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, fram framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) { // Validate output - validate(CLAccessor(_target), _reference, tolerance_fast_math_f32); + validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32); } TEST_SUITE_END() // Conv3x3 @@ -409,7 +392,7 @@ FIXTURE_DATA_TEST_CASE(RunSmall, CLWinogradConvolutionLayerFastMathFixture, fram framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) { // Validate output - validate(CLAccessor(_target), _reference, tolerance_fast_math_f32); + validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32); } FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, framework::DatasetMode::NIGHTLY, @@ -418,11 +401,10 @@ FIXTURE_DATA_TEST_CASE(RunLarge, CLWinogradConvolutionLayerFastMathFixture, fram framework::dataset::make("ActivationLayerInfo", { ActivationLayerInfo() }))) { // Validate output - validate(CLAccessor(_target), _reference, tolerance_fast_math_f32); + validate(CLAccessor(_target), _reference, tolerance_convolution_layer_f32); } TEST_SUITE_END() // Conv5x5 -TEST_SUITE_END() // EnableFastMath TEST_SUITE_END() // ConvolutionLayer TEST_SUITE_END() // Winograd |