Názor k článku Test Rocket Lake a AVX-512: jak ho zapnout v x265 a jaký je výkon a spotřeba? od Jan Olšan - Tenhle test AnandTechu (3DPM 2.1 AVX2/AVX-512) je anomálie...

  • 9. 8. 2021 13:17

    Jan Olšan

    Tenhle test AnandTechu (3DPM 2.1 AVX2/AVX-512) je anomálie a pokud můžu říct, je to asi problém softwaru.
    Myslím, že se tam naráží na to, že kód používá nějakou operaci, na kterou má AVX-512 speciální instrukci, která v AVX2 není. Má to snad být nějaká 64bitová konverze mezi INT a FP, jestli si dobře pamatuju, ale nějak se mi nedaří to doheldat. A celý ten výkonnostní rozdíl dělá snad jediná tahle operace. Takže by to byl spíš mikrobenchmark (a zůstává ta otázka, jestli je správně napsaný).

    Ian Cutress říká, že to někdo ručně optimalizoval, i když to podle těch výsledků úplně nevypadá. IMHO by nejspíš ta operace šla ručně rozepsat na kód v AVX2/AVX/SSE* a pak by rozdíl byl maximálně 2-3×.*

    Je dobré pamatovat, že to není nějaký software, který by se normálně používal, ale diplomka autora/redaktora, do které byl potom přidaný ten kód AVX-512 a AVX2 někým jiným. Je hodně otázka, jestli to do testování patří. Normálně by tenhle aspekt nevadil, ale v kombinaci s tím, jak se to chová...

    Jako příklad: AnandTech to použil k porovnání jader Skylake a Cannon Lake a vyšlo mu, že je Cannon Lake třicetpětkár rychlejší: https://images.anandtech.com/graphs/graph13405/105622.png


    Je pravda, že to pořád ukazuje výkon té jedné specifické operace (pokud tedy není ta větev kódu, kterou to používá na procesorech bez AVX-512, špatně napsaná). Ale v programech, které budete používat, tohle zrychlení nikdy neuvidíte.

    -------------------------------------------
    Rozhodně jinak souhlasím s tím, že se AVX-512 nemá zatracovat.
    Doufám, že bude brzo ve víc procesorech než teď (AMD snad v Zen 4, i když tam to ještě nemusí mít ideální výkon, spíš to asi poběží stejně rychle jako s AVX2 - no teda kromě toho 3DPM, tak asi taky bude lol výsledek jako na Intelu). Protože jako užitečné rozšíření to určitě je, AVX-512 zase rozšíří možnosti optimalizace aplikací a je proto třeba, aby bylo v co největší základně procesorů a vývojáři měli motivaci to používat.
    Jen teda podle tohohle benchmarku se neorientujte :)

    Pokud chcete test, který ukazuje přínos AVX-512 víc realisticky, tak bych navrhoval yCruncher v jednom vlákně, kde je vidět, že AVX-512 dosahuje výrazně lepší výkon, než má jádro Zen 3 nebo Skylake bez AVX-512 (v multithreadu už to zdá se moc vidět není, asi proto, že výkon procesoru je pak omezený propustností paměti, a tudíž se už zrychlení nemá šanci projevit?).
    Viz https://www.cnews.cz/test-amd-ryzen-9-5950x-32vlaknovy-procesor-na-ktery-intel-nema-odpoved/32/ (druhý graf, "single threading")

    *
    Třeba v x264/x265 myslím takovýhle případ, že by neexistence nějaké instrukce v předchozích procesorech vedle k podobným průlomovým zlepšením, nikdy nenastal (taková ta 2-3x zrychlení *dílčích funkcí* jo, ale pak to ve výsledku dá pár až několikprocent). Tohle spíš připomíná jiný případ. Když zkusíte spustit x265 a procesoru, který má jenom SSE2 a chybí mu SSE4, tak tam bývalo a nejspíš pořád je asi 3-4× zpomalení proti tomu, jaký by ten procesor měl zhruba mít výkon. A je to proto, že hodně SIMD assembleru je napsaná s předpokladem, že má CPU minimálně SSE4, takže se na CPU bez SSE4 nespustí a běžíte jenom s C++ kódem. x264 tohle nedělá protože je starší a všechny SIMD funkce jsou pokryté i pro procesory s SSE2.