Benchmark Y-Cruncher už má podporu AVX-512. Ukazuje „Phantom Throttling“ u Skylake-X

4

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.

s-intel-core-x-series-processor-family-i9-skylake-x-lga-2066-1600

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.

Phantom Throttling při běhu Y-Cruncheru používajícího AVX-512 - označeno červeně
Phantom throttling při běhu Y-Cruncheru používajícího AVX-512 – označeno červeně

Po odstavení limitů spotřeby phantom throttling zmizí, CPU se ale začne podtaktovávat kvůli teplotě
Po odstavení limitů spotřeby phantom throttling zmizí, CPU se ale začne podtaktovávat kvůli teplotě

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.

AVX-512 zvyšuje závislost Y-Cruncheru na propustnosti RAM
AVX-512 zvedá závislost Y-Cruncheru na propustnosti RAM

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.

4 KOMENTÁŘE

  1. Já bych řekl, že ten Phantom trottling souvisí s tou nedostatečnou paměťovou propustností. Tomu totiž přesně odpovídá snížení příkonu, kdy se procesor fláká, protože čeká, až mu to pameťový subsystém dotlačí. Do těch 8 vláken to ještě s vypětím všech sil stíhá a pak narazí. A jak jednou nestihne dodat data, už se to veze a dopadne to stejně jako s kolonou na silnici. Čím víc aut se snaží procpat zúženým místem, tím pomaleji jedou a tím menší je propustnost toho místa.
    Na druhou stranu to v praxi asi nebude na závadu. Ty instrukce jsou mířeny hlavně do serverů, které vykonávají paralelně různé druhy úloh, takže když pár z nich bude využívat AVX-512, pojedou na plný výkon.

    • Paměť to není, podle těch jeho testů (asi ví o čem mluví, a podle toho blogu ví, jak to testovat odděleně s microbenchmarkem, který na paměti není závislý).
      Pokud by to byla paměť, pak by nedošlo k té velké regresi výkonu, kterou v jeho výsledcích vidíte v té tabulce. A když ten propad odstraní zvýšení termálních limitů, tak je to asi jasné.

      Jediná otázka je, jak to přesně působí, jestli se vypínají některé jednotky nebo CPU nepovolí zapnutí horních bitů AVX/AVX-512, nebo se tam vkládají prázdné cykly, to těžko říct. Předchozí generace jenom shazovaly frekvenci dolů, al eje možné, že tady přispívá to přetaktovávání CPU na krev ze strany výrobců desek. Yee píše, že jeho deska v turbu defaultně nechá běžet jednotlivá jádra na 4,5 GHz i s AVX-512, i když to to CPU prostě nedává a končí to BSoDem. Je možné, že tahle manipulace frekvencema nějak znefunkčňuje normální obrané techniky těch CPU (tedy snížení frekvence s AVX, AVX-512) a ten phantom throttling je nějaké nouzovka, která se za běžných okolností projevovat nemá.

  2. Našel jsem informaci od jednoho vývojáře, že ty power limity taky vedou taky k snížení frekvence uncore pod zátěží, což spomaluje komunikaci mezi jádry, zvyšuje latenci a snižeje propustnost pamětí. Řídící jednotka zřejmě sráží frekvenci (třeba na 1,8 GHz) dřív, než začne snižovat takt jader, takže to taky může přispívat k horšímu škálování.

    Přetáčení uncore na druhou stranu zřejmě dost zvyšuje výkon, ale samozřejmě pak taky zvedá spotřebu a zátěž čipu.