Zlepšete si výkon enkódování tímhle jednoduchým trikem: Test AVX-512 v x265 na Zenu 5

24. 9. 2024

Sdílet

AMD Ryzen 9 9950X Autor: Ľubomír Samák
AMD Ryzen 9 9950X
Vrátili jsme se k testům instrukcí AVX-512 v x265 a podívali se, jak pomáhají na Zenu 5. Mimochodem, AVX-512 v x265 stále není zapnuté automaticky. Ukážeme vám, jak si můžete s Ryzenem 9000 jednoduše zlepšit výkon.

Možná to nevíte, ale enkodér videa x265 dokáže použít instrukce AVX-512, avšak z historických důvodů v něm nejsou zapnuté. Před pár lety jsme probírali, jak optimalizace používající tyto instrukce zapnout, a zkoušeli, jaký to má vliv nejdřív na procesorech Intel Rocket Lake a potom na Zenu 4. Vzhledem k velké oblibě těchto článků jsme stejné testy teď zopakovali i na nové architektuře Zen 5, pro porovnání s předchozími jádry.

x265 nepoužije AVX-512 samo od sebe, je mu třeba domluvit

Tento článek nebude nějaké rozsáhlé zhodnocení užitečnosti AVX-512 nebo Zenu 5. Naše předchozí testy efektu AVX-512 vznikly víceméně kvůli potřebě se nějak postavit k tomu, že enkodér x265, používaný v naší metodice, sice umožňuje používat AVX-512 pro zvýšení výkonu, ale ve výchozím nastavení má tyto optimalizace vypnuté. Protože jejich aktivace není automatická ani přímočará (pokud nepoužíváte holou binárku x265 z příkazové řádky), nemáme ani v naší metodice výsledky změřené s použitím těchto instrukcí.

Rychlost enkódování by tedy mohla na procesorech Ryzen 9000 být o něco lepší, pokud byste si se zapnutím práci dali. Jak na to, vám ukážeme, a přidáme pár rychlotestů toho, jak se s AVX-512 v x265 procesory Ryzen 9000 chovají v porovnání s předchozí generací a s procesory Intel Rocket Lake, které AVX-512 také poskytovaly.

Proč x265 nepoužívá AVX-512 samo od sebe? Je to proto, že tyto optimalizace pokrývají jen některé operace enkodéru a ve výsledku je zrychlení v FPS relativně nízké – nečekejte nic zdaleka blízkého 100% zrychlení, které by teoreticky mohl 2× širší SIMD vektor dosáhnout v izolovaných operacích. Současně se zpracováním 2× více hodnot v jedné instrukci ale také AVX-512 v době, kdy se poprvé objevilo, o hodně zvyšovalo spotřebu. Procesory Xeon Scalable první generace (Skylake-SP), které byly v době psaní těchto optimalizací aktuální, při použití těchto instrukcí snižovaly takty a měly další složitější postihy výkonu (aktivace a deaktivace 512bitových jednotek měla těžkopádný přechodový režim a časté přepínání samo o sobě zabíjelo výkon). Proto na serverových procesorech nebylo lehké výkonnostní potenciál využít.

Když se do x265 tyto optimalizace dostaly, zjistilo se, že na Xeonech nezvýší výkon o tolik, o kolik se sníží frekvence. A kvůli tomu proto bylo rozhodnuto nechat je ve výchozím stavu vypnuté – x265 je tedy nepoužije, dokud to nasílu nepovolíte (můžete si o tom přečíst zde). Toto nastavení od té doby přetrvalo, je stále nezměněné i v roce 2024. Můžete si to ověřit, když otevřete protokol z enkódování a najdete řádek začínající „x265 [info]: using cpu capabilities:“. Ve výchozím nastavení tam najdete něco jako toto:

Indikace o použitých instrukčních sadách s defaultními nastaveními x265

Indikace o použitých instrukčních sadách s defaultními nastaveními x265

Autor: Cnews

Screenshot je pořízený v aktuálním Nightly sestavení HandBrake (2024092301) na procesoru Ryzen 9 7950X, který AVX-512 také podporuje, přesto se ukazuje, že enkodér automaticky aktivoval jen optimalizace v BMI2 a AVX2.

Vývojáři dříve doporučovali zapnout AVX-512 tehdy, když například enkódujete 4K s velmi pomalými nastaveními. Ovšem pokud váš procesor je přetaktovaný na pevnou frekvenci nebo z jiného důvodu takty při AVX-512 nesnižuje, měli byste obecně vždy zaznamenat zrychlení. Toto je případ procesorů Rocket Lake, které by aspoň na Z590 deskách měly držet takty vysoko i při AVX-512. Procesory Ryzen 7000 s jádry Zen 4 by neměly takty snižovat prakticky vůbec (mají také jen 256bitové jednotky, takže se od nich moc výkonu navíc čekat nedá).

