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

Thomas Helland thomashelland90 at gmail.com
Thu Aug 2 21:26:44 UTC 2018


2018-08-02 23:05 GMT+02:00 Thomas Helland <thomashelland90 at gmail.com>:
> 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?
>

Oh goodness. Forget my comment. It's obviously showing
a step-by-step proof.

> 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