137 lines
7.1 KiB
Python
137 lines
7.1 KiB
Python
import csv
|
|
import math
|
|
import matplotlib.pyplot as plot
|
|
import numpy as np
|
|
|
|
def geomean(data):
|
|
split_data = []
|
|
for x in data:
|
|
split_data.append(data[x])
|
|
return round(math.prod(split_data) ** (1 / len(split_data)), 2)
|
|
|
|
def make_comparison_list(list_a, list_b, encoder):
|
|
results_720p = {}
|
|
results_1080p = {}
|
|
results_4k = {}
|
|
|
|
for x in range(len(list_a)):
|
|
if list_a[x]["Encoder"] == encoder:
|
|
difference = round(float(list_a[x]["Run Time"]) / float(list_b[x]["Run Time"]), 2)
|
|
|
|
if list_a[x]["Resolution"] == "720p":
|
|
results_720p.update({f"Preset {list_a[x]["Preset"]}": float(difference)})
|
|
elif list_a[x]["Resolution"] == "1080p":
|
|
results_1080p.update({f"Preset {list_a[x]["Preset"]}": float(difference)})
|
|
elif list_a[x]["Resolution"] == "4k":
|
|
results_4k.update({f"Preset {list_a[x]["Preset"]}": float(difference)})
|
|
|
|
if encoder == "libx265":
|
|
results_720p = dict(reversed(results_720p.items()))
|
|
results_1080p = dict(reversed(results_1080p.items()))
|
|
results_4k = dict(reversed(results_4k.items()))
|
|
|
|
return results_720p, results_1080p, results_4k
|
|
|
|
def make_graph(results_list, title):
|
|
fig, return_plot = plot.subplots(facecolor="#5b306f")
|
|
|
|
return_plot.set_facecolor("#be95d1")
|
|
|
|
return_plot.spines['top'].set_color("#ffaed2")
|
|
return_plot.spines['bottom'].set_color("#ffaed2")
|
|
return_plot.spines['left'].set_color("#ffaed2")
|
|
return_plot.spines['right'].set_color("#ffaed2")
|
|
return_plot.tick_params(axis='x', colors="#ffaed2")
|
|
return_plot.tick_params(axis='y', colors="#ffaed2")
|
|
|
|
bars = return_plot.barh(np.arange(len(results_list)), results_list.values(), color="#ffaed2")
|
|
return_plot.set_yticks(np.arange(len(results_list)), results_list.keys(), color="#ffaed2")
|
|
return_plot.set_title(title, color="#ffaed2")
|
|
for bar, value in zip(bars, results_list.values()):
|
|
return_plot.text(0.99, bar.get_y() + bar.get_height()/2, f'{value}x', va='center', ha='right', color="#2c1a4a", fontsize=10, fontweight='bold')
|
|
|
|
return_plot.set_xlabel("Execution time improvement\n 1.0 value based on the first CPU", color="#ffaed2")
|
|
|
|
return_plot.axvline(x=1, color="#2c1a4a", linewidth=1)
|
|
fig.text(0, 0, "https://blog.neet.works", color="#ffaed2")
|
|
|
|
plot.savefig(f"{title}.png", bbox_inches='tight', dpi=600)
|
|
|
|
return return_plot
|
|
|
|
csv_fieldnames = ["AVX512", "Resolution", "Encoder", "Preset", "Run Time", "Temperature", "MHz", "Watts"]
|
|
|
|
results_9950X_avx = []
|
|
results_9950X_noavx = []
|
|
results_14700F = []
|
|
|
|
with open('results_9950X.csv', 'r', newline='') as results_file:
|
|
reader = csv.DictReader(results_file, csv_fieldnames)
|
|
for row in reader:
|
|
if row["AVX512"] == "On":
|
|
results_9950X_avx.append(row)
|
|
elif row["AVX512"] == "Off":
|
|
results_9950X_noavx.append(row)
|
|
|
|
with open('results_14700F.csv', 'r', newline='') as results_file:
|
|
reader = csv.DictReader(results_file, csv_fieldnames)
|
|
for row in reader:
|
|
results_14700F.append(row)
|
|
|
|
results_14700F.pop(0)
|
|
|
|
print("Ryzen 9 9950X AVX-512 performance gain. \"Zero\" point of 1.0 based on the speed of the non-AVX-512 performance.")
|
|
print("\nHEVC encoded by the x265 encoder.\n")
|
|
|
|
list_9950X_x265_vs_avx512_720p, list_9950X_x265_vs_avx512_1080p, list_9950X_x265_vs_avx512_4k = make_comparison_list(results_9950X_noavx, results_9950X_avx, "libx265")
|
|
|
|
plot_9950X_x265_noavx_vs_9950X_avx_720p = make_graph(list_9950X_x265_vs_avx512_720p, "9950X AVX-512 Off vs 9950X AVX-512 On, 720p, x265")
|
|
plot_9950X_x265_noavx_vs_9950X_avx_1080p = make_graph(list_9950X_x265_vs_avx512_1080p, "9950X AVX-512 Off vs 9950X AVX-512 On, 1080p, x265")
|
|
plot_9950X_x265_noavx_vs_9950X_avx_4k = make_graph(list_9950X_x265_vs_avx512_4k, "9950X AVX-512 Off vs 9950X AVX-512 On, 4k, x265")
|
|
|
|
print("\nAV1 encoded by the SVT-AV1 encoder. Note: In SVT-AV1, preset 0 is the heaviest, and preset 13 is the lightest.\n")
|
|
|
|
list_9950X_av1_vs_avx512_720p, list_9950X_av1_vs_avx512_1080p, list_9950X_av1_vs_avx512_4k = make_comparison_list(results_9950X_noavx, results_9950X_avx, "libsvtav1")
|
|
|
|
plot_9950X_av1_noavx_vs_9950X_avx_720p = make_graph(list_9950X_av1_vs_avx512_720p, "9950X AVX-512 Off vs 9950X AVX-512 On, 720p, SVT-AV1")
|
|
plot_9950X_av1_noavx_vs_9950X_avx_1080p = make_graph(list_9950X_av1_vs_avx512_1080p, "9950X AVX-512 Off vs 9950X AVX-512 On, 1080p, SVT-AV1")
|
|
plot_9950X_av1_noavx_vs_9950X_avx_4k = make_graph(list_9950X_av1_vs_avx512_4k, "9950X AVX-512 Off vs 9950X AVX-512 On, 4k, SVT-AV1")
|
|
|
|
print("Ryzen 9 9950X AVX-512 performance gain vs the i7-14700F. \"Zero\" point of 1.0 based on the i7-14700F performance.")
|
|
print("\nHEVC encoded by the x265 encoder.\n")
|
|
|
|
list_9950X_x265_vs_14700F_720p, list_9950X_x265_vs_14700F_1080p, list_9950X_x265_vs_14700F_4k = make_comparison_list(results_14700F, results_9950X_avx, "libx265")
|
|
|
|
plot_9950X_avx_x265_vs_14700F_720p = make_graph(list_9950X_x265_vs_14700F_720p, "i7-14700F vs 9950X AVX-512 On, 720p, x265")
|
|
plot_9950X_avx_x265_vs_14700F_1080p = make_graph(list_9950X_x265_vs_14700F_1080p, "i7-14700F vs 9950X AVX-512 On, 1080p, x265")
|
|
plot_9950X_avx_x265_vs_14700F_4k = make_graph(list_9950X_x265_vs_14700F_4k, "i7-14700F vs 9950X AVX-512 On, 4k, x265")
|
|
|
|
|
|
print("\nAV1 encoded by the SVT-AV1 encoder. Note: In SVT-AV1, preset 0 is the heaviest, and preset 13 is the lightest.\n")
|
|
|
|
list_9950X_av1_vs_14700F_720p, list_9950X_av1_vs_14700F_1080p, list_9950X_av1_vs_14700F_4k = make_comparison_list(results_14700F, results_9950X_avx, "libsvtav1")
|
|
|
|
plot_9950X_avx_av1_vs_14700F_720p = make_graph(list_9950X_av1_vs_14700F_720p, "i7-14700F vs 9950X AVX-512 On, 720p, SVT-AV1")
|
|
plot_9950X_avx_av1_vs_14700F_1080p = make_graph(list_9950X_av1_vs_14700F_1080p, "i7-14700F vs 9950X AVX-512 On, 1080p, SVT-AV1")
|
|
plot_9950X_avx_av1_vs_14700F_4k = make_graph(list_9950X_av1_vs_14700F_4k, "i7-14700F vs 9950X AVX-512 On, 4k, SVT-AV1")
|
|
|
|
geomean_dict = {
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 720p, x265": geomean(list_9950X_x265_vs_avx512_720p),
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 1080p, x265": geomean(list_9950X_x265_vs_avx512_1080p),
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 4k, x265": geomean(list_9950X_x265_vs_avx512_4k),
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 720p, SVT-AV1": geomean(list_9950X_av1_vs_avx512_720p),
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 1080p, SVT-AV1": geomean(list_9950X_av1_vs_avx512_1080p),
|
|
"9950X AVX-512 Off vs 9950X AVX-512 On, 4k, SVT-AV1": geomean(list_9950X_av1_vs_avx512_4k),
|
|
"i7-14700F vs 9950X AVX-512 On, 720p, x265": geomean(list_9950X_x265_vs_14700F_720p),
|
|
"i7-14700F vs 9950X AVX-512 On, 1080p, x265": geomean(list_9950X_x265_vs_14700F_1080p),
|
|
"i7-14700F vs 9950X AVX-512 On, 4k, x265": geomean(list_9950X_x265_vs_14700F_4k),
|
|
"i7-14700F vs 9950X AVX-512 On, 720p, SVT-AV1": geomean(list_9950X_av1_vs_14700F_720p),
|
|
"i7-14700F vs 9950X AVX-512 On, 1080p, SVT-AV1": geomean(list_9950X_av1_vs_14700F_1080p),
|
|
"i7-14700F vs 9950X AVX-512 On, 4k, SVT-AV1": geomean(list_9950X_av1_vs_14700F_4k)
|
|
}
|
|
|
|
geomean_dict = dict(reversed(geomean_dict.items()))
|
|
|
|
geomean_graph = make_graph(geomean_dict, "Geomean performance difference at major resolutions, across all presets")
|
|
|
|
#plot.show() |