From 9373c8b2650f34b2804d3685588bad8e408ebe63 Mon Sep 17 00:00:00 2001 From: Giorgio Arena Date: Wed, 11 Apr 2018 19:07:17 +0100 Subject: COMPMID-1037 Add support for F(4x4, 5x5) in CLWinogradFilterTransformKernel Change-Id: I6dd639bf5df9bc0c133996f75bdee767f70a6cfb Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/127469 Tested-by: Jenkins Reviewed-by: Gian Marco Iodice --- tests/validation/reference/Winograd.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'tests/validation/reference/Winograd.cpp') diff --git a/tests/validation/reference/Winograd.cpp b/tests/validation/reference/Winograd.cpp index 604e25214b..757a06d847 100644 --- a/tests/validation/reference/Winograd.cpp +++ b/tests/validation/reference/Winograd.cpp @@ -43,9 +43,6 @@ namespace template void initialize_matrix_transform(SimpleTensor &src, const Size2D &output_tile_size, const Size2D &kernel_size, WinogradTransformType winograd_transform_type) { - ARM_COMPUTE_ERROR_ON((output_tile_size != Size2D(2U, 2U)) && (output_tile_size != Size2D(4U, 4U))); - ARM_COMPUTE_ERROR_ON(kernel_size != Size2D(3U, 3U)); - // Winograd input transform matrices static const float imatrix2x2_3x3[] = { @@ -86,6 +83,19 @@ void initialize_matrix_transform(SimpleTensor &src, const Size2D &output_tile 0.0f, 0.0f, 1.0f }; + static const float fmatrix4x4_5x5[] = + { + 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + -2.0f / 9.0f, -2.0f / 9.0f, -2.0f / 9.0f, -2.0f / 9.0f, -2.0f / 9.0f, + -2.0f / 9.0f, 2.0f / 9.0f, -2.0f / 9.0f, 2.0f / 9.0f, -2.0f / 9.0f, + 1.0f / 90.0f, 1.0f / 45.0f, 2.0f / 45.0f, 4.0f / 45.0f, 8.0f / 45.0f, + 1.0f / 90.0f, -1.0f / 45.0f, 2.0f / 45.0f, -4.0f / 45.0f, 8.0f / 45.0f, + 4.0f / 45.0f, 2.0f / 45.0f, 1.0f / 45.0f, 1.0f / 90.0f, 1.0f / 180.0f, + 4.0f / 45.0f, -2.0f / 45.0f, 1.0f / 45.0f, -1.0f / 90.0f, 1.0f / 180.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 1.0f + + }; + // ------------------------------------------ // Winograd output transform matrices @@ -114,11 +124,12 @@ void initialize_matrix_transform(SimpleTensor &src, const Size2D &output_tile { WinogradKey(std::pair(4, 4), std::pair(3, 3), WinogradTransformType::INPUT), imatrix4x4_3x3 }, { WinogradKey(std::pair(2, 2), std::pair(3, 3), WinogradTransformType::FILTER), fmatrix2x2_3x3 }, { WinogradKey(std::pair(4, 4), std::pair(3, 3), WinogradTransformType::FILTER), fmatrix4x4_3x3 }, + { WinogradKey(std::pair(4, 4), std::pair(5, 5), WinogradTransformType::FILTER), fmatrix4x4_5x5 }, { WinogradKey(std::pair(2, 2), std::pair(3, 3), WinogradTransformType::OUTPUT), omatrix2x2_3x3 }, { WinogradKey(std::pair(4, 4), std::pair(3, 3), WinogradTransformType::OUTPUT), omatrix4x4_3x3 }, }; - // Find input matrix transform + // Find transformation matrix std::map::iterator it; it = matrix_map.find(WinogradKey(std::pair(output_tile_size.width, output_tile_size.height), -- cgit v1.2.1