Vyznejte se v procesoru – velký přehled technologií

Procesor najdete v každém počítači, vyznáte se ale v jeho technologiích? Jak funguje cache, co je to skalární procesor a jak se vlastně mozek každého současného počítače vyrábí?
Kapitoly článku

Výrobci i prodejci procesorů či počítačů nás zaplavují mnoha pojmy, kterých navíc přibývá. Je to dnes samé jádro, vlákno, cache, SSE a další pojmy a zkratky. Co to vlastně znamená? Do jaké míry je nutné tomu věnovat pozornost? Začněme pojmem procesor. Ten je někdy nazýván srdcem počítače, protože „myslí“. Je to ale otrok programátora, který jen slepě vykonává jeho příkazy. Když se celý procesor vešel na jediný čip, vznikl mikroprocesor; to jsou všechny současné procesory (proto se předpona mikro- přestala používat).

Jak vznikl moderní procesor

Tradiční mikroprocesor míval příkazy „zadrátované“ neboli měl pevné zapojení. To bylo náročné při navrhování procesoru; jeho oprava pro výrobu dalších procesorů byla obtížná. Navíc se již vyrobený procesor nemohl dodatečně opravit. Výrobci se proto rozhodli pod příkazy vložit ještě jednu vrstvu. Každý příkaz se bude skládat z několika menších příkazů zvaných mikroinstrukce. Přímo v procesoru je překladová tabulka mezi instrukcemi a mikroinstrukcemi. To měl například Intel Pentium Pro (a od té doby snad všechny mikroprocesory). Veřejnost se o nich poprvé dozvěděla o trochu víc ve spojitosti s procesory Intel Pentium 4, jejichž instrukční cache L1 si pamatovala právě mikroinstrukce.

Výrobce procesoru může dokonce opravovat procesory přímo u zákazníka, jde-li o drobnější chybu. Překladová tabulka mikroinstrukcí je totiž součástí BIOSu, ze kterého se posílá do procesoru. Novější BIOS tak znamená možnost drobné opravy procesoru, případně zvýšení efektivity jeho práce. Samotný procesor dokáže leccos, ale na složité matematické operace zrovna vhodný není. Začaly tak vznikat pomocné specializované procesory, kterým se začalo říkat koprocesor. Pro výpočty s plovoucí desetinnou čárkou se vytvořila pomocná součástka zvaná matematický koprocesor. Sice nebyl první, ale rozhodně nejznámější byl Intel 8087, předobraz normy IEEE 754 (kromě jiného zapříčinil, že si IBM vybrala pro pécéčko právě procesor Intel 8088). Koprocesor byl volitelnou součástí počítače.

486.png  nehalem.png
Součástí přibývá: vlevo pohled na Intel 486DX2, vpravo pak Nehalem

Přímo na čip procesoru se přemístil až na jaře 1989 (procesory Intel486 a MC68040). Od té doby je v každém procesoru, v některých dokonce několikrát. Právě to stálo za velkým úspěchem procesorů AMD Athlon v kombinaci se staršími hrami, které se opíraly právě o instrukce matematického koprocesoru. Že jde o velmi důležitou součástku, zjistili uživatelé procesoru Sun UltraSPARC T1. Ten je sice velmi výkonný, ovšem jediný koprocesor na všech osm jader neumožňuje od procesoru očekávat jakékoli výkony ve složitější matematice.

Kdysi existovalo více druhů koprocesorů, dnes se objevují hlavně šifrovací koprocesory. Ty se používají například u procesorů VIA C3 / C7 / Nano pod názvem VIA PadLock engine. Roku 2010 by se měly instrukce pro šifrování „AES-NI“ objevit v následnících současných procesorů „Nehalem“ s kódovým označením „Westmere“. Libůstkou některých procesorů je hardwarový Java koprocesor (superprocesor IBM z10 a mnohé průmyslové mikroprocesory a jednočipy). Že koprocesory nejsou historickým přežitkem, dokládá fakt, že Intel připravuje do běžných procesorů vektorový koprocesor, určený pro extrémně náročné výpočty. Měl by přijít v procesoru „Haswell“ snad roku 2012.

SIMD

