Mesa (main): aco: Consider maximum number of workgroups per CU/WGP on Navi.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Aug 27 16:59:35 UTC 2021


Module: Mesa
Branch: main
Commit: 589ccf3d777663402d105762e4f25109650ed148
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=589ccf3d777663402d105762e4f25109650ed148

Author: Timur Kristóf <timur.kristof at gmail.com>
Date:   Tue Aug 24 08:57:39 2021 +0200

aco: Consider maximum number of workgroups per CU/WGP on Navi.

No Fossil DB changes.

Signed-off-by: Timur Kristóf <timur.kristof at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12517>

---

 src/amd/compiler/aco_live_var_analysis.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/amd/compiler/aco_live_var_analysis.cpp b/src/amd/compiler/aco_live_var_analysis.cpp
index 5031273d7fe..bd3522e915d 100644
--- a/src/amd/compiler/aco_live_var_analysis.cpp
+++ b/src/amd/compiler/aco_live_var_analysis.cpp
@@ -355,6 +355,7 @@ update_vgpr_sgpr_demand(Program* program, const RegisterDemand new_demand)
    unsigned max_waves_per_simd = program->dev.max_wave64_per_simd * (64 / program->wave_size);
    unsigned simd_per_cu_wgp = program->dev.simd_per_cu * (program->wgp_mode ? 2 : 1);
    unsigned lds_limit = program->wgp_mode ? program->dev.lds_limit * 2 : program->dev.lds_limit;
+   unsigned max_workgroups_per_cu_wgp = program->wgp_mode ? 32 : 16;
 
    assert(program->min_waves >= 1);
    uint16_t sgpr_limit = get_addr_sgpr_from_waves(program, program->min_waves);
@@ -394,9 +395,8 @@ update_vgpr_sgpr_demand(Program* program, const RegisterDemand new_demand)
       if (lds_per_workgroup)
          workgroups_per_cu_wgp = std::min(workgroups_per_cu_wgp, lds_limit / lds_per_workgroup);
 
-      if (waves_per_workgroup > 1 && program->chip_class < GFX10)
-         workgroups_per_cu_wgp = std::min(
-            workgroups_per_cu_wgp, 16u); /* TODO: is this a SI-only limit? what about Navi? */
+      if (waves_per_workgroup > 1)
+         workgroups_per_cu_wgp = std::min(workgroups_per_cu_wgp, max_workgroups_per_cu_wgp);
 
       /* in cases like waves_per_workgroup=3 or lds=65536 and
        * waves_per_workgroup=1, we want the maximum possible number of waves per



More information about the mesa-commit mailing list