112 lines
2.9 KiB
Python
112 lines
2.9 KiB
Python
import json
|
||
import numpy as np
|
||
import matplotlib.pyplot as plt
|
||
|
||
#font sizes
|
||
plt.rcParams.update({
|
||
"font.size": 18,
|
||
"axes.titlesize": 22,
|
||
"axes.labelsize": 20,
|
||
"xtick.labelsize": 16,
|
||
"ytick.labelsize": 16,
|
||
"legend.fontsize": 16,
|
||
})
|
||
|
||
def getResults(filename):
|
||
|
||
with open(filename) as f:
|
||
data = json.load(f)
|
||
|
||
# Prepare lists
|
||
spmv_sizes = []
|
||
spmv_times = []
|
||
|
||
dense_sizes = []
|
||
dense_times = []
|
||
|
||
labels = []
|
||
|
||
for d in data:
|
||
spmv_sizes.append(d["nnz"])
|
||
spmv_times.append(d["spmv_avg_ns"])
|
||
|
||
dense_sizes.append(d["dense_rows"])
|
||
dense_times.append(d["dense_avg_ns"])
|
||
|
||
labels.append(d["label"])
|
||
|
||
return spmv_sizes, spmv_times, dense_sizes, dense_times, labels
|
||
|
||
|
||
c_spmv_sizes, c_spmv_times, c_dense_sizes, c_dense_times, c_labels = getResults("cSparseResults.json")
|
||
go_spmv_sizes, go_spmv_times, go_dense_sizes, go_dense_times, go_labels = getResults("goSparseResults.json")
|
||
|
||
# make sure data aligns on x axis
|
||
for i in range(len(go_spmv_sizes)):
|
||
assert(c_spmv_sizes[i] == go_spmv_sizes[i])
|
||
assert(go_dense_sizes[i] == c_dense_sizes[i])
|
||
|
||
|
||
|
||
#spmv plot
|
||
x_spmv = c_spmv_sizes
|
||
x_spmv = np.float64(x_spmv)/1e6
|
||
go_spmv_float = np.float64(go_spmv_times)
|
||
c_spmv_float = np.float64(c_spmv_times)
|
||
ratio_spmv = go_spmv_float/c_spmv_float
|
||
plt.figure("spmv")
|
||
plt.plot(x_spmv, ratio_spmv, 'kd-')
|
||
plt.title("Sparse Matrix-Vector multiplication ratio Go native / C MKL")
|
||
plt.xlabel("SuiteSparse matrix millions of number of non-zeros")
|
||
plt.ylabel("Average time ratio Go/C for SpMV-kernel")
|
||
xtick_string = [f"{x:.1f}\n{label}" for x, label in zip(x_spmv, c_labels)]
|
||
plt.xticks(x_spmv, xtick_string)
|
||
plt.grid()
|
||
|
||
# dense plot
|
||
x_dense = c_dense_sizes
|
||
go_dense_float = np.float64(go_dense_times)
|
||
c_dense_float = np.float64(c_dense_times)
|
||
ratio_dense = go_dense_float/c_dense_float
|
||
|
||
plt.figure("dense")
|
||
plt.plot(x_dense, ratio_dense, 'kd-')
|
||
plt.title("Dense Matrix-Matrix multiplication ratio Go native / C MKL")
|
||
plt.xlabel("Dense matrix size")
|
||
plt.ylabel("Average time ratio Go/C for matmul kernel")
|
||
xtick_string = [f"{x}^2" for x in x_dense]
|
||
plt.xticks(x_dense, xtick_string)
|
||
plt.grid()
|
||
|
||
plt.show()
|
||
|
||
## ---- SpMV Plot ----
|
||
#plt.figure()
|
||
#plt.plot(spmv_sizes, spmv_times, marker='o')
|
||
#
|
||
#for i, label in enumerate(labels):
|
||
# plt.annotate(label, (spmv_sizes[i], spmv_times[i]))
|
||
#
|
||
#plt.xlabel("Number of Nonzeros (nnz)")
|
||
#plt.ylabel("Average Time (ns)")
|
||
#plt.title("SpMV: Avg Time vs Size")
|
||
#plt.xscale("log")
|
||
#plt.yscale("log")
|
||
#plt.grid(True)
|
||
#
|
||
## ---- Dense Plot ----
|
||
#plt.figure()
|
||
#plt.plot(dense_sizes, dense_times, marker='o')
|
||
#
|
||
#for i, label in enumerate(labels):
|
||
# plt.annotate(label, (dense_sizes[i], dense_times[i]))
|
||
#
|
||
#plt.xlabel("Matrix Size (rows × cols)")
|
||
#plt.ylabel("Average Time (ns)")
|
||
#plt.title("Dense: Avg Time vs Size")
|
||
#plt.xscale("log")
|
||
#plt.yscale("log")
|
||
#plt.grid(True)
|
||
#
|
||
#plt.show()
|