From e52a3000d2c13bc1b66ca66b3d12b6b836982394 Mon Sep 17 00:00:00 2001 From: Gian Marco Iodice Date: Wed, 11 Apr 2018 15:59:10 +0100 Subject: COMPMID-1026 - Add support for 4x4 output tile in CLWinogradConvolutionLayer The performance achieved can be found at the following confluence page: https://confluence.arm.com/display/MLENG/GEMM-based+convolution+vs+Winograd-based+convolution+on+OpenCL Change-Id: I4b690cfdd4eb4ff0cd17b14fdd49ccaa1d1dc85c Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/127729 Tested-by: Jenkins Reviewed-by: Georgios Pinitas --- arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h | 6 ++---- arm_compute/core/CL/kernels/CLWinogradInputTransformKernel.h | 6 ++---- arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h | 10 ++++------ 3 files changed, 8 insertions(+), 14 deletions(-) (limited to 'arm_compute/core/CL') diff --git a/arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h b/arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h index 7115710d59..828e2e521a 100644 --- a/arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h +++ b/arm_compute/core/CL/kernels/CLWinogradFilterTransformKernel.h @@ -49,8 +49,7 @@ public: /** Set the input and output tensor. * * @note Winograd filter transform supports the following configurations: - * Output tile size: 2x2, 4x4 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * * @param[in] input Source tensor. The input is a 4D tensor with dimensions [kernel_x, kernel_y, IFM, OFM] (NCHW data layout). Data types supported: F32. @@ -61,8 +60,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLWinogradFilterTransformKernel * * @note Winograd filter transform supports the following configurations: - * Output tile size: 2x2, 4x4 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * * @param[in] input Source tensor. The input is a 4D tensor with dimensions [kernel_x, kernel_y, IFM, OFM] (NCHW data layout). Data types supported: F32. diff --git a/arm_compute/core/CL/kernels/CLWinogradInputTransformKernel.h b/arm_compute/core/CL/kernels/CLWinogradInputTransformKernel.h index 2d1eadf3cf..b92ff2f60c 100644 --- a/arm_compute/core/CL/kernels/CLWinogradInputTransformKernel.h +++ b/arm_compute/core/CL/kernels/CLWinogradInputTransformKernel.h @@ -47,8 +47,7 @@ public: /** Set the input and output of the kernel. * * @note Winograd input transform supports the following configurations: - * Output tile size: 2x2 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * * @param[in] input The input tensor to transform. Data types supported: F32 @@ -59,8 +58,7 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLWinogradInputTransformKernel * * @note Winograd input transform supports the following configurations: - * Output tile size: 2x2 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * * @param[in] input The input tensor to transform. Data types supported: F32 diff --git a/arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h b/arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h index b0d0bbeeaa..5e64a82e48 100644 --- a/arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h +++ b/arm_compute/core/CL/kernels/CLWinogradOutputTransformKernel.h @@ -49,11 +49,10 @@ public: /** Set the input and output tensor. * * @note Winograd output transform supports the following configurations: - * Output tile size: 2x2 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * - * @param[in] input Source tensor with shape [C, N, 16, batches]. Data types supported: F32. + * @param[in] input Source tensor with shape [C, N, K, batches]. Data types supported: F32. * @param[in] bias Biases tensor. Shared biases supported. Biases are 1D tensor with dimensions [OFM]. It can be a nullptr. Data type supported: as @p input * @param[out] output The output tensor. The shape for this tensor can be calculated using the utility function @p compute_winograd_output_transform_shape. Data types supported: Same as @p input * @param[in] winograd_info Contains Winograd's information described in @ref WinogradInfo @@ -62,11 +61,10 @@ public: /** Static function to check if given info will lead to a valid configuration of @ref CLWinogradOutputTransformKernel * * @note Winograd output transform supports the following configurations: - * Output tile size: 2x2 - * Kernel size: 3x3 + * F(output tile, kernel size):F(2x2, 3x3), F(4x4, 3x3), F(4x4, 5x5) * Strides: only unit strides * - * @param[in] input Source tensor with shape [C, N, 16, batches]. Data types supported: F32. + * @param[in] input Source tensor with shape [C, N, K, batches]. Data types supported: F32. * @param[in] bias Biases tensor. Shared biases supported. Biases are 1D tensor with dimensions [OFM]. It can be a nullptr. Data type supported: as @p input * @param[out] output The output tensor. The shape for this tensor can be calculated using the utility function @p compute_winograd_output_transform_shape. Data types supported: Same as @p input * @param[in] winograd_info Contains Winograd's information described in @ref WinogradInfo -- cgit v1.2.1