[Libclc-dev] [PATCH v2 1/1] rootn: Flush denormals if not supported.

Jan Vesely via Libclc-dev libclc-dev at lists.llvm.org
Wed May 2 18:51:03 PDT 2018


On Wed, 2018-05-02 at 07:03 -0500, Aaron Watry via Libclc-dev wrote:
> Am I being dense or just lucky (device supports denormals?)..  This
> already passed on my RX580 before I applied your patch.

IIRC, the problem is not with denormal support (unless you enabled it
explicitly), but that 'indx' variable was computed incorrectly. My
guess would be that one of the earlier operations (mad?) improved wrt
ULP precision (rootn still failed on my carrizo).
Anyway, flushing denormals just hides the issue. it'll probably still
fail if run with denormals enabled, but fixing denormal support is a
story for another day.

> I'm currently rebuilding new newer llvm on my r600 box that hopefully
> won't segfault when running rootn to test there.

thanks. It works OK on my turks when math_bruteforce is run in single
thread mode.

Jan

> 
> --Aaron
> 
> On Mon, Apr 30, 2018 at 1:05 PM, Jan Vesely via Libclc-dev
> <libclc-dev at lists.llvm.org> wrote:
> > On Tue, 2018-04-24 at 12:31 -0400, Jan Vesely wrote:
> > > It's OK to either flush to 0 or return denormal result if the device
> > > does not support denormals. See sec 7.2 and 7.5.3 of OCL specs
> > > 
> > > v2: Use 0.0f explicitly intead of relying on GPU to flush it.
> > > 
> > > Fixes CTS on carrizo and turks
> > > Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
> > > ---
> > > This removes the need for the second patch
> > >  generic/lib/math/clc_rootn.cl | 11 +----------
> > >  1 file changed, 1 insertion(+), 10 deletions(-)
> > > 
> > > diff --git a/generic/lib/math/clc_rootn.cl b/generic/lib/math/clc_rootn.cl
> > > index d7ee185..0a2c98d 100644
> > > --- a/generic/lib/math/clc_rootn.cl
> > > +++ b/generic/lib/math/clc_rootn.cl
> > > @@ -170,16 +170,7 @@ _CLC_DEF _CLC_OVERLOAD float __clc_rootn(float x, int ny)
> > >      tv = USE_TABLE(exp_tbl_ep, j);
> > > 
> > >      float expylogx = mad(tv.s0, poly, mad(tv.s1, poly, tv.s1)) + tv.s0;
> > > -    float sexpylogx;
> > > -    if (!__clc_fp32_subnormals_supported()) {
> > > -             int explg = ((as_uint(expylogx) & EXPBITS_SP32 >> 23) - 127);
> > > -             m = (23-(m + 149)) == 0 ? 1: m;
> > > -             uint mantissa =  ((as_uint(expylogx) & MANTBITS_SP32)|IMPBIT_SP32) >> (23-(m + 149));
> > > -             sexpylogx = as_float(mantissa);
> > > -    } else {
> > > -             sexpylogx = expylogx * as_float(0x1 << (m + 149));
> > > -    }
> > > -
> > > +    float sexpylogx = __clc_fp32_subnormals_supported() ? expylogx * as_float(0x1 << (m + 149)) : 0.0f;
> > > 
> > >      float texpylogx = as_float(as_int(expylogx) + m2);
> > >      expylogx = m < -125 ? sexpylogx : texpylogx;
> > 
> > ping.
> > _______________________________________________
> > Libclc-dev mailing list
> > Libclc-dev at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev
> > 
> 
> _______________________________________________
> Libclc-dev mailing list
> Libclc-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/libclc-dev

-- 
Jan Vesely <jan.vesely at rutgers.edu>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.llvm.org/pipermail/libclc-dev/attachments/20180502/ad5175be/attachment.sig>


More information about the Libclc-dev mailing list