Mikroarchitektura - Microarchitecture

Schéma mikroarchitektury Intel Core 2

V počítačovém inženýrství je mikroarchitektura , nazývaná také počítačová organizace a někdy zkráceně µar nebo uarch , způsob, jakým je daná architektura sady instrukcí (ISA) implementována v konkrétním procesoru . Daný ISA může být implementován s různými mikroarchitekturami; implementace se mohou lišit kvůli různým cílům daného designu nebo kvůli technologickým posunům.

Počítačová architektura je kombinací mikroarchitektury a architektury instrukčních sad.

Vztah k architektuře instrukční sady

Mikroarchitektura uspořádaná kolem jediného autobusu

ISA je zhruba stejný jako programovací model procesoru, jak jej vidí programátor sestavovacího jazyka nebo zapisovač kompilátoru. ISA mimo jiné obsahuje pokyny , model provedení , registry procesorů , adresy a datové formáty. Mikroarchitektura obsahuje součásti procesoru a jejich vzájemné propojení a spolupráci při implementaci ISA.

Mikroarchitektura stroje je obvykle reprezentována jako (více či méně podrobné) diagramy, které popisují propojení různých mikroarchitekturálních prvků stroje, což může být cokoli od jednoduchých bran a registrů až po kompletní aritmetické logické jednotky (ALU) a ještě větší elementy. Tyto diagramy obecně oddělit DataPath (kde je umístěn údaje) a kontrolní dráhu (který lze říci, že nasměrování dat).

Osoba navrhující systém obvykle kreslí konkrétní mikroarchitekturu jako druh diagramu toku dat . Podobně jako blokové schéma ukazuje mikroarchitekturní diagram mikroarchitekturní prvky, jako je aritmetická a logická jednotka a soubor registru, jako jeden schematický symbol. Diagram obvykle spojuje tyto prvky pomocí šipek, silných čar a tenkých čar, aby bylo možné rozlišovat mezi třístavovými sběrnicemi (které vyžadují třístavovou vyrovnávací paměť pro každé zařízení, které řídí sběrnici), jednosměrnými sběrnicemi (vždy poháněnými jediným zdrojem, jako je např. jako způsob, jakým je adresová sběrnice na jednodušších počítačích vždy řízena registrem adres paměti ) a jednotlivými řídicími linkami. Velmi jednoduché počítače mají jedinou organizaci datové sběrnice  -mají jedinou třístavovou sběrnici . Diagram složitějších počítačů obvykle zobrazuje více třístavových sběrnic, které pomáhají stroji provádět více operací současně.

Každý mikroarchitekturní prvek je zase reprezentován schématem popisujícím propojení logických bran použitých k jeho implementaci. Každá logická brána je zase reprezentována schématem zapojení popisujícím zapojení tranzistorů použitých k její implementaci v nějaké konkrétní logické rodině . Stroje s různými mikroarchitekturami mohou mít stejnou architekturu instrukční sady, a proto mohou být schopné spouštět stejné programy. Nové mikroarchitektury a/nebo řešení obvodů spolu s pokrokem ve výrobě polovodičů umožňují novějším generacím procesorů dosáhnout vyššího výkonu při použití stejného ISA.

V zásadě by jedna mikroarchitektura mohla provádět několik různých ISA pouze s malými změnami v mikrokódu .

Aspekty

Intel 80286 mikroarchitektury

Pipeline DataPath je nejběžněji používaným DataPath design v mikroarchitektuře dnes. Tato technika se používá ve většině moderních mikroprocesorů, mikrokontrolérů a DSP . Plynovodová architektura umožňuje, aby se více instrukcí při provádění překrývalo, podobně jako montážní linka. Plynovod zahrnuje několik různých fází, které jsou zásadní pro návrhy mikroarchitektury. Některé z těchto fází zahrnují načítání instrukcí, dekódování instrukcí, spouštění a zpětný zápis. Některé architektury obsahují další fáze, například přístup do paměti. Konstrukce potrubí je jedním z ústředních mikroarchitekturních úkolů.

Popravčí jednotky jsou také důležité pro mikroarchitekturu. Mezi prováděcí jednotky patří aritmetické logické jednotky (ALU), jednotky s plovoucí desetinnou čárkou (FPU), jednotky načítání/ukládání, predikce větví a SIMD . Tyto jednotky provádějí operace nebo výpočty procesoru. Volba počtu prováděcích jednotek, jejich latence a propustnosti je ústředním mikroarchitekturním návrhovým úkolem. Mikroarchitekturální rozhodnutí jsou také velikost, latence, propustnost a konektivita pamětí v systému.

Rozhodování o návrhu na úrovni systému, například zda zahrnout nebo nezahrnout periferie , jako jsou řadiče paměti , lze považovat za součást procesu mikroarchitekturního návrhu. To zahrnuje rozhodnutí o úrovni výkonu a konektivitě těchto periferií.

Na rozdíl od architektonického designu, kde je hlavním cílem dosažení konkrétní úrovně výkonu, mikroarchitekturní design věnuje větší pozornost dalším omezením. Protože rozhodnutí o návrhu mikroarchitektury přímo ovlivňují to, co jde do systému, je třeba věnovat pozornost problémům, jako je oblast/cena čipu, spotřeba energie, logická složitost, snadná konektivita, vyrobitelnost, snadné ladění a testovatelnost.

Mikroarchitektonické koncepty

Instrukční cykly

Chcete-li spouštět programy, všechny jednočipové nebo vícečipové procesory:

  1. Přečtěte si instrukci a dekódujte ji
  2. Najděte všechna související data, která jsou potřebná ke zpracování instrukce
  3. Zpracujte instrukci
  4. Napište výsledky

Cyklus instrukcí se opakuje nepřetržitě, dokud se nevypne napájení.

Mikroarchitektura více kol

Historicky nejčasnější počítače byly vícekolové konstrukce. Nejmenší, nejméně nákladné počítače často stále používají tuto techniku. Vícecyklové architektury často používají nejmenší celkový počet logických prvků a přiměřené množství energie. Mohou být navrženy tak, aby měly deterministické načasování a vysokou spolehlivost. Zejména nemají žádné potrubí, které by se zastavilo při přijímání podmíněných větví nebo přerušení. Jiné mikroarchitektury však často provádějí více instrukcí za jednotku času se stejnou logickou rodinou. Při diskusi o „zlepšeném výkonu“ je zlepšení často ve vztahu k designu více kol.

Ve vícekolovém počítači počítač provede čtyři kroky za sebou, během několika cyklů hodin. Některé návrhy mohou provádět sekvenci ve dvou hodinových cyklech dokončením po sobě jdoucích fází na alternativních hodinových hranách, případně s delšími operacemi mimo hlavní cyklus. Například první fáze na stoupající hraně prvního cyklu, druhá fáze na sestupné hraně prvního cyklu atd.

V řídicí logice kombinace počitadla cyklů, stavu cyklu (vysoký nebo nízký) a bitů dekódovacího registru instrukcí určuje přesně to, co by měla dělat každá část počítače. Pro návrh řídicí logiky lze vytvořit tabulku bitů popisujících řídicí signály pro každou část počítače v každém cyklu každé instrukce. Potom lze tuto logickou tabulku otestovat v softwarové simulaci se spuštěním testovacího kódu. Pokud je logická tabulka umístěna v paměti a slouží ke skutečnému provozu skutečného počítače, nazývá se mikroprogram . V některých počítačových návrzích je logická tabulka optimalizována do podoby kombinační logiky vytvořené z logických bran, obvykle pomocí počítačového programu, který optimalizuje logiku. Počáteční počítače používaly pro řízení logický návrh ad hoc, dokud Maurice Wilkes nevynalezl tento tabulkový přístup a nazval jej mikroprogramování.

Zvýšení rychlosti provádění

Tuto jednoduše vypadající sérii kroků komplikuje fakt, že hierarchie paměti, která zahrnuje ukládání do mezipaměti , hlavní paměť a energeticky nezávislé úložiště jako pevné disky (kde jsou umístěny programové instrukce a data), byla vždy pomalejší než samotný procesor. Krok (2) často zavádí zdlouhavé (z hlediska CPU) zpoždění, zatímco data přicházejí přes počítačovou sběrnici . Značné množství výzkumu bylo věnováno návrhům, které se těmto zdržením co nejvíce vyhýbají. V průběhu let bylo ústředním cílem provádět souběžně více pokynů, čímž se zvýšila efektivní rychlost provádění programu. Toto úsilí zavedlo komplikovanou logiku a obvodové struktury. Zpočátku mohly být tyto techniky implementovány pouze na drahých sálových počítačích nebo superpočítačích kvůli množství obvodů potřebných pro tyto techniky. Jak výroba polovodičů postupovala, stále více těchto technik bylo možné implementovat na jeden polovodičový čip. Viz Moorův zákon .

Výběr instrukční sady

