I acknowledge the problems with lgamma/lgamma_r. It is indeed because of the 
polynomial reduction - while conformance passes the utests fail. 
I wasn't able to keep the lgamma/lgamma_r polynomial reduction and still pass 
utest. It looks like it is very sensitive and precision is at its limit with 
utest at default.

Since mad optimization are impacted by polynomial grade and most changes in 
math library are human error prone (I did several) and can be automated I have 
designed in Python a script to parse the math function and transform a + b * c 
expressions into mad(b, c, a) recursively. This should limit errors and allow 
adjustment of polynomial reduction easy.

I will post the new clean patchset + script (on mailing list) as soon as I 
finally tune polynomial reduction and mad so that all utest and conformance 
pass. With the automated script mad should be applied everywhere and 
performance should improve further.

-----Original Message-----
From: Song, Ruiling 
Sent: Friday, July 22, 2016 11:31 AM
To: Lupescu, Grigore <[email protected]>; [email protected]
Subject: RE: [Beignet] [PATCH 2/4] Backend: Optimization internal math, lower 
polynomials

Hi Grigore,

After applying the patchset. Looks like some utest failed.
These failure relate to gamma functions.
Ocl spec requires tgamma() should be < 16ulp.
Although ocl spec does not give out ulp for lgamma and lgamma_r.
I think if we can make it under 16ulp. That is acceptable.
Please help to take a look. It may relate to decreasing the polynomial grade.
The utest may be also not very correct, you can fix them.

builtin_lgamma_float()    [FAILED]
    Error: input_data1:3.140000e+00  -> gpu:8.260892e-01  cpu:8.261388e-01 
diff:4.959106e-05 expect:2.384186e-07

  at file 
/home/ruilings/workspace/beignet/utests/generated/builtin_lgamma_float.cpp, 
function builtin_lgamma_float, line 123
builtin_lgamma_float2()    [FAILED]
    Error: input_data1:3.140000e+00  -> gpu:8.260892e-01  cpu:8.261388e-01 
diff:4.959106e-05 expect:2.384186e-07

  at file 
/home/ruilings/workspace/beignet/utests/generated/builtin_lgamma_float2.cpp, 
function builtin_lgamma_float2, line 123
builtin_lgamma_float4()    [FAILED]
    Error: input_data1:3.140000e+00  -> gpu:8.260892e-01  cpu:8.261388e-01 
diff:4.959106e-05 expect:2.384186e-07

  at file 
/home/ruilings/workspace/beignet/utests/generated/builtin_lgamma_float4.cpp, 
function builtin_lgamma_float4, line 123
builtin_lgamma_float8()    [FAILED]
    Error: input_data1:3.140000e+00  -> gpu:8.260892e-01  cpu:8.261388e-01 
diff:4.959106e-05 expect:2.384186e-07

  at file 
/home/ruilings/workspace/beignet/utests/generated/builtin_lgamma_float8.cpp, 
function builtin_lgamma_float8, line 123
builtin_lgamma_float16()    [FAILED]
    Error: input_data1:3.140000e+00  -> gpu:8.260892e-01  cpu:8.261388e-01 
diff:4.959106e-05 expect:2.384186e-07

  at file 
/home/ruilings/workspace/beignet/utests/generated/builtin_lgamma_float16.cpp, 
function builtin_lgamma_float16, line 123
builtin_lgamma()0.094000 2.317156 2.316127
    [FAILED]
    Error: 0
  at file /home/ruilings/workspace/beignet/utests/builtin_lgamma.cpp, function 
builtin_lgamma, line 33
builtin_lgamma_r()0.094000 2.317156 2.316127
    [FAILED]
    Error: 0
  at file /home/ruilings/workspace/beignet/utests/builtin_lgamma_r.cpp, 
function builtin_lgamma_r, line 38
builtin_tgamma()-3.820000 0.319208 0.319208
    [FAILED]
    Error: 0
  at file /home/ruilings/workspace/beignet/utests/builtin_tgamma.cpp, function 
builtin_tgamma, line 50

Thanks!
Ruiling

> -----Original Message-----
> From: Beignet [mailto:[email protected]] On Behalf 
> Of Grigore Lupescu
> Sent: Tuesday, June 28, 2016 3:04 AM
> To: [email protected]
> Subject: [Beignet] [PATCH 2/4] Backend: Optimization internal math, 
> lower polynomials
> 
> From: Grigore Lupescu <grigore.lupescu at intel.com>
> 
> Use lower grade polynomials for approximations, keep conformance passing.
> 
> LOG   Use polynomial grade 4 (was 7)
> LOG2  Use polynomial grade 4 (was 7)
> SIN   Use polynomial grade 4 (was 6)
> COS   Use polynomial grade 3 (was 6)
> TANF  Use polynomial grade 7 (was 12)
> GAMMA Use polynomial grade 3 (was 12)
> GAMMA_R Use polynomial grade 3 (was 12)
> LOG1P Use polynomial grade 4 (was 7)
> ASIN  Use polynomial grade 4 (was 5)
> ATAN  Use polynomial grade 6 (was 10)
> EXP   Use polynomial grade 2 (was 5)
> EXPM1 Use polynomial grade 3 (was 5)
> POW   Use polynomial grade 2 (was 6)
> POWN  Use polynomial grade 2 (was 6)
> 
> Signed-off-by: Grigore Lupescu <grigore.lupescu at intel.com>
> ---

_______________________________________________
Beignet mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/beignet

Reply via email to