Hlavní navigace

Povídky paralelistické: procesory Intel P6

Michal Burda

Povídka o velevážené rodině procesorů Intel P6. Minule jsme si rozdělili úrovně možné paralelizace výpočetních systémů do tří skupin. Vraťme se nyní zpět k nejnižšímu stupni -- využití principu paralelnosti na úrovni hardwaru. Popíšeme si architekturu procesorů rodiny P6 firmy Intel.

Architektura procesorů rodiny „Intel P6“

Procesory rodiny P6 byly představeny firmou Intel roku 1995. Prvním zástupcem této skupiny byl procesor Pentium Pro. Při vývoji procesorů rodiny P6 bylo jedním z prvořadých cílů významně překročit výkon procesoru Pentium s použitím stejné výrobní technologie, a to znamenalo, že zvýšení výkonu bylo možné docílit pouze vylepšením mikroarchitektury.

Procesory rodiny P6 jsou třícestně (three-way) superskalární, zřetězené (pipelined) architektury. Šílený termín „třícestně superskalární“ stručně znamená, že použitím paralelních technik bylo docíleno toho, aby byl procesor schopen dekódovat, připravit a kompletně provést průměrně tři instrukce za jeden hodinový cyklus. Aby bylo dosaženo takové propustnosti, procesory rodiny P6 jsou tvořeny dvanáctistupňovým zřetězením (12-stage superpipeline), které podporuje tzv. out-of-order vykonávání, tedy provádění instrukcí v pořadí, které nemusí nutně odpovídat tomu, jak instrukce do procesoru dorazily. (Integrita dat musí pochopitelně zůstat zachována.)

Intel

Obrázek znázorňuje koncepční pohled na toto zřetězení rozdělené do čtyř jednotek:

  • Jednotka volání a dekódování instrukcí (Fetch/Decode Unit)
  • Jednotka odesílání a vykonávání instrukcí (Dispatch/Exe­cute Unit)
  • Jednotka Retire (Retire Unit)
  • Banka dekódovaných instrukcí (Instruction Pool či Reorder Buffer)

Nyní se pokusím takříkajíc „po lopatě“ vysvětlit, co jednotlivé chlívky na obrázku znamenají a jak celý procesor zhruba funguje. Důraz budiž kladen zejména na záležitosti týkající se souběžného zpracovávání.

Bus Interface Unit

Instrukce a data jsou do procesoru dodávány prostřednictvím jednotky rozhraní sběrnice (Bus Interface Unit). Tato jednotka zprostředkovává styk procesoru se systémovou sběrnicí. Pro překlenutí rozdílu mezi rychlým procesorem a relativně pomalou sběrnicí používá BIU navíc tzv. L2 cache paměť pro uchování údajů, u kterých je pravděpodobné, že je bude brzy potřebovat.

Procesor používá ještě jednu cache paměť – L1. Ta je již rozdělena na dva kousky. V první části se uchovávají instrukce a ve druhé data.

Fetch/Decode Unit

Jednotka volání a dekódování instrukcí (Fetch/Decode Unit) se stará o předzpracování instrukcí. Tato část procesoru čte z L1 instrukční cache paměti proud instrukcí a dekóduje je na tzv. mikroinstrukce. Mikroinstrukce jsou potom poslány do banky dekódovaných instrukcí (Instruction Pool), kde čekají na zpracování dalšími jednotkami procesoru.

Abychom pochopili rozdíl mezi instrukcí a mikroinstrukcí, můžeme si instrukci na chvíli představit jako kartičku s názvem nějaké operace. Mnoho instrukcí je samo o sobě elementárních a potom odpovídají právě jedné mikroinstrukci. Některé instrukce však pojmenovávají natolik složité operace, že procesor není schopen je provést v jednom jediném kroku. Potom se taková instrukce dekóduje na celou sadu mikroinstukcí, které v souhrnu provádějí kýženou operaci.

Dekodér instrukcí tedy čte postupně jednu „kartičku“ s názvem operace za druhou a podle svých tabulek dává na svůj výstup proud „menších“ kartiček (mikroinstrukcí), které již představují nejjednodušší možné operace procesoru.

Uvnitř jednotky volání a dekódování instrukcí jsou ještě zabudovány různé další složité mechanismy, které se snaží zpracování instrukcí optimalizovat. Asi nejzajímavějším nástrojem je předpovídání větvení programu. Jednotka „se dívá“ hluboko dopředu na instrukce, které následují za právě zpracovávanou, a už dopředu se je snaží dekódovat. Problémem však jsou různé příkazy větvení, které realizují různé skoky do jiných částí programu. Mechanismus předpovídání větvení se snaží uhodnout, kterou cestou se zpracovávání programu bude ubírat, a zrovna tyto instrukce nabídnout dekodéru k předzpracování.

