[Mesa-dev] [PATCH shader-db 3/5] nv-report: additionally report changes in only affected programs

Ilia Mirkin imirkin at alum.mit.edu
Fri Aug 3 21:28:00 UTC 2018


FWIW I've avoided looking at the "affected" stats, since IMHO they're
meaningless. A lot of people like to look at them to increase the
apparent significance of their optimization. If a change reduces a
shader's instructions by 99%, it's not that big of a deal if it's the
only shader where it does anything out of thousands/millions in the
shader library.

On to the implementation, I'd prefer having a "include" instead
"exclude" in here... and you can then alternatively pass
x.stats.iterkeys() (or None perhaps, to imply that) or just the list
of stats you want to analyze.

Also, having a mutable default argument is a recipe for disaster. It
doesn't matter here, but it's an object reference that gets stored,
and mutating that argument will cause the value of later invocations
to change.

On Fri, Aug 3, 2018 at 3:53 PM, Rhys Perry <pendingchaos02 at gmail.com> wrote:
> Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
> ---
>  nv-report.py | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
>
> diff --git a/nv-report.py b/nv-report.py
> index 487074fdd6..079b2e08a3 100644
> --- a/nv-report.py
> +++ b/nv-report.py
> @@ -46,11 +46,13 @@ class Stats(object):
>          assert name not in self.stats, name
>          self.stats[name] = stat
>
> -    def create_totals(self):
> +    def create_totals(self, exclude=set()):
>          for attr in STATS:
>              setattr(self, attr, 0)
>
>          for key, stat in self.stats.iteritems():
> +            if key in exclude:
> +                continue
>              for attr in STATS:
>                  setattr(self, attr, getattr(self, attr) + getattr(stat, attr))
>
> @@ -83,14 +85,20 @@ def diff(a, b):
>          percentage = float('inf')
>      return "%d -> %d (%.2f%%)" % (a, b, percentage)
>
> -def print_summary(before, after):
> -    before.create_totals()
> -    after.create_totals()
> +def print_summary(before, after, keys, only_affected):
> +    exclude = set()
> +    for key in keys if only_affected else []:
> +        if before.stats[key] == after.stats[key]:
> +            exclude.add(key)
> +    before.create_totals(exclude)
> +    after.create_totals(exclude)
> +
> +    programs = "affected" if only_affected else "shared"
>
> -    print "total instructions in shared programs :", diff(before.inst, after.inst)
> -    print "total gprs used in shared programs    :", diff(before.gpr, after.gpr)
> -    print "total shared used in shared programs  :", diff(before.shared, after.shared)
> -    print "total local used in shared programs   :", diff(before.local, after.local)
> +    print "total instructions in %s programs :" % programs, diff(before.inst, after.inst)
> +    print "total gprs used in %s programs    :" % programs, diff(before.gpr, after.gpr)
> +    print "total shared used in %s programs  :" % programs, diff(before.shared, after.shared)
> +    print "total local used in %s programs   :" % programs, diff(before.local, after.local)
>
>  def print_helped_hurt(keys, before, after):
>      helped = Stat()
> @@ -132,7 +140,9 @@ def main(argv):
>              continue
>          keys.add(key)
>
> -    print_summary(before, after)
> +    print_summary(before, after, keys, False)
> +    print
> +    print_summary(before, after, keys, True)
>      print
>      print_helped_hurt(keys, before, after)
>
> --
> 2.14.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list