@@ -79,12 +79,13 @@ 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):
+def process_results(results, attrs, funcs, base_func, graph):
""" 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():
@@ -92,11 +93,32 @@ def process_results(results, attrs, base_func, graph):
v = results['functions'][f]['bench-variant']
print('Variant: %s' % v)
+ 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:
base_index = results['functions'][f]['ifuncs'].index(base_func)
- print("%36s%s" % (' ', '\t'.join(results['functions'][f]['ifuncs'])))
+ print("%36s%s" % (' ', '\t'.join(ifuncs)))
print("=" * 120)
graph_res = {}
for res in results['functions'][f]['results']:
@@ -106,12 +128,13 @@ def process_results(results, attrs, base_func, graph):
sys.stdout.write('%36s: ' % key)
graph_res[key] = res['timings']
for t in res['timings']:
- sys.stdout.write ('%12.2f' % t)
- 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 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('')
@@ -130,9 +153,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)
+ process_results(results, attrs, funcs, base_func, args.graph)
if __name__ == '__main__':
@@ -148,6 +178,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',