Samotný dekodér se skládá ze tří paralelních částí: dvou dekodérů jednoduchých instrukcí (Simple-instruction Decoders) a jednoho dekodéru složitých instrukcí (Complex Instruction Decoder). Každý dekodér zkonvertuje instrukci architektury Intel na jednu nebo více mikroinstrukcí. V každém taktu procesoru tak může dekodér vygenerovat až šest mikroinstrukcí – jednu každým ze dvou dekodérů jednoduchých instrukcí a až čtyři dekodérem složitých instrukcí.

Instruction Pool

Dekódované mikroinstrukce putují do již zmíněné banky dekódovaných instrukcí (Instruction Pool). Instruction Pool je v podstatě sada čtyřiceti speciálních registrů, přičemž do každého z nich se vejde právě jedna mikroinstrukce.

Dispatch/Execute Unit

Z banky instrukcí jsou jednotlivé mikroinstrukce čteny jednotkou provádění instrukcí (Dispatch/Execute Unit), která je tvořena dvěma celočíselnými jednotkami (Integer Units), dvěma jednotkami pro operace s plovoucí čárkou (Floating-point Units) a jednou jednotkou pro přístup do paměti (Memory Interface Unit) – tím se umožní paralelní provádění až pěti mikroinstrukcí najednou.

Důležitý na vykonávání mikroinstrukcí je fakt, že z banky dekódovaných instrukcí mohou být čteny v jiném pořadí (out-of-order), než v jakém do Poolu přišly. Tím se velice zvyšuje propustnost celého systému, protože se mohou provádět mikroinstrukce podle toho, jaké exekuční jednotky jsou volné, a ne nutně podle pořadí jednotlivých mikroinstrukcí. Pochopitelně se tím ale zvyšuje složitost systému, protože si Dispatch/Execute Unit musí dávat pozor na datové závislosti mezi instrukcemi.

Retire Unit

Zpracovaná mikroinstrukce se vrací zpátky do banky instrukcí, kde čeká na své definitivní dokončení – promítnutí změn do zbytku systému. Jednotka Retire lineárně prohledává Instruction Pool na vykonané instrukce, které už nemají žádné závislosti na jiných instrukcích či neurčených větveních. Jakmile takovou najde, odevzdá výsledky k promítnutí do stavu systému: uloží je do paměti či do univerzálních registrů procesoru (EAX, EBX, …). Výsledky se realizují v originálním pořadí (tedy v takovém, v jakém instrukce přicházely do procesoru). Takto zpracované instrukce se nakonec z banky dekódovaných instrukcí odstraní.

Architektura procesorů Intel je pochopitelně o mnoho složitější, než jsem tady popsal. Z našeho pohledu si však všimneme zejména paralelnosti zpracování, která se v procesoru objevuje na každém kroku. Co všechno se provede v jednom taktu procesorových ho­din?

  1. Načtou se až tři nové instrukce z vyrovnávací paměti (L1 cache), dekódují se na mikroinstrukce a uloží se do banky dekódovaných instrukcí (Instruction Pool).
  2. Spustí se provádění až pěti mikroinstrukcí uložených v Instruction Poolu z minulých dekódování.
  3. Instrukce zpracované v předchozím taktu se promítnou do univerzálních registrů a stavu systému.

Přitom nestačí jen takové hrubé zřetězení, jak jsem ho v tomto článku popsal. Jednotlivé jednotky se uvnitř dále dělí na menší paralelní části, které jsou často navíc v procesoru násobně. Viz například dekodér, který je v procesoru ztrojený nebo vykonávací jednotka, která se skládá z pěti částí schopných pracovat souběžně.

Doufám, že tento článek dal čtenáři alespoň zevrubný pohled do světa nejdůležitějších částí počítačů – procesorů. Příště u hardwaru ještě zůstaneme. Budeme se bavit o architekturách paralelních strojů.

Můj dík za spoluúčast při tvorbě obsahu tohoto článku patří Jiřímu Lenertovi a Janu Bošotovi.

Našli jste v článku chybu?

4. 1. 2005 2:27

m1c4a1 (neregistrovaný)

Musím říct, že Drábek je možná dobrej hardwarář, ale přednášet neumí vůbec! :)

17. 8. 2003 23:25

Ivona Prenosilova (neregistrovaný)

>Jinak doporucuji scripta (eng only) prof. Dvoraka >z VUT FIT, tusim, ze se jmenuji Advanced processor >architectures....
nedavno jsem si objednavala z VUT FIT knizku od pana Dvoraka a pana Drabka s nazvem Architektura procesoru. jedna se o stejnou knizku ? (tato je v cestine a pomerne dobra).

kazdopadne nejlepsi dokumentace je ta primo od vyrobce :-)




Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

DigiZone.cz: Flix TV startuje i na Slovensku

Flix TV startuje i na Slovensku

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

DigiZone.cz: „Black Friday 2016“: závěrečné zhodnocení

„Black Friday 2016“: závěrečné zhodnocení

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla