61 lines
1.5 KiB
Python
Executable File
61 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
#
|
|
# Copyright (c) 2018 Stefan Seefeld
|
|
# All rights reserved.
|
|
#
|
|
# This file is part of Boost.uBLAS. It is made available under the
|
|
# Boost Software License, Version 1.0.
|
|
# (Consult LICENSE or http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
import argparse
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
|
|
class plot(object):
|
|
|
|
def __init__(self, label, data):
|
|
self.label = label
|
|
self.data = data
|
|
|
|
|
|
def load_file(filename):
|
|
|
|
lines = open(filename, 'r').readlines()
|
|
label = lines[0][1:-1].strip()
|
|
lines = [l.strip() for l in lines]
|
|
lines = [l.split('#', 1)[0] for l in lines]
|
|
lines = [l for l in lines if l]
|
|
data = [l.split() for l in lines]
|
|
return plot(label, list(zip(*data)))
|
|
|
|
|
|
def main(argv):
|
|
|
|
parser = argparse.ArgumentParser(prog=argv[0], description='benchmark plotter')
|
|
parser.add_argument('data', nargs='+', help='benchmark data to plot')
|
|
parser.add_argument('--log', choices=['no', 'all', 'x', 'y'], help='use a logarithmic scale')
|
|
args = parser.parse_args(argv[1:])
|
|
runs = [load_file(d) for d in args.data]
|
|
plt.title('Benchmark plot')
|
|
plt.xlabel('size')
|
|
plt.ylabel('time (s)')
|
|
if args.log == 'all':
|
|
plot = plt.loglog
|
|
elif args.log == 'x':
|
|
plot = plt.semilogx
|
|
elif args.log == 'y':
|
|
plot = plt.semilogy
|
|
else:
|
|
plot = plt.plot
|
|
plots = [plot(r.data[0], r.data[1], label=r.label) for r in runs]
|
|
plt.legend()
|
|
plt.show()
|
|
return True
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys
|
|
sys.exit(0 if main(sys.argv) else 1)
|