From 2c802509a05bcf5d89ecbd485b7e267a7e35bd1d Mon Sep 17 00:00:00 2001 From: Uzair Mohammed Date: Thu, 24 Oct 2024 21:06:10 -0700 Subject: [PATCH] Updated Python scripts' logic --- memory_bandwidth_plot.png | Bin 32109 -> 0 bytes memory_latency_plot.png | Bin 26176 -> 0 bytes mflops_plot.png | Bin 26239 -> 0 bytes plot_3vars.py | 3 -- plot_3vars_savefig.py | 89 +++++++++++++++++++++++--------------- 5 files changed, 53 insertions(+), 39 deletions(-) delete mode 100644 memory_bandwidth_plot.png delete mode 100644 memory_latency_plot.png delete mode 100644 mflops_plot.png diff --git a/memory_bandwidth_plot.png b/memory_bandwidth_plot.png deleted file mode 100644 index c1e2f7d0d82ee580615086058c8cd49d4c08e653..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32109 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 Nit=i5MY6_0{|n{%l%@ax diff --git a/memory_latency_plot.png b/memory_latency_plot.png deleted file mode 100644 index d0a1930f8ab7532dba099960b70a3ecf99d47393..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26176 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 diff --git a/mflops_plot.png b/mflops_plot.png deleted file mode 100644 index 33bbeb44f5691cdedb149f0c08578c1683e1d301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26239 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 B%Lo7f diff --git a/plot_3vars.py b/plot_3vars.py index 74b31cb..114e359 100644 --- a/plot_3vars.py +++ b/plot_3vars.py @@ -59,7 +59,6 @@ plt.title('Problem Size vs. MFLOP/s') plt.xlabel('Problem Size') plt.ylabel('MFLOP/s') plt.legend() -plt.savefig('mflops_plot.png') # Plot Memory Bandwidth Utilization plt.figure() @@ -70,7 +69,6 @@ plt.title('Problem Size vs. Memory Bandwidth Utilization') plt.xlabel('Problem Size') plt.ylabel('Memory Bandwidth Utilization (%)') plt.legend() -plt.savefig('memory_bandwidth_plot.png') # Plot Memory Latency plt.figure() @@ -81,6 +79,5 @@ plt.title('Problem Size vs. Memory Latency') plt.xlabel('Problem Size') plt.ylabel('Memory Latency') plt.legend() -plt.savefig('memory_latency_plot.png') plt.show() \ No newline at end of file diff --git a/plot_3vars_savefig.py b/plot_3vars_savefig.py index 17f0c6a..e485b69 100644 --- a/plot_3vars_savefig.py +++ b/plot_3vars_savefig.py @@ -19,51 +19,68 @@ Assumptions: developed and tested using Python version 3.8.8 on macOS 11.6 import pandas as pd import matplotlib.pyplot as plt -plot_fname = "myplot.png" +# Constants for calculations +OPS = 1e6 # 1 million operations +BYTES_ACCESSED = 1e9 # Example: 1 GB accessed +PEAK_MEMORY_BANDWIDTH = 100 # Example: 100 GB/s +MEMORY_ACCESSES = 1e6 # Example: 1 million memory accesses +# Read the CSV file fname = "benchmark_data.csv" df = pd.read_csv(fname, comment="#") -print(df) -var_names = list(df.columns) +# Extract columns +problem_sizes = df['Problem Size'].values.tolist() +elapsed_times_direct = df['sum_direct'].values.tolist() +elapsed_times_indirect = df['sum_indirect'].values.tolist() +elapsed_times_vector = df['sum_vector'].values.tolist() -print("var names =", var_names) +# Calculate MFLOP/s +mflops_direct = [OPS / time for time in elapsed_times_direct] +mflops_indirect = [OPS / time for time in elapsed_times_indirect] +mflops_vector = [OPS / time for time in elapsed_times_vector] -# split the df into individual vars -# assumption: column order - 0=problem size, 1=blas time, 2=basic time +# Calculate Memory Bandwidth Utilization (%) +memory_bandwidth_direct = [(BYTES_ACCESSED / time) / PEAK_MEMORY_BANDWIDTH * 100 for time in elapsed_times_direct] +memory_bandwidth_indirect = [(BYTES_ACCESSED / time) / PEAK_MEMORY_BANDWIDTH * 100 for time in elapsed_times_indirect] +memory_bandwidth_vector = [(BYTES_ACCESSED / time) / PEAK_MEMORY_BANDWIDTH * 100 for time in elapsed_times_vector] -problem_sizes = df[var_names[0]].values.tolist() -code1_time = df[var_names[1]].values.tolist() -code2_time = df[var_names[2]].values.tolist() -code3_time = df[var_names[3]].values.tolist() +# Calculate Memory Latency +memory_latency_direct = [time / MEMORY_ACCESSES for time in elapsed_times_direct] +memory_latency_indirect = [time / MEMORY_ACCESSES for time in elapsed_times_indirect] +memory_latency_vector = [time / MEMORY_ACCESSES for time in elapsed_times_vector] +# Plot MFLOP/s plt.figure() +plt.plot(problem_sizes, mflops_direct, label='Direct') +plt.plot(problem_sizes, mflops_indirect, label='Indirect') +plt.plot(problem_sizes, mflops_vector, label='Vector') +plt.title('Problem Size vs. MFLOP/s') +plt.xlabel('Problem Size') +plt.ylabel('MFLOP/s') +plt.legend() +plt.savefig('mflops_plot.png') -plt.title("Comparison of 3 Codes") +# Plot Memory Bandwidth Utilization +plt.figure() +plt.plot(problem_sizes, memory_bandwidth_direct, label='Direct') +plt.plot(problem_sizes, memory_bandwidth_indirect, label='Indirect') +plt.plot(problem_sizes, memory_bandwidth_vector, label='Vector') +plt.title('Problem Size vs. Memory Bandwidth Utilization') +plt.xlabel('Problem Size') +plt.ylabel('Memory Bandwidth Utilization (%)') +plt.legend() +plt.savefig('memory_bandwidth_plot.png') -xlocs = [i for i in range(len(problem_sizes))] +# Plot Memory Latency +plt.figure() +plt.plot(problem_sizes, memory_latency_direct, label='Direct') +plt.plot(problem_sizes, memory_latency_indirect, label='Indirect') +plt.plot(problem_sizes, memory_latency_vector, label='Vector') +plt.title('Problem Size vs. Memory Latency') +plt.xlabel('Problem Size') +plt.ylabel('Memory Latency') +plt.legend() +plt.savefig('memory_latency_plot.png') -plt.xticks(xlocs, problem_sizes) - -plt.plot(code1_time, "r-o") -plt.plot(code2_time, "b-x") -plt.plot(code3_time, "g-^") - -#plt.xscale("log") -#plt.yscale("log") - -plt.xlabel("Problem Sizes") -plt.ylabel("runtime") - -varNames = [var_names[1], var_names[2], var_names[3]] -plt.legend(varNames, loc="best") - -plt.grid(axis='both') - -# save the figure before trying to show the plot -plt.savefig(plot_fname, dpi=300) - - -plt.show() - -# EOF +plt.show() \ No newline at end of file