public inbox for glibc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Noah Goldstein <nwg@sourceware.org>
To: glibc-cvs@sourceware.org
Subject: [glibc] compare_strings.py : Add --gmean flag
Date: Tue,  4 Apr 2023 18:53:17 +0000 (GMT)	[thread overview]
Message-ID: <20230404185317.F1D373858C52@sourceware.org> (raw)

https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=51a121eb36d7cf016005413b4fe6995df2b7cef3

commit 51a121eb36d7cf016005413b4fe6995df2b7cef3
Author: Nisha Menon <nisha.s.menon@gmail.com>
Date:   Mon Apr 3 10:11:05 2023 -0400

    compare_strings.py : Add --gmean flag
    
    To calculate geometric mean for string benchmark results.
    
    Signed-off-by: Nisha Poyarekar <nisha.s.menon@gmail.com>

Diff:
---
 benchtests/scripts/compare_strings.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/benchtests/scripts/compare_strings.py b/benchtests/scripts/compare_strings.py
index 1195a6c741..a4ab3e42c2 100755
--- a/benchtests/scripts/compare_strings.py
+++ b/benchtests/scripts/compare_strings.py
@@ -21,6 +21,7 @@ Given a string benchmark result file, print a table with comparisons with a
 baseline.  The baseline is the first function, which typically is the builtin
 function.
 """
+import math
 import matplotlib as mpl
 mpl.use('Agg')
 
@@ -83,7 +84,8 @@ def draw_graph(f, v, ifuncs, results):
     pylab.savefig('%s-%s.png' % (f, v), bbox_inches='tight')
 
 
-def process_results(results, attrs, funcs, base_func, graph, no_diff, no_header):
+def process_results(results, attrs, funcs, base_func, graph, no_diff,
+                    no_header, gmean):
     """ Process results and print them
 
     Args:
@@ -132,6 +134,8 @@ def process_results(results, attrs, funcs, base_func, graph, no_diff, no_header)
             print("%36s%s" % (' ', '\t'.join(ifuncs)))
             print("=" * 120)
 
+        mean_row = [0 for i in range(len(ifuncs))]
+        total=0
         graph_res = {}
         for res in results['functions'][f]['results']:
             try:
@@ -144,8 +148,11 @@ def process_results(results, attrs, funcs, base_func, graph, no_diff, no_header)
             key = ', '.join(attr_list)
             sys.stdout.write('%36s: ' % key)
             graph_res[key] = res['timings']
+
             for t in res['timings']:
                 if selected[i]:
+                    if gmean:
+                        mean_row[i] = mean_row[i]+math.log(t)
                     sys.stdout.write ('%12.2f' % t)
                     if not no_diff:
                         if i != base_index:
@@ -159,6 +166,12 @@ def process_results(results, attrs, funcs, base_func, graph, no_diff, no_header)
         if graph:
             draw_graph(f, v, results['functions'][f]['ifuncs'], graph_res)
 
+        if gmean:
+            print("=" * 120)
+            total = len(results['functions'][f]['results'])
+            sys.stdout.write ('Geo-mean (for %s inputs)'%total)
+            for m in mean_row:
+                sys.stdout.write ('%12.2f' % (math.exp(m/total)))
 
 def main(args):
     """Program Entry Point
@@ -180,7 +193,8 @@ def main(args):
         funcs = None
 
     results = parse_file(args.input, args.schema)
-    process_results(results, attrs, funcs, base_func, args.graph, args.no_diff, args.no_header)
+    process_results(results, attrs, funcs, base_func, args.graph, args.no_diff,
+                    args.no_header, args.gmean)
     return os.EX_OK
 
 
@@ -207,6 +221,8 @@ if __name__ == '__main__':
                         help='Do not print the difference from baseline.')
     parser.add_argument('--no-header', action='store_true',
                         help='Do not print the header.')
+    parser.add_argument('--gmean', action='store_true',
+                        help='Print the geometric mean at the end of the output.')
 
     args = parser.parse_args()
     sys.exit(main(args))

                 reply	other threads:[~2023-04-04 18:53 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230404185317.F1D373858C52@sourceware.org \
    --to=nwg@sourceware.org \
    --cc=glibc-cvs@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).