Procesory AMD s architekturou Zen 5 po vydání dostávaly různé aktualizace vylepšující Windows (zejména ale šlo o aktualizaci Windows, která přímo v procesoru a firmwaru desek nic neměnila). Vypadá to, že u procesorů s předchozí architekturou Zen 4 místo toho došlo k drobné změně negativní, kdy jedna z aktualizací odebrala dříve aktivní funkci v jádrech. Z jakého důvodu, ví jenom AMD. Ale zdá se, že dopad by neměl být nijak významný.
Loop Buffer v Zenu 4
Jak zjistil web Chips and Cheese při benchmarkování procesorů a sledování performance counterů (diagnostická data procesoru sloužící k profilování výkonu), AMD v procesorech s jádry Zen 4 vypnulo tzv. Loop Buffer. Stalo se to někdy mezi aktualizací AGESA 1.0.0.6 a nedávnou verzí 1.2.0.2a, přičemž novější verze firmwaru už v performance counterech neukazují nic o Loop Bufferu, zatímco při návratu na starší BIOS ukazují, že je používán.
V čem Loop Buffer spočívá? Jde o jakousi malou obdobu uOp cache ve frontendu procesoru, která je schopná pamatovat si relativně krátkou sekvenci instrukcí (například několik desítek), a pokud program běží ve smyčce (loop) s relativně krátkou délkou opakujícího se kódu, může se stát, že procesor bude tyto instrukce brát jen z tohoto Loop Bufferu a bude moci uspat části frontendu, jakou jsou fetch, dekodéry a případně i iOp Cache, neboť Loop Buffer se nachází v pořadí zpracování až za ní.
Podle Chips and Cheese má Loop Buffer u Zenu 4 kapacitu asi 144 položek (jde o empirickým experimentováním zjištěnou hodnotu, která tedy nemusí být zaručeně přesná) nebo 72 položek na jedno vlákno při aktivním SMT. S aktuálním BIOSem základní desky, zdá se, procesor z Loop Bufferu už nikdy nebere instrukce a je zřejmě neaktivní.
Je pravděpodobné, že tato změna byla učiněna proto, že nějaké testování objevilo chybu (erratum) ve fungování této části procesoru, která asi může způsobit chybná data ve výsledcích nebo jinou formu nestability. Asi půjde o dost okrajový případ, protože byl objeven poměrně pozdě a nezdá se, že by se o souvisejících problémech nějak široce vědělo. Teoreticky by důvodem vypnutí asi mohla být i ochrana před nějakými bezpečnostními zranitelnostmi. AMD tuto změnu oficiálně nijak neoznámilo, byla provedená zcela potichu.
Funkce asi v Zenu 4 neměla velký význam
Efekt této opravy (pokud jde o opravu) nebude, zdá se, velký a na výkonu by se snad neměl projevit téměř vůbec, nebo vůbec. Dřívější profilování Chips and Cheese ukazovalo, že se stával zdrojem instrukcí pro běžící program v poměrně malém procentu operací. Ač to nebylo procento nenulové, důležité je, že při deaktivaci Loop Bufferu, zdá se, bez problému jeho roli zastane uOp cache, která v podstatě duplikuje jeho funkci, ale s výrazně větší kapacitou (a tím i hit rate). Test benchmarků SPEC CPU2017 webu Chips and Cheese ukazuje po deaktivaci zhruba stejné, nebo dokonce vyšší skóre (ale celkově je to asi v rámci statistické chyby). Nalezen ale byl určitý vliv na zabudovaný benchmark Cyberpunku 2077, který, zdá se, Loop Buffer využíval více, než je obvyklé, a byl u něj malý propad výkonu. Ten se ale při testu (na Ryzenu 9 7950X3D) ukázal jen při běhu na jádrech bez 3D V-Cache, zatímco běh na jádrech s V-Cache ho z nejasných příčin eliminoval (tudíž herního Ryzenu 7 7800X3D by se dotknout nemusel).
Podle Chips and Cheese se zdá, že Loop Buffer Zenu 4 neměl nikdy za cíl zvýšit výkon a motivací k jeho zařazení (byť jak již bylo řečeno, je svým způsobem redundantní vzhledem k uOP cache) byla snaha uspořit energii. Loop Buffer by snad mohl dodávat instrukce pro krátké smyčky s nižší spotřebou, ale protože pokrývá relativně malé procento kódu, asi stejně úspora není moc významná. Loop Buffer měl i některá omezení, například podporoval jenom smyčky neobsahující operace Call/Return. Snad proto si AMD dovolilo tuto funkci prostě vypnout, aniž by to bylo někde dokumentováno. A ze stejného důvodu také nikde moc nebylo dokumentováno její předchozí použití a výhody.
Jiné procesory Ryzen tento Loop Buffer neobsahují, zdá se, že Zen 4 byl jádrem, kde byla funkce poprvé vyzkoušena (možná, že spíš experimentálně). V případě architektury Zen 5 AMD u některých funkcí přímo uvádělo (šlo například o fúzování NOPů), že je jádro neobsahuje vzhledem k tomu, že bylo do značné míry navrhováno nanovo a na znovuimplementaci se ještě nedostalo. Je možné, že Loop Buffer je jeden z takových případů a v budoucnu se třeba v jádrech Zen 6 nebo Zen 7 znovu vrátí v nějaké účinnější podobě.
Pokud nás paměť neklame, Loop Buffer (označený Loop Stream Detector) byl v minulosti kvůli errata vypnutý také u procesorů Skylake od Intelu, snad s výjimkou některých pozdějších verzí jako Coffee Lake. Takže v této struktuře jádra evidentně je prostor pro chyby. Obecně jsou errata u tak komplexních zařízení, jakým jsou CPU, nevyhnutelná věc. Typické CPU jich má více než sto. Někdy se o nich ani nedozvíme, protože nefunkčnost je odhalena záhy a funkce, kterou postihuje, není nikdy zapnutá, aby si jí někdo mohl všimnout.
Nedávno se takto například objevily drby, že AMD zkoušelo u Zenu 3 implementovat rozšíření transakční paměti TSX, ale nebylo zřejmě plně funkční (a tudíž se o plánované podpoře nikde neobjevily informace). S korektním fungováním TSX měl velké problémy i jeho autor Intel, který ho v podstatě na všech CPU, které ho od Haswellu implementovaly, musel eventuálně vypnout aktualizacemi mikrokódu. Takže chyby v případě konkurenční implementace spíš nepřekvapí než naopak. (Jestli je ale tento drb pravdivý, to nevíme.)
Zdroj: Chips and Cheese