360 likes | 565 Views
Procesory. „Počítače by jednou mohly vážit méně než 1.5 tun y .“ č asopis Popular Mechanics, 1949. Co nás bude zajímat. procesory před rokem 1970 – viz slajdy o historii počítačů od roku 1970 – mikroprocesory (vše na jednom čipu)
E N D
Procesory „Počítače by jednou mohly vážit méně než 1.5 tuny.“ časopis Popular Mechanics, 1949
Co nás bude zajímat • procesory před rokem 1970 – viz slajdy o historii počítačů • od roku 1970 – mikroprocesory (vše na jednom čipu) • dnes – všechny běžné PC, pracovní stanice i servery mají jako CPU mikroprocesor – zaměříme se jen na ně
První mikroprocesor – Intel4004 • 1969 – Bob Noyce a Gordon Moore zakládají Intel Corporation (výroba čipů pro mainframe) • 1970 – zakázka na sadu čipů do kalkulaček Busicom • 1971 – 4004 – 4bitový s 8bitovými instrukcemi, oddělená programová (4k) a datová (1k) paměť, 46 instrukcí, 2300 tranzistorů, BCD, 16 obecných 4b (nebo 8x8b) registrů, akumulátor, zásobník, PC, frekvence hodin 108 kHz
„Zlatá éra“ 8bitových mikroprocesorů • březen 1972: 8008 – vyvíjen paralelně s 4004 • 1974: Intel 8080 – první univerzální 8-bitový procesor • 6 000 tranzistorů, 2MHz • 8bitová datová sběrnice, 16bitová adresová sběrnice • 216 = 64k – obrovská adresovatelná paměť!!! • Motorola 6800 • „čistší“ architektura než 8080 • 1974 Faggin odchází od Intelu, zakládá Zilog • 1976 Zilog Z80 – 2.5 MHz (ve své době velmi úspěšný) • object-code compatible s 8080 • navíc další registry, instrukce • on-chip DRAM refresh
16-bitové procesory • Texas Instruments TMS9900 • registry ne na čipu, ale v paměti (vč. PC a SP) • National Semiconductor Pace • General Instruments CP1600 • Intel 8086 • Motorola 68000
Generace mikroprocesorů • 1971: sériové zpracování instrukce (I4004) • 1973: 16bitová aritmetika, pipeline, pětinásobné zvětšení instrukčního souboru, rychlosti a hustoty prvků (MC68000, I8080) • 1978: 16bitové procesory s výkonem minipočítačů; 250 000 prvků, cache na chipu, RISC (MC68020) • milión tranzistorů, více než 1 instrukce / sec. (I80960CA, Motorola 88100) • superskalární, přes 10 miliónů tranzistorů
Architektura mikroprocesorů • v podstatě stále von Neumannovská • mikroprocesor tedy sestává z • ALU (aritmeticko – logické jednotka) • řadiče (control unit) • ALU obsahuje registry (např. střadač) a obvody na aritmetické a logické operace • řadič zajišťuje provádění instrukčního cyklu, také má své registry (např. PC)
Instrukční cyklus - zhruba • načíst instrukci (fetch) • porozumět instrukci (decode) • vykonat instrukci (execute) • uložit výsledek (store) => fragmentace úlohy na menší části
Zrychlování (pipelining) • protože každá instrukce sestává z několika fází, lze další instrukci zahájit dříve než je předchozí dodělána • něco jako výrobní linka v továrně, kde na lince může být současně tolik výrobků v různé fázi rozpracování, z kolika fází se výroba skládá • např. zatímco se jedna instrukce dekóduje, tak pro další už může být proveden fetch
Pipeline - problémy • pipeline zavádí paralelismus, ale navenek se procesor musí tvářit sekvenčně • datová závislost: paralelně zpracovávané instrukce používají stejné registry nebo paměťová místa • závislost skoků: provedení / neprovedení skoku závisí na výsledku předchozí instrukce • největší problém: skok si vynutí vyprázdnění pipeline
Řešení problému skoků • multiple streams • look ahead / look behind buffer • např. u Motorola MC88110: • cyklická paměť 32 instrukcí • při skoku se uloží 2 instrukce z větve • asociativní vyhledávání dle adresy • branch prediction • další strategie …
Predikce skoku • v instrukci uložena „nápověda“. Podle toho se instrukce načítají. Je-li nápověda správně, nedojde ke ztrátě. Je-li nápověda špatně, vyprázdní se pipeline, načte se správný obsah. • statická predikce • rozhodnutí bez znalosti skutečné historie průběhu (predikce vždy stejná pro stejnou instrukci, bez ohledu na předchozí instrukce)
Vývoj pipeline • Superpipelining • rozdělení kroků pipeline na menší jednodušší rychlejší • Superscalar pipelining • více paralelních částí pipeline • dnes někdy i více celých pipeline • Dynamic pipeline • přeplánování problematických částí
Další zrychlování Simultánní multithreading • do pipeline se zavádějí instrukce různých vláken, které na sobě skoro jistě nebudou závislé Predikce hodnoty • Pozorování ukazuje, že instrukce Load zavede ve více než ½ případů stejnou hodnotu budeme to předpokládat
Instrukční sady • do 80. let trend budovat komplexní sady • stovky instrukcí, nejrůznější varianty jedné instrukce • snaha o překlenutí sémantické propasti, neboli rozdílu mezi vyšší a nižší úrovní práce počítače • sladit pohled programátora ve vyšším jazyce a programátora v assembleru • poskytnout dostatečně širokou škálu instrukcí pro zachycení stylu programování ve vyšším jazyce • dát podporu kompilátoru, aby opakující se problém vyřešil jedinou instrukcí místo (dlouhé) sekvence
Změna priorit • Důraz na to, co je nejvíce potřeba a co trvá nejdéle • Implementace méně používaných instrukcí může zhoršit celkový návrh • Spolehnout se na vyšší jazyky a optimalizující kompilátory • Paměť je dnes rychlejší a levnější
CISC vs RISC • CISC – Complex Instruction Set Computer(zpětné označení) • RISC – Reduced Instruction Set Computer
Strategie návrhu RISCu • zjištění nejpoužívanějších instrukcí (simulace a analýza programů) • optimalizace datových cest pro tyto instrukce • přidání dalších instrukcí, pokud jsou rozumně využitelné a nezpomalí procesor • přesunutí komplexních činností do kompilátoru
CISC • Proč se tedy vlastně vyvinuly? • (První stroje měly jednoduchou architekturu) • Cena HW klesla, cena SW stoupla • Přesun složitosti do HW usnadní programování • Méně instrukcí pro daný úkol znamená méně přístupů do (pomalé a drahé) paměti
Pokusy o definici RISC • N.J.Davis: • omezená a jednoduchá instrukční sada • velké množství obecných registrů • důraz na optimalizaci pipeline • Colwell: • provádění instrukcí v 1 taktu • architektura load/store • relativně málo instrukcí a způsobů adresování • pevný formát instrukcí • větší význam kompilátoru
Charakteristické rysy pro RISC • jedna instrukce na cyklus • operace registr – registr • architektura load – store • malý počet a jednoduché adresovací režimy • pevný formát instrukce • malý počet a jednoduché instrukce • velké množství registrů • použití linky proudového zpracování (pipeline) • zvláštní zpracování skoků • hardwired návrh obvodového řešení • silná závislost na kompilátoru
RISC – typičtí představitelé • Desktop/Server: • Alpha (Digital) • PA-RISC (Hewlett-Packard) • PowerPC (IBM + Motorola) • MIPS (Silicon Graphics) • SPARC (Sun Microsystems)
Návrh procesoru – co zvažovat • pevná/proměnná délka instrukcí? • pevný/proměnný počet a typ operandů? • počet adresovacích režimů? • mikrokód/hardwired řadič? • stupeň paralelismu? • důraz na vyšší programovací jazyky? • schopnosti kompilátoru?
zvolit RISC nebo CISC? • Neexistuje jednoznačná odpověď! • Problémy: • žádné dva procesory RISC a CISC nejsou přímo porovnatelné • není konečná sada testovacích programů • obtížné odlišit vliv HW a vliv kompilátoru • (většina dnešních návrhů bere z obou kategorií)
Konvergence CISC a RISC • od 80-let se technologie i znalosti změnily • mnohé techniky jsou používány procesory z obou táborů: • CISC – vykonávají více instrukcí v 1 taktu • RISC – se zlepšením technologií zbývá místo → vyplněné komplikovanějšími instrukcemi • vznikají „post-RISC“ návrhy, kombinující oba přístupy s metodami, které nejsou použity v žádné z těchto kategorií (přesto si „RISC“ zachovává charakteristické vlastnosti)
Post-RISC • Rozdíl od superskalárních RISCů: • přidání ne-RISCových instrukcí (pro zvýšení výkonu) architektura FISC (Fast Instruction Set Computer) • agresivní přerovnávání instrukcí v průběhu zpracování – „out-of-order execution,“ „speculative execution“ (odklon od závislosti na kompilátoru) • nové uspořádání, nové jednotky • větší míra paralelismu
Příklady procesorů post-RISC • procesory s ojedinělými znaky post-RISC • DEC Alpha 21164, SUN UltraSPARC • procesory s typickou organizací post-RISC • IBM PowerPC 604, MIPS R10000, HP PA-8000 • smíšené organizace • Intel Pentium P6 („interesting blend of architectures“) – starší Pentia jsou typické CISC procesory
Zpět k provádění instrukce • instrukce sestává z řady fází (cyklů), např. fetch, decode, execute, store • každý cyklus sestává z posloupnosti elementárních akcí – mikro-operací • mikro-operace (příklady): • přesun mezi registry • přesun mezi registrem a sběrnicí (k paměti) • jednoduchá ALU operace
Funkce řadiče Řadič zajišťuje v podstatě dva úkoly: • zpracování mikro-operace ve správném pořadí jak vyžaduje prováděný program • generování řídících signálů, které pro každou mikro-operaci způsobí její vykonání Řídící signály spouští otevírání a zavírání logických hradel vykonávajících mikro-oper.
Základní schema řadiče(direktivní řadič) instrukce řídící signály řadič hodinový signál
Základní schema řadiče(zpětnovazební řadič) instrukce řídícísignály řadič hodinovýsignál vnějšípříznaky zpětnávazba
Návrh řadiče • hard-wired • řadič je vlastně kombinační obvod z log. hradel • provádění všech instrukcí (opkódů) je natvrdo zadrátováno • vyšší rychlost, méně prvků, typické pro RISC • microprogrammed • logika řadiče je určena mikroprogramem • mikroprogram = sekvence příkazů ve speciálním mikroprogramovacím jazyce • každý příkaz jazyka specifikuje mikro-operaci • větší flexibilita, typické pro CISC
Provádění mikrokódu • Dekódování operačního kódu instrukce • Vyzdvihování mikroinstrukcí z řídící paměti • Control address register najde mikroinstrukci, která se má vykonat • Microinstruction registr přijme tuto instrukci a adresu následující mikroinstrukce • Mikroinstrukce je vykonána • Adresa další mikroinstrukce je použita pro vyhledání další • Jsou-li vykonány všechny mikroinstrukce, načte se další konvenční instrukce. Ne-li, vykonávají se další mikroinstrukce • Podmíněné skoky jsou provedeny tak, že je modifikována adresa další mikroinstrukce