[Mesa-dev] [PATCH v2 14/20] i965/cs: Add max_cs_threads

Jeff McGee jeff.mcgee at intel.com
Mon Apr 27 11:29:35 PDT 2015


On Sat, Apr 25, 2015 at 09:06:53PM -0700, Ben Widawsky wrote:
> On Sat, Apr 25, 2015 at 05:39:20PM -0700, Jordan Justen wrote:
> > On 2015-04-25 13:54:41, Ben Widawsky wrote:
> > > On Fri, Apr 24, 2015 at 04:33:06PM -0700, Jordan Justen wrote:
> > > > Add some values for gen7 & gen8. These are the number threads in a
> > > > subslice.
> > > 
> > > I forget if I asked this in the v1, but shouldn't we be moving to the
> > > awful^wrequired kernel interface which exposes this information? I think for BSW
> > > it's actually required.
> > > 
> > > http://lists.freedesktop.org/archives/intel-gfx/2014-July/049917.html
> > 
> > I guess I915_PARAM_SUBSLICE_TOTAL and I915_PARAM_EU_TOTAL will be in
> > Linux 4.1, but I think mesa should come up with conservative defaults
> > for this info and refine it with the kernel calls when they are
> > available.
> > 
> > What do you think?
> 
> Yeah, maybe. Since we know until BSW, things are pretty predictable, maybe just
> exclude that for now (IIRC, we can't even guess a conservative default there)??
> 
> With the some thinking about whether to keep BSW in, on your part:
> Reviewed-by: Ben Widawsky <ben at bwidawsk.net>
> 
> > 
> > Regarding using the values, so threads per subslice would be
> > (I915_PARAM_EU_TOTAL / I915_PARAM_SUBSLICE_TOTAL) * threads_per_eu?
> > Since the kernel doesn't provide threads_per_eu, I guess we need to
> > have that in brw_device_info?
> > 
> > -Jordan
> 
> You're right. I think this is incomplete. Jeff, how about platforms which might
> have different number of EUs per subslice? Can such a thing exist? If it cannot,
> then what Jordan said seems correct to me.
> 

At the moment, the only uneven distribution of EU across subslices occurs
in BDW and SKL which are permitted to have a single EU in any subslice fuse-
disabled. My understanding is that the hardware is tolerant to the loss of
just the one EU, so software doesn't need to account for it. So you should
be safe to use the 'nominal' EU per subslice count determined by rounding
up eu_total/subslice_total to nearest integer.
-Jeff

> > 
> > > Thread counts all look right afaict though.
> > > 
> > > > 
> > > > Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> > > > Cc: Ben Widawsky <ben at bwidawsk.net>
> > > > Cc: Kenneth Graunke <kenneth at whitecape.org>
> > > > ---
> > > >  src/mesa/drivers/dri/i965/brw_context.c     |  1 +
> > > >  src/mesa/drivers/dri/i965/brw_context.h     |  1 +
> > > >  src/mesa/drivers/dri/i965/brw_device_info.c | 12 +++++++++++-
> > > >  src/mesa/drivers/dri/i965/brw_device_info.h |  1 +
> > > >  4 files changed, 14 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
> > > > index 25b50c7..7f8d430 100644
> > > > --- a/src/mesa/drivers/dri/i965/brw_context.c
> > > > +++ b/src/mesa/drivers/dri/i965/brw_context.c
> > > > @@ -835,6 +835,7 @@ brwCreateContext(gl_api api,
> > > >     brw->max_ds_threads = devinfo->max_ds_threads;
> > > >     brw->max_gs_threads = devinfo->max_gs_threads;
> > > >     brw->max_wm_threads = devinfo->max_wm_threads;
> > > > +   brw->max_cs_threads = devinfo->max_cs_threads;
> > > >     brw->urb.size = devinfo->urb.size;
> > > >     brw->urb.min_vs_entries = devinfo->urb.min_vs_entries;
> > > >     brw->urb.max_vs_entries = devinfo->urb.max_vs_entries;
> > > > diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h
> > > > index 07847cc..56827d8 100644
> > > > --- a/src/mesa/drivers/dri/i965/brw_context.h
> > > > +++ b/src/mesa/drivers/dri/i965/brw_context.h
> > > > @@ -1228,6 +1228,7 @@ struct brw_context
> > > >     int max_ds_threads;
> > > >     int max_gs_threads;
> > > >     int max_wm_threads;
> > > > +   int max_cs_threads;
> > > >  
> > > >     /* BRW_NEW_URB_ALLOCATIONS:
> > > >      */
> > > > diff --git a/src/mesa/drivers/dri/i965/brw_device_info.c b/src/mesa/drivers/dri/i965/brw_device_info.c
> > > > index 928bf99..7999ba9 100644
> > > > --- a/src/mesa/drivers/dri/i965/brw_device_info.c
> > > > +++ b/src/mesa/drivers/dri/i965/brw_device_info.c
> > > > @@ -117,6 +117,7 @@ static const struct brw_device_info brw_device_info_ivb_gt1 = {
> > > >     .max_ds_threads = 36,
> > > >     .max_gs_threads = 36,
> > > >     .max_wm_threads = 48,
> > > > +   .max_cs_threads = 36,
> > > >     .urb = {
> > > >        .size = 128,
> > > >        .min_vs_entries = 32,
> > > > @@ -135,6 +136,7 @@ static const struct brw_device_info brw_device_info_ivb_gt2 = {
> > > >     .max_ds_threads = 128,
> > > >     .max_gs_threads = 128,
> > > >     .max_wm_threads = 172,
> > > > +   .max_cs_threads = 64, /* Maybe 96? */
> > > >     .urb = {
> > > >        .size = 256,
> > > >        .min_vs_entries = 32,
> > > > @@ -154,6 +156,7 @@ static const struct brw_device_info brw_device_info_byt = {
> > > >     .max_ds_threads = 36,
> > > >     .max_gs_threads = 36,
> > > >     .max_wm_threads = 48,
> > > > +   .max_cs_threads = 32,
> > > >     .urb = {
> > > >        .size = 128,
> > > >        .min_vs_entries = 32,
> > > > @@ -176,6 +179,7 @@ static const struct brw_device_info brw_device_info_hsw_gt1 = {
> > > >     .max_ds_threads = 70,
> > > >     .max_gs_threads = 70,
> > > >     .max_wm_threads = 102,
> > > > +   .max_cs_threads = 70,
> > > >     .urb = {
> > > >        .size = 128,
> > > >        .min_vs_entries = 32,
> > > > @@ -193,6 +197,7 @@ static const struct brw_device_info brw_device_info_hsw_gt2 = {
> > > >     .max_ds_threads = 280,
> > > >     .max_gs_threads = 256,
> > > >     .max_wm_threads = 204,
> > > > +   .max_cs_threads = 70,
> > > >     .urb = {
> > > >        .size = 256,
> > > >        .min_vs_entries = 64,
> > > > @@ -210,6 +215,7 @@ static const struct brw_device_info brw_device_info_hsw_gt3 = {
> > > >     .max_ds_threads = 280,
> > > >     .max_gs_threads = 256,
> > > >     .max_wm_threads = 408,
> > > > +   .max_cs_threads = 70,
> > > >     .urb = {
> > > >        .size = 512,
> > > >        .min_vs_entries = 64,
> > > > @@ -231,10 +237,11 @@ static const struct brw_device_info brw_device_info_hsw_gt3 = {
> > > >     .max_hs_threads = 504,                           \
> > > >     .max_ds_threads = 504,                           \
> > > >     .max_gs_threads = 504,                           \
> > > > -   .max_wm_threads = 384                            \
> > > > +   .max_wm_threads = 384
> > > >  
> > > >  static const struct brw_device_info brw_device_info_bdw_gt1 = {
> > > >     GEN8_FEATURES, .gt = 1,
> > > > +   .max_cs_threads = 42,
> > > >     .urb = {
> > > >        .size = 192,
> > > >        .min_vs_entries = 64,
> > > > @@ -247,6 +254,7 @@ static const struct brw_device_info brw_device_info_bdw_gt1 = {
> > > >  
> > > >  static const struct brw_device_info brw_device_info_bdw_gt2 = {
> > > >     GEN8_FEATURES, .gt = 2,
> > > > +   .max_cs_threads = 56,
> > > >     .urb = {
> > > >        .size = 384,
> > > >        .min_vs_entries = 64,
> > > > @@ -259,6 +267,7 @@ static const struct brw_device_info brw_device_info_bdw_gt2 = {
> > > >  
> > > >  static const struct brw_device_info brw_device_info_bdw_gt3 = {
> > > >     GEN8_FEATURES, .gt = 3,
> > > > +   .max_cs_threads = 56,
> > > >     .urb = {
> > > >        .size = 384,
> > > >        .min_vs_entries = 64,
> > > > @@ -280,6 +289,7 @@ static const struct brw_device_info brw_device_info_chv = {
> > > >     .max_ds_threads = 80,
> > > >     .max_gs_threads = 80,
> > > >     .max_wm_threads = 128,
> > > > +   .max_cs_threads = 28,
> > > >     .urb = {
> > > >        .size = 192,
> > > >        .min_vs_entries = 34,
> > > > diff --git a/src/mesa/drivers/dri/i965/brw_device_info.h b/src/mesa/drivers/dri/i965/brw_device_info.h
> > > > index b921c2b..65c024c 100644
> > > > --- a/src/mesa/drivers/dri/i965/brw_device_info.h
> > > > +++ b/src/mesa/drivers/dri/i965/brw_device_info.h
> > > > @@ -71,6 +71,7 @@ struct brw_device_info
> > > >     unsigned max_ds_threads;
> > > >     unsigned max_gs_threads;
> > > >     unsigned max_wm_threads;
> > > > +   unsigned max_cs_threads;
> > > >  
> > > >     struct {
> > > >        unsigned size;
> > > > -- 
> > > > 2.1.4
> > > > 


More information about the mesa-dev mailing list