[Mesa-dev] [PATCH 06/13] nir: Transform -fabs(a) < 0 to a != 0

Thomas Helland thomashelland90 at gmail.com
Thu Aug 2 21:05:51 UTC 2018


2018-08-02 20:19 GMT+02:00 Ian Romanick <idr at freedesktop.org>:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> Unlike the much older -abs(a) >= 0.0 transformation, this is not
> precise.  The behavior changes if a is NaN.
>
> All Gen platforms had pretty similar results. (Skylake shown)
> total instructions in shared programs: 14277216 -> 14277184 (<.01%)
> instructions in affected programs: 2300 -> 2268 (-1.39%)
> helped: 8
> HURT: 0
> helped stats (abs) min: 1 max: 8 x̄: 4.00 x̃: 3
> helped stats (rel) min: 0.48% max: 15.15% x̄: 4.41% x̃: 1.01%
> 95% mean confidence interval for instructions value: -6.45 -1.55
> 95% mean confidence interval for instructions %-change: -9.96% 1.13%
> Inconclusive result (%-change mean confidence interval includes 0).
>
> total cycles in shared programs: 532577848 -> 532577990 (<.01%)
> cycles in affected programs: 17486 -> 17628 (0.81%)
> helped: 2
> HURT: 5
> helped stats (abs) min: 2 max: 6 x̄: 4.00 x̃: 4
> helped stats (rel) min: 0.06% max: 1.81% x̄: 0.93% x̃: 0.93%
> HURT stats (abs)   min: 6 max: 50 x̄: 30.00 x̃: 26
> HURT stats (rel)   min: 0.55% max: 2.17% x̄: 1.19% x̃: 1.02%
> 95% mean confidence interval for cycles value: -1.06 41.63
> 95% mean confidence interval for cycles %-change: -0.58% 1.74%
> Inconclusive result (value mean confidence interval includes 0).
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/compiler/nir/nir_opt_algebraic.py | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
> index b96a7f93c08..8300d6d01f5 100644
> --- a/src/compiler/nir/nir_opt_algebraic.py
> +++ b/src/compiler/nir/nir_opt_algebraic.py
> @@ -212,6 +212,10 @@ optimizations = [
>     # a != 0.0
>     (('~flt', 0.0, ('fabs', a)), ('fne', a, 0.0)),
>
> +   # -fabs(a) < 0.0
> +   # fabs(a) > 0.0
> +   (('~flt', ('fneg', ('fabs', a)), 0.0), ('fne', a, 0.0)),
> +

I'm not sure if the machinery behind the algebraic opts
sees the fneg and propagates it? It seems the second comment
here would be better fit for the optimization just above?

Either way though, for patch 1-6

Reviewed-by: Thomas Helland<thomashelland90 at gmail.com>

>     (('fmax',                        ('b2f(is_used_once)', a),           ('b2f', b)),           ('b2f', ('ior', a, b))),
>     (('fmax', ('fneg(is_used_once)', ('b2f(is_used_once)', a)), ('fneg', ('b2f', b))), ('fneg', ('b2f', ('ior', a, b)))),
>     (('fmin',                        ('b2f(is_used_once)', a),           ('b2f', b)),           ('b2f', ('iand', a, b))),
> --
> 2.14.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list