aco: take LDS into account when calculating num_waves
pipeline-db (Vega):
SGPRS: 344 -> 344 (0.00 %)
VGPRS: 424 -> 524 (23.58 %)
Spilled SGPRs: 84 -> 80 (-4.76 %)
Spilled VGPRs: 0 -> 0 (0.00 %)
Private memory VGPRs: 0 -> 0 (0.00 %)
Scratch size: 0 -> 0 (0.00 %) dwords per thread
Code Size: 52812 -> 52484 (-0.62 %) bytes
LDS: 135 -> 135 (0.00 %) blocks
Max Waves: 56 -> 53 (-5.36 %)
v2: consider WGP, rework to be clearer and apply the
"maximum 16 workgroups per CU" limit properly
v2: use "SIMD" instead of "EU"
v2: fix spiller by introducing "Program::max_waves"
v2: rename "lds_size" to "lds_limit"
v3: make max_waves actually independant of register usage
v3: fix issue where max_waves was way too high
v3: use DIV_ROUND_UP(a, b) instead of max(a / b, 1)
v3: rename "workgroups_per_cu" to "workgroups_per_cu_wgp"
v4: fix typo from "workgroups_per_cu" rename
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> (v3)
This commit is contained in:
@@ -1192,10 +1192,8 @@ setup_variables(isel_context *ctx, nir_shader *nir)
|
||||
break;
|
||||
}
|
||||
case MESA_SHADER_COMPUTE: {
|
||||
unsigned lds_allocation_size_unit = 4 * 64;
|
||||
if (ctx->program->chip_class >= GFX7)
|
||||
lds_allocation_size_unit = 4 * 128;
|
||||
ctx->program->config->lds_size = (nir->info.cs.shared_size + lds_allocation_size_unit - 1) / lds_allocation_size_unit;
|
||||
ctx->program->config->lds_size = (nir->info.cs.shared_size + ctx->program->lds_alloc_granule - 1) /
|
||||
ctx->program->lds_alloc_granule;
|
||||
break;
|
||||
}
|
||||
case MESA_SHADER_VERTEX: {
|
||||
@@ -1255,6 +1253,9 @@ setup_isel_context(Program* program,
|
||||
program->family = options->family;
|
||||
program->wave_size = options->wave_size;
|
||||
|
||||
program->lds_alloc_granule = options->chip_class >= GFX7 ? 512 : 256;
|
||||
program->lds_limit = options->chip_class >= GFX7 ? 65536 : 32768;
|
||||
|
||||
if (options->chip_class >= GFX10) {
|
||||
program->physical_sgprs = 2560; /* doesn't matter as long as it's at least 128 * 20 */
|
||||
program->sgpr_alloc_granule = 127;
|
||||
|
||||
Reference in New Issue
Block a user