1import matplotlib.pyplot
as plt
2import matplotlib
as mpl
9from pathlib
import Path
10import matplotlib.ticker
as mticker
11from matplotlib.lines
import Line2D
14 return r"$10^{:.0f}$".format(val)
17 return r"$2^{:.0f}$".format(val)
23 "font.family":
"serif",
24 "legend.fontsize": 20,
25 "xtick.labelsize": 16,
26 "ytick.labelsize": 16,
27 "xtick.direction":
"in",
28 "ytick.direction":
"in",
31 "xtick.major.width": 1.5,
32 "ytick.major.width": 1.5,
33 "axes.linewidth": 1.5,
37 "figure.autolayout":
True,
40mpl.rcParams.update(params)
42cells = [
'0064',
'0128',
'0256',
'0512',
'1024']
43arches = [
'x64',
'aarch64']
44predicates = [
'true',
'false']
45symmetry = [
'true',
'false']
48 'force': [
'scattered,generic',
50 'continuous,local-active-coalesced',
51 'continuous,active-local-coalesced'],
52 'density': [
'scattered,generic',
54 'continuous,local-active-coalesced',
55 'continuous,active-local-coalesced'],
56 'kick1': [
'scattered,generic',
58 'continuous,coalesced'],
59 'kick2': [
'scattered,generic',
61 'continuous,coalesced'],
62 'drift': [
'scattered,generic',
64 'continuous,coalesced'],
68 'scattered,generic':
'generic scat.',
69 'continuous,generic':
'generic cont.',
70 'continuous,coalesced':
'coalesced cont.',
71 'continuous,local-active-coalesced':
'coalesced local-active cont.',
72 'continuous,active-local-coalesced':
'coalesced active-local cont.',
76 variant_prefix = f
'{kernel} ({kernel_variant}):\t'
77 variant_times_aos = [float(line.split(variant_prefix)[1].split(
' ')[0])
for line
in data_aos.split(
'\n')
if variant_prefix
in line]
78 variant_times_soa = [float(line.split(variant_prefix)[1].split(
' ')[0])
for line
in data_soa.split(
'\n')
if variant_prefix
in line]
79 variant_speedups = np.array(variant_times_aos) / np.array(variant_times_soa)
81 particle_sizes = [int(line.split(
"Experiment:" )[1].split(
"particles" )[0])
for line
in data_aos.split(
'\n')
if 'Experiment' in line]
82 return particle_sizes, variant_speedups
85 data_aos = Path(f
'{folder}/out-{arch}-soafalse-cell{cell}-pred{pred}-sym{sym}.log').read_text()
86 data_soa = Path(f
'{folder}/out-{arch}-soatrue-cell{cell}-pred{pred}-sym{sym}.log').read_text()
90 data_aos = Path(f
'{folder}/out-{arch}-soafalse-cell{cell}-predfalse-symfalse-gpufalse.log').read_text()
91 data_soa = Path(f
'{folder}/out-{arch}-soatrue-cell{cell}-predfalse-symfalse-gputrue.log').read_text()
95 data_aos = Path(f
'{folder}/out-{arch}-soafalse-cell{cell}-predfalse-symfalse-gpufalse-shmem.log').read_text()
96 data_soa = Path(f
'{folder}/out-{arch}-soatrue-cell{cell}-predfalse-symfalse-gputrue-shmem.log').read_text()
99Colors = [
"#20a040",
"#a04020",
"#4020a0",
"#f0a0f0",
"#f06030",
"#6030f0" ]
100Symbols = [
"-s",
"-o",
"-^",
"-v",
"-<",
"->" ]
106 mpl.rcParams.update(params)
108 for counter, variant
in enumerate(kernels[kernel]):
109 for pred
in predicates:
111 pred =
True if pred ==
'true' else False
112 symbol = f
'{'-
' if not pred else ''}{Symbols[counter]}'
113 variant_name = kernel_names[variant]
114 plt.plot(particle_sizes, speedups, symbol, color=Colors[counter], label=f
'{variant_name}(pred. {'on
' if pred else 'off
'})')
116 plt.xlabel(
"Particles")
117 plt.ylabel(
"Norm kernel speedup over AoS version")
119 plt.xscale(
'log', base=10)
122 plt.grid(
True, which=
'both')
124 plt.axhline(y = 1, color =
'k', linestyle =
'--')
126 plt.savefig(f
"{folder}/plot-1-{arch}-{kernel}.pdf")
127 plt.savefig(f
"{folder}/plot-1-{arch}-{kernel}.png")
129 legend = plt.legend()
130 fig_legend = plt.figure(figsize=(14, 2))
131 ax_legend = fig_legend.add_subplot(111)
132 ax_legend.axis(
"off")
133 ax_legend.legend(handles=legend.legend_handles, labels=[text.get_text()
for text
in legend.get_texts()], loc=
"center", ncol=4, frameon=
False)
134 fig_legend.savefig(f
"{folder}/plot-1-{arch}-{kernel}-legend.pdf", bbox_inches=
'tight', dpi=300)
135 fig_legend.savefig(f
"{folder}/plot-1-{arch}-{kernel}-legend.png", bbox_inches=
'tight', dpi=300)
144 mpl.rcParams.update(params)
146 ax = plt.axes(projection=
'3d')
148 ax.set_xlabel(
"Particles")
149 ax.set_ylabel(
"Cell size")
150 ax.set_zlabel(
'Norm kernel speedup over AoS version', rotation=60)
152 ax.xaxis.set_major_formatter(mticker.FuncFormatter(log10_tick_formatter))
153 ax.yaxis.set_major_formatter(mticker.FuncFormatter(log2_tick_formatter))
156 for counter, variant
in enumerate(kernels[kernel]):
157 variant_name = kernel_names[variant]
158 marker = f
'{Symbols[counter][-1]}'
159 colour = Colors[counter]
160 legend_handles += [Line2D([0], [0], marker=marker, color=colour, label=f
'{variant_name}', linestyle=
'--')]
163 ax.plot(np.log10(particle_sizes), np.log2(np.full_like(particle_sizes, int(cell))), speedups, color=colour, marker=marker, linestyle=
'--')
165 plt.savefig(f
"{folder}/plot-2-{arch}-{kernel}.pdf")
166 plt.savefig(f
"{folder}/plot-2-{arch}-{kernel}.png")
168 fig_legend = plt.figure(figsize=(14, 1))
169 ax_legend = fig_legend.add_subplot(111)
170 ax_legend.axis(
"off")
171 ax_legend.legend(handles=legend_handles, loc=
"center", ncol=4, frameon=
False)
172 fig_legend.savefig(f
"{folder}/plot-2-{arch}-{kernel}-legend.pdf", bbox_inches=
'tight', dpi=300)
173 fig_legend.savefig(f
"{folder}/plot-2-{arch}-{kernel}-legend.png", bbox_inches=
'tight', dpi=300)
182 mpl.rcParams.update(params)
184 ax = plt.axes(projection=
'3d')
186 ax.set_xlabel(
"Particles")
187 ax.set_ylabel(
"Cell size")
188 ax.set_zlabel(
'Norm kernel speedup over AoS version')
190 ax.xaxis.set_major_formatter(mticker.FuncFormatter(log10_tick_formatter))
191 ax.yaxis.set_major_formatter(mticker.FuncFormatter(log2_tick_formatter))
194 for counter, variant
in enumerate(kernels[kernel][0:2]):
195 variant_name = kernel_names[variant]
196 marker = f
'{Symbols[counter][-1]}'
197 colour = Colors[counter]
198 legend_handles += [Line2D([0], [0], marker=marker, color=colour, label=f
'{variant_name}', linestyle=
'--')]
201 ax.plot(np.log10(particle_sizes), np.log2(np.full_like(particle_sizes, int(cell))), speedups, color=colour, marker=marker, linestyle=
'--')
203 plt.savefig(f
"{folder}/plot-3-{arch}-{kernel}.pdf")
204 plt.savefig(f
"{folder}/plot-3-{arch}-{kernel}.png")
206 fig_legend = plt.figure(figsize=(14, 1))
207 ax_legend = fig_legend.add_subplot(111)
208 ax_legend.axis(
"off")
209 ax_legend.legend(handles=legend_handles, loc=
"center", ncol=4, frameon=
False)
210 fig_legend.savefig(f
"{folder}/plot-3-{arch}-{kernel}-legend.pdf", bbox_inches=
'tight', dpi=300)
211 fig_legend.savefig(f
"{folder}/plot-3-{arch}-{kernel}-legend.png", bbox_inches=
'tight', dpi=300)
221 mpl.rcParams.update(params)
223 ax = plt.axes(projection=
'3d')
225 ax.set_xlabel(
"Particles")
226 ax.set_ylabel(
"Cell size")
227 ax.set_zlabel(
'Norm kernel speedup over AoS version')
229 ax.xaxis.set_major_formatter(mticker.FuncFormatter(log10_tick_formatter))
230 ax.yaxis.set_major_formatter(mticker.FuncFormatter(log2_tick_formatter))
233 for counter, variant
in enumerate(kernels[kernel][0:2]):
234 variant_name = kernel_names[variant]
235 marker = f
'{Symbols[counter][-1]}'
236 colour = Colors[counter]
237 legend_handles += [Line2D([0], [0], marker=marker, color=colour, label=f
'{variant_name}', linestyle=
'--')]
240 ax.plot(np.log10(particle_sizes), np.log2(np.full_like(particle_sizes, int(cell))), speedups, color=colour, marker=marker, linestyle=
'--')
242 plt.savefig(f
"{folder}/plot-4-{arch}-{kernel}.pdf")
243 plt.savefig(f
"{folder}/plot-4-{arch}-{kernel}.png")
245 fig_legend = plt.figure(figsize=(14, 1))
246 ax_legend = fig_legend.add_subplot(111)
247 ax_legend.axis(
"off")
248 ax_legend.legend(handles=legend_handles, loc=
"center", ncol=4, frameon=
False)
249 fig_legend.savefig(f
"{folder}/plot-4-{arch}-{kernel}-legend.pdf", bbox_inches=
'tight', dpi=300)
250 fig_legend.savefig(f
"{folder}/plot-4-{arch}-{kernel}-legend.png", bbox_inches=
'tight', dpi=300)
257 for kernel
in kernels:
263 for kernel
in kernels:
269 for kernel
in kernels:
275 for kernel
in kernels:
281if __name__==
"__main__":
282 if len(sys.argv) < 2:
283 print(
"ERROR: Please pass in folders to work on. ")
285 for folder
in sys.argv[1:]:
log10_tick_formatter(val, pos=None)
print_graph_3(folder, arch, kernel)
log2_tick_formatter(val, pos=None)
print_graph_2(folder, arch, kernel)
read_kernel_speedup_classic(folder, arch, kernel, kernel_variant, pred, sym='false', cell=cells[-1])
read_kernel_speedup_offload(folder, arch, kernel, kernel_variant, cell=cells[-1])
print_graph_1(folder, arch, kernel)
print_graph_4(folder, arch, kernel)
read_kernel_speedup(data_aos, data_soa, kernel, kernel_variant)
read_kernel_speedup_offload_shmem(folder, arch, kernel, kernel_variant, cell=cells[-1])