[Mesa-dev] [PATCH 12/22] nir: Replace an odd comparison involving fmin of -b2f

Samuel Iglesias Gonsálvez siglesias at igalia.com
Tue Feb 27 11:25:01 UTC 2018


Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>


On 24/02/18 00:55, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> I noticed the fge version while looking at a shader for an unrelated
> reason.  The feq version prevents a regression in a later change that
> performs strength reduction of some compares.
>
> Broadwell and Skylake had similar results. (Skylake shown)
> total instructions in shared programs: 14514808 -> 14514796 (<.01%)
> instructions in affected programs: 750 -> 738 (-1.60%)
> helped: 4
> HURT: 0
> helped stats (abs) min: 1 max: 5 x̄: 3.00 x̃: 3
> helped stats (rel) min: 0.83% max: 1.96% x̄: 1.40% x̃: 1.40%
> 95% mean confidence interval for instructions value: -6.67 0.67
> 95% mean confidence interval for instructions %-change: -2.43% -0.36%
> Inconclusive result (value mean confidence interval includes 0).
>
> total cycles in shared programs: 533144939 -> 533144853 (<.01%)
> cycles in affected programs: 8911 -> 8825 (-0.97%)
> helped: 4
> HURT: 0
> helped stats (abs) min: 16 max: 32 x̄: 21.50 x̃: 19
> helped stats (rel) min: 0.60% max: 1.89% x̄: 1.28% x̃: 1.31%
> 95% mean confidence interval for cycles value: -32.94 -10.06
> 95% mean confidence interval for cycles %-change: -2.30% -0.26%
> Cycles are helped.
>
> Haswell
> total instructions in shared programs: 13093785 -> 13093775 (<.01%)
> instructions in affected programs: 924 -> 914 (-1.08%)
> helped: 4
> HURT: 2
> helped stats (abs) min: 1 max: 5 x̄: 3.00 x̃: 3
> helped stats (rel) min: 0.82% max: 1.95% x̄: 1.39% x̃: 1.39%
> HURT stats (abs)   min: 1 max: 1 x̄: 1.00 x̃: 1
> HURT stats (rel)   min: 1.19% max: 1.19% x̄: 1.19% x̃: 1.19%
> 95% mean confidence interval for instructions value: -4.53 1.20
> 95% mean confidence interval for instructions %-change: -2.02% 0.97%
> Inconclusive result (value mean confidence interval includes 0).
>
> total cycles in shared programs: 409580553 -> 409580118 (<.01%)
> cycles in affected programs: 10909 -> 10474 (-3.99%)
> helped: 5
> HURT: 1
> helped stats (abs) min: 6 max: 222 x̄: 89.60 x̃: 18
> helped stats (rel) min: 0.16% max: 24.72% x̄: 9.54% x̃: 1.78%
> HURT stats (abs)   min: 13 max: 13 x̄: 13.00 x̃: 13
> HURT stats (rel)   min: 0.39% max: 0.39% x̄: 0.39% x̃: 0.39%
> 95% mean confidence interval for cycles value: -180.68 35.68
> 95% mean confidence interval for cycles %-change: -19.55% 3.79%
> Inconclusive result (value mean confidence interval includes 0).
>
> Ivy Bridge
> total instructions in shared programs: 11811851 -> 11811840 (<.01%)
> instructions in affected programs: 1032 -> 1021 (-1.07%)
> helped: 5
> HURT: 1
> helped stats (abs) min: 1 max: 5 x̄: 2.40 x̃: 1
> helped stats (rel) min: 0.63% max: 1.95% x̄: 1.13% x̃: 0.97%
> HURT stats (abs)   min: 1 max: 1 x̄: 1.00 x̃: 1
> HURT stats (rel)   min: 1.19% max: 1.19% x̄: 1.19% x̃: 1.19%
> 95% mean confidence interval for instructions value: -4.17 0.51
> 95% mean confidence interval for instructions %-change: -1.86% 0.36%
> Inconclusive result (value mean confidence interval includes 0).
>
> total cycles in shared programs: 257618403 -> 257618168 (<.01%)
> cycles in affected programs: 10784 -> 10549 (-2.18%)
> helped: 4
> HURT: 2
> helped stats (abs) min: 4 max: 220 x̄: 64.50 x̃: 17
> helped stats (rel) min: 0.50% max: 24.34% x̄: 7.07% x̃: 1.72%
> HURT stats (abs)   min: 9 max: 14 x̄: 11.50 x̃: 11
> HURT stats (rel)   min: 0.24% max: 0.42% x̄: 0.33% x̃: 0.33%
> 95% mean confidence interval for cycles value: -133.11 54.78
> 95% mean confidence interval for cycles %-change: -14.79% 5.59%
> Inconclusive result (value mean confidence interval includes 0).
>
> GM45, Iron Lake, and Sandy Bridge had similar results. (Sandy Bridge shown)
> total instructions in shared programs: 10533871 -> 10533859 (<.01%)
> instructions in affected programs: 865 -> 853 (-1.39%)
> helped: 4
> HURT: 0
> helped stats (abs) min: 1 max: 5 x̄: 3.00 x̃: 3
> helped stats (rel) min: 0.63% max: 1.83% x̄: 1.22% x̃: 1.21%
> 95% mean confidence interval for instructions value: -6.67 0.67
> 95% mean confidence interval for instructions %-change: -2.16% -0.29%
> Inconclusive result (value mean confidence interval includes 0).
>
> total cycles in shared programs: 146139904 -> 146139852 (<.01%)
> cycles in affected programs: 15213 -> 15161 (-0.34%)
> helped: 4
> HURT: 0
> helped stats (abs) min: 3 max: 18 x̄: 13.00 x̃: 15
> helped stats (rel) min: 0.15% max: 0.84% x̄: 0.39% x̃: 0.29%
> 95% mean confidence interval for cycles value: -23.79 -2.21
> 95% mean confidence interval for cycles %-change: -0.88% 0.09%
> Inconclusive result (%-change mean confidence interval includes 0).
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
>  src/compiler/nir/nir_opt_algebraic.py | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
> index f5f9e94..0069516 100644
> --- a/src/compiler/nir/nir_opt_algebraic.py
> +++ b/src/compiler/nir/nir_opt_algebraic.py
> @@ -152,6 +152,19 @@ optimizations = [
>  
>     (('fge', ('fneg', ('b2f', a)), 0.0), ('inot', a)),
>  
> +   # fmin(-b2f(a), b) >= 0.0
> +   # -b2f(a) >= 0.0 && b >= 0.0
> +   # -b2f(a) == 0.0 && b >= 0.0    -b2f can only be 0 or -1, never >0
> +   # b2f(a) == 0.0 && b >= 0.0
> +   # a == False && b >= 0.0
> +   # !a && b >= 0.0
> +   #
> +   # The fge in the second replacement is not a typo.  I leave the proof that
> +   # "fmin(-b2f(a), b) >= 0 <=> fmin(-b2f(a), b) == 0" as an exercise for the
> +   # reader.
> +   (('fge', ('fmin', ('fneg', ('b2f', a)), b), 0.0), ('iand', ('inot', a), ('fge', b, 0.0))),
> +   (('feq', ('fmin', ('fneg', ('b2f', a)), b), 0.0), ('iand', ('inot', a), ('fge', b, 0.0))),
> +
>     # 0.0 < fabs(a)
>     # fabs(a) > 0.0
>     # fabs(a) != 0.0 because fabs(a) must be >= 0

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180227/ffb22768/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180227/ffb22768/attachment-0001.sig>


More information about the mesa-dev mailing list