#!/usr/bin/env python3 import matplotlib.pyplot as plt import numpy as np import subprocess import os RESULT_FILENAME = "result.png" RESULT_SPEEDUP_FILENAME = "result_speedup.png" RESULT_APPEND_FILENAME = "result_and_speedup.png" def plot(title1, xs1, ys1, title2, xs2, ys2): fig, ax = plt.subplots() ax.plot(xs1, ys1, label=title1) # ax.plot(xs2, ys2, label=title2) ax.set(xlabel="Number of tasks", ylabel='Time (in seconds)', title=f"Game of Life\nCompute 100 generations with a matrix of 60'000x60'000") ax.grid() plt.tight_layout() plt.legend() fig.savefig(RESULT_FILENAME) plt.show() def plot_speedup(title1, xs1, ys1, title2, xs2, ys2): fig, ax = plt.subplots() ax.plot(xs1, ys1, label=title1) # ax.plot(xs2, ys2, label=title2) ax.plot(xs1, xs1, label="Ideal Speedup") ax.set(xlabel="Number of tasks", ylabel='Speedup', title=f"Game of Life\nSpeedup of computing 100 generations\n with a matrix of 60'000x60'000") ax.grid() plt.tight_layout() plt.legend() fig.savefig(RESULT_SPEEDUP_FILENAME) plt.show() def get_data(filename): results = np.genfromtxt(filename, delimiter=';') results_ordered = {} for result in results: key = int(result[0]) if key in results_ordered: results_ordered[key].append(result[-1]) else: results_ordered[int(result[0])] = [result[-1]] xs = [] ys = [] stds = [] speedups = [] for key in results_ordered.keys(): xs.append(key) ys.append(sum(results_ordered[key]) / len(results_ordered[key])) stds.append(np.std(results_ordered[key])) speedups.append(ys[0] / ys[-1]) return xs, ys, stds, speedups def main(): xs1, ys1, stds1, speedups1 = get_data("results/gol-opencl-2021-06-20.csv") xs2, ys2, stds2, speedups2 = get_data("results/gol-cuda-2021-06-19.csv") plot("OpenCL", xs1, ys1, "CUDA", xs2, ys2) plot_speedup("OpenCL Speedup", xs1, speedups1, "CUDA Speedup", xs2, speedups2) # print("Average") # for y in ys: # print(round(y, 3)) # print() # print("Stds") # for std in stds: # print(round(std, 3)) # Need ImageMagick subprocess.run(["docker", "run", "-v", f"{os.getcwd()}:/imgs", "dpokidov/imagemagick", "+append", f"/imgs/{RESULT_FILENAME}", f"/imgs/{RESULT_SPEEDUP_FILENAME}", f"/imgs/{RESULT_APPEND_FILENAME}"], capture_output=False) if __name__ == '__main__': main()