On Tue, Nov 17, 2015 at 11:41 PM, Connor Abbott <cwabbo...@gmail.com> wrote: > On Mon, Nov 16, 2015 at 11:00 AM, Jason Ekstrand <ja...@jlekstrand.net> wrote: >> On Sat, Nov 14, 2015 at 6:59 PM, Connor Abbott <cwabbo...@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... > > So I rebased the series onto right before we switched to NIR by > default. For non-NIR vs. NIR, the numbers were: > > total instructions in shared programs: 1848629 -> 1647133 (-10.90%) > instructions in affected programs: 1663319 -> 1461711 (-12.12%) > total loops in shared programs: 223 -> 222 (-0.45%) > helped: 14667 > HURT: 1416 > GAINED: 0 > LOST: 0 > > and for non-NIR vs. NIR + vectorization: > > total instructions in shared programs: 1848629 -> 1619388 (-12.40%) > instructions in affected programs: 1696613 -> 1467260 (-13.52%) > total loops in shared programs: 223 -> 222 (-0.45%) > helped: 15076 > HURT: 1378 > GAINED: 0 > LOST: 0 > > so, indeed, it does seem to get rid of some hurt programs. My > suspicion, though, is that it's a case of "well, NIR hurt, but the > gain from vectorizing offset the (unrelated) problem so that now it > helps." We don't ever split up vectorized operations in NIR (except > when lowering to scalar, ofc) so NIR shouldn't be doing anything > harmful that this pass would help.
Mostly, I wanted to see how big the numbers were :-) Also, we did see some vectorization issues in some of the shaders that were hurt. --Jason >> >>> Signed-off-by: Connor Abbott <cwabbo...@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@lists.freedesktop.org >>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev