66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
import sys
|
|
import math
|
|
from matplotlib import pyplot as plt
|
|
|
|
|
|
with open(sys.argv[1]) as f:
|
|
lines = f.readlines()
|
|
|
|
results = {"f32": {"scalar": {}, "sse": {}, "avx":{}}, "f64": {"scalar": {}, "sse": {}, "avx":{}}}
|
|
|
|
for line in lines:
|
|
if line.startswith("test ") and not line.startswith("test result"):
|
|
name, result = line.split("... bench:")
|
|
name = name.split()[1]
|
|
_, length, ftype, algo = name.split("_")
|
|
value = float(result.strip().split(" ")[0].replace(",", ""))
|
|
results[ftype][algo][float(length)] = value
|
|
|
|
lengths = sorted(list(results["f32"]["scalar"].keys()))
|
|
|
|
|
|
scalar_32 = []
|
|
avx_32 = []
|
|
sse_32 = []
|
|
for l in lengths:
|
|
sc32 = results["f32"]["scalar"][l]
|
|
av32 = results["f32"]["avx"][l]
|
|
ss32 = results["f32"]["sse"][l]
|
|
scalar_32.append(100.0)
|
|
sse_32.append(100.0 * sc32/ss32)
|
|
avx_32.append(100.0 * sc32/av32)
|
|
|
|
scalar_64 = []
|
|
avx_64 = []
|
|
sse_64 = []
|
|
for l in lengths:
|
|
sc64 = results["f64"]["scalar"][l]
|
|
av64 = results["f64"]["avx"][l]
|
|
ss64 = results["f64"]["sse"][l]
|
|
scalar_64.append(100.0)
|
|
sse_64.append(100.0 * sc64/ss64)
|
|
avx_64.append(100.0 * sc64/av64)
|
|
|
|
lengths = [math.log(l, 2) for l in lengths]
|
|
|
|
plt.figure()
|
|
plt.plot(lengths, scalar_64, lengths, sse_64, lengths, avx_64)
|
|
plt.title("f64")
|
|
plt.ylabel("relative speed, %")
|
|
plt.xlabel("log2(length)")
|
|
plt.xticks(list(range(4,23)))
|
|
plt.grid()
|
|
plt.legend(["scalar", "sse", "avx"])
|
|
|
|
plt.figure()
|
|
plt.plot(lengths, scalar_32, lengths, sse_32, lengths, avx_32)
|
|
plt.title("f32")
|
|
plt.ylabel("relative speed, %")
|
|
plt.xlabel("log2(length)")
|
|
plt.legend(["scalar", "sse", "avx"])
|
|
plt.xticks(list(range(4,23)))
|
|
plt.grid()
|
|
plt.show()
|
|
|
|
|