SIMD je akademický název pro postup, kdy se dokáže jediným příkazem manipulovat s větším množstvím dat (single instruction multiple data). Jednotky SIMD nenahrazují procesor zcela, nýbrž přebírají náročnou opakující se práci. Samotné jádro procesoru je využíváno hlavně pro chod programu. Je to svým způsobem první pokus mít více jader.

Výrobci procesorů začali procesory doplňovat SIMD jednotkou v polovině 90. let. První SIMD sadou sice byl MAX-1 od HP, ale známou se stala až sada MMX od Intelu. Ta je 64bitová a dokáže se tvářit jako jeden zjednodušený 64bitový procesor, dva 32bitové, čtyři 16bitové nebo osm 8bitových. Právě MMX velmi výrazně zrychluje například práce s bitmapami ( Adobe Photoshop a další).

Stejně jako celočíselné SIMD sady typu MMX začaly svým způsobem nahrazovat procesor, začaly jiné zaměřené na desetinná čísla nahrazovat matematický koprocesor. Sem patří 3DNow!, celá rodina SSE (od SSE po SSE4a či SSE4.2) / Altivec / VMX a spousta dalších. Zmínka o 3D je zcela namístě – jedním z prvních využití bylo právě ve vektorové 3D grafice. Proto jsou obvykle 128bitové. Po zrychlení grafiky přišla na řadu celá řádka dalších velmi náročných úloh, jako je vyhledávání, šifrování, komprese dat typu MPEG-4 a další. Právě šifrování se bude používat u nové 256bitové sady AVX v procesorech Intel od roku 2010.

Cache

Dalším termínem je cache, což se v češtině vykládá jako rychlá vyrovnávací paměť. Je to RAM paměť, mnohokrát rychlejší, než operační paměť RAM. Poprvé se objevila v sálových počítačích koncem 60. let; vraťme se zpět k mikropočítačům. Mikroprocesor začal být i v nich v polovině 80. let natolik rychlý, že jej začala RAM paměť zpomalovat. První možností jak situaci vyřešit bylo zrychlení celé RAM paměti. To sice technicky možné je, ale za cenu mnohonásobného zdražení. A tak místo náhražky pomalé paměti za rychlou přidala k pomalé ještě malá rychlá. Tam jsou data naposledy zpracovávaná procesorem.

procesory.png

Původně se cache umisťovala vedle procesoru, později se s ním sloučila. Mezi první slavné mikroprocesory s integrovanou cache pamětí patří Intel486 a Motorola MC68040 (oba z jara 1989). Přestože se cache přemístila přímo do procesoru, v jeho okolí zůstala externí cache i nadále. Té integrované se začalo říkat cache první úrovně nebo též primární cache (cache L1), ta v okolí procesoru dostala označení sekundární cache, cache L2, cache druhé úrovně. Ta se ale přímo na čip procesoru dostala postupně také (viz AMD K6-III, nebo Intel Pentium III pro Socket 370). Obecně platí, že cache L1 slouží ke zrychlení na nejnižší úrovni; musí být nejrychlejší, což znamená také co nejmenší. Obvyklá velikost je řádově v desítkách KiB. Cache L2 není tak rychlá, zato musí mít co největší velikost. Ta se dnes pohybuje ve stovkách KiB (pokud existuje L3 cache), případně v jednotkách MiB (pokud L3 cache není).

Postupem času se zjistilo, že cache L1 nepodává takové výkony, jak bychom chtěli. Proto se rozdělila na dvě. Od té doby máme cache dělenou na L1 instrukční a L1 datovou (L1I + L1D). Obvykle jsou symetrické, neboli obě mají stejnou datovou kapacitu (například 32 + 32 KiB). V rodině x86 se poprvé objevila u procesorů Intel Pentium, jinde u Alpha 21064.

procesory.png

Cache třetí úrovně nemá na první pohled smysl. Jestli je na čipu místo pro další cache, může se L2 cache prostě zvětšit. Poprvé se terciární cache objevila přímo na čipu u čtyřprocesorových serverů (viz Intel Xeon MP). Zatímco L1 a L2 slouží jen jedinému procesoru, cache L3 je největší. Zapisovat do ní může jen jeden procesor, ale číst mohou všechny ostatní. Začíná se využívat od dvou procesorů, velký smysl má od čtyř procesorů výše. L3 cache našla využití u procesorů Intel Itanium 2, IBM POWER4 a dalších.

To vše platilo pro jednojádrové procesory. Dnes ale máme na jediném čipu třeba čtyři jádra. Potom vše k cache pamětem platí, pokud místo „procesor“ použijeme slovo „jádro“. Dnešní čtyřjádrové procesory typu AMD Phenom II nebo Intel Core i7 mají velmi podobnou filosofii. Na jediném čipu jsou čtyři jádra, kde každé má malou L1 cache a větší cache L2. Všechna čtyři jádra potom sdílejí cache třetí úrovně. Cache L1 lze přirovnat k ledničce, ke které máme nejblíže, ale je nejmenší. Za cache L2 lze považovat spíž, kam je sice delší cesta, ale více se tam vejde. A konečně cache L3 je společný sklad více kuchyní, kde nemusí být X-krát pytel s moukou, ale stačí jeden společný.

Existuje ale ještě další motivace proč mít cache. Je to situace, kdy výrobce počítače chce přidat ještě další cache. Například procesor AMD K6-III mohl mít také L3 cache; tou se stala externí cache, která v případě jiných procesorů pro Socket 7 byla cache druhé úrovně. Sloužila jako pomyslná ještě větší (a druhá) cache L2. Podobně má L3 cache doplněnou procesor IBM POWER5. Stejným způsobem vznikla cache L4 (pod názvem XceL4), kterou přidala IBM do serverů s procesory Intel Xeon MP, které měly přímo na čipu L1, L2 a L3. Ta na základní desce pak dostala logicky pořadové číslo čtyři.

Poslední dobou se objevila nová zkratka LLC, znamenající Last Level Cache neboli cache poslední úrovně. To se dá využít při porovnání cache pamětí, určených pro uchování největšího objemu dat. Některé procesory mají v roli LLC cache L2, jiné až L3; ty ovšem mají L2 cache výrazně menší, protože se její role změnila. Samozřejmě platilo a platí, že čím je větší cache, tím je vyšší výpočetní výkon procesoru. Proto mají levné modely malou cache (za málo peněz málo muziky), což lze vidět u modelů AMD Duron / Sempron, Intel Celeron a podobně. Dražší a nejdražší procesory s nejvyššími výkony mají cache co největší.

Skalární procesory

Pojmem superscalar se označuje procesor, který dokáže vykonat více než jedinou instrukci najednou. Vše probíhá hardwarově a automatizovaně. V mikroprocesorech jsme jej mohli spatřit poprvé koncem 80. let u AMD 29000 nebo Intel 960CA, později například Intel Pentium. Softwarovou obdobou jsou procesory VLIW (Very Long Instruction Word), což byly například procesory firmy Transmeta, do určité míry i rodina Intel Itanium a další. Superscalar i VLIW patří do kategorie ILP (Instruction-Level Parallelism).

Další způsob jak zrychlit počítač je MLP (Memory-Level Paralellism). Sem patří vykonávání příkazů mimo pořadí neboli OOO (out-of-order execution). Vše je založeno na faktu, že příkazy nemusí být v ideálním pořadí za sebou. Jsou situace, kdy jiné pořadí instrukcí může zvýšit rychlost zpracování. Procesor vykoná vše, jen v jiném pořadí, než je v programu napsáno.

power5.png
Architektura procesoru IBM Power5+

Když pomineme éru sálových počítačů, tak byla tato technologie poprvé použita počátkem 90. let (AMD K5, Intel Pentium Pro, PowerPC 601 a další). Dnes je OOO téměř povinností. Zajímavostí je, že některé dnešní procesory tento postup nemají. Vedle úsporného modelu Intel Atom (a dříve Transmeta Crusoe) jde o špičkové procesory Intel Itanium, Sun UltraSPARC nebo IBM POWER6.

Všechny výše uvedené technologie sice existují celou řadu let, ovšem jsou více a více zdokonalovány. Znamenají vyšší výpočetní výkon procesorů. Především v posledních několika letech se ale začínají z procesorů paradoxně odstraňovat. Důvodem je fakt, že každá z nich vyžaduje více energie navíc. Jen samotná OOO v procesoru Intel Pentium M znamená 28 % spotřeby procesoru! V době energetických úspor se mnohé technologie právě z těchto důvodů odstraňují jak z mobilních procesorů (Intel Atom), tak ze serverů.

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , ,