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

Merge branch 'feature/barcharts' into 'master'

Barplots

See merge request !154
parents 3a526d1d 79a45979
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)
import itertools
import pandas
import matplotlib
import sys
matplotlib.use("PDF")
import matplotlib.pyplot as plt
filename = sys.argv[1]
fig, ax = plt.subplots()
if len(sys.argv) > 2:
# Use 0.35 - 0.4 for a 1-10 plot
width = float(sys.argv[2])
else:
width = 0.5
opframe = pandas.read_csv("./operations.csv",
header=None,
delimiter=" ",
names=("exec", "degree", "what", "ops"),
)
av1 = opframe[opframe.what == "alpha_volume_kernel_stage1"]
av2 = opframe[opframe.what == "alpha_volume_kernel_quadratureloop"]
av3 = opframe[opframe.what == "alpha_volume_kernel_stage3"]
ask1 = opframe[opframe.what == "alpha_skeleton_kernel_stage1"]
ask2 = opframe[opframe.what == "alpha_skeleton_kernel_quadratureloop"]
ask3 = opframe[opframe.what == "alpha_skeleton_kernel_stage3"]
ab = opframe[opframe.what == "alpha_boundary_kernel"]
deg = [i - width/1.8 for i in sorted(av1['degree'])]
def update(frame, result=None):
_, y = list(itertools.izip(*sorted(itertools.izip(frame['degree'], frame['ops']))))
if result is None:
return y
else:
return [a+b for a, b in zip(y, result)]
y1 = update(av1)
y2 = update(av2, y1)
y3 = update(av3, y2)
y4 = update(ask1, y3)
y5 = update(ask2, y4)
y6 = update(ask3, y5)
y7 = update(ab, y6)
y8 = [1.0] * len(deg)
r8 = ax.bar(deg, y8, width, color="grey")
r7 = ax.bar(deg, y7, width, color="green")
r6 = ax.bar(deg, y6, width, color="xkcd:light blue")
r5 = ax.bar(deg, y5, width, color="xkcd:blue")
r4 = ax.bar(deg, y4, width, color="xkcd:dark blue")
r3 = ax.bar(deg, y3, width, color="yellow")
r2 = ax.bar(deg, y2, width, color="orange")
r1 = ax.bar(deg, y1, width, color="red")
ax.set_ylabel("Percentage")
ax.set_xticks(sorted(av1['degree']))
ax.set_xticklabels(["Q{}".format(k) for k in sorted(av1['degree'])])
timeframe = pandas.read_csv("./timeratios.csv",
header=None,
delimiter=" ",
names=("exec", "degree", "what", "ops"),
)
av1 = timeframe[timeframe.what == "alpha_volume_kernel_stage1"]
av2 = timeframe[timeframe.what == "alpha_volume_kernel_quadratureloop"]
av3 = timeframe[timeframe.what == "alpha_volume_kernel_stage3"]
ask1 = timeframe[timeframe.what == "alpha_skeleton_kernel_stage1"]
ask2 = timeframe[timeframe.what == "alpha_skeleton_kernel_quadratureloop"]
ask3 = timeframe[timeframe.what == "alpha_skeleton_kernel_stage3"]
ab = timeframe[timeframe.what == "alpha_boundary_kernel"]
deg = [i + width/1.8 for i in sorted(av1['degree'])]
y1 = update(av1)
y2 = update(av2, y1)
y3 = update(av3, y2)
y4 = update(ask1, y3)
y5 = update(ask2, y4)
y6 = update(ask3, y5)
y7 = update(ab, y6)
y8 = [1.0] * len(deg)
r8 = ax.bar(deg, y8, width, label="PDELab overhead", color="grey")
r7 = ax.bar(deg, y7, width, label="Boundary", color="green")
r6 = ax.bar(deg, y6, width, label="Skeleton, backward SF", color="xkcd:light blue")
r5 = ax.bar(deg, y5, width, label="Skeleton, Quadrature", color="xkcd:blue")
r4 = ax.bar(deg, y4, width, label="Skeleton, forward SF", color="xkcd:dark blue")
r3 = ax.bar(deg, y3, width, label="Volume, backward SF", color="yellow")
r2 = ax.bar(deg, y2, width, label="Volume, Quadrature", color="orange")
r1 = ax.bar(deg, y1, width, label="Volume, forward SF", color="red")
lgd = ax.legend(loc=3,
ncol=2,
bbox_to_anchor=(0.05, 1., 1., .1),
)
texts = []
for x in av1['degree']:
texts.append(ax.text(x, -0.09, "Flops", rotation=45, horizontalalignment="right"))
texts.append(ax.text(x + width, -0.09, "Time", rotation=45, horizontalalignment="right"))
plt.savefig(filename,
bbox_extra_artists=tuple(texts) + (lgd,),
bbox_inches='tight')
......@@ -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,6 @@ setup(name='perftoolcoveniencescripts',
scripts=['performance_regression.py',
'plot_measurements.py',
'process_measurements.py',
'barplot_coarse.py',
'barplot_fine.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