Intel koncem června vydal highendové procesory Skylake-X a před pár dny i jejich příbuzné Xeony Platinum/Silver a tak dále, které Intel souhrnně označuje jako rodinu „Scalable“. Potenciálně hodně významnou novinkou jejich architektury je přidání instrukcí AVX-512, což je evoluce SIMD rozšíření AVX/AVX2 zvětšující šířku vektoru (a tedy počet výpočtů na jednu instrukci) na dvojnásobek. Zatím však máme jen velmi málo příležitostí změřit, jaký výkonnostní nárůst se s nimi dá dosáhnout. Nyní je tu ale první progam, který se na benchmarkování bude dát použít, byť nejde o praktický software, kde by přepsání kódu asi dalo víc práce.
Podpora AVX-512 se dostala do benchmarku Y-Cruncher, který měří výkon FPU v numerických operacích – konkrétně výpočtu čísla Pí nebo jiných iracionálních čísel. Y-Cruncher by měl mít podporu v aktuální (tento měsíc vydané) verzi 0.7.3, takže vlastníci SkylakeX mohou testovat a porovnávat s výsledky jiných CPU. Program lze už stahovat ze stránky projektu.
Podle autora Y-Cruncheru Alexander J. Yeea zrychlení není až tak vysoké, jak doufal; Core i9-7900X ale pomocí AVX-512 poráží všechny předchozí highendové procesory (což se čekalo) a blíží se výkonu dvouprocesorových serverů. Přetaktován na 4,0 GHz procesor spočítá Pi na 25 milionů míst za 0,739 sekundy, což je podle HWBotu o chloupek horší než Core i7-6950X přetočené na 4,623 GHz (0,725 s). Implikovalo by to zrychlení o 15 %, nicméně nevíme, zda do něho pozitivně či negativně nepromlouvají i další architektonické odlišnosti mezi jádrem Skylake-X a Broadwell-E.
AVX-512 a překážky pro nárůst výkonu
Yee k vydání sepsal blogový zápisek, v kterém popisuje svoje prozatímní zkušenosti s instrukcemi AVX-512 a onomu menšímu než očekávanému zrychlení se věnuje. Problémy s AVX-512 jsou podle něj celkem čtyři. Prvním je již známí omezená podpora na levnějších procesorech Core i7-7800X a i7-7820X, jakož i na Xeonech mimo řady Gold 6100 a Platinum. Tato CPU mají vypnutou jednu 512bitovou jednotku FMA, a tak jen poloviční výkon. Nicméně ani s Core i7-7900X není vyhráno.
Phantom throttling
Ve výchozím nastavení – které ale ne všechny desky respektují – by procesor měl při běhu kódu s AVX-512 (a v menší míře i s AVX) snižovat takty, z čehož vyplývá, že výpočty nemůžou běžet dvakrát rychleji. Není to však zdá se jediný druh „throttlingu“, který AVX-512 způsobuje. Zdá se, že Skylake-X může postihnout tzv. „phantom throttling“, kdy sice má stále stejně vysokou frekvenci, ale výkon výpočtů používajících AVX-512 přesto nevysvětlitelně klesá. Zdá se, že CPU za některých podmínek používá i jiné způsoby, jak přiškrtit výkon, pravděpodobně v situacích, kdy se jeho spotřeba příliš zvýší. Nejčastěji je to právě s AVX-512, které nejvíce zvyšuje příkon, ale údajně už byl tento „phantom throttling“ pozorován i s AVX a dokonce i se skalárním kódem.
Problém patrně nastává, když procesor překročí limity spotřeby čipu nebo platformy, jelikož je možné si od něj odpomoci, pokud se v BIOSu odstaví teplotní ochrany nebo se zvýší jejich limity. Phantom Throttling by se tedy měl projevovat asi jen při přetaktování. Ovšem poměrně značné množství desek platformy X299 přetaktovává Skylake-X i ve svém výchozím nastavení, například vynucováním plného turba pro všechna jádra a nebo ignorováním AVX a AVX-512 offsetu, který normálně takty při běhu těchto instrukcí snižuje. CPU pak běží na stejném taktu, jaký by mělo ve skalárním nebo SSE kódu a zákonitě přešvihne své TDP.
Při takto nevědomém nebo i vědomém přetaktování CPU pak hrozí, že nastane phantom throttling a výkon se místo zvýšení zhorší. Příklad takového chování je v následujících tabulkách. Deska Gigabyte Aorus Gaming 7 je případ, kdy je Core i9-7900X ve výchozím nastavení přetaktováno, její BIOS ho nechá spustit Y-Cruncher používající AVX-512 s taktem 4,0 GHz. Při vytížení deseti a více vláken pak nastává tento fenomén. Ačkoliv je frekvence stále 4,0 GHz, spotřeba CPU i jeho teplota se výrazně sníží a výkon klesne, takže čas výpočtu se prodlouží na víc jak dvojnásobek. Po nastavení vyšších limitů spotřeby na desce se throttling podařilo odstranit a výkon při použití 10 a více vláken roste. Nicméně pro změnu už zasahuje teplotní ochrana a CPU tentokrát viditelně už snižuje takty.
Fenomén tohoto „neviditelného“ phantom throttlingu bude asi ještě třeba více prostudovat, patrně je ale součástí normálního fungování CPU a jedním ze způsobů, jak se brání přehřátí nebo přetížení napájení. Jeho výskyt tak souvisí asi hlavně s častým „továrním přetaktováním“ Skylake-X ze strany výrobců desky. To je často zapnuté ve výchozím stavu a uživatel o něm ani nemusí vědět. Plyne z toho poučení, že pokud nechcete mít CPU přetaktované (a překračující TDP), pak si musíte dobře zkontrolovat, co vaše deska dělá a zda nenastavuje vyšší takty, než má. Vypnutí takového přetaktování ale samozřejmě stojí výkon. Některé recenze přitom možná taková přetaktování nevědomky zahrnula do svých výsledků, takže pak se skutečně „stock“ procesorem mohou být výsledky trošku zklamáním.
Brzdou se stávají paměti a cache
AVX-512 zdá se také brzdí paměťová propustnost – alespoň u čtyřkanálového Core i9-7900X. Její efekt je již patrný u AVX2, ale při použití AVX-512 se zvýrazňuje, dvakrát větší vektory by ideálně potřeboval dvojnásobnou propustnost. Že je Y-Cruncher propustností RAM omezen, dokládá Yee měřením, podle kterého lze na desetijádru používajícímu AVX-512 zvýšit výkon o 15 %, pokud se frekvence DDR4 zvýší z 2133 MHz na 3200 MHz. Jen s jedním vláknem je přitom zrychlení pouze 2% – to znamená, že při všech jádrech aktivních už CPU nemá tolik paměťového výkonu, kolik by potřebovalo.
Poslední složkou je vůbec obecný problém škálování pomocí paralelismu (což se týká i SIMD instrukcí). Y-Cruncher stráví ve vektorových instrukcích jen okolo 80 % času, a tak může AVX-512 zrychlit jen tuto část, nikoliv zbylou pětinu. I pokud by se tedy podařilo SIMD část zrychlit na teoretickou polovinu času, může program být maximálně jen o 40 % rychlejší. Podle Yeeho je přitom i v částech, které nenarážejí na limit paměti, zrychlení nižší, okolo 27 %. Je to prý navzdory tomu, že samotný algoritmus prakticky stoprocentně škáluje, takže jádro možná naráží ještě na limity jinde, dost možná v L2 a L3 cache. Je však možné, že se tento ztracený výkon ještě podaří dostat zpět dalším laděním programu, až budou k dispozici patřičné nástroje pro profilování.
Lze Y-Cruncher použít k ověření stability po OC?
Autor Y-Cruncheru píše, že vzhledem k neideálnímu škálování asi Y-Cruncher zatím není vhodný k testování stability systému při použití instrukcí AVX-512 (stress testing). FPU totiž kvůli nedostatečné propustnosti pamětí a dalším limitům není vytížena plně a tak se potenciální nestabilita jádra nemusí odhalit. Lepší v tomto ohledu je subtest BBP, jehož kód a data se vejdou do cache. S touto volbou a nastavením offsetu na 100 miliard by podle autora mělo být možné dosáhnout poměrně vysoké zátěže FPU a spolehlivost CPU při výpočtech s AVX-512 ověřit.