Nové procesory Ryzen 9000 také, zdá se, netrpí podtaktováním při použití instrukcí AVX-512, nebo alespoň ne významným, a nemají ony problémy s přepínáním mezi 256bitovým a 512bitovým režimem jako někdejší procesory Intel Skylake-SP a Skylake-X. Tudíž i na nich by měl být dobrý nápad AVX-512 zapnout.

Jak AVX-512 zapnout?

Použití AVX-512 v x265 se zapíná parametrem ‑‑asm avx512. Ten použijte, pokud spouštíte přímo x265.exe. Pokud ale používáte nějaké GUI nebo frontend, musíte zjistit, jak se z něj tento parametr dá x265 předat.

V HandBrake se to dělá v nastaveních videoenkodéru – zvolíte x265 a dole v poli „Advanced Options“ můžete vidět parametry pro příkazovou řádku, které se x265 předávají. Už by jich tam pár mělo být. Vy musíte udělat to, že na konec přidáte dvojtečku (bez mezer), která odděluje jednotlivé parametry, a za to přidáte „asm=avx512“. Bez uvozovek, viz obrázek.Zapnutí AVX-512 u x265 v Handbrake

Zapnutí AVX-512 u x265 v HandBrake

Autor: Cnews

Po tomto už by pohled do logu měl ukazovat, že x265 používá i AVX-512. Řádek o instrukčních rozšířeních by měl říkat toto (pokud máte procesor s AVX-512):

Indikace o použitých instrukčních sadách po ruční aktivaci AVX-512 (na Ryzenu 9 7950X)

Indikace o použitých instrukčních sadách po ruční aktivaci AVX-512 (na Ryzenu 9 7950X)

Autor: Cnews

Co to dělá: Je AVX-512 v Zenu 5 lepší než to od Intelu?

Většinu z vás teď ale asi zajímá, jak dobrá implementace AVX-512 je a kolik výkonu přidává (případně jestli zhoršuje spotřebu, pokud ještě máte v paměti test na procesorech Rocket Lake). Když už máme z předchozích testů základ pro poměřování, přeběhli jsme stejné testy i na Ryzenech 9000. Díky tomu, že se stále používá stejná testovací metodika (včetně stejné verze x265 a HandBrake), by měly být výsledky a přínosy AVX-512 přímo porovnatelné s předchozími testy z roku 2021 a 2022:

Test Rocket Lake a AVX-512: jak ho zapnout v x265 a jaký je výkon a spotřeba? Přečtěte si také:

Test Rocket Lake a AVX-512: jak ho zapnout v x265 a jaký je výkon a spotřeba?

AVX-512 na Ryzenech 7000: jak užitečné je a je implementace od AMD lepší než Intelu? Přečtěte si také:

AVX-512 na Ryzenech 7000: jak užitečné je a je implementace od AMD lepší než Intelu?

U Zenu 4 jsme shledali, že zapnutí x265 má dost malý přínos, který skoro nestojí za námahu. Zrychlení je o plus minus 2 % nebo méně, zatímco u Rocket Lake se výkon stejného procesoru při stejné frekvenci zlepšil o 7,5–9,0 %. Nicméně je na Zenu 4 vliv pořád pozitivní a není spojen se zhoršením spotřeby nebo jinými nevýhodami, takže je přesto přínosné mít na Ryzenech 7000 (a 8000 v případě APU) s architekturou Zen 4 tyto instrukce zapnuté. Je to proto, že Zen 4 sice podporuje tyto 512bitové instrukce, ale počítá je na 256bitových jednotkách na dva průchody. Je proto dobrá zpráva pro AMD, že vlivem nějakých neefektivit kódu používajícího AVX-512 v porovnání s kódem používajícím jen AVX2 nedochází u Zenu 4 ke zpomalení. Optimalizace v x265 byly totiž vyvinuté a testované na procesoru s 512bitovými jednotkami, navíc na procesoru Intel, dávno před možností vyzkoušet, zda fungují i na Zenu 4.

