diff --git a/bin/CMakeLists.txt b/bin/CMakeLists.txt index 847e89353290b4720c5a89773bf00fd566a89ae2..c1aaf2f56753ff1efd504ba81ad5a5090fefeddf 100644 --- a/bin/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -1 +1,3 @@ -dune_symlink_to_source_files(FILES make_graph.sh) +dune_symlink_to_source_files(FILES make_graph.sh + performance_regression.py + ) diff --git a/bin/performance_regression.py b/bin/performance_regression.py new file mode 100755 index 0000000000000000000000000000000000000000..7ef368a43d317d7d7afad8d2cfca0d0174054304 --- /dev/null +++ b/bin/performance_regression.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python + +import pandas +import subprocess +import sys + +class color: + GREEN = '\033[92m' + RED = '\033[91m' + ENDC = '\033[0m' + + +def parse_data(): + frame = pandas.read_csv('timings.csv', header=None, names=('exec', 'kernel', 'time'), delimiter=' ') + data = frame.groupby(('exec', 'kernel'))['time'].min() + + return data + + +def run(): + subprocess.call("make -j2 build_tests".split()) + subprocess.call("rm timings.csv".split()) + for i in range(10): + subprocess.call("ctest".split()) + + +def regression_summary(): + # Get timings + run() + data1 = parse_data() + + # Switch to reference data + subprocess.call(sys.argv[1:]) + + # Get reference timings + run() + data2 = parse_data() + + for key in data1.keys(): + exe, kernel = key + diff = data1[exe][kernel] - data2[exe][kernel] + rel = abs(diff / data2[exe][kernel]) + s = exe + '/' + kernel + ': ' + str(rel) + c = '' + if rel > 0.02: + if diff > 0.: + c = color.RED + else: + c = color.GREEN + + print(c + s + color.ENDC) + + +if __name__ == '__main__': + regression_summary()