#!/usr/bin/env python3 import re import sys basename = sys.argv[1] bench_pattern = re.compile('^(.+?)\s+(\d+\.?\d*) ns\s+(\d+\.?\d*) ns\s+(\d+)') def parse_file(filename): res = [] with open(filename) as f: # ignore header f.readline() f.readline() f.readline() while line := f.readline(): m = bench_pattern.match(line) res.append((m.group(1), float(m.group(2)), float(m.group(3)), int(m.group(4)))) return res untuned = parse_file(basename + '-untuned') tuned = parse_file(basename + '-tuned') print(f'{"Benchmark":50} {"Time":>8} {"CPU":>8} {"Iterations":>8}') for (u_name, u_time, u_cpu, u_iterations), \ (t_name, t_time, t_cpu, t_iterations) in zip(untuned, tuned): assert u_name == t_name rel_time = (t_time - u_time) / u_time rel_cpu = (t_cpu - u_cpu) / u_cpu rel_iterations = (t_iterations - u_iterations) / u_iterations print(f'{u_name:50} {rel_time * 100:6.1f} % {rel_cpu * 100:6.1f} % {rel_iterations * 100:6.1f} %')