Co ale Zen 5? Tento procesor má v desktopové verzi (ne ale v té notebookové, mobilní Ryzen AI 300 má 256bitové jednotky) plně 512bitové jednotky a dokáže dokonce v případě instrukcí pracujících s celočíselnými hodnotami (integery), které se v multimédiích primárně využívají, provést čtyři 512bitové operace (v případě celočíselného SIMD sčítání) za cyklus. Měl by tedy mít ještě lepší teoretický SIMD výkon než Rocket Lake. Jeho jádro Cypress Cove (14nm verze Sunny Cove z 10nm procesorů Ice Lake) dokáže provést maximálně dvě 512bitová celočíselná sčítání. Zen 5 má také výrazně lepší výkon ve floating point operacích, zatímco Rocket Lake má poloviční výkon 512bitových operací FMA oproti serverové verzi Skylake-SP a Ice Lake-SP. To se ale v x265 nikde nedostane ke slovu.

Níže můžete vidět výsledky našeho měření výkonu enkódování na procesorech Ryzen 5 9600X, Ryzen 7 9700X, Ryzen 9 9900X a Ryzen 9 9950X, a to vždy bez AVX-512 a s AVX-512. Ale v grafu jsou i výsledky ukazující přínos AVX-512 na oněch dříve testovaných procesorech Intel Core i9–11900K, i7–11700KF a i5–11400F zastupujících Rocket Lake a Ryzenu 9 7900X / Ryzenu 5 7600X zastupujících Zen 4.

Ve standardních recenzích HWCoolingu jsou zahrnuté jen výsledky bez AVX-512 a jen k nim se přihlíželo, ale jak můžete vidět, výsledky procesorů s architekturou Zen 5 by se v této jedné disciplíně o maličko zlepšily (i proti Zenu 4), pokud jste ochotní v x265 tyto optimalizace zapnout.

Enkódovací úloha, kterou používá HWCooling pro testování, přináší benefit +6 % na Ryzenu 9 9900X, +7 % na Ryzenu 9 9950X a na Ryzenu 5 9600X, ale na Ryzenu 7 9700X máme nárůst dokonce +9 %. Rozdíly nejsou dané tím, že by se na jednotlivých procesorech chovaly instrukce jinak, spíše to bude kvůli jiným výkonnostním faktorům, jako je škálování na daný počet vláken, a nějaké kolísání asi je i kvůli tomu, že bohužel HandBrake zaokrouhluje výsledné FPS na desetiny a to není dostatečná přesnost.

Nicméně s +6 % až + 9 % to vypadá, že rychlostní přínos AVX-512 je na procesorech s jádry Zen 5 stejný jako na jádru Intel Rocket Lake.

Při enkódování v x265 s aktivním AVX-512 na procesorech Ryzen 9000 jsme změřili i spotřebu. Tentokrát jsme ale nepřeměřili přímo přírůstek spotřeby po aktivaci AVX-512 (nemáme čísla pro průběh s vypnutými optimalizacemi), ale zdá se, že to není ani moc třeba. Spotřeby Ryzen 9000 se i po zapnutí AVX-512 drží na prakticky stejných průměrných hodnotách, jaké dotyčné procesory spotřebovávají v testu HandBrake s x264 (tam by mělo být AVX-512 použito automaticky), rozdíly jsou v nízkých jednotkách wattů. Současně jsou ale spotřeby dokonce nižší než v mnohovláknové zátěži Cinebench R23, kde AVX-512 použito není. Tudíž se zdá, že alespoň při běhu x265 se spotřeba vlivem AVX-512 nijak významně nenavyšuje. V mnohovláknových aplikacích jednoduše bude spotřeba taková, jakou mají tyto procesory typicky i v dalších mnohovláknových úlohách.

Graf průběhu spotřeby pro procesory Ryzen 9000 při enkódování v x265 se zapnutými optimalizacemi používajícími instrukce AVX-512

Graf průběhu spotřeby pro procesory Ryzen 9000 při enkódování v x265 se zapnutými optimalizacemi používajícími instrukce AVX-512

Autor: Cnews

I dosahované frekvence jsou zhruba stejné (s tolerancí pár desítek MHz) jako ty, na kterých procesory Ryzen 9000 jedou v Cinebench R23. A vycházejí nám i prakticky shodné teploty jako v Cinebench R23. Ač to tedy teď nemáme podložené měřením, zdá se, že u Zenu 5 se při enkódování s AVX-512 nezhoršují provozní vlastnosti. A nemá tedy smysl tyto instrukce nepoužít, pokud vaše enkódovací aplikace umožňuje AVX-512 zapnout (v HandBrake si to můžete zautomatizovat tak, že si zkopírujete a zeditujete profil, který používáte).

