From ef5aac6c1e119e8db16a33332b5551829f409786 Mon Sep 17 00:00:00 2001 From: Freddie Liardet Date: Thu, 10 Jun 2021 16:45:58 +0100 Subject: Add FP16 support to CLRemap Add FP16 support to CLRemap when data layout is NHWC. Add relevant tests for FP16 and validation. Update NERemap function level to be consistent with CLRemap. Add depreciation notice for uint_8 only function level methods. Resolves: COMPMID-4335 Signed-off-by: Freddie Liardet Change-Id: If05f06801aef7a169b73ff1ebe760a42f11ca05c Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5816 Reviewed-by: Michele Di Giorgio Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- arm_compute/runtime/CL/functions/CLRemap.h | 47 +++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) (limited to 'arm_compute/runtime/CL/functions/CLRemap.h') diff --git a/arm_compute/runtime/CL/functions/CLRemap.h b/arm_compute/runtime/CL/functions/CLRemap.h index f69b045c9b..8322f7a8a9 100644 --- a/arm_compute/runtime/CL/functions/CLRemap.h +++ b/arm_compute/runtime/CL/functions/CLRemap.h @@ -24,6 +24,7 @@ #ifndef ARM_COMPUTE_CLREMAP_H #define ARM_COMPUTE_CLREMAP_H +#include "arm_compute/core/PixelValue.h" #include "arm_compute/core/Types.h" #include "arm_compute/runtime/CL/ICLSimpleFunction.h" @@ -33,6 +34,7 @@ namespace arm_compute { class CLCompileContext; class ICLTensor; +class ITensorInfo; /** Basic function to execute remap. This function calls the following OpenCL kernels: * @@ -51,8 +53,10 @@ public: * Valid data type configurations: * |src0 |src1 |src2 |dst | * |:------|:------|:------|:------| - * |U8 |F32 |F32 |U 8 | + * |U8 |F32 |F32 |U8 | + * |F16 |F32 |F32 |F16 | * + * @param[in] compile_context The compile context to be used. * @param[in,out] input Source tensor. Data types supported: U8. (Written to only for @p border_mode != UNDEFINED) * @param[in] map_x Map for X coords. Data types supported: F32. * @param[in] map_y Map for Y coords. Data types supported: F32. @@ -61,23 +65,58 @@ public: * @param[in] border_mode Border mode to use on the input tensor. Only CONSTANT and UNDEFINED are supported. * @param[in] constant_border_value (Optional) Constant value to use for borders if border_mode is set to CONSTANT. * + * @deprecated This function is deprecated and is intended to be removed in 22.02 release + * + */ + ARM_COMPUTE_DEPRECATED_REL(22.02) + void configure(const CLCompileContext &compile_context, ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, + InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value = 0); + + /** Initialise the function's sources, destination, interpolation policy and border mode. + * + * Similar to @ref CLRemap::configure(const CLCompileContext &compile_context, ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, + InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value) + * + * @deprecated This function is deprecated and is intended to be removed in 22.02 release + * */ + ARM_COMPUTE_DEPRECATED_REL(22.02) void configure(ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value = 0); + /** Initialise the function's sources, destination, interpolation policy and border mode. * * @param[in] compile_context The compile context to be used. - * @param[in,out] input Source tensor. Data types supported: U8. (Written to only for @p border_mode != UNDEFINED) + * @param[in,out] input Source tensor. Data types supported: U8,(or F16 when layout is NHWC). (Written to only for @p border_mode != UNDEFINED) * @param[in] map_x Map for X coords. Data types supported: F32. * @param[in] map_y Map for Y coords. Data types supported: F32. - * @param[out] output Output tensor. Data types supported: U8. + * @param[out] output Output tensor. Data types supported: Same as @p input. * @param[in] policy Interpolation policy to use. Only NEAREST and BILINEAR are supported. * @param[in] border_mode Border mode to use on the input tensor. Only CONSTANT and UNDEFINED are supported. * @param[in] constant_border_value (Optional) Constant value to use for borders if border_mode is set to CONSTANT. * */ void configure(const CLCompileContext &compile_context, ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, - InterpolationPolicy policy, BorderMode border_mode, uint8_t constant_border_value = 0); + InterpolationPolicy policy, BorderMode border_mode, PixelValue constant_border_value = PixelValue{}); + + /** Initialise the function's sources, destination, interpolation policy and border mode. + * + * Similar to @ref CLRemap::configure(const CLCompileContext &compile_context, ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, + InterpolationPolicy policy, BorderMode border_mode, PixelValue constant_border_value) + * + */ + void configure(ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, + InterpolationPolicy policy, BorderMode border_mode, PixelValue constant_border_value = PixelValue{}); + + /** Checks if the kernel's input, output and border mode will lead to a valid configuration of @ref CLRemap + * + * Similar to @ref CLRemap::configure(const CLCompileContext &compile_context, ICLTensor *input, const ICLTensor *map_x, const ICLTensor *map_y, ICLTensor *output, + InterpolationPolicy policy, BorderMode border_mode, PixelValue constant_border_value) + * + * @return a Status + */ + static Status validate(const ITensorInfo *input, const ITensorInfo *map_x, const ITensorInfo *map_y, const ITensorInfo *output, + const InterpolationPolicy policy, const BorderMode border_mode, PixelValue constant_border_value = PixelValue{}); }; } #endif /*ARM_COMPUTE_CLREMAP_H */ -- cgit v1.2.1