Instrukční sady se v průběhu let posunuly, od původně velmi jednoduchých až po někdy velmi složité (v různých ohledech). V posledních letech jsou v módě architektury load -store , VLIW a EPIC . Mezi architektury, které se zabývají paralelností dat, patří SIMD a Vektory . Některé popisky používané k označení tříd architektur CPU nejsou nijak zvlášť popisné, zejména pokud jde o označení CISC; mnoho raných návrhů se zpětným označením „ CISC “ je ve skutečnosti výrazně jednodušší než moderní procesory RISC (v několika ohledech).

Volba architektury sady instrukcí však může výrazně ovlivnit složitost implementace vysoce výkonných zařízení. Prominentní strategií, použitou k vývoji prvních procesorů RISC, bylo zjednodušení instrukcí na minimum individuální sémantické složitosti v kombinaci s vysokou pravidelností a jednoduchostí kódování. Takové jednotné instrukce byly snadno načteny, dekódovány a prováděny propojeným způsobem a jednoduchou strategií ke snížení počtu logických úrovní za účelem dosažení vysokých provozních frekvencí; paměti cache instrukcí kompenzovaly vyšší provozní frekvenci a inherentně nízkou hustotu kódu, zatímco velké sady registrů byly použity k vyřazení co největšího počtu (pomalých) přístupů do paměti.

Instrukční potrubí

Jednou z prvních a nejsilnějších technik ke zlepšení výkonu je použití instrukčního pipeline . Dřívější návrhy procesorů by provedly všechny výše uvedené kroky pro jednu instrukci, než se přesunou k další. Velké části obvodů zůstaly nečinné v jednom kroku; například obvody dekódování instrukcí by byly během provádění nečinné a tak dále.

Pipelining zlepšuje výkon tím, že umožňuje řadě instrukcí procházet procesorem současně. Ve stejném základním příkladu procesor začne dekódovat (krok 1) novou instrukci, zatímco poslední čeká na výsledky. To by umožnilo „létat“ až čtyři instrukce najednou, takže procesor vypadá čtyřikrát rychleji. Ačkoli každá jedna instrukce trvá stejně dlouho (stále existují čtyři kroky), CPU jako celek „odstraní“ instrukce mnohem rychleji.

Díky RISC jsou potrubí menší a jejich konstrukce je mnohem snazší, a to čistým oddělením každé fáze procesu instrukce a jejich zabráním stejným časem - jedním cyklem. Procesor jako celek pracuje způsobem montážní linky , přičemž na jedné straně přicházejí pokyny a na druhé vycházejí. Vzhledem ke snížené složitosti klasického RISC potrubí bylo pipelineované jádro a instrukční mezipaměť umístěno na matrici stejné velikosti, která by jinak odpovídala samotnému jádru na návrhu CISC. To byl skutečný důvod, proč byl RISC rychlejší. Rané designy jako SPARC a MIPS často běžely 10krát rychleji než řešení Intel a Motorola CISC se stejným taktem a cenou.

Potrubí se v žádném případě neomezuje na provedení RISC. V roce 1986 byla vrcholná implementace VAX ( VAX 8800 ) silně propojeným designem, který mírně předcházel prvním komerčním návrhům MIPS a SPARC. Většina moderních procesorů (dokonce i vestavěných) je nyní pipelineována a mikrokódované procesory bez pipeline jsou vidět pouze v nejvíce omezených vestavěných procesorech. Velké stroje CISC, od VAX 8800 po moderní Pentium 4 a Athlon, jsou implementovány s mikrokódem i potrubím. Vylepšení v pipeliningu a ukládání do mezipaměti jsou dva hlavní mikroarchitekturní pokroky, které umožnily výkonu procesoru držet krok s obvodovou technologií, na které jsou založeny.

Mezipaměti

Netrvalo dlouho a vylepšení výroby čipů umožnilo umístit na kostku ještě více obvodů a designéři začali hledat způsoby, jak ji použít. Jedním z nejběžnějších bylo přidání stále rostoucího množství mezipaměti na místě. Cache je velmi rychlá a drahá paměť. Lze k němu přistupovat během několika cyklů, na rozdíl od mnoha potřebných k „rozhovoru“ s hlavní pamětí. CPU obsahuje řadič mezipaměti, který automatizuje čtení a zápis z mezipaměti. Pokud jsou data již v mezipaměti, je k nim přístup odtamtud - při značné časové úspoře, zatímco pokud tomu tak není, procesor je „zablokován“, zatímco je řadič mezipaměti čte.

