From 579494bc415a5f82eee9823801f0c644b83e9fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20F=C3=BCrst?= Date: Mon, 5 Feb 2024 16:29:37 +0100 Subject: [PATCH] redo the plots for benchmarks of peak throughput and work division --- .../benchmark-plots/plot-1dsa-throughput.pdf | Bin 0 -> 12627 bytes ...hroughput.pdf => plot-2dsa-throughput.pdf} | Bin 12635 -> 12635 bytes ...hroughput.pdf => plot-4dsa-throughput.pdf} | Bin 12636 -> 12637 bytes .../benchmark-plots/plot-8cpu-throughput.pdf | Bin 0 -> 12637 bytes .../benchmark-plots/plot-8dsa-throughput.pdf | Bin 12634 -> 12632 bytes ...hput.pdf => plot-andrepeak-throughput.pdf} | Bin 12562 -> 12562 bytes .../plot-average-throughput.pdf | Bin 0 -> 13458 bytes .../plot-dsa-throughput-scaling.pdf | Bin 0 -> 11314 bytes .../benchmark-plots/plot-smart-throughput.pdf | Bin 12636 -> 0 bytes .../plot-perf-peakthroughput-bar.py | 83 +++++++++++-- .../plot-perf-peakthroughput-cpu-bar.py | 110 ------------------ thesis/images/plot-1dsa-throughput.pdf | Bin 0 -> 12627 bytes ...hroughput.pdf => plot-2dsa-throughput.pdf} | Bin 12635 -> 12635 bytes thesis/images/plot-4dsa-throughput.pdf | Bin 0 -> 12637 bytes thesis/images/plot-8cpu-throughput.pdf | Bin 0 -> 12637 bytes .../images/plot-8dsa-throughput.pdf | Bin 12634 -> 12632 bytes ...hput.pdf => plot-andrepeak-throughput.pdf} | Bin 12562 -> 12562 bytes thesis/images/plot-average-throughput.pdf | Bin 0 -> 13458 bytes thesis/images/plot-brute-cpu-throughput.pdf | Bin 12636 -> 0 bytes thesis/images/plot-dsa-throughput-scaling.pdf | Bin 0 -> 11314 bytes thesis/images/plot-smart-throughput.pdf | Bin 12636 -> 0 bytes 21 files changed, 72 insertions(+), 121 deletions(-) create mode 100644 benchmarks/benchmark-plots/plot-1dsa-throughput.pdf rename benchmarks/benchmark-plots/{plot-allnodes-cpu-throughput.pdf => plot-2dsa-throughput.pdf} (92%) rename benchmarks/benchmark-plots/{plot-brute-cpu-throughput.pdf => plot-4dsa-throughput.pdf} (86%) create mode 100644 benchmarks/benchmark-plots/plot-8cpu-throughput.pdf rename thesis/images/plot-allnodes-throughput.pdf => benchmarks/benchmark-plots/plot-8dsa-throughput.pdf (86%) rename benchmarks/benchmark-plots/{plot-andrepeak-cpu-throughput.pdf => plot-andrepeak-throughput.pdf} (99%) create mode 100644 benchmarks/benchmark-plots/plot-average-throughput.pdf create mode 100644 benchmarks/benchmark-plots/plot-dsa-throughput-scaling.pdf delete mode 100644 benchmarks/benchmark-plots/plot-smart-throughput.pdf delete mode 100644 benchmarks/benchmark-plotters/plot-perf-peakthroughput-cpu-bar.py create mode 100644 thesis/images/plot-1dsa-throughput.pdf rename thesis/images/{plot-allnodes-cpu-throughput.pdf => plot-2dsa-throughput.pdf} (92%) create mode 100644 thesis/images/plot-4dsa-throughput.pdf create mode 100644 thesis/images/plot-8cpu-throughput.pdf rename benchmarks/benchmark-plots/plot-allnodes-throughput.pdf => thesis/images/plot-8dsa-throughput.pdf (86%) rename thesis/images/{plot-andrepeak-cpu-throughput.pdf => plot-andrepeak-throughput.pdf} (99%) create mode 100644 thesis/images/plot-average-throughput.pdf delete mode 100644 thesis/images/plot-brute-cpu-throughput.pdf create mode 100644 thesis/images/plot-dsa-throughput-scaling.pdf delete mode 100644 thesis/images/plot-smart-throughput.pdf diff --git a/benchmarks/benchmark-plots/plot-1dsa-throughput.pdf b/benchmarks/benchmark-plots/plot-1dsa-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52236111824fb99660a6dbdb6a35aa9845a9526c GIT binary patch literal 12627 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 diff --git a/benchmarks/benchmark-plots/plot-brute-cpu-throughput.pdf b/benchmarks/benchmark-plots/plot-4dsa-throughput.pdf similarity index 86% rename from benchmarks/benchmark-plots/plot-brute-cpu-throughput.pdf rename to benchmarks/benchmark-plots/plot-4dsa-throughput.pdf index b5708057bd1d1ba56a0c0118bfcc7082ae4c3ef4..3d43a1f3408d534b967e8726993a36379a4eeb16 100644 GIT binary patch delta 1729 zcmZuveK6E{98PX)>8>Q*QPGyXG)2Gnmuk-z%WZ_XaGH}gS$SDR-Qdn|!=0A0WHY0e zEf?vqrDDZit=B8X?RhI~>WWDhrBXH~y476G*x!Bs`ph%W=kvVG_a48GUoJJE+@m#w z$@NkH7u{CtWfuF0flGUp28jVI`9ZcBd#%si*z6k^52sYlHW6%ReBJ=d`JKm43-&e^ z_>JK2pL^n`vn217YGIeeGum=IZiB*Vvf5HBdw0olM>_9sF({*X8zXX_W1XQX);n&9SyZwEi~ozKhgId9d~V&}?tw-paNwUzGr^ADY^TO~Z{+nEB)84uP9_tD6envnz@ck|A}q&v4G4897EFd6A-{-J`2X zu3W4&vwl0?#^)&ik*4-?xU+eeHQzRf8;_Q~sCT|<7pfBy$QH-Q)_r+s^hfrVC1<3f z@fBLx?z9oZ3-@0&P`9sD7S-o{aZ?e~T^h7dQ04Ndvv$^Dk!0feO+Q(ZwjsGqwW;4U zCA+*+m0xhk=~}#7MAby<#)6&Hh+okgT-&6&b#c;PHTC4{vOe+9va2m7f?I~=MUiMm z_4T{y@#4qzE@M!uG(F7ycqDI)sIY@1YUIFO|0(rQ^ofL%O+mYgiHOCcfS=+XX=H$$D|1-W-LAlj6{5qH+P{BQ zY_s3aTWH@B6&qe6NV4VHK20i@U+8hX8MR+nvM8|5e(OL|h1@IPgh%93W|ZN{vIG0W zgC$l#@XyN_8fp$-!)Y-|2ux%r)^aLjwR20ndgoNgJclm2Eif;4%zepWoKqaE53Wl5 zu#^p(vAxqW`rj1#{Qg^r*(T-u;Mix}@Ypi7Fi3M}QAvC0&}q#TD*66+-!Z5AmU3bG zYxR>`l50mMZ(OJXyBXTPv3kYjetF!3&ZlDzKK7K$*&zRiEjhk@cdFIvLe7rF>@Pk> z08h`q+)nJSaA-!U&YR)xkr6000Y^ek>u&_`?8#5P;D!n4n=WjMFjne|R`~ z)Nz9WnY+=^jw1C|0Ft1|0VGP&c_2))3J@rb2f`2?!?6D%QJ-=GAPKKsJ;?GAo>?T5W#@l&%tk)xUr25*UQ!TUzzu6asU7T delta 1611 zcmcbcbSG)U6vq0KdD4~wdp~Pe`0#0lihfU?lfv`Fph2DKnZOf)8(nJ-oIX-^Y`=Yf zZhw`jDEkM;rXNS@yf@D}8n^fUpWW7X|CH9G+^;oST~|_-eWdPqdiKq_3J*d6LhC zZpBq^H0*=E@i=c0{*@^Hg0*bXREd)-_ujm*|LxS&AYWG-<4qG%&WKzS;hFq+QpDbd zM`^#GxLD8ZNa%~1$JX5_1McP+N)zSg{GW>KMK>H*t>9RGR?0+T)*yehOrfaTd< z_bn$BkG)9#Rey2XvzsSvlD!U2I@cB0dPwIcgJ`G7l;TOVD*O$b=F6Y8KIS|9jS!nA zi@M^X9oahsYC1J+z6-qToLOdc`9QJKyyu@=|JcO$Ut7T=b!TI@;&G1q>@j<-c4j`aU}#$kPa@6X2kZTS*0jwf98zUGH&9h?_8Yw^~| zzlvcu*6lCded*Vknr-VpW&b|9&VCkuc5#vwyPEdTnV%SPG?#ar_`1_>iMElr*uldl z!E%dqGY?J+tMiQ(-x8}fH=F;$vTeer_AirdyH$VKwD`z6Bat_HvR5ywyf@!ozI*lh z^4+hse?R|vGfggiWB3F0^HE1_cus{`tDg(}WVn2qXkO;xv#L1?$!~3Utl;fZ2{mHT zT9sRvxhj2)C#UdN+Z$p2lHyOc?J~RC8ff6D_R03vHSu-6$F}qC*v8nq;;xD526ui5 z2gTn9a+&w#)*nd!WTm@T&NksdbywAbUrx6jR@pEAdVMiF&w|q_b^(nWa~Ehl4D;uG zbCH>?XxSt_k;F$I>w+}zg&2LDvWu@_N5zCFnb)6ZU$>|V3au*rTU`C`{CVr$yEh%* zz4+?e3I8Nxe{S5q^6!nWW~wm-_ht19rpU_A{k?1&x2U|gOsSPjeUHRxg{`Ht{PmwK z%+KE%s{O4--aXb|rccAdpnK1fUdQ#XZ_PaKsBRmuWx<3wUNwQrwU34QmPq`z$?N#q zHzlNEgC29^KLca6xE!C;?^P9It9I|KdG(g<^ZbupCbRBd-g3kLO#O=3n+aU0c`3yu zMX8CoAXa`-7MG!sf`P(hK2|nHgUzC>1{$1(#)d{lriO+Vll^pk#EmU26%0T?Ay0t| z%rG=GGBBOIQCHa397D#~*bGz56pK1@i^+_7){GXDZS~Y`EztBBSXvmEVu+bqVyZJV zvYfn7PZ-k#Lt`Th)rMwf7^WIp8W>If2s8m03MjrbFfukb#1JzzKo1QABMS@5$&UKM zw#MkHjZF

