[Mesa-dev] [PATCH 3/5] intel/dev: Add devinfo cs_scratch_ids_per_subslice field
Kenneth Graunke
kenneth at whitecape.org
Wed Mar 7 08:47:12 UTC 2018
On Wednesday, March 7, 2018 12:16:28 AM PST Jordan Justen wrote:
> Suggested-by: Kenneth Graunke <kenneth at whitecape.org>
> Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
> ---
> src/intel/dev/gen_device_info.c | 13 ++++++++-----
> src/intel/dev/gen_device_info.h | 8 ++++++++
> 2 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/src/intel/dev/gen_device_info.c b/src/intel/dev/gen_device_info.c
> index 1773009d33c..de018c6a692 100644
> --- a/src/intel/dev/gen_device_info.c
> +++ b/src/intel/dev/gen_device_info.c
> @@ -284,11 +284,13 @@ static const struct gen_device_info gen_device_info_byt = {
> },
> };
>
> -#define HSW_FEATURES \
> - GEN7_FEATURES, \
> - .is_haswell = true, \
> - .supports_simd16_3src = true, \
> - .has_resource_streamer = true
> +#define HSW_FEATURES \
> + GEN7_FEATURES, \
> + .is_haswell = true, \
> + .supports_simd16_3src = true, \
> + .has_resource_streamer = true, \
> + /* WaCSScratchSize:hsw */ \
> + .cs_scratch_ids_per_subslice = 16 * 8
>
> static const struct gen_device_info gen_device_info_hsw_gt1 = {
> HSW_FEATURES, .gt = 1,
> @@ -476,6 +478,7 @@ static const struct gen_device_info gen_device_info_chv = {
> .max_gs_threads = 80,
> .max_wm_threads = 128,
> .max_cs_threads = 6 * 7,
> + .cs_scratch_ids_per_subslice = 8 * 7,
> .urb = {
> .size = 192,
> .min_entries = {
> diff --git a/src/intel/dev/gen_device_info.h b/src/intel/dev/gen_device_info.h
> index b8044d00032..fa6b38f19ec 100644
> --- a/src/intel/dev/gen_device_info.h
> +++ b/src/intel/dev/gen_device_info.h
> @@ -148,6 +148,14 @@ struct gen_device_info
> */
> unsigned max_cs_threads;
>
> + /**
> + * The range of scratch addresses may differ from the number of EUs
> + * available for compute programs. This requires allocating a larger
> + * scratch buffer. For affected hardware, this will be set. If this is not
> + * set, then max_cs_threads should be used instead.
> + */
> + unsigned cs_scratch_ids_per_subslice;
> +
> struct {
> /**
> * Hardware default URB size.
>
This works, but it's not quite what I had in mind. I was thinking you
would add the new field, then add this hunk to gen_get_device_info():
if (devinfo->is_haswell) {
/* WaCSScratchSize:hsw
*
* Haswell's scratch space address calculation appears to be sparse
* rather than tightly packed. The Thread ID has bits indicating
* which subslice, EU within a subslice, and thread within an EU it
* is. There's a maximum of two slices and two subslices, so these
* can be stored with a single bit. Even though there are only 10 EUs
* per subslice, this is stored in 4 bits, so there's an effective
* maximum value of 16 EUs. Similarly, although there are only 7
* threads per EU, this is stored in a 3 bit number, giving an
* effective maximum value of 8 threads per EU.
*
* This means that we need to use 16 * 8 instead of 10 * 7 for the
* number of threads per subslice.
*/
devinfo->cs_scratch_ids_per_subslice = 16 * 8;
} else if (devinfo->is_cherryview) {
/* For Cherryview, it appears that the scratch addresses for the 6 EU
* devices may still generate compute scratch addresses covering the
* same range as 8 EU.
*/
devinfo->cs_scratch_ids_per_subslice = 8 * 7;
} else {
devinfo->cs_scratch_ids_per_subslice = devinfo->max_cs_threads;
}
This way, the field is always meaningful, and so in patches 4-5 you can
just use devinfo->cs_scratch_ids_per_subslice directly rather than doing
const unsigned scratch_ids_per_subslice =
devinfo->cs_scratch_ids_per_subslice ?
devinfo->cs_scratch_ids_per_subslice : devinfo->max_cs_threads;
This also has the side effect of preserving the comment, which I think
is valuable. There's already some precedent for this, as
gen_get_device_info() already whacks max_wm_threads precisely to deal
with scratch IDs being somewhat sparse.
--Ken
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180307/e4041b4a/attachment.sig>
More information about the mesa-dev
mailing list