K8

AMD K8
procesor
Výroba od roku 2003 do roku 2014
Výrobce
Frekvence CPU 1,6-3,2  GHz
frekvence FSB 800-1000  MHz
Produkční technologie 130-65  nm
Instrukční sady AMD64 (x86-64)
konektor
Nuclei
AMD K7AMD K10

K8 je  mikroarchitektura CPU kompatibilní s x86 vyvinutá společností AMD Corporation . Poprvé představen 22. dubna 2003: První procesory Opteron byly uvedeny na trh serverů. Na základě této mikroarchitektury byly vyrobeny rodiny mikroprocesorů Opteron, Athlon 64 , Athlon 64 X2 , Turion 64 . Jedná se o radikálně přepracovanou, výrazně vylepšenou a rozšířenou verzi předchozí generace mikroarchitektury AMD K7 . Nové procesory dokázaly překonat řadu problémů, které byly Achillovou patou K7, a také představily řadu zásadně nových řešení.

Hlavní body

Mikroprocesory K8 jsou superskalární , multi-pipeline, větvené prediktivní a spekulativní procesory. Stejně jako procesory AMD K7 a Intel P6 jsou teoreticky schopny provést až 3 instrukce na takt. Jako každý moderní x86 procesor, K8 nejprve překóduje externí komplexní CISC sadu x86 instrukcí do interních RISC -like micro-ops, které se již provádějí. Pro zlepšení výkonu v rámci mikroarchitektury je implementováno spekulativní spouštění s predikcí větví a spouštění mikrooperací mimo provoz ; pro snížení dopadu závislostí na datech se používají techniky přejmenování registrů , předávání výsledků a řada dalších.

Dopravník K8

Mikroarchitektura K8 využívá pipeline s 12 stupni, z nichž podstatná část je v instrukčním dekodéru.

Načítání a dekódování instrukcí

Hlavním problémem dekódování x86 instrukcí je to, že mají různé délky (od 1 do 15 bajtů). V K8 je tento problém vyřešen oddělením procesu označování toku instrukcí a vlastně dekódováním do dvou samostatných dílčích úloh prováděných v různých blocích procesoru. Faktem je, že před umístěním do mezipaměti první úrovně pro instrukce (L1I) projdou procedurou předdekódování rychlostí 4 bajty instrukcí za hodinu. A značkovací informace jsou umístěny ve speciálním poli značek spojených s L1. To dále zjednodušuje pracovní dekódování a redukuje potrubí. Toto řešení je jedinečné, protože jiné procesory x86 (kromě K7) používají k řešení tohoto problému různé techniky. Takže v procesorech Intel P6 se ​​značkování provádí za běhu, zatímco v Intel NetBurst jsou instrukce dekódovány před uložením do L1 (místo standardní instrukční mezipaměti se používá speciální, poměrně složitá struktura, která ukládá již dekódované mikrooperace - mezipaměť trasování).

K8 má dvoukanálovou set-asociativní mezipaměť s užitečným zatížením 64 KB a řádkem 64 bajtů. Kromě samotných instrukcí však procesor ukládá také pole značkovacích značek - 3 bity na bajt L1, tedy asi 21 KB, a také deskriptory prediktorů větví - asi 8 KB.

Z L1 jsou instrukce okamžitě vyzvednuty v 16bajtových blocích, které jsou odeslány současně přes speciální vyrovnávací paměť ( fetch -buffer) do prováděcího potrubí a do bloku prediktoru větvení. V prediktoru větvení je instrukční blok analyzován pomocí speciální vyrovnávací paměti větvení adresy ( BTB ) s 2048 záznamy a přidružených tabulek historie větví (BHT) s celkovou kapacitou 16 000 záznamů, jakož i některých pomocných zařízení. Pokud instrukční blok obsahoval skok, pak bude další blok načten z predikované adresy. Bohužel větev prediktor  je příliš složité zařízení na to, aby běželo plným tempem procesoru, takže všechny predikce jsou prováděny s latencí 2 cyklů, to znamená, že pokud procesor narazí na přechod, další načtení z L1 bude provedeny pouze po cyklu. Ve většině případů je toto zpoždění kompenzováno skutečností, že v jednom 16bajtovém bloku je mnoho instrukcí a celková rychlost načítání vede.

Z vyrovnávací paměti pro načítání jdou instrukce do dekodéru. Každá instrukce x86 K8 patří do jedné ze tří tříd:

DirectPath a DirectPathDouble jsou považovány za jednoduché, zatímco VectorPath  je považováno za složité. Ve skutečnosti má K8 2 různé bloky dekodéru, které fungují paralelně a vzájemně se doplňují. Hlavním blokem je komplex tří jednoduchých dekodérů, které spolupracují a dekódují až tři DirectPath - a DirectPathDouble - instrukce na takt v libovolné kombinaci. Druhý blok se zabývá výhradně instrukcemi VectorPath a dekóduje jednu takovou instrukci za cyklus. Když je spuštěn dekodér VectorPath , odpovídající fáze jednoduchých dekodérů jsou zakázány. Dekodér K8 lze tedy považovat za poměrně efektivní a produktivní zařízení, které dokáže překódovat až tři jednoduché nebo jednu složitou instrukci na takt. V důsledku dekódování jsou MOP přebaleny přes mezilehlé vyrovnávací paměti do speciálních skupin po třech MOP na skupinu (řádky). MOPy ve skupině se řídí striktně v pořadí původního programového kódu , neprovádí se žádná permutace. MOPy instrukcí DirectPath- a DirectPathDouble- lze libovolně míchat (kromě instrukce multiply, která je dekódována na 2 MOPy a vždy se vejde na jeden řádek), MOPy jedné instrukce DirectPathDouble mohou být dokonce umístěny v různých řádcích, ale všechny MOP instrukcí VectorPath- instrukcí musí následovat v celém počtu skupin a nelze je míchat s MOP z jednoduchých instrukcí, což vede k určité fragmentaci a neúplnému naplnění skupin, ale není to častá situace, protože velká většina instrukcí v K8 jsou jednoduché.

Exekuce a rezignace

Zajímavostí K8 je, že procesor uvnitř pracuje ve skupinách po 3 MOPech, což může výrazně snížit množství logiky řízení procesoru. V procesorech Intel, ačkoli MOP jdou v některých fázích procesu ve skupinách , je každý MOP stále sledován samostatně. Dalším velkým rozdílem mezi procesory K8 a Intel je to, že se odchyluje od principu maximálního zjednodušení mikrooperací. Faktem je, že příkazový systém x86 CISC obsahuje velké množství instrukcí jako Load-Op (načtení + spuštění) a Load-Op-Store (načtení + spuštění + uvolnění). Protože všechny moderní x86 procesory jsou RISC, jsou takové instrukce uvnitř procesoru rozděleny do velkého počtu MOP, z nichž každý provádí nějakou vlastní jednoduchou akci. Typová instrukce se tedy add eax, mem;rozloží minimálně na 2 MOPy - načtení z paměti a samotné sčítání , tedy počet MOP, které je potřeba provést, může výrazně přesáhnout počet původních x86 instrukcí, zaplní vnitřní cesty a vyrovnávací paměti procesoru, neumožňující dosáhnout rychlosti 3 operací za cyklus.

V procesorech mikroarchitektury K7 a K8 se vývojáři rozhodli tento problém obejít vytvořením dvousložkového MOS. Každý MOP v těchto procesorech se skládá ze dvou základních instrukcí: jedna mikroinstrukce celočíselné nebo aritmetiky s pohyblivou řádovou čárkou + jedna mikroinstrukce aritmetiky adresy . Instrukce jako Load-Op a Load-Op-Store tak mohou být dekódovány v K8 pouze do jednoho MOS, což šetří zdroje procesoru a v souladu s tím zvyšuje jeho efektivitu.

V případě potřeby se jeden z komponentů MOP nesmí použít a bude vyplněn přířezem. Instrukce typu Load bude tedy překódována pouze do jednoho MOP obsahujícího pouze složku adresy. Je třeba říci, že v nových procesorech Intel se pro řadu Load-Op instrukcí používá také podobný mechanismus pro slučování mikrooperací do jednoho MOP s jeho následným rozdělením před spuštěním MOP pro provádění, který se nazývá microfusion. .

Skupina tří dvousložkových MOSFETů vystupuje z dekodéru a je dále řízena procesorem jako celkem pomocí speciální jednotky - ICU . Skupiny MOP procházejí fázemi přejmenování registrů a alokací zdrojů, poté jsou umístěny do ROB . V ROB jsou skupiny instrukcí uloženy až do okamžiku rezignace, rezignaci instrukcí provádí okamžitě celá skupina, kdy jsou provedeny všechny MOP ve skupině, a to pouze v pořadí priority určené zdrojovým programem. Kapacita ROB K8 je 24 skupin, což odpovídá 72 MOPům nebo 144 mikroopům. Procesor K8 používá pro distribuci instrukcí mezi prováděcí jednotky statické schéma, to znamená, ve které skupině FU [ neznámý pojem ] bude MOS spuštěn, závisí přímo na pozici tohoto MOS ve skupině. Celkem má procesor tři plánovače instrukcí pro aritmetiku celých čísel a adres podle počtu MOP ve skupině.

Z ROB jsou instrukce zkopírovány do vyrovnávací paměti plánovače. Procesor má tři plánovací fronty pro vnitřní operace a tři pro adresové operace, každá s kapacitou 8 mikrooperací. V obecném případě mohou být instrukce z každé fronty spuštěny k provedení ve FU nezávisle na sobě a pomocí Out-Order. To znamená, že instrukce jsou odeslány na FU v pořadí, v jakém procesor potřebuje. Procesor obsahuje tři 64bitové ALU a tři AGU , z nichž každá je připojena po páru k vlastnímu plánovači.

Uspořádání a provedení MOPs plovoucí aritmetiky se provádí ve speciálním samostatném zařízení. Pro jejich provedení obsahuje procesor jedno zařízení FMUL , jeden FADD a jeden FMISC, který je pomocný.

Odkazy