Návrhy RISC začaly přidávat mezipaměť v polovině 80. let, často jen 4 kB celkem. Toto číslo postupem času rostlo a typické procesory mají nyní alespoň 512 kB, zatímco výkonnější CPU mají 1 nebo 2 nebo dokonce 4, 6, 8 nebo 12 MB, uspořádané na více úrovních hierarchie paměti . Obecně řečeno, více mezipaměti znamená větší výkon, kvůli menšímu zablokování.

Keše a potrubí se k sobě perfektně hodily. Dříve nemělo velký smysl stavět potrubí, které by mohlo běžet rychleji, než je čekací doba přístupové paměti mimo čip. Místo toho použití mezipaměti na čipu znamenalo, že potrubí může běžet rychlostí latence přístupu do mezipaměti, což je mnohem kratší doba. To umožnilo, aby se pracovní frekvence procesorů zvyšovaly mnohem rychleji než u off-chip paměti.

Předpověď větve

Jedna překážka pro dosažení vyššího výkonu prostřednictvím paralelismu na úrovni instrukcí pramení ze zablokování potrubí a spláchnutí v důsledku větví. Normálně není známo, zda bude přijata podmíněná větev, až do pozdního kanálu, protože podmíněné větve závisí na výsledcích pocházejících z registru. Od chvíle, kdy dekodér instrukcí procesoru zjistil, že narazil na podmíněnou instrukci větve, do doby, kdy je možné načíst hodnotu rozhodujícího registru, je třeba potrubí zablokovat na několik cyklů, nebo pokud tomu tak není a větev je je třeba potrubí propláchnout. Jak se zvyšují rychlosti hodin, s tím roste i hloubka potrubí a některé moderní procesory mohou mít 20 a více stupňů. V průměru je každá pátá provedená instrukce větev, takže bez jakéhokoli zásahu je to velké množství zablokování.

Ke snížení těchto sankcí za pobočky se používají techniky, jako je predikce poboček a spekulativní provádění . Předpověď větve je místo, kde hardware dělá kvalifikované odhady, zda bude konkrétní větev přijata. Ve skutečnosti bude jedna nebo druhá strana pobočky nazývána mnohem častěji než druhá. Moderní konstrukce mají poměrně složité systémy statistické predikce, které sledují výsledky minulých větví a předpovídají budoucnost s větší přesností. Hádání umožňuje hardwaru předběžně načíst pokyny bez čekání na přečtení registru. Spekulativní provádění je další vylepšení, ve kterém se kód podél predikované cesty nejen předem načte, ale také provede, než bude známo, zda má být větev přijata nebo ne. To může přinést lepší výkon, když je odhad dobrý, s rizikem velkého trestu, když je odhad špatný, protože pokyny je třeba vrátit zpět.

Superskalární

I přes veškerou přidanou složitost a hradla potřebná k podpoře výše nastíněných konceptů, vylepšení výroby polovodičů brzy umožnila použít ještě více logických hradel.

V osnově výše procesor zpracovává části jedné instrukce najednou. Počítačové programy by mohly být spuštěny rychleji, pokud by bylo zpracováno více instrukcí současně. Toho dosahují superskalární procesory replikací funkčních jednotek, jako jsou ALU. Replikace funkčních jednotek byla možná pouze tehdy, když oblast matrice procesoru s jediným problémem již nepřekračovala hranice toho, co bylo možné spolehlivě vyrobit. Koncem 80. let začaly na trh vstupovat superskalární designy.

V moderních designech je běžné najít dvě jednotky zatížení, jednu prodejnu (mnoho instrukcí neobsahuje žádné výsledky pro uložení), dvě nebo více celočíselných matematických jednotek, dvě nebo více jednotek s plovoucí desetinnou čárkou a často nějakou SIMD jednotku. Logika vydávání instrukcí narůstá ve složitosti čtením obrovského seznamu instrukcí z paměti a jejich předáním různým prováděcím jednotkám, které jsou v daném okamžiku nečinné. Výsledky jsou poté shromážděny a na konci znovu uspořádány.

Provedení mimo objednávku

