[Beignet] [PATCH] GBE: fix error in the rootn fastpath function for some special input.
Song, Ruiling
ruiling.song at intel.com
Mon Sep 1 22:30:15 PDT 2014
The patch LGTM
-----Original Message-----
From: Beignet [mailto:beignet-bounces at lists.freedesktop.org] On Behalf Of Zhigang Gong
Sent: Tuesday, September 02, 2014 12:37 PM
To: Gong, Zhigang
Cc: beignet at lists.freedesktop.org
Subject: Re: [Beignet] [PATCH] GBE: fix error in the rootn fastpath function for some special input.
Ping for review.
On Fri, Aug 29, 2014 at 10:13:57AM +0800, Zhigang Gong wrote:
> The fastpath is to lose some accuracy but get fast speed. It is not to
> generate error result. The rootn has many special input and need to be
> taken care before we call the native pow directly.
> This patch fix all the pow related failures at the OpenCV 3.0 test
> suite.
>
> Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
> ---
> backend/src/ocl_stdlib.tmpl.h | 15 ++++++++++++---
> 1 file changed, 12 insertions(+), 3 deletions(-)
>
> diff --git a/backend/src/ocl_stdlib.tmpl.h
> b/backend/src/ocl_stdlib.tmpl.h index 01bcbef..2e37513 100755
> --- a/backend/src/ocl_stdlib.tmpl.h
> +++ b/backend/src/ocl_stdlib.tmpl.h
> @@ -3731,7 +3731,9 @@ INLINE_OVERLOADABLE float pown(float x, int n) {
> return 1;
> return powr(x, n);
> }
> -INLINE_OVERLOADABLE float rootn(float x, int n) {
> +
> +INLINE_OVERLOADABLE float internal_rootn(float x, int n, const bool
> +isFastpath) {
> float ax,re;
> int sign = 0;
> if( n == 0 )return NAN;
> @@ -3758,12 +3760,19 @@ INLINE_OVERLOADABLE float rootn(float x, int n) {
> ax = __gen_ocl_fabs(x);
> if(x <0.0f && (n&1))
> sign = 1;
> - re = __gen_ocl_internal_pow(ax,1.f/n);
> + if (isFastpath)
> + re = __gen_ocl_pow(ax,1.f/n);
> + else
> + re = __gen_ocl_internal_pow(ax,1.f/n);
> if(sign)
> re = -re;
> return re;
> }
>
> +INLINE_OVERLOADABLE float rootn(float x, int n) {
> + return internal_rootn(x, n, 0);
> +}
> +
>
> //////////////////////////////////////////////////////////////////////
> /////// // Geometric functions (see 6.11.5 of OCL 1.1 spec)
> //////////////////////////////////////////////////////////////////////
> /////// @@ -5082,7 +5091,7 @@ INLINE_OVERLOADABLE float
> __gen_ocl_internal_fastpath_remainder (float x, float
>
> INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_rootn(float x,
> int n) {
> - return __gen_ocl_pow(x, 1.f / n);
> + return internal_rootn(x, n, 1);
> }
>
> INLINE_OVERLOADABLE float __gen_ocl_internal_fastpath_sin (float x)
> --
> 1.8.3.2
>
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet
_______________________________________________
Beignet mailing list
Beignet at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/beignet
More information about the Beignet
mailing list