commit fde2efc1fb6b0f5d241d99f9fa4ddd9a60c9639c Author: rawhide kobayashi Date: Sat Feb 8 22:23:40 2025 -0600 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1b200a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +4k_input.mkv +720p_input.mkv +1080p_input.mkv diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, SVT-AV1.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, SVT-AV1.png new file mode 100644 index 0000000..0902bb5 Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, SVT-AV1.png differ diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, x265.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, x265.png new file mode 100644 index 0000000..1ec0f50 Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 1080p, x265.png differ diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, SVT-AV1.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, SVT-AV1.png new file mode 100644 index 0000000..8d34305 Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, SVT-AV1.png differ diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, x265.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, x265.png new file mode 100644 index 0000000..f5c3009 Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 4k, x265.png differ diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, SVT-AV1.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, SVT-AV1.png new file mode 100644 index 0000000..c19157b Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, SVT-AV1.png differ diff --git a/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, x265.png b/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, x265.png new file mode 100644 index 0000000..b439956 Binary files /dev/null and b/9950x AVX-512 Off vs 9950x AVX-512 On, 720p, x265.png differ diff --git a/Geomean performance difference at major resolutions, across all presets.png b/Geomean performance difference at major resolutions, across all presets.png new file mode 100644 index 0000000..b9e0d68 Binary files /dev/null and b/Geomean performance difference at major resolutions, across all presets.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 1080p, SVT-AV1.png b/i7-14700f vs 9950x AVX-512 On, 1080p, SVT-AV1.png new file mode 100644 index 0000000..7af9b8a Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 1080p, SVT-AV1.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 1080p, x265.png b/i7-14700f vs 9950x AVX-512 On, 1080p, x265.png new file mode 100644 index 0000000..c033c67 Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 1080p, x265.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 4k, SVT-AV1.png b/i7-14700f vs 9950x AVX-512 On, 4k, SVT-AV1.png new file mode 100644 index 0000000..4157bc5 Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 4k, SVT-AV1.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 4k, x265.png b/i7-14700f vs 9950x AVX-512 On, 4k, x265.png new file mode 100644 index 0000000..f60324a Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 4k, x265.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 720p, SVT-AV1.png b/i7-14700f vs 9950x AVX-512 On, 720p, SVT-AV1.png new file mode 100644 index 0000000..c33d433 Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 720p, SVT-AV1.png differ diff --git a/i7-14700f vs 9950x AVX-512 On, 720p, x265.png b/i7-14700f vs 9950x AVX-512 On, 720p, x265.png new file mode 100644 index 0000000..41cf32c Binary files /dev/null and b/i7-14700f vs 9950x AVX-512 On, 720p, x265.png differ diff --git a/main_14700f.py b/main_14700f.py new file mode 100644 index 0000000..ad4c584 --- /dev/null +++ b/main_14700f.py @@ -0,0 +1,95 @@ +import subprocess +import os +import time +import re +import csv + +temp_cmd = ["sensors", "coretemp-isa-0000"] +power_cmd = ["turbostat", "--quiet", "--hide", "CorWatt,Die,Core,CPU,Busy%,Bzy_MHz,TSC_MHz,IPC,IRQ,SMI,POLL,C1,C2,C3,POLL%,C1%,C2%,C3%,C1ACPI,C2ACPI,C3ACPI,C1ACPI%,C2ACPI%,C3ACPI%,CPU%c1,CPU%c6,CPU%c7,CoreTmp,CoreThr,PkgTmp,Totl%C0,Any%C0,GFX%C0,CPUGFX%,Pkg%pc2,Pkg%pc3,Pkg%pc6,Pkg%pc8,Pk%pc10,CPU%LPI,SYS%LPI,GFXWatt,RAMWatt,PKG_%,RAM_%,UncMHz", + "-i", "0.001", "--num_iterations", "1", "--Summary"] +csv_fieldnames = ["AVX512", "Resolution", "Encoder", "Preset", "Run Time", "Temperature", "MHz", "Watts"] +cur_dir = os.getcwd() + +def ffmpeg_cmd(resolution: str, encoder: str, preset: str, avx: str = "") -> None: + cmd = f"ssh -t knowledge@nazrin \"ffmpeg -i '{cur_dir}/{resolution}_input.mkv' -c:v {encoder} -preset {preset} {avx} /tmp/output.mkv -y\"" + print(cmd) + num_tests = 5 + run_time_accumulation = 0 + temp_accumulation = 0 + mhz_accumulation = 0 + watt_accumulation = 0 + + stat_track_iterations = 0 + for x in range(num_tests): + start_time = time.time() + with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True) as process: + while not process.stdout.readline().startswith("frame="): + continue + while process.poll() is None: + stdout_line = process.stdout.readline().split() + temperature = subprocess.run(temp_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + temp_reading = re.search(r"[0-9][0-9][.][0-9]",temperature.stdout) + temp_accumulation += float(temp_reading[0]) + power = subprocess.run(power_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + power_reading = power.stdout.split() + mhz_accumulation += int(power_reading[2]) + watt_accumulation += float(power_reading[3]) + stat_track_iterations += 1 + if len(stdout_line) > 6: + print(f"Temp: {temp_reading[0]} MHz: {power_reading[2]} Pwr: {power_reading[3]} FPS: {stdout_line[2]} Time: {stdout_line[6]}", end='\r') + + run_time_accumulation += time.time() - start_time + + os.remove("/tmp/output.mkv") + + run_time_avg = run_time_accumulation / num_tests + temp_avg = temp_accumulation / stat_track_iterations + mhz_avg = mhz_accumulation / stat_track_iterations + watt_avg = watt_accumulation / stat_track_iterations + print(f"run time: {run_time_avg}") + print(f"temperature: {temp_avg}") + print(f"mhz: {mhz_avg}") + print(f"power: {watt_avg}") + + avx512 = "Off" + + if (encoder == "libx265" and avx != "") or (encoder == "libsvtav1" and avx == ""): + avx512 = "On" + + results_dict = { + "AVX512": avx512, + "Resolution": resolution, + "Encoder": encoder, + "Preset": preset, + "Run Time": round(run_time_avg, 2), + "Temperature": round(temp_avg, 2), + "MHz": round(mhz_avg, 2), + "Watts": round(watt_avg, 2) + } + + with open('results.csv', 'a', newline='') as results_file: + writer = csv.DictWriter(results_file, csv_fieldnames) + writer.writerow(results_dict) + +def main() -> None: + with open('results.csv', 'w', newline='') as results_file: + writer = csv.DictWriter(results_file, csv_fieldnames) + writer.writeheader() + + x265_presets = ["ultrafast", "superfast", "veryfast", "faster", "fast", + "medium", "slow", "slower", "veryslow", "placebo"] + av1_presets = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"] + resolutions = ["720p", "1080p", "4k"] + + for preset in av1_presets: + for resolution in resolutions: + ffmpeg_cmd(resolution, "libsvtav1", preset, "-svtav1-params \"asm=9\"") + #ffmpeg_cmd(resolution, "libsvtav1", preset) + + for preset in x265_presets: + for resolution in resolutions: + ffmpeg_cmd(resolution, "libx265", preset) + #ffmpeg_cmd(resolution, "libx265", preset, "-x265-params \"asm=avx512\"") + +if __name__ == "__main__": + main() diff --git a/main_9950x.py b/main_9950x.py new file mode 100644 index 0000000..c85f241 --- /dev/null +++ b/main_9950x.py @@ -0,0 +1,95 @@ +import subprocess +import os +import time +import re +import csv + +temp_cmd = ["sensors", "k10temp-pci-00c3"] +power_cmd = ["turbostat", "--quiet", "--hide", "CorWatt,Die,Core,CPU,Busy%,Bzy_MHz,TSC_MHz,IPC,IRQ,SMI,POLL,C1,C2,C3,POLL%,C1%,C2%,C3%", + "-i", "0.001", "--num_iterations", "1", "--Summary"] +csv_fieldnames = ["AVX512", "Resolution", "Encoder", "Preset", "Run Time", "Temperature", "MHz", "Watts"] +cur_dir = os.getcwd() + +def ffmpeg_cmd(resolution: str, encoder: str, preset: str, avx: str = "") -> None: + cmd = f"ssh -t rawhide@hong \"ffmpeg -i '{cur_dir}/{resolution}_input.mkv' -c:v {encoder} -preset {preset} {avx} /tmp/output.mkv -y\"" + print(cmd) + num_tests = 5 + run_time_accumulation = 0 + temp_accumulation = 0 + mhz_accumulation = 0 + watt_accumulation = 0 + + stat_track_iterations = 0 + for x in range(num_tests): + start_time = time.time() + with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True) as process: + while not process.stdout.readline().startswith("frame="): + continue + while process.poll() is None: + stdout_line = process.stdout.readline().split() + temperature = subprocess.run(temp_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + temp_reading = re.search(r"[0-9][0-9][.][0-9]",temperature.stdout) + temp_accumulation += float(temp_reading[0]) + power = subprocess.run(power_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) + power_reading = power.stdout.split() + mhz_accumulation += int(power_reading[2]) + watt_accumulation += float(power_reading[3]) + stat_track_iterations += 1 + if len(stdout_line) > 6: + print(f"Temp: {temp_reading[0]} MHz: {power_reading[2]} Pwr: {power_reading[3]} FPS: {stdout_line[2]} Time: {stdout_line[6]}", end='\r') + + run_time_accumulation += time.time() - start_time + + os.remove("/tmp/output.mkv") + + run_time_avg = run_time_accumulation / num_tests + temp_avg = temp_accumulation / stat_track_iterations + mhz_avg = mhz_accumulation / stat_track_iterations + watt_avg = watt_accumulation / stat_track_iterations + print(f"run time: {run_time_avg}") + print(f"temperature: {temp_avg}") + print(f"mhz: {mhz_avg}") + print(f"power: {watt_avg}") + + avx512 = "Off" + + if (encoder == "libx265" and avx != "") or (encoder == "libsvtav1" and avx == ""): + avx512 = "On" + + results_dict = { + "AVX512": avx512, + "Resolution": resolution, + "Encoder": encoder, + "Preset": preset, + "Run Time": round(run_time_avg, 2), + "Temperature": round(temp_avg, 2), + "MHz": round(mhz_avg, 2), + "Watts": round(watt_avg, 2) + } + + with open('results.csv', 'a', newline='') as results_file: + writer = csv.DictWriter(results_file, csv_fieldnames) + writer.writerow(results_dict) + +def main() -> None: + with open('results.csv', 'w', newline='') as results_file: + writer = csv.DictWriter(results_file, csv_fieldnames) + writer.writeheader() + + x265_presets = ["ultrafast", "superfast", "veryfast", "faster", "fast", + "medium", "slow", "slower", "veryslow", "placebo"] + av1_presets = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"] + resolutions = ["720p", "1080p", "4k"] + + for preset in av1_presets: + for resolution in resolutions: + ffmpeg_cmd(resolution, "libsvtav1", preset, "-svtav1-params \"asm=9\"") + ffmpeg_cmd(resolution, "libsvtav1", preset) + + for preset in x265_presets: + for resolution in resolutions: + ffmpeg_cmd(resolution, "libx265", preset) + ffmpeg_cmd(resolution, "libx265", preset, "-x265-params \"asm=avx512\"") + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/results_14700f.csv b/results_14700f.csv new file mode 100644 index 0000000..0e3e0d6 --- /dev/null +++ b/results_14700f.csv @@ -0,0 +1,73 @@ +AVX512,Resolution,Encoder,Preset,Run Time,Temperature,MHz,Watts +Off,720p,libsvtav1,0,343.7,61.75,2227.21,256.19 +Off,1080p,libsvtav1,0,567.37,66.36,2715.24,288.67 +Off,4k,libsvtav1,0,1409.27,71.65,4179.28,309.42 +Off,720p,libsvtav1,1,201.9,62.47,2129.7,226.31 +Off,1080p,libsvtav1,1,327.69,66.17,2715.67,261.04 +Off,4k,libsvtav1,1,786.73,71.78,4148.3,309.07 +Off,720p,libsvtav1,2,87.83,63.59,2377.57,235.52 +Off,1080p,libsvtav1,2,143.28,67.46,3369.96,290.73 +Off,4k,libsvtav1,2,381.33,71.38,4211.52,320.49 +Off,720p,libsvtav1,3,54.75,62.62,2516.89,232.06 +Off,1080p,libsvtav1,3,90.19,67.5,3538.79,288.85 +Off,4k,libsvtav1,3,250.29,71.24,4294.42,307.92 +Off,720p,libsvtav1,4,34.74,62.12,2312.37,207.93 +Off,1080p,libsvtav1,4,56.86,67.31,3388.92,271.4 +Off,4k,libsvtav1,4,156.96,72.15,4430.95,296.27 +Off,720p,libsvtav1,5,17.07,63.34,2723.29,226.66 +Off,1080p,libsvtav1,5,29.39,66.68,3240.02,230.22 +Off,4k,libsvtav1,5,83.74,71.42,4428.26,293.48 +Off,720p,libsvtav1,6,13.58,65.29,2528.27,204.3 +Off,1080p,libsvtav1,6,24.33,65.72,3274.45,247.41 +Off,4k,libsvtav1,6,68.12,70.2,4026.62,278.62 +Off,720p,libsvtav1,7,12.57,61.19,2296.48,195.65 +Off,1080p,libsvtav1,7,21.24,63.61,2812.68,224.05 +Off,4k,libsvtav1,7,62.14,68.81,3891.03,288.73 +Off,720p,libsvtav1,8,12.21,60.7,1821.53,171.91 +Off,1080p,libsvtav1,8,20.2,62.16,2690.33,232.47 +Off,4k,libsvtav1,8,59.4,67.87,3717.65,279.88 +Off,720p,libsvtav1,9,11.78,60.17,1492.28,150.86 +Off,1080p,libsvtav1,9,18.87,62.57,2339.2,202.95 +Off,4k,libsvtav1,9,55.42,66.67,3182.67,252.68 +Off,720p,libsvtav1,10,11.5,57.32,1442.19,147.86 +Off,1080p,libsvtav1,10,18.55,61.77,2129.12,211.74 +Off,4k,libsvtav1,10,53.63,66.19,3155.85,267.35 +Off,720p,libsvtav1,11,11.32,57.83,1405.17,147.61 +Off,1080p,libsvtav1,11,18.36,61.12,1866.05,184.39 +Off,4k,libsvtav1,11,53.46,65.51,3093.69,270.8 +Off,720p,libsvtav1,12,11.32,58.57,1348.86,138.21 +Off,1080p,libsvtav1,12,18.28,61.66,1916.34,196.64 +Off,4k,libsvtav1,12,53.55,66.05,3247.02,274.34 +Off,720p,libsvtav1,13,11.3,57.45,1472.76,154.92 +Off,1080p,libsvtav1,13,18.32,60.47,1895.21,187.31 +Off,4k,libsvtav1,13,53.59,65.89,3111.66,273.22 +Off,720p,libx265,ultrafast,11.89,61.53,1967.75,171.91 +Off,1080p,libx265,ultrafast,20.02,63.84,3006.94,225.66 +Off,4k,libx265,ultrafast,58.64,68.11,3890.54,271.83 +Off,720p,libx265,superfast,12.74,64.38,2177.7,182.81 +Off,1080p,libx265,superfast,21.01,65.47,2755.19,221.99 +Off,4k,libx265,superfast,61.87,69.66,3977.41,266.96 +Off,720p,libx265,veryfast,16.77,61.04,1923.7,186.11 +Off,1080p,libx265,veryfast,28.32,63.11,2574.8,210.21 +Off,4k,libx265,veryfast,86.34,68.16,3516.25,261.43 +Off,720p,libx265,faster,16.63,60.93,2020.65,183.2 +Off,1080p,libx265,faster,28.04,63.75,2454.59,201.61 +Off,4k,libx265,faster,86.33,67.94,3527.18,276.57 +Off,720p,libx265,fast,18.11,61.5,2135.8,204.02 +Off,1080p,libx265,fast,29.97,64.55,2813.09,226.16 +Off,4k,libx265,fast,93.25,69.51,3912.64,282.34 +Off,720p,libx265,medium,22.17,60.08,1810.56,204.54 +Off,1080p,libx265,medium,37.41,63.51,2558.51,214.22 +Off,4k,libx265,medium,110.35,70.01,3824.73,269.74 +Off,720p,libx265,slow,49.96,62.01,1876.6,202.25 +Off,1080p,libx265,slow,84.24,66.09,2782.9,251.7 +Off,4k,libx265,slow,252.78,72.66,4318.67,294.63 +Off,720p,libx265,slower,169.63,63.76,1840.9,224.48 +Off,1080p,libx265,slower,273.07,68.32,2629.67,261.51 +Off,4k,libx265,slower,789.55,73.0,4249.35,299.65 +Off,720p,libx265,veryslow,285.19,64.02,1788.16,236.33 +Off,1080p,libx265,veryslow,459.54,69.29,2571.88,291.14 +Off,4k,libx265,veryslow,1343.9,73.32,4097.43,305.24 +Off,720p,libx265,placebo,625.38,67.22,2129.95,280.35 +Off,1080p,libx265,placebo,1080.23,71.75,2965.88,319.13 +Off,4k,libx265,placebo,3521.05,73.71,4326.43,310.37 diff --git a/results_9950x.csv b/results_9950x.csv new file mode 100644 index 0000000..95033f6 --- /dev/null +++ b/results_9950x.csv @@ -0,0 +1,145 @@ +AVX512,Resolution,Encoder,Preset,Run Time,Temperature,MHz,Watts +Off,720p,libsvtav1,0,275.61,83.07,2992.55,140.19 +On,720p,libsvtav1,0,267.79,82.74,2748.7,139.78 +Off,1080p,libsvtav1,0,428.36,88.43,3717.9,157.85 +On,1080p,libsvtav1,0,412.13,86.64,3703.81,155.81 +Off,4k,libsvtav1,0,870.27,90.27,7517.42,193.19 +On,4k,libsvtav1,0,793.46,90.97,7478.53,190.74 +Off,720p,libsvtav1,1,160.75,81.51,2913.29,139.5 +On,720p,libsvtav1,1,156.01,80.44,2964.06,138.62 +Off,1080p,libsvtav1,1,244.61,86.56,3863.49,155.54 +On,1080p,libsvtav1,1,235.13,86.04,3881.38,156.66 +Off,4k,libsvtav1,1,490.85,91.91,7376.41,192.01 +On,4k,libsvtav1,1,452.06,91.95,7424.08,190.28 +Off,720p,libsvtav1,2,66.38,85.36,2922.03,154.71 +On,720p,libsvtav1,2,64.34,84.83,2579.17,153.98 +Off,1080p,libsvtav1,2,96.73,90.4,4819.95,179.21 +On,1080p,libsvtav1,2,92.8,90.13,4964.76,179.57 +Off,4k,libsvtav1,2,237.74,91.56,8283.34,190.96 +On,4k,libsvtav1,2,223.85,88.55,8356.7,190.06 +Off,720p,libsvtav1,3,39.57,81.95,2450.49,162.09 +On,720p,libsvtav1,3,38.43,80.94,2412.56,159.25 +Off,1080p,libsvtav1,3,59.33,85.18,4837.1,183.45 +On,1080p,libsvtav1,3,57.05,84.92,4592.85,179.34 +Off,4k,libsvtav1,3,158.86,85.94,7752.59,191.16 +On,4k,libsvtav1,3,151.74,85.08,7820.16,188.68 +Off,720p,libsvtav1,4,25.72,80.85,2434.07,163.78 +On,720p,libsvtav1,4,24.88,80.1,2264.14,158.33 +Off,1080p,libsvtav1,4,38.21,84.31,4269.57,184.21 +On,1080p,libsvtav1,4,36.62,84.62,4219.17,178.88 +Off,4k,libsvtav1,4,98.46,85.03,7132.51,193.29 +On,4k,libsvtav1,4,93.1,84.6,7401.68,190.61 +Off,720p,libsvtav1,5,12.36,82.6,2441.37,159.99 +On,720p,libsvtav1,5,12.06,82.16,2398.89,157.37 +Off,1080p,libsvtav1,5,20.87,83.21,3782.77,178.66 +On,1080p,libsvtav1,5,20.43,83.16,3482.82,174.44 +Off,4k,libsvtav1,5,59.53,83.95,6346.44,186.79 +On,4k,libsvtav1,5,58.06,84.07,5591.28,188.55 +Off,720p,libsvtav1,6,10.88,82.7,2272.32,160.79 +On,720p,libsvtav1,6,10.84,81.77,2306.3,163.33 +Off,1080p,libsvtav1,6,18.39,83.04,2969.88,170.39 +On,1080p,libsvtav1,6,18.12,82.76,2795.84,171.66 +Off,4k,libsvtav1,6,50.29,85.19,4851.32,187.41 +On,4k,libsvtav1,6,49.78,85.43,4588.62,187.31 +Off,720p,libsvtav1,7,10.46,80.08,1826.58,152.65 +On,720p,libsvtav1,7,10.39,78.79,1719.44,142.46 +Off,1080p,libsvtav1,7,16.89,81.28,2381.02,162.26 +On,1080p,libsvtav1,7,16.86,81.12,2572.25,168.66 +Off,4k,libsvtav1,7,47.35,85.04,4082.87,186.18 +On,4k,libsvtav1,7,46.94,85.39,4127.72,184.79 +Off,720p,libsvtav1,8,10.2,78.13,1464.74,136.59 +On,720p,libsvtav1,8,10.09,76.95,1396.99,130.78 +Off,1080p,libsvtav1,8,16.41,80.2,2572.06,171.95 +On,1080p,libsvtav1,8,16.35,80.08,2330.01,152.94 +Off,4k,libsvtav1,8,46.07,85.12,3955.64,183.03 +On,4k,libsvtav1,8,45.8,85.31,4051.21,182.78 +Off,720p,libsvtav1,9,9.86,76.93,1655.12,137.33 +On,720p,libsvtav1,9,9.93,75.37,1515.5,124.55 +Off,1080p,libsvtav1,9,15.94,79.48,2275.4,149.3 +On,1080p,libsvtav1,9,15.88,79.6,2197.02,147.94 +Off,4k,libsvtav1,9,44.29,85.19,3861.9,183.37 +On,4k,libsvtav1,9,44.29,85.38,3956.06,182.92 +Off,720p,libsvtav1,10,9.73,75.6,1190.12,129.19 +On,720p,libsvtav1,10,9.74,74.27,1170.96,133.3 +Off,1080p,libsvtav1,10,15.76,78.72,2082.83,150.15 +On,1080p,libsvtav1,10,15.72,78.8,2215.12,149.56 +Off,4k,libsvtav1,10,43.36,85.17,3964.17,179.0 +On,4k,libsvtav1,10,43.44,85.67,3672.67,182.2 +Off,720p,libsvtav1,11,9.83,74.77,1372.62,124.04 +On,720p,libsvtav1,11,9.68,73.31,1154.32,119.77 +Off,1080p,libsvtav1,11,15.77,78.07,1996.09,150.96 +On,1080p,libsvtav1,11,15.66,78.35,2121.83,149.23 +Off,4k,libsvtav1,11,43.4,85.08,3617.71,179.97 +On,4k,libsvtav1,11,43.41,85.25,3979.42,181.18 +Off,720p,libsvtav1,12,9.69,74.31,1253.0,118.16 +On,720p,libsvtav1,12,9.77,73.05,1219.81,112.12 +Off,1080p,libsvtav1,12,15.67,78.02,2019.82,153.4 +On,1080p,libsvtav1,12,15.76,78.13,2074.67,147.58 +Off,4k,libsvtav1,12,43.36,85.12,3679.35,178.09 +On,4k,libsvtav1,12,43.42,85.17,4161.7,178.86 +Off,720p,libsvtav1,13,9.77,74.4,1088.44,125.7 +On,720p,libsvtav1,13,9.68,72.95,1298.77,126.4 +Off,1080p,libsvtav1,13,15.77,77.77,2091.71,146.93 +On,1080p,libsvtav1,13,15.66,77.93,1999.61,149.96 +Off,4k,libsvtav1,13,43.37,84.77,3711.26,181.84 +On,4k,libsvtav1,13,43.41,85.02,3817.5,180.59 +Off,720p,libx265,ultrafast,9.97,76.84,1609.77,135.47 +On,720p,libx265,ultrafast,9.92,75.51,1645.67,135.77 +Off,1080p,libx265,ultrafast,16.38,79.48,2549.3,164.32 +On,1080p,libx265,ultrafast,16.32,79.37,2674.66,171.9 +Off,4k,libx265,ultrafast,45.72,84.32,4207.16,186.78 +On,4k,libx265,ultrafast,45.34,84.63,4359.75,183.3 +Off,720p,libx265,superfast,10.24,78.29,2042.02,152.6 +On,720p,libx265,superfast,10.21,77.33,1906.78,142.69 +Off,1080p,libx265,superfast,16.74,80.16,2598.24,170.97 +On,1080p,libx265,superfast,16.75,79.96,2604.44,167.56 +Off,4k,libx265,superfast,47.04,84.17,4398.25,183.39 +On,4k,libx265,superfast,46.6,84.64,4595.14,187.09 +Off,720p,libx265,veryfast,10.81,80.78,1895.74,159.84 +On,720p,libx265,veryfast,10.67,79.59,1893.39,160.32 +Off,1080p,libx265,veryfast,18.35,81.83,2456.24,168.44 +On,1080p,libx265,veryfast,18.19,81.68,2779.27,169.58 +Off,4k,libx265,veryfast,51.9,83.63,5421.21,186.81 +On,4k,libx265,veryfast,51.08,84.21,5543.17,190.49 +Off,720p,libx265,faster,10.77,80.88,1958.09,163.1 +On,720p,libx265,faster,10.7,79.85,2088.4,161.0 +Off,1080p,libx265,faster,18.25,82.12,2718.77,173.7 +On,1080p,libx265,faster,18.22,81.73,2742.09,169.38 +Off,4k,libx265,faster,51.96,83.79,5753.61,191.94 +On,4k,libx265,faster,51.03,84.57,5386.17,192.34 +Off,720p,libx265,fast,11.28,83.15,2112.5,162.11 +On,720p,libx265,fast,11.05,81.72,1861.71,160.5 +Off,1080p,libx265,fast,19.0,83.79,3063.13,178.62 +On,1080p,libx265,fast,18.7,82.63,2914.55,176.94 +Off,4k,libx265,fast,55.38,84.41,5748.98,191.73 +On,4k,libx265,fast,53.22,83.99,5216.62,190.75 +Off,720p,libx265,medium,13.58,81.3,1839.12,159.6 +On,720p,libx265,medium,13.34,80.27,1848.54,160.91 +Off,1080p,libx265,medium,22.64,83.95,2929.93,177.17 +On,1080p,libx265,medium,22.2,83.72,2577.23,177.73 +Off,4k,libx265,medium,68.88,83.77,5365.36,191.88 +On,4k,libx265,medium,66.67,83.85,5115.63,193.02 +Off,720p,libx265,slow,32.11,83.11,1932.51,164.84 +On,720p,libx265,slow,28.7,80.13,1862.04,156.42 +Off,1080p,libx265,slow,50.01,88.35,2903.52,187.93 +On,1080p,libx265,slow,44.34,86.68,2644.33,188.76 +Off,4k,libx265,slow,145.77,84.82,5992.44,196.66 +On,4k,libx265,slow,125.07,84.87,5594.92,196.49 +Off,720p,libx265,slower,120.55,82.56,1994.78,154.4 +On,720p,libx265,slower,105.11,80.2,1899.32,150.12 +Off,1080p,libx265,slower,174.49,90.93,3472.46,184.46 +On,1080p,libx265,slower,150.92,89.68,2985.41,182.97 +Off,4k,libx265,slower,449.6,88.05,7063.46,194.94 +On,4k,libx265,slower,379.24,88.11,6601.06,193.28 +Off,720p,libx265,veryslow,207.69,86.81,1924.62,150.05 +On,720p,libx265,veryslow,177.97,84.71,1833.55,147.35 +Off,1080p,libx265,veryslow,301.52,93.91,3191.26,180.84 +On,1080p,libx265,veryslow,255.94,90.6,2977.94,178.22 +Off,4k,libx265,veryslow,744.77,89.47,6934.46,196.92 +On,4k,libx265,veryslow,613.56,89.8,6627.35,194.04 +Off,720p,libx265,placebo,441.26,91.55,3143.15,162.28 +On,720p,libx265,placebo,381.82,87.38,3112.01,162.19 +Off,1080p,libx265,placebo,678.01,92.45,5343.51,190.82 +On,1080p,libx265,placebo,585.99,90.71,5287.56,188.81 +Off,4k,libx265,placebo,1936.54,85.25,6634.46,196.73 +On,4k,libx265,placebo,1657.44,87.4,6499.13,193.79 diff --git a/resultulator.py b/resultulator.py new file mode 100644 index 0000000..adf9f88 --- /dev/null +++ b/resultulator.py @@ -0,0 +1,136 @@ +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) + + 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() \ No newline at end of file