[Mesa-dev] [PATCH 5/5] i965/nir: use vectorization for non-scalar stages

Jason Ekstrand jason at jlekstrand.net
Mon Nov 16 08:00:34 PST 2015


On Sat, Nov 14, 2015 at 6:59 PM, Connor Abbott <cwabbott0 at gmail.com> wrote:
> Shader-db results on bdw with INTEL_DEBUG=vec4:
>
> total instructions in shared programs: 1634044 -> 1612936 (-1.29%)
> instructions in affected programs: 802502 -> 781394 (-2.63%)
> helped: 5036
> HURT: 1442
>
> total cycles in shared programs: 9397790 -> 9355382 (-0.45%)
> cycles in affected programs: 5078600 -> 5036192 (-0.84%)
> helped: 3875
> HURT: 2554
>
> LOST:   0
> GAINED: 0
>
> Most of the hurt programs seem to be because we generate extra MOV's due
> to vectorizing things. For example, in
> shaders/non-free/steam/anomaly-2/158.shader_test, this:
>
> add(8)          g116<1>.xyF     g12<4,4,1>.xyyyF g1.4<0,4,1>.xyyyF { align16 NoDDClr 1Q };
> add(8)          g117<1>.xyF     g12<4,4,1>.xyyyF g1.4<0,4,1>.zwwwF { align16 NoDDClr 1Q };
> add(8)          g116<1>.zwF     g12<4,4,1>.xxxyF -g1.4<0,4,1>.xxxyF { align16 NoDDChk 1Q };
> add(8)          g117<1>.zwF     g12<4,4,1>.xxxyF -g1.4<0,4,1>.zzzwF { align16 NoDDChk 1Q };
>
> Turns into this:
>
> add(8)          g13<1>F         g12<4,4,1>.xyxyF g1.4<0,4,1>F   { align16 1Q };
> add(8)          g14<1>F         g12<4,4,1>.xyxyF -g1.4<0,4,1>F  { align16 1Q };
> mov(8)          g116<1>.xyD     g13<4,4,1>.xyyyD                { align16 NoDDClr 1Q };
> mov(8)          g117<1>.xyD     g13<4,4,1>.zwwwD                { align16 NoDDClr 1Q };
> mov(8)          g116<1>.zwD     g14<4,4,1>.xxxyD                { align16 NoDDChk 1Q };
> mov(8)          g117<1>.zwD     g14<4,4,1>.zzzwD                { align16 NoDDChk 1Q };
>
> So we eliminated two add's, but then had to introduce four mov's to
> transpose the result. I don't think there's much we can do about this at
> the NIR level, unfortunately.

Given the shader-db numbers above, I think we can probably eat the
hurt programs.  Would you mind cherry-picking back onto a time when we
had GLSL IR and doing a GLSL IR vs. NIR comparison with this series?
This is one of the places we were still hurting so it would be good to
know how it changes the picture.  Not that it *really* matters at this
point...

> Signed-off-by: Connor Abbott <cwabbott0 at gmail.com>
> ---
>  src/mesa/drivers/dri/i965/brw_nir.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_nir.c b/src/mesa/drivers/dri/i965/brw_nir.c
> index fe5cad4..29cafe6 100644
> --- a/src/mesa/drivers/dri/i965/brw_nir.c
> +++ b/src/mesa/drivers/dri/i965/brw_nir.c
> @@ -198,6 +198,14 @@ nir_optimize(nir_shader *nir, bool is_scalar)
>        nir_validate_shader(nir);
>        progress |= nir_opt_cse(nir);
>        nir_validate_shader(nir);
> +
> +      if (!is_scalar) {
> +         progress |= nir_opt_vectorize(nir);
> +         nir_validate_shader(nir);
> +         progress |= nir_copy_prop(nir);
> +         nir_validate_shader(nir);
> +      }
> +
>        progress |= nir_opt_peephole_select(nir);
>        nir_validate_shader(nir);
>        progress |= nir_opt_algebraic(nir);
> --
> 2.4.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list