On Fri, Feb 22, 2019 at 3:47 PM Timothy Arceri <tarc...@itsqueeze.com> wrote:
>
>
>
> On 23/2/19 6:31 am, Rob Clark wrote:
> > On Fri, Feb 22, 2019 at 12:39 PM Jason Ekstrand <ja...@jlekstrand.net> 
> > wrote:
> >>
> >> On Fri, Feb 22, 2019 at 9:51 AM Eric Anholt <e...@anholt.net> wrote:
> >>>
> >>> Timothy Arceri <tarc...@itsqueeze.com> writes:
> >>>
> >>>> shader-db results i965 (SKL):
> >>>>
> >>>> total instructions in shared programs: 13219105 -> 13024761 (-1.47%)
> >>>> instructions in affected programs: 1169457 -> 975113 (-16.62%)
> >>>> helped: 599
> >>>> HURT: 154
> >>>>
> >>>> total cycles in shared programs: 333968972 -> 324822073 (-2.74%)
> >>>> cycles in affected programs: 130032440 -> 120885541 (-7.03%)
> >>>> helped: 590
> >>>> HURT: 216
> >>>>
> >>>> total spills in shared programs: 57947 -> 29130 (-49.73%)
> >>>> spills in affected programs: 53364 -> 24547 (-54.00%)
> >>>> helped: 351
> >>>> HURT: 0
> >>>>
> >>>> total fills in shared programs: 51310 -> 25468 (-50.36%)
> >>>> fills in affected programs: 44882 -> 19040 (-57.58%)
> >>>> helped: 351
> >>>> HURT: 0
> >>>> ---
> >>>>   src/compiler/nir/nir_lower_phis_to_scalar.c | 1 +
> >>>>   1 file changed, 1 insertion(+)
> >>>>
> >>>> diff --git a/src/compiler/nir/nir_lower_phis_to_scalar.c 
> >>>> b/src/compiler/nir/nir_lower_phis_to_scalar.c
> >>>> index 16001f73685..f6f702bca15 100644
> >>>> --- a/src/compiler/nir/nir_lower_phis_to_scalar.c
> >>>> +++ b/src/compiler/nir/nir_lower_phis_to_scalar.c
> >>>> @@ -74,6 +74,7 @@ is_phi_src_scalarizable(nir_phi_src *src,
> >>>>         /* A phi is scalarizable if we're going to lower it */
> >>>>         return should_lower_phi(nir_instr_as_phi(src_instr), state);
> >>>>
> >>>> +   case nir_instr_type_tex:
> >>>>      case nir_instr_type_load_const:
> >>>>      case nir_instr_type_ssa_undef:
> >>>>         /* These are trivially scalarizable */
> >>>
> >>> Sounds promising, but I would definitely not describe instr_type_tex as
> >>> "trivially scalarizable" -- could you explain what's going on with this
> >>> patch?
>
> Basically it just turns:
>
> if ssa0 {
>    ...
>    vec4 ssa1 = txf .....
> } else {
>     ...
>     vec4 ssa2 = ...
> }
> vec4 ss3 = phi ssa1, ssa2
>
> Into
>
> if ssa0 {
>    ...
>    vec4 ssa1 = txf .....
>    vec1 ssa2 = imov ssa1.x
>    vec1 ssa3 = imov ssa1.y
>    vec1 ssa4 = imov ssa1.z
>    vec1 ssa5 = imov ssa1.w
> } else {
>     ...
>     vec4 ssa6 = ...
>     vec1 ssa7 = imov ssa6.x
>     vec1 ssa8 = imov ssa6.y
>     vec1 ssa9 = imov ssa6.z
>     vec1 ssa10 = imov ssa6.w
> }
> vec1 ss11 = phi ssa2, ssa7
> vec1 ss12 = phi ssa3, ssa8
> vec1 ss13 = phi ssa4, ssa9
> vec1 ss14 = phi ssa5, ssa10

ok, I didn't realize this is how the tex would get scalarized, I was
more concerned that it would get turned into something like:

  vec1 ssa1 = txf.x ...
  vec1 ssa2 = txf.y ...
  vec1 ssa3 = txf.z ...
  vec1 ssa4 = txf.w ...

(which might look good in shaderdb but really would be sub-optimal)

BR,
-R

>
>
> This allows a whole bunch more optimisation to take place as often not
> all of the phi channels are actually used. If some cases large chunks of
> logic can be remove from the if branch that doesn't contain the texture
> access.
>
> >>
> >>
> >> I think I can for Intel though I'm not sure how this affects other drivers.
> >>
> >> On Intel hardware, we almost always have to combine all the texture 
> >> sources into one big message.  Since having more than one source is very 
> >> common, this means that we have to make a temporary copy of the sources 
> >> anyway.  Because we're copying them, having them contiguous (a vector in 
> >> NIR terms) doesn't actually gain us anything.  We may as well let NIR 
> >> scalarize them and give more freedom to the register allocator and other 
> >> NIR passes which may need to clean things up.  We don't want to make the 
> >> same choice for destinations as they are required to be contiguous.
> >>
> >
> > hmm, but this is abut the phi src (ie. the tex dest), not the tex src, 
> > isn't it?
>
> Yeah, thats correct. Which is why I think its fine to be bunched with
> the "These are trivially scalarizable" types?
>
> >
> > BR,
> > -R
> >
> >> Feel free to copy+paste that somewhere.  I agree with Eric that they are 
> >> not "trivially scalarizable" but they are safe to scalarize.
> >>
> >> --Jason
> >> _______________________________________________
> >> mesa-dev mailing list
> >> mesa-dev@lists.freedesktop.org
> >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to