Following patch enhances scripts and fixed various small issues. Ready to be installed?
Martin
>From 626b70eb3526d848e2f1741f8b2384c518d2067b Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Fri, 9 Dec 2016 11:00:16 +0100 Subject: [PATCH] Enhance analyze_brprob script contrib/ChangeLog: 2016-12-09 Martin Liska <mli...@suse.cz> * analyze_brprob.py: Add new column to output and new sorting option. Fix coding style to not exceed 80 characters. * analyze_brprob_spec.py: Add new sorting option. Fix coding style to not exceed 80 characters. --- contrib/analyze_brprob.py | 39 ++++++++++++++++++++++++++++----------- contrib/analyze_brprob_spec.py | 9 ++++++--- 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/contrib/analyze_brprob.py b/contrib/analyze_brprob.py index 7e66271..b4dbbc4 100755 --- a/contrib/analyze_brprob.py +++ b/contrib/analyze_brprob.py @@ -69,7 +69,8 @@ import argparse from math import * -counter_aggregates = set(['combined', 'first match', 'DS theory', 'no prediction']) +counter_aggregates = set(['combined', 'first match', 'DS theory', + 'no prediction']) def percentage(a, b): return 100.0 * a / b @@ -93,12 +94,16 @@ class Summary: def __init__(self, name): self.name = name self.branches = 0 + self.successfull_branches = 0 self.count = 0 self.hits = 0 self.fits = 0 def get_hitrate(self): - return self.hits / self.count + return 100.0 * self.hits / self.count + + def get_branch_hitrate(self): + return 100.0 * self.successfull_branches / self.branches def count_formatted(self): v = self.count @@ -109,10 +114,11 @@ class Summary: return "%.1f%s" % (v, 'Y') def print(self, branches_max, count_max): - print('%-40s %8i %5.1f%% %6.2f%% / %6.2f%% %14i %8s %5.1f%%' % + print('%-40s %8i %5.1f%% %11.2f%% %7.2f%% / %6.2f%% %14i %8s %5.1f%%' % (self.name, self.branches, percentage(self.branches, branches_max), - percentage(self.hits, self.count), + self.get_branch_hitrate(), + self.get_hitrate(), percentage(self.fits, self.count), self.count, self.count_formatted(), percentage(self.count, count_max))) @@ -129,11 +135,16 @@ class Profile: s = self.heuristics[name] s.branches += 1 + s.count += count if prediction < 50: hits = count - hits + remaining = count - hits + if hits >= remaining: + s.successfull_branches += 1 + s.hits += hits - s.fits += max(hits, count - hits) + s.fits += max(hits, remaining) def add_loop_niter(self, niter): if niter > 0: @@ -150,15 +161,18 @@ class Profile: branches_max = self.branches_max() sorter = lambda x: x.branches - if sorting == 'hitrate': + if sorting == 'branch-hitrate': + sorter = lambda x: x.get_branch_hitrate() + elif sorting == 'hitrate': sorter = lambda x: x.get_hitrate() elif sorting == 'coverage': sorter = lambda x: x.count elif sorting == 'name': sorter = lambda x: x.name.lower() - print('%-40s %8s %6s %-16s %14s %8s %6s' % (group_name, - 'BRANCHES', '(REL)', 'HITRATE', 'COVERAGE', 'COVERAGE', '(REL)')) + print('%-40s %8s %6s %12s %18s %14s %8s %6s' % + ('HEURISTICS', 'BRANCHES', '(REL)', + 'BR. HITRATE', 'HITRATE', 'COVERAGE', 'COVERAGE', '(REL)')) for h in sorted(heuristics, key = sorter): h.print(branches_max, count_max) @@ -183,12 +197,15 @@ class Profile: print(' median # of iter: %.2f' % median(self.niter_vector)) for v in [1, 5, 10, 20, 30]: cut = 0.01 * v - print(' avg. (%d%% cutoff) # of iter: %.2f' % (v, average_cutoff(self.niter_vector, cut))) + print(' avg. (%d%% cutoff) # of iter: %.2f' + % (v, average_cutoff(self.niter_vector, cut))) parser = argparse.ArgumentParser() -parser.add_argument('dump_file', metavar = 'dump_file', help = 'IPA profile dump file') +parser.add_argument('dump_file', metavar = 'dump_file', + help = 'IPA profile dump file') parser.add_argument('-s', '--sorting', dest = 'sorting', - choices = ['branches', 'hitrate', 'coverage', 'name'], default = 'branches') + choices = ['branches', 'branch-hitrate', 'hitrate', 'coverage', 'name'], + default = 'branches') args = parser.parse_args() diff --git a/contrib/analyze_brprob_spec.py b/contrib/analyze_brprob_spec.py index effdc21..908db39 100755 --- a/contrib/analyze_brprob_spec.py +++ b/contrib/analyze_brprob_spec.py @@ -25,9 +25,11 @@ import argparse script_location = os.path.realpath(__file__) parser = argparse.ArgumentParser() -parser.add_argument('location', metavar = 'dump_file', help = 'Location with SPEC benchmarks') +parser.add_argument('location', metavar = 'dump_file', + help = 'Location with SPEC benchmarks') parser.add_argument('-s', '--sorting', dest = 'sorting', - choices = ['branches', 'hitrate', 'coverage', 'name'], default = 'branches') + choices = ['branches', 'branch-hitrate', 'hitrate', 'coverage', 'name'], + default = 'branches') args = parser.parse_args() @@ -52,7 +54,8 @@ for b in sorted(benchmarks): print() print(b) sys.stdout.flush() - p = [os.path.join(os.path.dirname(script_location), 'analyze_brprob.py'), temp.name, '--sorting', args.sorting] + p = [os.path.join(os.path.dirname(script_location), 'analyze_brprob.py'), + temp.name, '--sorting', args.sorting] p = subprocess.check_call(p) sys.stdout.flush() -- 2.10.2