about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rwxr-xr-xbenchtests/scripts/compare_strings.py52
2 files changed, 50 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 2a128846f0..a0a4749b03 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2018-06-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* benchtests/scripts/compare_strings.py (process_results): Add
+	funcs argument.  Compare only functions which are selected.
+	(main): Check if base function is among selected functions.
+	Pass selected functions to process_results.
+	(__main__): Add -f/--functions argument.
+
 2018-06-12  Minfeng Kang  <minfeng.kang@hxt-semitech.com>
 	    Hongbo Zhang  <hongbo.zhang@linaro.org>
 
diff --git a/benchtests/scripts/compare_strings.py b/benchtests/scripts/compare_strings.py
index ddce84a3ac..e3ad8ff058 100755
--- a/benchtests/scripts/compare_strings.py
+++ b/benchtests/scripts/compare_strings.py
@@ -82,19 +82,41 @@ def draw_graph(f, v, ifuncs, results):
     pylab.savefig('%s-%s.png' % (f, v), bbox_inches='tight')
 
 
-def process_results(results, attrs, base_func, graph, no_diff, no_header):
+def process_results(results, attrs, funcs, base_func, graph, no_diff, no_header):
     """ Process results and print them
 
     Args:
         results: JSON dictionary of results
         attrs: Attributes that form the test criteria
+        funcs: Functions that are selected
     """
 
     for f in results['functions'].keys():
 
         v = results['functions'][f]['bench-variant']
 
+        selected = {}
+        index = 0
         base_index = 0
+        if funcs:
+            ifuncs = []
+            first_func = True
+            for i in results['functions'][f]['ifuncs']:
+                if i in funcs:
+                    if first_func:
+                        base_index = index
+                        first_func = False
+                    selected[index] = 1
+                    ifuncs.append(i)
+                else:
+                    selected[index] = 0
+                index += 1
+        else:
+            ifuncs = results['functions'][f]['ifuncs']
+            for i in ifuncs:
+                selected[index] = 1
+                index += 1
+
         if base_func:
             try:
                 base_index = results['functions'][f]['ifuncs'].index(base_func)
@@ -106,7 +128,7 @@ def process_results(results, attrs, base_func, graph, no_diff, no_header):
         if not no_header:
             print('Function: %s' % f)
             print('Variant: %s' % v)
-            print("%36s%s" % (' ', '\t'.join(results['functions'][f]['ifuncs'])))
+            print("%36s%s" % (' ', '\t'.join(ifuncs)))
             print("=" * 120)
 
         graph_res = {}
@@ -122,13 +144,14 @@ def process_results(results, attrs, base_func, graph, no_diff, no_header):
             sys.stdout.write('%36s: ' % key)
             graph_res[key] = res['timings']
             for t in res['timings']:
-                sys.stdout.write ('%12.2f' % t)
-                if not no_diff:
-                    if i != base_index:
-                        base = res['timings'][base_index]
-                        diff = (base - t) * 100 / base
-                        sys.stdout.write (' (%6.2f%%)' % diff)
-                sys.stdout.write('\t')
+                if selected[i]:
+                    sys.stdout.write ('%12.2f' % t)
+                    if not no_diff:
+                        if i != base_index:
+                            base = res['timings'][base_index]
+                            diff = (base - t) * 100 / base
+                            sys.stdout.write (' (%6.2f%%)' % diff)
+                    sys.stdout.write('\t')
                 i = i + 1
             print('')
 
@@ -147,9 +170,16 @@ def main(args):
     schema_filename = args.schema
     base_func = args.base
     attrs = args.attributes.split(',')
+    if args.functions:
+        funcs = args.functions.split(',')
+        if base_func and not base_func in funcs:
+            print('Baseline function (%s) not found.' % base_func)
+            sys.exit(os.EX_DATAERR)
+    else:
+        funcs = None
 
     results = parse_file(args.input, args.schema)
-    process_results(results, attrs, 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)
     return os.EX_OK
 
 
@@ -166,6 +196,8 @@ if __name__ == '__main__':
                         help='Schema file to validate the result file.')
 
     # Optional arguments.
+    parser.add_argument('-f', '--functions',
+                        help='Comma separated list of functions.')
     parser.add_argument('-b', '--base',
                         help='IFUNC variant to set as baseline.')
     parser.add_argument('-g', '--graph', action='store_true',