Přidání mezipaměti snižuje frekvenci nebo trvání blokování kvůli čekání na načtení dat z hierarchie paměti, ale nezbaví se těchto bloků úplně. V raných návrzích by chyba mezipaměti přinutila řadič mezipaměti zastavit procesor a počkat. V programu samozřejmě může existovat nějaká jiná instrukce, jejíž data jsou v daném bodě v mezipaměti k dispozici. Spuštění mimo pořadí umožňuje, aby byla připravená instrukce zpracována, zatímco starší instrukce čeká v mezipaměti, a poté znovu uspořádá výsledky, aby vypadalo, že se vše stalo v naprogramovaném pořadí. Tato technika se také používá k zamezení dalších bloků závislosti na operandech, jako je instrukce čekající na výsledek operace s pohyblivou řádovou čárkou s dlouhou latencí nebo jiné operace s více cykly.

Zaregistrujte přejmenování

Přejmenování registru odkazuje na techniku ​​používanou k zabránění zbytečnému serializovanému provádění instrukcí programu z důvodu opětovného použití stejných registrů těmito instrukcemi. Předpokládejme, že máme dvě skupiny instrukcí, které budou používat stejný registr . Jedna sada instrukcí se provede jako první, aby se registr ponechal druhé sadě, ale pokud je druhá sada přiřazena k jinému podobnému registru, lze obě sady instrukcí provádět paralelně (nebo) v sérii.

Multiprocesing a multithreading

Počítačoví architekti byli zneklidněni rostoucím nesouladem v provozních frekvencích CPU a přístupových dobách DRAM . Žádná z technik, které využívaly paralelismu na úrovni instrukcí (ILP) v rámci jednoho programu, nemohla vynahradit dlouhé překážky, ke kterým došlo, když bylo nutné načíst data z hlavní paměti. Velké počty tranzistorů a vysoké pracovní frekvence potřebné pro pokročilejší techniky ILP navíc vyžadovaly úrovně rozptylu energie, které již nebylo možné levně chladit. Z těchto důvodů začaly novější generace počítačů využívat vyšší úrovně paralelismu, které existují mimo jeden program nebo vlákno programu .

Tento trend je někdy znám jako propustné výpočty . Tato myšlenka vznikla na trhu sálových počítačů, kde online zpracování transakcí kladlo důraz nejen na rychlost provedení jedné transakce, ale na schopnost vypořádat se s velkým počtem transakcí. S aplikacemi založenými na transakcích, jako je směrování sítě a webové stránky, které v posledním desetiletí výrazně rostou, počítačový průmysl znovu zdůraznil problémy s kapacitou a propustností.

Jednou z technik, jak tohoto paralelismu dosáhnout, je multiprocesní systémy, počítačové systémy s více CPU. Jakmile jsou servery s více procesory v malém měřítku (2–8) vyhrazeny pro high-end sálové počítače a superpočítače , staly se na trhu malých podniků běžnou záležitostí. Pro velké korporace jsou běžné velké (16–256) multiprocesory. Od 90. let se objevily dokonce i osobní počítače s více CPU.

S dalším zmenšením velikosti tranzistoru, které bylo k dispozici s pokrokem v polovodičových technologiích, se objevily vícejádrové procesory, kde je na stejném křemíkovém čipu implementováno více CPU. Zpočátku se používalo v čipech zaměřených na vložené trhy, kde jednodušší a menší CPU umožnily více instancí, aby se vešly na jeden kus křemíku. Do roku 2005 polovodičová technologie umožňovala vyrábět duální špičkové stolní CPU CMP čipy ve velkém . Některé návrhy, jako jsou Sun Microsystems " UltraSPARC T1 klesnou na jednodušší (skalární, in-pořadí) navrhuje, aby se vešly více procesorů na jednom kusu křemíku.

Další technikou, která je v poslední době stále oblíbenější, je multithreading . Ve vícevláknovém zpracování, když procesor musí načítat data z pomalé systémové paměti, místo aby se data zastavila, procesor přepne na jiný program nebo podproces programu, který je připraven ke spuštění. Ačkoli to konkrétní program/vlákno nezrychlí, zvyšuje celkovou propustnost systému zkrácením doby nečinnosti procesoru.

Koncepčně je vícevláknové zpracování ekvivalentní přepínání kontextu na úrovni operačního systému. Rozdíl je v tom, že vícevláknový procesor může provádět přepínání vláken v jednom cyklu CPU namísto stovek nebo tisíc cyklů procesoru, které kontextový přepínač normálně vyžaduje. Toho je dosaženo replikací stavového hardwaru (například souboru registru a čítače programu ) pro každé aktivní vlákno.

Dalším vylepšením je simultánní vytváření více vláken . Tato technika umožňuje superskalárním procesorům provádět instrukce z různých programů/vláken současně ve stejném cyklu.

Viz také

Reference

Další čtení