This contains my bachelors thesis and associated tex files, code snippets and maybe more. Topic: Data Movement in Heterogeneous Memories with Intel Data Streaming Accelerator
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

77 lines
3.4 KiB

import os
import csv
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
output_path = "./plots"
hbm_result = "./evaluation-results/baseline/current-hbm/qdp-xeonmax-hbm-tca2-tcb0-tcj1-tmul16-wl4294967296-cs2097152.csv"
dram_result = "./evaluation-results/baseline/current-dram/qdp-xeonmax-dram-tca2-tcb0-tcj1-tmul16-wl4294967296-cs2097152.csv"
prefetch_result = "./evaluation-results/outofcacheallocation/qdp-xeonmax-prefetch-tca2-tcb1-tcj1-tmul16-wl4294967296-cs8388608.csv"
distprefetch_result = "./evaluation-results/distprefetch/qdp-xeonmax-distprefetch-tca1-tcb1-tcj1-tmul32-wl4294967296-cs8388608.csv"
tt_name = "rt-ns"
function_names = [ "scana-run", "scanb-run", "aggrj-run" ]
fn_nice = [ "Scan A, Filter", "Scan B, Prefetch", "Aggregate, Project + Sum" ]
def read_timings_from_csv(fname) -> tuple[list[float], list[str]]:
t = {}
row_count = 0
with open(fname, newline='') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
for row in reader:
row_count = row_count + 1
for i in range(len(function_names)):
t[fn_nice[i]] = t.get(fn_nice[i], 0) + int(row[function_names[i]])
t = {key: value / (1000 * 1000 * row_count) for key, value in t.items() if value != 0}
return list(t.values()), list(t.keys())
def get_data_prefetch_cache_access() -> tuple[list[float], list[str]]:
total = 0.47
data = [ 0.01, 0.01, 0.04, 0.42 ]
data = [ x * 100 / total for x in data ]
keys = ["Cache::GetCacheNode", "Cache::Access Itself", "dml::hardware_device::submit", "dml::make_mem_move_task (operator new)"]
return data,keys
def get_data_prefetch_total() -> tuple[list[float], list[str]]:
return read_timings_from_csv(prefetch_result)
def get_data_dram_total() -> tuple[list[float], list[str]]:
return
# loops over all possible configuration combinations and calls
# process_file_to_dataset for them in order to build a dataframe
# which is then displayed and saved
def main(data: tuple[list[float], list[str]], fname, unit):
palette_color = sns.color_palette('mako_r')
fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
wedges, texts = ax.pie(data[0], wedgeprops=dict(width=0.5), startangle=-40, colors=palette_color)
bbox_props = dict(boxstyle="square,pad=0.3", fc="w", ec="k", lw=0.72)
kw = dict(arrowprops=dict(arrowstyle="-"), bbox=bbox_props, zorder=0, va="center")
for i, p in enumerate(wedges):
ang = (p.theta2 - p.theta1)/2. + p.theta1
y = np.sin(np.deg2rad(ang))
x = np.cos(np.deg2rad(ang))
horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]
connectionstyle = f"angle,angleA=0,angleB={ang}"
kw["arrowprops"].update({"connectionstyle": connectionstyle})
ax.annotate(f"{data[1][i]} - {data[0][i]:2.2f} {unit}", xy=(x, y), xytext=(1.35*np.sign(x), 1.4*y), horizontalalignment=horizontalalignment, **kw)
fig.savefig(os.path.join(output_path, fname), bbox_inches='tight')
if __name__ == "__main__":
main(get_data_prefetch_cache_access(), "plot-timing-cacheaccess.pdf", "%")
main(read_timings_from_csv(prefetch_result), "plot-timing-prefetch.pdf", "ms")
main(read_timings_from_csv(distprefetch_result), "plot-timing-distprefetch.pdf", "ms")
main(read_timings_from_csv(dram_result), "plot-timing-dram.pdf", "ms")
main(read_timings_from_csv(hbm_result), "plot-timing-hbm.pdf", "ms")