Pro připomenutí, na procesorech Rocket Lake jsme sice viděli podobný nárůst výkonu po zapnutí AVX-512 jako na Zenu 5, ale vedlo to na nich ke zvýšení spotřeby o 28–30 % (tehdy jsme to skutečně měřili) a adekvátně k tomu také o dost stouply teploty. Například u Core i9–11900K šla spotřeba naměřená na 12V kabelu z 226 W na 292 W! Oproti tomu Ryzen 7 9700X se stejnými osmi jádry a 16 vlákny má spotřebu 104 W a výkon o 38 % vyšší. Ryzen 9 9950X s 16 jádry doleze až skoro ke 250W spotřebě, ale výkon má o 156 % vyšší.

Závěr: Bonus zdarma

AVX-512 je tedy v x265 pro Zen 5 jednoznačný přínos. Osobně mě trošku překvapilo, že nárůst výkonu po zapnutí AVX-512 není o něco vyšší, vzhledem k tomu, že SIMD jednotka Zenu 5 je o dost silnější než ta v Rocket Lake. Zen 5 má čtyři pipeline pro 512bitové instrukce (a stejně tak může zpracovat čtyři 256 bitové za cyklus) a Rocket Lake jenom dvě (zatímco pro 256bitové operace dokáže použít tři). Pokud ale porovnáte Zen 5 s AVX-512 proti Rocket Lake s AVX-512, hned je vidět výrazně vyšší výkon na 1 MHz (viz výkonnostní náskok Ryzenu 9700X před 11900K, byť běží na o něco nižší frekvenci), takže ta pokročilejší SIMD jednotka Zenu 5 je vidět.

Je nicméně také možné, že Zen 5 by si vedl o něco málo lépe, kdyby optimalizace byly vyvinuté s ohledem na jeho implementaci. To, že je autoři vyvíjeli, profilovali a ladili na architektuře Skylake, mohlo způsobit, že jsou optimálnější na Intelu. Ale takový efekt nemusí být velký, protože implementace v Zenu 5 by snad neměla mít moc slabých míst.

Nárůst výkonu o 7 až 9 % v tomto konkrétním programu (ale bez jakéhokoli zhoršení kvality výstupu!) se vám nemusí zdát jako mnoho. Ale kód jako x264 a x265 není jednoduše paralelizovatelný, naopak vyžaduje poměrně inteligentní ruční optimalizace v assembleru a jen zhruba polovina stráveného výpočetního času je v SIMD kódu (zbytek je skalární a neparalelizovatelný), přičemž i z toho ne všechny operace lze škálovat na 512bitové vektory. Je třeba si uvědomit, že už bez AVX-512 je enkodér velmi důkladně optimalizovaný. Dosáhnout u něj dalšího celkového zrychlení o tato procenta bez použití 512bitových vektorů by si patrně vyžádalo velmi rozsáhlou práci a refactoring ve všech důležitých funkcích, možná i mnohaletou, ale je možné, že by se obdobného výsledku bez objevu nějakých nových chytrých triků dosáhnout ani nepovedlo. A je dobré si uvědomit, že i v takovém případě by pak benefit byl zřejmě kumulativní s efektem optimalizací používajících AVX-512, takže tyto instrukce se hodí.

Další čtení

Jsou ale aplikace, které lze paralelizovat snáze a AVX-512 na Zenu 5 povede k výrazně větším přínosům. Některé můžete najít například v testování vlivu AVX-512 v Linuxu, které prováděl Phoronix.

Pokud se o AVX-512 na Zenu 5 zajímáte, doporučujeme vám článek, ve kterém implementaci tohoto instrukčního rozšíření rozebral Alexander Yee, autor programu yCruncher:

Tip (externí odkaz): Zen5's AVX512 Teardown + More…

bitcoin_skoleni

Pokud máte zvlášť zájem o enkódování (nejen) pomocí x265 na Zenu 5, objevily se na internetu tyto podrobné testy porovnávající Ryzen 9 7950X a Ryzen 9 9950X v x264, x265, ale i v 10bitové variantě x265 a v SVT-AV1. Zajímavé je na nich to, že neměří výkon jen v jednom konkrétním presetu enkodéru, ale v několika, takže si můžete vybrat výsledky podle toho, zda preferujete rychlou kompresi, nebo naopak maximální kvalitu. Výkonnostní poměr mezi Zenem 4 a Zenem 5 se totiž může dost lišit právě podle rychlostního presetu. Tento článek ale bohužel zřejmě testuje bez toho, aby měl v x265 zapnuté AVX-512.

Zdroje: Vlastní