[Mesa-dev] [PATCH v3 09/44] i965/hsw: Enable L3 atomics.

Kenneth Graunke kenneth at whitecape.org
Thu Dec 3 12:19:05 PST 2015


On Tuesday, December 01, 2015 12:19:27 AM Jordan Justen wrote:
> From: Francisco Jerez <currojerez at riseup.net>
> 
> Improves performance of the arb_shader_image_load_store-atomicity
> piglit test by over 25x (which isn't a real benchmark it's just heavy
> on atomics -- the improvement in a microbenchmark I wrote a while ago
> seemed to be even greater).  The drawback is one needs to be
> extra-careful not to hang the GPU (in fact the whole system).  A DC
> partition must have been allocated on L3, the "convert L3 cycle for DC
> to UC" bit may not be set, the MOCS L3 cacheability bit must be set
> for all surfaces accessed using DC atomics, and the SCRATCH1 and
> ROW_CHICKEN3 bits must be kept in sync.
> 
> A fairly recent kernel is required for the command parser to allow
> writes to these registers.
> 
> Reviewed-by: Samuel Iglesias Gonsálvez <siglesias at igalia.com>
> ---
>  src/mesa/drivers/dri/i965/gen7_l3_state.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
> 
> diff --git a/src/mesa/drivers/dri/i965/gen7_l3_state.c b/src/mesa/drivers/dri/i965/gen7_l3_state.c
> index 108f3a8..9aad563 100644
> --- a/src/mesa/drivers/dri/i965/gen7_l3_state.c
> +++ b/src/mesa/drivers/dri/i965/gen7_l3_state.c
> @@ -254,5 +254,19 @@ setup_l3_config(struct brw_context *brw, const struct brw_l3_config *cfg)
>                  SET_FIELD(cfg->n[L3P_T], GEN7_L3CNTLREG3_T_ALLOC));
>  
>        ADVANCE_BATCH();
> +
> +      if (brw->is_haswell && brw->intelScreen->cmd_parser_version >= 4) {
> +         /* Enable L3 atomics on HSW if we have a DC partition, otherwise keep
> +          * them disabled to avoid crashing the system hard.
> +          */
> +         BEGIN_BATCH(5);
> +         OUT_BATCH(MI_LOAD_REGISTER_IMM | (5 - 2));
> +         OUT_BATCH(HSW_SCRATCH1);
> +         OUT_BATCH(has_dc ? 0 : HSW_SCRATCH1_L3_ATOMIC_DISABLE);
> +         OUT_BATCH(HSW_ROW_CHICKEN3);
> +         OUT_BATCH(HSW_ROW_CHICKEN3_L3_ATOMIC_DISABLE << 16 |
> +                   (has_dc ? 0 : HSW_ROW_CHICKEN3_L3_ATOMIC_DISABLE));
> +         ADVANCE_BATCH();
> +      }
>     }
>  }
> 

This seems reasonable, so assuming it works,

Acked-by: Kenneth Graunke <kenneth at whitecape.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151203/cac754a5/attachment.sig>


More information about the mesa-dev mailing list