--- si-report.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-)
diff --git a/si-report.py b/si-report.py index ec88112..e717af0 100755 --- a/si-report.py +++ b/si-report.py @@ -65,6 +65,12 @@ def get_scratch_str(value, suffixes = True): suffix = 'bytes per wave' return get_value_str(value, 'Scratch', suffix) +def get_waves_per_cu_str(value, suffixes = True): + suffix = '' + if suffixes: + suffix = 'waves' + return get_value_str(value, 'Max Waves / CU', suffix) + def calculate_percent_change(b, a): if b == 0: return 0 @@ -89,15 +95,17 @@ class si_stats: self.code_size = 0 self.lds = 0 self.scratch = 0 + self.max_waves_per_cu = 0 def to_string(self, suffixes = True): - return "{}{}{}{}{}".format( + return "{}{}{}{}{}{}".format( get_sgpr_str(self.sgprs, suffixes), get_vgpr_str(self.vgprs, suffixes), get_code_size_str(self.code_size, suffixes), get_lds_str(self.lds, suffixes), - get_scratch_str(self.scratch, suffixes)) + get_scratch_str(self.scratch, suffixes), + get_waves_per_cu_str(self.max_waves_per_cu, suffixes)) def __str__(self): @@ -109,6 +117,7 @@ class si_stats: self.code_size += other.code_size self.lds += other.lds self.scratch += other.scratch + self.max_waves_per_cu += other.max_waves_per_cu def update(self, comp, cmp_fn): for name in self.__dict__.keys(): @@ -153,6 +162,48 @@ class si_stats: return False return True +#TODO: Handle VI+ and take LDS into account. +def compute_max_waves_per_cu(sgprs, vgprs): + sgpr_waves = 10 + if sgprs <= 48: + sgpr_waves = 10 + elif sgprs <= 56: + sgpr_waves = 9 + elif sgprs <= 64: + sgpr_waves = 8 + elif sgprs <= 72: + sgpr_waves = 7 + elif sgprs <= 80: + sgpr_waves = 6 + elif sgprs <= 96: + sgpr_waves = 5 + else: + sgpr_waves = 4 + + vgpr_waves = 10 + if vgprs <= 24: + vgpr_waves = 10 + elif vgprs <= 28: + vgpr_waves = 9 + elif vgprs <= 32: + vgpr_waves = 8 + elif vgprs <= 36: + vgpr_waves = 7 + elif vgprs <= 40: + vgpr_waves = 6 + elif vgprs <= 48: + vgpr_waves = 5 + elif vgprs <= 64: + vgpr_waves = 4 + elif vgprs <= 84: + vgpr_waves = 3 + elif vgprs <= 128: + vgpr_waves = 2 + else: + vgpr_waves = 1 + + return min(sgpr_waves, vgpr_waves) + def get_results(filename): file = open(filename, "r") lines = file.read().split('\n') @@ -199,6 +250,7 @@ def get_results(filename): current_stats.scratch = int(match.groups()[0]) continue + current_stats.max_waves_per_cu = compute_max_waves_per_cu(current_stats.sgprs, current_stats.vgprs) match = re.search(re_end, line) if match: results.append(current_stats) -- 2.0.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev