about summary refs log tree commit diff stats
path: root/archive/2024/winter/bsc_dichler/scripts/plot/cas.py
diff options
context:
space:
mode:
Diffstat (limited to 'archive/2024/winter/bsc_dichler/scripts/plot/cas.py')
-rw-r--r--archive/2024/winter/bsc_dichler/scripts/plot/cas.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/archive/2024/winter/bsc_dichler/scripts/plot/cas.py b/archive/2024/winter/bsc_dichler/scripts/plot/cas.py
new file mode 100644
index 000000000..e6f3a08e1
--- /dev/null
+++ b/archive/2024/winter/bsc_dichler/scripts/plot/cas.py
@@ -0,0 +1,92 @@
+from pathlib import Path
+import pandas as pd
+import matplotlib.pyplot as plt
+import numpy as np
+
+
+def plot(output_root: Path, format):
+    output_root = output_root / Path("cas")
+    csv_file1 = output_root / Path("run.csv")
+    csv_file2 = output_root / Path("run_mte.csv")
+
+    df1 = pd.read_csv(csv_file1, sep=";")
+    df2 = pd.read_csv(csv_file2, sep=";")
+
+    df1["duration"] = df1["duration"] / 1_000_000_000
+    df2["duration"] = df2["duration"] / 1_000_000_000
+
+    grouped1 = df1.groupby("cores")["duration"].agg(["mean", "std"]).reset_index()
+    grouped2 = df2.groupby("cores")["duration"].agg(["mean", "std"]).reset_index()
+
+    merged = pd.merge(grouped1, grouped2, on="cores", suffixes=("_1", "_2"))
+
+    _, ax1 = plt.subplots(figsize=(10, 6))
+
+    library = ["1 Thread", "2 Threads", "3 Threads", "4 Threads"]
+    x = np.arange(len(library))
+    bar_width = 0.35
+
+    ax1.bar(
+        x - bar_width / 2,
+        merged["mean_1"],
+        yerr=merged["std_1"],
+        width=bar_width,
+        capsize=5,
+        label="MTE disabled",
+        color="#fc9272",
+        edgecolor="black",
+        linewidth=2,
+    )
+    ax1.bar(
+        x + bar_width / 2,
+        merged["mean_2"],
+        yerr=merged["std_2"],
+        width=bar_width,
+        capsize=5,
+        label="MTE enabled",
+        color="#a6bddb",
+        edgecolor="black",
+        linewidth=2,
+    )
+
+    for i, row in merged.iterrows():
+        x_start = i - 0.05
+
+        y_start = row["mean_2"]
+        y_end = row["mean_1"]
+
+        if (y_start - row["std_2"]) <= (y_end + row["std_1"]):
+            continue
+
+        ax1.annotate(
+            f"",
+            xy=(x_start - 0.25 / 2, y_start),
+            xytext=(x_start - 0.25 / 2, y_end + 0.05 * y_end),
+            arrowprops=dict(arrowstyle="->", color="red", lw=2),
+            color="red",
+            ha="center",
+        )
+
+        percentage = y_start / y_end
+        ax1.text(
+            x_start - 0.25 / 2,
+            y_start + ((y_end - y_start) / 2),
+            f"{percentage:.2f}×",
+            color="red",
+            fontweight="bold",
+            bbox=dict(facecolor="white", alpha=1.0, edgecolor="none"),
+            ha="center",
+        )
+
+    plt.xticks(x, library)
+    ax1.set_ylabel("Time (s)")
+    ax1.set_xlabel(r"#Threads")
+
+    ax1.spines["top"].set_visible(False)
+    ax1.spines["right"].set_visible(False)
+    ax1.set_title("Lower is better ↓", color="navy")
+    ax1.legend(loc="upper left")
+    ax1.set_ylim(ymin=0)
+
+    output = output_root / Path(f"result.{format}")
+    plt.savefig(output, format=format)