Skip to content
Snippets Groups Projects
Commit 45ad9913 authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Add a barplot

parent 3a526d1d
No related branches found
No related tags found
No related merge requests found
import itertools
import pandas
import matplotlib
import sys
matplotlib.use("PDF")
import matplotlib.pyplot as plt
filename = sys.argv[1]
fig, ax = plt.subplots()
width = 0.5
opframe = pandas.read_csv("./operations.csv",
header=None,
delimiter=" ",
names=("exec", "degree", "what", "ops"),
)
av = opframe[opframe.what == "alpha_volume_kernel"]
ask = opframe[opframe.what == "alpha_skeleton_kernel"]
ab = opframe[opframe.what == "alpha_boundary_kernel"]
deg = [i - 0.3 for i in sorted(av['degree'])]
_, y1 = list(itertools.izip(*sorted(itertools.izip(av['degree'], av['ops']))))
_, y2 = list(itertools.izip(*sorted(itertools.izip(ask['degree'], ask['ops']))))
y2 = [a+b for a, b in zip(y1, y2)]
_, y3 = list(itertools.izip(*sorted(itertools.izip(ab['degree'], ab['ops']))))
y3 = [a+b for a, b in zip(y2, y3)]
y4 = [1.0] * len(deg)
r4 = ax.bar(deg, y4, width, color="grey")
r3 = ax.bar(deg, y3, width, color="green")
r2 = ax.bar(deg, y2, width, color="blue")
r1 = ax.bar(deg, y1, width, color="red")
ax.set_ylabel("Percentage")
ax.set_xticks(sorted(av['degree']))
ax.set_xticklabels(["Q{}".format(k) for k in sorted(av['degree'])])
timeframe = pandas.read_csv("./timeratios.csv",
header=None,
delimiter=" ",
names=("exec", "degree", "what", "ops"),
)
av = timeframe[timeframe.what == "alpha_volume_kernel"]
ask = timeframe[timeframe.what == "alpha_skeleton_kernel"]
ab = timeframe[timeframe.what == "alpha_boundary_kernel"]
deg = [i + 0.3 for i in sorted(av['degree'])]
_, y1 = list(itertools.izip(*sorted(itertools.izip(av['degree'], av['ops']))))
_, y2 = list(itertools.izip(*sorted(itertools.izip(ask['degree'], ask['ops']))))
y2 = [a+b for a, b in zip(y1, y2)]
_, y3 = list(itertools.izip(*sorted(itertools.izip(ab['degree'], ab['ops']))))
y3 = [a+b for a, b in zip(y2, y3)]
y4 = [1.0] * len(deg)
r4 = ax.bar(deg, y4, width, color="grey", label="PDELab overhead")
r3 = ax.bar(deg, y3, width, color="green", label="Boundary integrals")
r2 = ax.bar(deg, y2, width, color="blue", label="Skeleton integrals")
r1 = ax.bar(deg, y1, width, color="red", label="Volume integrals")
ax.legend(loc=3,
ncol=2,
bbox_to_anchor=(0.1, 1., 1., .1),
)
for x in av['degree']:
ax.text(x, -0.09, "Flops", rotation=45, horizontalalignment="right")
ax.text(x + 0.6, -0.09, "Time", rotation=45, horizontalalignment="right")
plt.savefig(filename)
......@@ -14,6 +14,36 @@ def join_csv_files():
out.write("{} {}".format(match.group(1), line))
def get_reference_kernel(kernel):
if kernel.startswith("alpha"):
return "residual_evaluation"
if kernel.startswith("jacobian_apply"):
return "apply_jacobian"
return kernel
def calculate_operations_percentage():
frame = pandas.read_csv('timings.csv', header=None, names=('rank', 'ident', 'kernel', 'what', 'value'), delimiter=' ')
ops = frame[frame.what != "time"]
ops = ops.groupby(('rank', 'ident', 'kernel'))['value'].max().to_frame().reset_index().groupby(('ident', 'kernel'))['value'].max()
with open('operations.csv', 'w') as out:
for key in ops.keys():
ident, kernel = key
degree = re.match(".*deg([0-9]*).*", ident).group(1)
out.write(" ".join([ident, degree, kernel, str(ops[ident][kernel] / ops[ident][get_reference_kernel(kernel)]) + "\n"]))
def calculate_times_percentage():
frame = pandas.read_csv('timings.csv', header=None, names=('rank', 'ident', 'kernel', 'what', 'value'), delimiter=' ')
time = frame[frame.what == "time"]
time = time.groupby(('rank', 'ident', 'kernel'))['value'].min().to_frame().reset_index().groupby(('ident', 'kernel'))['value'].max()
with open('timeratios.csv', 'w') as out:
for key in time.keys():
ident, kernel = key
degree = re.match(".*deg([0-9]*).*", ident).group(1)
out.write(" ".join([ident, degree, kernel, str(time[ident][kernel] / time[ident][get_reference_kernel(kernel)]) + "\n"]))
def calculate_floprate():
frame = pandas.read_csv('timings.csv', header=None, names=('rank', 'ident', 'kernel', 'what', 'value'), delimiter=' ')
time = frame[frame.what == "time"]
......@@ -48,3 +78,5 @@ if __name__ == '__main__':
join_csv_files()
calculate_floprate()
calculate_doftimes()
calculate_operations_percentage()
calculate_times_percentage()
......@@ -16,4 +16,5 @@ setup(name='perftoolcoveniencescripts',
scripts=['performance_regression.py',
'plot_measurements.py',
'process_measurements.py',
'barplot.py',
])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment