Nová 11. generace procesorů Intel Core Rocket Lake přinesla do mainstreamového desktopu jako novinku také instrukce AVX-512, které předtím byly jenom ve Xeonech a na platformě X299. Jednou z věcí, kde AVX-512 slibuje lepší výkon, jsou multimédia. Podívali jsme se na jedno využití: enkódování HEVC videa v x265. Možná to nevíte, ale x265 ve výchozím nastavení AVX-512 nevyužívá. Ukážeme si, jak ho zapnout a co to udělá.
Běžné testy enkódování v x265 na procesorech Rocket Lake už máme v našich testech, kde testujeme v HandBrake s defaultním nastavením, což dělá množství webů. U procesorů s AVX-512 ale je ten problém, že od doby, kdy byly do x265 optimalizace pro instrukce AVX-512 přidané (2018), je program nemá ve výchozím nastavení aktivní. Když tedy HandBrake nebo i přímo x265 pustíte jen tak, nepoužijí se a ani Rocket Lake z nich neprofituje, používá jenom AVX2 (a nějaké další instrukce jako BMI2, AVX a samozřejmě různé verze SSE).
Můžete si to ověřit v logu, kde x265 udává informaci „using cpu capabilities“ s výčtem instrukčních rozšíření, které program použije. Na Rocket Lake by měl ve výchozím nastavení vypadat takto:
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
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 zvyšuje spotřebu. Proto Xeony při použití těchto instrukcí snižují takty, což má dopad na výkonnostní zrychlení, které lze dosáhnout.
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 nasilu nepovolíte (můžete si o tom přečíst zde). A zdá se, že toto nastavení od té doby přetrvalo. Vývojáři 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ě zaznamenat zrychlení. Toto by snad měl být i případ procesorů Rocket Lake, které by aspoň na Z590 deskách měly držet takty vysoko i při AVX-512.
Jak AVX-512 zapnout?
Použití AVX-512 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 zjisti, jak se z něj tento parametr dá x265 předat.
V HandBrake se to dělá v nastaveních Video enkodé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.
Po tomto už by pohled do logu měl ukazovat, že se x265 používá i AVX-512. Řádek o insturkčních rozšířeních by měl říkat toto:
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2 AVX512
Když spustíte Handbrake jednou s touto možností přidanou a jednou bez ní, zjistíte, jak moc Rocket Lake z AVX-512 dokáže profitovat při enkódování HEVC přes x265.
Jak můžete vidět, u modelů Rocket Lake, na nichž jsme toto zkoušeli, AVX-512 navýšilo výkon v našem enkódovacím testu o +7,5 %. Trošku výš ustřelilo Core i5-11400F, kde bylo zrychlení o 9 %. Podle toho, co tvrdí dokumentace, by možná přínos mohl být o něco lepší na úplně nejpomalejších presetech. 512bitové vektorové operace mají tedy v enkódování programem x265 relativně omezený účinek, zdaleka nedochází k lineárnímu navýšení výkonu proti 256bitovým vektorům (AVX2).
Proč tomu tak je? AVX-512 je používáno v různých funkcích s ručně napsaným SIMD kódem, které provádějí analýzu pro potřeby intra a inter predikce, ale ne vždy tato analýza probíhá na tak velkých blocích dat, aby se dal větší vektor účinně využít. Navíc se často nezrychlí 2× celá funkce, ale jen nějaké její kroky. Moderní video komprese se neskládá z výpočtů s jednoduchou strukturou, které by škálovaly s počtem vláken a šířkou SIMD do alelujá. Obecně by v těchto SIMD funkcích mělo x265 strávit okolo poloviny času, zbytek je kód v C++, bez ručního asembléru (například entropy coding), který AVX-512 nemá jak zrychlit. Ačkoliv tedy jednotlivé instrukce AVX-512 mají dvojnásobný výpočetní výkon na jeden cyklus procesoru (100% nárůst výkonu), po všech těchto ředěních vám zbude tento zisk okolo 10 %.
Toto ovšem v této oblasti softwaru není nic, nad čím by se dalo mávnout rukou. Jak si můžete všimnout v interaktivním grafu, zatímco osmijádrová Core i7 a i9 generace Rocket Lake obecně nejsou schopná se v mnohovláknovém výkonu vyrovnat desetijádrovému o generaci staršímu Comet Lake Core i9-10900K, tak AVX-512 toto mění a v x265 najednou dokáží osmijádra výkon staršího desetijádra dorovnat. Na Ryzen 9 5900X to už ale zdaleka nestačí, víc jader v jeho případě je větší výhoda, než AVX-512 na menším počtu.
Výkon navíc má ovšem ten háček, že ještě víc poskočila nahoru spotřeba. Bohužel nám z měření vyšlo, že její navýšení je neúměrně velké, se zapnutým AVX-512 stoupl příkon o 28 % (u Core i7-11700KF) nebo dokonce o 29 % (i9-11900K). A to přitom spotřeba při enkódování v x265 už tak nebyla nějak nízká. AVX-512 ji ale z 215–225 W dostane na cca. 270–290 W. Core i5-11400F mělo celkově spotřeby výrazně nižší, ale nárůst je také velký, ze 123 W na 159 W, což je dokonce o 30 %. Toto jsou pravda čísla na 12V kabelu, v nichž je nejen spotřeba CPU, ale ještě ztráta na napájecí kaskádě, která vznikne při krmení procesoru. Tato ztráta snad ale v našich testech nebude moc významná, používáme desky s hodně naddimenzovaným napájením, kde by měla být dobrá efektivita konverze elektřiny (tj. menší tepelné ztráty).
Spálená elektřina a teplo nutné uchladit je to ovšem tak jako tak. Také je pikantní, že Rocket Lake zde dosáhlo spotřeby, která je 2× proti Ryzenům 9 5900X a 5950X. Na tom se potvrzuje problém horší efektivity 14nm procesu, který třeba testování ve hrách milosrdně skrývá.
Každopádně výsledek je, že zapnutí AVX-512 na procesorech Rocket Lake zhoršuje v x265 jejich energetickou efektivitu, a to ne úplně málo, o nějakých 20 % (pokud by se zahrnula spotřeba disků, desky a RAM, tak by to nicméně vyšlo méně zle). Stejné enkódování tedy budete mít hotové o něco rychleji, ale spotřebujete víc elektřiny. Také při tom samozřejmě můžete působit víc hluku z chlazení, pokud tedy už i bez AVX-512 větráky nejely na 100 %.
Toto zhoršení energetické efektivity neplatí ale paušálně. Pokud by aplikace měla třeba 50% nárůst výkonu (což se u nějakých numerických výpočtů stát může) pak by se energetická efektivita i s takovýmto nárůstem spotřeby zlepšila.
Teploty Rocket Lake při enkódování také nejsou zrovna nízké, v našem testu zapnutí AVX-512 zvedlo teplotu o 16–17°C, procesory i7 a i9 se dostaly na 93–95°C. Je možné, že v některých skříních, pokud nemáte airflow řešený ideálně, by se CPU mohla přehřát a throttlovat.
Co je docela pozoruhodné, jsou frekvence. Dost možná to jde na účet i tomu, že výrobce desky agresivně nastavuje BIOS, ale procesory Rocket Lake přes vysoké teploty vůbec nesnižovaly frekvence, když jsme v x265 instrukce AVX-512 používali. Programátoři budou mít radost, protože už nemusí hlídat, zda AVX-512 zvýší výkon dost na to, aby se tento efekt zcela neztratil nebo dokonce nepřevážil snížením taktů, což je asi nejvíce kritizovaná věc na dosavadních implementacích AVX-512 od Intelu. U Rocket Lake to minimálně v našem testu nenastávalo (i když na jiných deskách, třeba v OEM počítačích, by to možná dopadlo jinak, pokud by se zohledňovaly limity PL1, PL2 a Tau, tak by se asi hodně změnily podmínky). Core i7-11700KF se drželo taktu 4,6 GHz na všech jádrech bez AVX-512 i s ním a Core i9-11900K jelo také bez ohledu na AVX-512 na svých all-core maximech, tedy 4,7 GHz. Totéž Core i5-11400F: také jelo na stejném maximálním all-core boostu 4,2 GHz, ať se dělo, co se dělo.
Na násobičích se tedy spotřeba a tepelná zátěž navíc neprojevila a těch 7,5 % výkonu navíc, které jsme naměřili, je tedy výkonnostní zlepšení při identickém taktu.
To je nicméně také důvod těch vysokých spotřeb, původní architektonický záměr u AVX-512 se snížením násobiče/frekvence (a díky tomu napětí) asi počítá, právě kvůli energetické efektivitě (akorát jsou na tom pak bity aplikace s malým nárůstem výkonu).
Dilema spotřeba × výkon
Pokud tedy na procesoru Rocket Lake budete enkódovat s x265, vzniká trošku dilema, zda upřednostňovat o něco vyšší rychlost za cenu tohoto zhoršení spotřeby a efektivity. Pro řadu z vás to asi ale může být akceptovatelné. Ostatně, k něčemu podobnému dochází při přetaktování, také obvykle získáte nějaká procenta výkonu, ale spotřeba se zhorší o dost víc, než jaké je zrychlení.
Pokud vám tedy při enkódování ale bude chladič moc hučet, nebo to chcete raději pomaleji, ale s menší spálenou energií, pak můžete AVX-512 samozřejmě nechat vypnuté.
- Recenze: Duel procesorů: Intel Core i9-11900K proti AMD Ryzen 9 5900X ve stovkách testů
- Recenze: Intel Core i7-11700KF: Nižší frekvence, vyšší efektivita, lepší nápad než Core i9
- Recenze: Duel levných Core i5: 11400F vs. 10400F. Oblast procesorů, kde je Intel bezkonkurenční
Zapnutí/vypnutí AVX-512 v x264
Všechno zde napsané jinak asi platí i pro x264, kde naše testy také u Rocket Lake zaznamenaly dost vysokou spotřebu, zřejmě také s přispěním energetické náročnosti 14nm implementace AVX-512 v kombinaci s nesnižovanými frekvencemi. U x264 jsme ale neměřili, kolik výkonu AVX-512 přidává. Mohlo by to být trochu víc než u x265, ale zrychlení nejspíš pořád nebude větší než nějakých 10, maximálně 15 %.
Rozdíl proti x265 je, že v x264 se AVX-512 používá vždy automaticky. Výkon i spotřebu navíc tedy už máte zahrnutou v defaultním nastavení. Pokud enkódování s x264 chcete trošku umravnit co do spotřeby a nevadí vám, že to bude trošku pomalejší, můžete zkusit obrácený postup, tedy avx-512 ručně vypnout.
Parametr je stejný, a to ‑‑asm, ovšem tentokrát napíšete ‑‑asm AVX2. Tím omezíte používaná SIMD rozšíření na všechna až po AVX2. AVX-512 je tímto vyloučeno (parametry víceméně funguje tak, že udává nejvyšší rozšíření, které může program použít, a AVX512 je vyšší než AVX2). Pokud používáte Handbrake, je to podobné – udělejte totéž, jako v návodu na zapnutí AVX-512, ale zde přidáváte ne asm=AVX512, ale asm=AVX2.
Ještě jedna poznámka: při našem testování se s Handbrake dělá zvláštní věc – po připsání parametru asm=avx512 se nám zvýšení výkonu nechtělo projevit, dokud jsme aplikaci po jeho přidání nerestartovali a naopak (po znovuspuštění aplikace se výkon a spotřeba vždy zvýšily). Nedává to moc smysl, protože x265 by mělo dostat parametr hned i bez potřeby zrestartovat Handbrake, ale upozorňujeme na to, pokud by se tato anomálie děla i vám. Může jít o nějaký bug v Handbrake (problém jsme měli, když jsme přepínali mezi výchozím profilem pro x265 a upravenou verzí s přidaným parametrem asm=avx512).
Bude Sapphire Rapids-X/Skylake-X mít lepší zrychlení?
Jak asi také víte, pokud se o AVX-512 zajímáte, Rocket Lake (nebo třeba také Tiger Lake v noteboocích) nemá implementaci AVX-512 s plnou rychlostí, na rozdíl od serverových procesorů a CPU pro platformu X299. Neměřili jsme teď, jaké přinese AVX-512 zrychlení na platformě X299, ale nemuselo by být o moc větší zlepšení výkonu.
Ona pomalejší verze AVX-512 v klientských procesorech se totiž od té plnotučné v serverových Intelech neliší zas tak moc. Serverová CPU mají navíc jednu 512bitovou jednotku FMA, takže instrukce FMA mohou vykonávat s dvakrát vyšším výkonem proti AVX2, zatímco klientská verze používá jen již existující 256bitové jednotky FMA (které má už i obyčejné Skylake) a má v těchto operacích poloviční výkon.
Ale tento rozdíl se týká zřejmě jen floating-point operací FMA, které mají význam třeba pro vědecké výpočty. Video enkodéry a další multimediální software jako x265 by měly typicky používat operace s celočíselnými daty a v těch má omezená klientské verze AVX-512 stejně vysoký výkon jako serverová, operace jako 512bitové sčítání integerů umí tři nebo čtyři za cyklus. Tudíž i tato klientská verze AVX-512 v x265 získává lepší výkon a naopak, od té serverové nemůžete čekat o moc víc, protože pro celočíselné operace prostředky navíc nemá (tedy s výjimkou větší L2 cache).
Ovšem příští generace architektury Intelu mohou samozřejmě zisky z AVX-512 zvýšit.