From 573e312a693f6ce7be2622a2267a79f952238777 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantin=20F=C3=BCrst?= Date: Tue, 5 Dec 2023 22:21:48 +0100 Subject: [PATCH] update the submit method benchmark plotter --- .../plot-perf-submitmethod.py | 23 +++++++++++------- .../plot-perf-submitmethod.png | Bin 0 -> 36958 bytes 2 files changed, 14 insertions(+), 9 deletions(-) create mode 100644 benchmarks/benchmark-results/plot-perf-submitmethod.png diff --git a/benchmarks/benchmark-plotters/plot-perf-submitmethod.py b/benchmarks/benchmark-plotters/plot-perf-submitmethod.py index 4d82bbc..c7444d2 100644 --- a/benchmarks/benchmark-plotters/plot-perf-submitmethod.py +++ b/benchmarks/benchmark-plotters/plot-perf-submitmethod.py @@ -10,8 +10,8 @@ runid = "Run ID" x_label = "Size of Submitted Task" y_label = "Throughput in GiB/s" var_label = "Submission Type" -sizes = ["1kib", "4kib", "1mib", "1gib"] -sizes_nice = ["1 KiB", "4 KiB", "1 MiB", "1 GiB"] +sizes = ["1kib", "4kib", "1mib", "32mib"] +sizes_nice = ["1 KiB", "4 KiB", "1 MiB", "32 MiB"] types = ["bs10", "bs50", "ms10", "ms50", "ssaw"] types_nice = ["Batch, Size 10", "Batch, Size 50", "Multi-Submit, Count 10", "Multi-Submit, Count 50", "Single Submit"] title = "Performance of Submission Methods - Copy Operation tested Intra-Node on DDR" @@ -35,7 +35,12 @@ def index_from_element(value,array): def load_and_process_submit_json(file_path): with open(file_path, 'r') as file: data = json.load(file) - time = { "combined" : data["list"][0]["report"]["time"]["combined"], "submit" : data["list"][0]["report"]["time"]["submit"], "complete" : data["list"][0]["report"]["time"]["complete"]} + time = { + "combined" : data["list"][0]["report"]["time"]["combined"], + "submit" : data["list"][0]["report"]["time"]["submission"], + "complete" : data["list"][0]["report"]["time"]["completion"] + } + return time # Function to plot the graph for the new benchmark @@ -61,9 +66,9 @@ def plot_submit_graph(file_paths, type_label): times[0] = [t / 1 for t in times[0]] times[1] = [t / 4 for t in times[1]] times[2] = [t / (1024) for t in times[2]] - times[3] = [t / (1024*1024) for t in times[3]] + times[3] = [t / (32*1024) for t in times[3]] - throughput = [[calc_throughput(1024,time) for time in t] for t in times] + throughput = [[calc_throughput(1000*1000,time) for time in t] for t in times] idx = 0 for run_set in throughput: @@ -76,8 +81,7 @@ def plot_submit_graph(file_paths, type_label): # Main function to iterate over files and create plots for the new benchmark def main(): - folder_path = "benchmark-results/submit-bench/" # Replace with the actual path to your folder - + folder_path = "benchmark-results/" # Replace with the actual path to your folder for type_label in types: file_paths = [os.path.join(folder_path, f"submit-{type_label}-{size}-1e.json") for size in sizes] @@ -85,9 +89,10 @@ def main(): df = pd.DataFrame(data) df.set_index(index, inplace=True) - print(df) + df = df.sort_values(y_label) + + sns.barplot(x=x_label, y=y_label, hue=var_label, data=df, palette="rocket", errorbar="sd") - sns.catplot(x=x_label, y=y_label, hue=var_label, data=df, kind='bar', height=5, aspect=1, palette="viridis", errorbar="sd") plt.title(title) plt.savefig(os.path.join(folder_path, "plot-perf-submitmethod.png"), bbox_inches='tight') plt.show() diff --git a/benchmarks/benchmark-results/plot-perf-submitmethod.png b/benchmarks/benchmark-results/plot-perf-submitmethod.png new file mode 100644 index 0000000000000000000000000000000000000000..977569089d9df41b05fa2ef543028d18e455f050 GIT binary patch literal 36958 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 literal 0 HcmV?d00001