<p dir="ltr"><br>
On Oct 8, 2014 11:39 AM, "Connor Abbott" <<a href="mailto:cwabbott0@gmail.com">cwabbott0@gmail.com</a>> wrote:<br>
><br>
> On Tue, Oct 7, 2014 at 4:33 AM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
> > On older GENs in SIMD16 mode, we were accidentally building too much<br>
> > interference into our register classes.  Since everything is divided by 2,<br>
> > the reigster allocator thinks we have 64 base registers instead of 128.<br>
> > The actual GRF mapping still needs to be doubled, but as far as the ra_set<br>
> > is concerned, we only have 64.  We were accidentally adding way too much<br>
> > interference.<br>
><br>
> Hmm, interesting. I'm not sure I quite follow the logic yet, but I<br>
> trust you that this is the right thing. Btw, just for the lols, did<br>
> you try and run shaderdb on this change? I bet we'd allocate even more<br>
> things on SIMD16 :) The SIMD16 register allocator saga continues, I<br>
> guess...</p>
<p dir="ltr">Until my desktop shows up, running shader-db is never for LOLs.  It takes 20 minutes per run on my poor thermally throttled ultrabook.  But yes, the results would be amusing.</p>
<p dir="ltr">> ><br>
> > Signed-off-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@gmail.com">jason.ekstrand@gmail.com</a>><br>
> > Cc: Connor Abbot <<a href="mailto:cwabbott0@gmail.com">cwabbott0@gmail.com</a>><br>
> > ---<br>
> >  src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp | 4 ++--<br>
> >  1 file changed, 2 insertions(+), 2 deletions(-)<br>
> ><br>
> > diff --git a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp<br>
> > index fd34941..b23ddc5 100644<br>
> > --- a/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp<br>
> > +++ b/src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp<br>
> > @@ -179,8 +179,8 @@ brw_alloc_reg_set(struct intel_screen *screen, int reg_width)<br>
> ><br>
> >              ra_reg_to_grf[reg] = j * 2;<br>
> ><br>
> > -            for (int base_reg = j * 2;<br>
> > -                 base_reg < j * 2 + class_sizes[i];<br>
> > +            for (int base_reg = j;<br>
> > +                 base_reg < j + (class_sizes[i] + 1) / 2;<br>
> >                   base_reg++) {<br>
> >                 ra_add_transitive_reg_conflict(regs, base_reg, reg);<br>
> >              }<br>
> > --<br>
> > 2.1.0<br>
> ><br>
</p>