@&8sz))vm3=GeSKoc z6O6DiGcq%nY-oVR7iN~gxJL^ca|06$o6Jp&O(!=3O~CMlxtS@Zm<2|vFt9K(H<*0U iKv>fR-98Ho6Lb>{4NXifC-WM5aF}tas=E5SaRC4v#YwsV diff --git a/benchmarks/benchmark-plots/plot-8cpu-throughput.pdf b/benchmarks/benchmark-plots/plot-8cpu-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b05e61b02ae06ca7fec3902842183f53cf987660 GIT binary patch literal 12637 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 delta 1740 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 Vc~hun0_+ue1(=wawvi6({{dc};VA$B literal 0 HcmV?d00001 diff --git a/benchmarks/benchmark-plots/plot-dsa-throughput-scaling.pdf b/benchmarks/benchmark-plots/plot-dsa-throughput-scaling.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e06941961b2d97e9289e7bdd9daa45814733efe GIT binary patch literal 11314 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 Umqy>}Xfy#$KuAbv@76*5KSLpzO8@`> diff --git a/benchmarks/benchmark-plotters/plot-perf-peakthroughput-bar.py b/benchmarks/benchmark-plotters/plot-perf-peakthroughput-bar.py index 1492e14..df7352d 100644 --- a/benchmarks/benchmark-plotters/plot-perf-peakthroughput-bar.py +++ b/benchmarks/benchmark-plotters/plot-perf-peakthroughput-bar.py @@ -34,6 +34,7 @@ description_allnodes = \ index = [ runid, x_label, y_label] data = [] +data_avg = {} # loads the measurements from a given file and processes them # so that they are normalized, meaning that the timings returned @@ -47,49 +48,109 @@ def get_timing(file_path): # to the global data-array, handles multiple runs with a runid # and ignores if the given file is not found as some # configurations may not be benchmarked -def process_file_to_dataset(file_path, src_node, dst_node): +def process_file_to_dataset(file_path, config, dst_node): size = 1024*1024*1024 + if config not in data_avg: + data_avg[config] = 0 + timing = get_timing(file_path) run_idx = 0 for t in timing: tp = calc_throughput(size, t) + data_avg[config] += tp / len(timing) data.append({ runid : run_idx, x_label : dst_node, y_label : tp}) run_idx = run_idx + 1 -def plot_bar(table,node_config): +def plot_bar(table,node_config,display_x,display_y): plt.figure(figsize=(2, 3)) sns.barplot(x=x_label, y=y_label, data=table, palette="mako", errorbar="sd") plt.ylim(0, 75) + plt.xlabel(display_x) + plt.ylabel(display_y) plt.savefig(os.path.join(output_path, f"plot-{node_config}-throughput.pdf"), bbox_inches='tight') plt.show() +def PlotAndrePeakResults(): + data_peakbench_andre = [ + { runid : 0, x_label : 8, y_label : 64 }, + { runid : 0, x_label : 11, y_label : 63 }, + { runid : 0, x_label : 12, y_label : 40 }, + { runid : 0, x_label : 15, y_label : 54 } + ] + + df = pd.DataFrame(data_peakbench_andre) + df.set_index(index, inplace=True) + plot_bar(df, "andrepeak", x_label, y_label) + + return df # 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(node_config): - src_node = 0 - for dst_node in {8,11,12,15}: - file = os.path.join(result_path, f"copy-n{src_node}ton{dst_node}-1gib-{node_config}.json") - process_file_to_dataset(file, src_node, dst_node) + dst_nodes = {8,11,12,15} + + for dst_node in dst_nodes: + file = os.path.join(result_path, f"copy-n0ton{dst_node}-1gib-{node_config}.json") + process_file_to_dataset(file, node_config, dst_node) + + data_avg[node_config] = data_avg[node_config] / len(dst_nodes) df = pd.DataFrame(data) data.clear() df.set_index(index, inplace=True) - plot_bar(df, node_config) + plot_bar(df, node_config, x_label, y_label) return df +def get_scaling_factor(baseline,topline,utilfactor): + return (topline / baseline) * (1 / utilfactor) + + if __name__ == "__main__": - main("1dsa") - main("2dsa") - main("4dsa") - main("8dsa") \ No newline at end of file + dsa_df1 = main("1dsa") + dsa_df2 = main("2dsa") + dsa_df4 = main("4dsa") + dsa_df8 = main("8dsa") + cpu_df8 = main("8cpu") + cpu_dfandre = PlotAndrePeakResults() + + x_dsacount = "Count of DSAs" + y_avgtp = "Average Throughput in GiB/s" + y_scaling = "Scaling Factor" + + data_average = [ + { runid : 0, x_label : 1, y_label : data_avg["1dsa"] }, + { runid : 0, x_label : 2, y_label : data_avg["2dsa"] }, + { runid : 0, x_label : 4, y_label : data_avg["4dsa"] }, + { runid : 0, x_label : 8, y_label : data_avg["8dsa"] } + ] + + average_df = pd.DataFrame(data_average) + average_df.set_index(index, inplace=True) + + plot_bar(average_df, "average", x_dsacount, y_avgtp) + + data_scaling = [ + { x_dsacount : 1, y_scaling : get_scaling_factor(data_avg["1dsa"], data_avg["1dsa"], 1) }, + { x_dsacount : 2, y_scaling : get_scaling_factor(data_avg["1dsa"], data_avg["2dsa"], 2) }, + { x_dsacount : 4, y_scaling : get_scaling_factor(data_avg["1dsa"], data_avg["4dsa"], 4) }, + { x_dsacount : 8, y_scaling : get_scaling_factor(data_avg["1dsa"], data_avg["8dsa"], 8) } + ] + + scaling_df = pd.DataFrame(data_scaling) + sns.lineplot(x=x_dsacount, y=y_scaling, data=scaling_df, marker='o', linestyle='-', color='b', markersize=8) + + plt.xlim(0,10) + plt.ylim(0,1.25) + plt.savefig(os.path.join(output_path, f"plot-dsa-throughput-scaling.pdf"), bbox_inches='tight') + plt.show() + diff --git a/benchmarks/benchmark-plotters/plot-perf-peakthroughput-cpu-bar.py b/benchmarks/benchmark-plotters/plot-perf-peakthroughput-cpu-bar.py deleted file mode 100644 index 061f894..0000000 --- a/benchmarks/benchmark-plotters/plot-perf-peakthroughput-cpu-bar.py +++ /dev/null @@ -1,110 +0,0 @@ -import os -import pandas as pd -import seaborn as sns -import matplotlib.pyplot as plt - -from common import calc_throughput, load_time_mesurements, get_task_count - -result_path = "benchmark-results/" -output_path = "benchmark-plots/" - -runid = "Run ID" -x_label = "Destination Node" -y_label = "Throughput in GiB/s" - - -title_allnodes = \ - """Copy Throughput in GiB/s tested for 1GiB Elements\n - Using all 8 DSA Chiplets available on the System""" -title_smartnodes = \ - """Copy Throughput in GiB/s tested for 1GiB Elements\n - Using Cross-Copy for Intersocket and all 4 Chiplets of Socket for Intrasocket""" -title_difference = \ - """Gain in Copy Throughput in GiB/s of All-DSA vs. Smart Assignment""" - -description_smartnodes = \ - """Copy Throughput in GiB/s tested for 1GiB Elements\n - Nodes of {8...15} are HBM accessors for their counterparts (minus 8)\n - Using all 4 DSA Chiplets of a Socket for Intra-Socket Operation\n - And using only the Source and Destination Nodes DSA for Inter-Socket""" -description_allnodes = \ - """Copy Throughput in GiB/s tested for 1GiB Elements\n - Nodes of {8...15} are HBM accessors for their counterparts (minus 8)\n - Using all 8 DSA Chiplets available on the System""" - -index = [ runid, x_label, y_label] -data = [] - -data_peakbench_andre = [ - { runid : 0, x_label : 8, y_label : 64 }, - { runid : 0, x_label : 11, y_label : 63 }, - { runid : 0, x_label : 12, y_label : 40 }, - { runid : 0, x_label : 15, y_label : 54 } -] - - -# loads the measurements from a given file and processes them -# so that they are normalized, meaning that the timings returned -# are nanoseconds per element transfered -def get_timing(file_path): - divisor = get_task_count(file_path) - return [ x / divisor for x in load_time_mesurements(file_path)] - - -# procceses a single file and appends the desired timings -# to the global data-array, handles multiple runs with a runid -# and ignores if the given file is not found as some -# configurations may not be benchmarked -def process_file_to_dataset(file_path, src_node, dst_node): - size = 1024*1024*1024 - - timing = get_timing(file_path) - run_idx = 0 - for t in timing: - tp = calc_throughput(size, t) - data.append({ runid : run_idx, x_label : dst_node, y_label : tp}) - run_idx = run_idx + 1 - - -def plot_bar(table,title,node_config): - plt.figure(figsize=(2, 3)) - - sns.barplot(x=x_label, y=y_label, data=table, palette="mako", errorbar="sd") - - plt.ylim(0, 75) - - plt.savefig(os.path.join(output_path, f"plot-{node_config}-cpu-throughput.pdf"), bbox_inches='tight') - plt.show() - - -# 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(node_config,title,ext): - src_node = 0 - for dst_node in {8,11,12,15}: - file = os.path.join(result_path, f"copy-n{src_node}ton{dst_node}-1gib-{node_config}{ext}.json") - process_file_to_dataset(file, src_node, dst_node) - - df = pd.DataFrame(data) - - data.clear() - df.set_index(index, inplace=True) - - if ext == "brute": node_config = ext - plot_bar(df, title, node_config) - - return df - - -def plotandre(): - df = pd.DataFrame(data_peakbench_andre) - df.set_index(index, inplace=True) - plot_bar(df, title_allnodes, "andrepeak") - return df - - -if __name__ == "__main__": - dandr = plotandre() - dall = main("allnodes", title_allnodes, "-cpu") - dbrt = main("brute", title_allnodes, "-cpu") \ No newline at end of file diff --git a/thesis/images/plot-1dsa-throughput.pdf b/thesis/images/plot-1dsa-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52236111824fb99660a6dbdb6a35aa9845a9526c GIT binary patch literal 12627 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 diff --git a/thesis/images/plot-4dsa-throughput.pdf b/thesis/images/plot-4dsa-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3d43a1f3408d534b967e8726993a36379a4eeb16 GIT binary patch literal 12637 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 Opk)xEq8bM^5&sV?J)uMZ literal 0 HcmV?d00001 diff --git a/thesis/images/plot-8cpu-throughput.pdf b/thesis/images/plot-8cpu-throughput.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b05e61b02ae06ca7fec3902842183f53cf987660 GIT binary patch literal 12637 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 delta 1740 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 Vc~hun0_+ue1(=wawvi6({{dc};VA$B literal 0 HcmV?d00001 diff --git a/thesis/images/plot-brute-cpu-throughput.pdf b/thesis/images/plot-brute-cpu-throughput.pdf deleted file mode 100644 index b5708057bd1d1ba56a0c0118bfcc7082ae4c3ef4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12636 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 V@T1YUIvPzt6A%&-I>x$){|BjdlH>pY diff --git a/thesis/images/plot-dsa-throughput-scaling.pdf b/thesis/images/plot-dsa-throughput-scaling.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4e06941961b2d97e9289e7bdd9daa45814733efe GIT binary patch literal 11314 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 Umqy>}Xfy#$KuAbv@76*5KSLpzO8@`>