intel/fs: Don't emit fence for shared memory if only one thread is used
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Tue, 31 Dec 2019 09:01:27 +0000 (01:01 -0800)
committerMarge Bot <eric+marge@anholt.net>
Tue, 21 Jan 2020 23:41:35 +0000 (23:41 +0000)
commit4f431e870c7239879bc7c7f54f65184d5b391815
treea5009df6622f4df381291884659bbffada570339
parentff5b74ef32ea0ccff265064017f8168a4b328a5a
intel/fs: Don't emit fence for shared memory if only one thread is used

When there's only one hardware thread (i.e. the dispatch width greater
or equal to the workgroup size), there's no need to synchronize shared
memory access (SLM) since all the requests from a single thread are
already synchronized.  In such case, we just add a scheduling fence.

To be able to identify that case for all platforms, move the handling
of platforms prior to Gen11 (which don't have a separate SLM fence)
after the optimization.

Results for SKL running Iris for shader-db tests with compute shaders

    total sends in shared programs: 18395 -> 18361 (-0.18%)
    sends in affected programs: 938 -> 904 (-3.62%)
    helped: 9
    HURT: 0
    helped stats (abs) min: 1 max: 5 x̄: 3.78 x̃: 4
    helped stats (rel) min: 1.56% max: 26.32% x̄: 10.33% x̃: 2.60%
    95% mean confidence interval for sends value: -4.85 -2.71
    95% mean confidence interval for sends %-change: -19.12% -1.54%
    Sends are helped.

Shaders from Aztec Ruins, Car Chase, Manhattan and DeusEx are helped.

Results for ICL and TGL are similar to SKL.

Results for BDW are similar to SKL except for DeusEx shader that has a
workgroup size 16 but in BDW picks the SIMD8.

Reviewed-by: Francisco Jerez <currojerez@riseup.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3226>
src/intel/compiler/brw_fs_nir.cpp