Principy počítačů a operačních systémů ZVYŠOVÁNÍ VÝKONU Copak je po jméně? Co růži zvou, i zváno jinak vonělo by stejně. William Shakespeare
Mikroarchitektura Zřetězené zpracování pipelining, pp deep ppp pipelining Současné vykonávání více instrukcí static/dynamic multiple issue Spekulativní provádění instrukcí reakce na problémy s výše uvedeným Instruction set architecture usnadnění realizace výkonné mikroarchitektury
Sériové zpracování
Pipeline
Úspora při použití pipeline Pipeline s k kroky, zpracování n instrukcí. Zrychlení: T S = T s T p = kt nkt nk = + ( n 1) t k + ( n 1) Pro n>>k: S k
Zásadní problém Pipeline zavádí paralelismus Bez ohledu na to, co se děje uvnitř, musí se procesor navenek tvářit striktně sekvenčně
Problémy při proudovém zpracování strukturální hazard hardware nepodporuje danou kombinaci instrukcí současný přístup k prostředku z více stupňů pipeline datový hazard instrukce nemá k dispozici data pro vykonání čeká se na výsledek předchozí instrukce řídící hazard nutno učinit rozhodnutí před vykonáním instrukce načtení následující instrukce po instrukci skoku
Hazardy 1: přístup k datům čtení dat z externí paměti způsobí zpoždění ve fázi fetch
Hazardy 2: závislosti add $r3, $r2, $r1 r3 r2 + r1 sub $r5, $r4, $r3 r5 r4 r3 load decode load op1 1 2 3 4 5 6 7 8 9 i1 i2 i1 i2 i1(r2) i2(r4) load op2 i1(r1) 1) i2(r3) execute i1 i2 store i1(r3) i2(r5)
Hazardy 2: závislosti Řešení: Nedovolit Diagram pipeline p s hranami označujícími závislost Závislost = hrana dopředu v čase Mezi závislé instrukce vložit neškodné Přerovnání instrukcí Vhodné uspořádání Dodání mezivýsledku (forwarding, bypassing) Pozdržení instrukce ( pipeline stall )
Forwarding
Hazardy 3: závislost skoků Loop: add $r3, $r2, $r1 sub $r6, $r5, $r4 beq $r3, $r6, Loop
Hazardy 4: skoky skok si vynutí vyprázdnění pipeline Řešení: multiple streams look ahead / look behind buffer delayed branch branch prediction
paměť skoku Motorola MC88110: cyklická paměť 32 instrukcí při skoku se uloží 2 instrukce z větve asociativní vyhledávání dle adresy
zpoždění skoku odložení skutečného skoku, dokud není zjištěna přesná adresa. Mezitím jsou vykonávány neškodné instrukce nutná spolupráce kompilátoru! RISC 2, SPARC 1 instrukce Mips X, Accel, CDC GaAs 2 instrukce
predikce skoku statická 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 může dělat jak překladač, tak hardware: j p, cykly obvykle skáčí na začátek, jen 1x neskočí
predikce skoku dynamická Jedno pochybení nevadí, druhé změní chování
Superpipelining Vývoj pipeline rozdělení kroků pipeline na menší jednodušší rychlejší (v singulárním případě: procesor s pipeline délky 5 je 5x rychlejší než procesor bez pipeline (pipeline délky 1)): MIPS R4000: 8 kroků ků ( deep pipelining ): i 1. Instruction Fetch (1 st half) 2. Instruction Fetch h(2 nd hlf) half) 3. Register Fetch 4. Data Cache Access (1 st half) 5. Data Cache Access (2 nd half) 6. Tag Check 7. Write Back
Vývoj pipeline Superscalar pipelining více paralelních částí pipeline: RISC System/6000: větvení (fork) )po dekódování: různé cesty v pipeline pro integer a floating-point dnes někdy i více celých pipeline
Vývoj pipeline Dynamic pipeline přeplánování problematických částí: fetch and decode unit functional units (5-10) commit unit
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
Statistika užívání instrukcí (IBM/360) skupina zastoupení přesuny dat 45,28% řízení 28,73% aritmetika ik 10,75% porovnávání 5,92% logické operace 3,91% posuny, rotace 2,93% bitové operace 2,05% I/O a ostatní 0,43%
Další pozorování 56% konstant je v rozsahu ±15 (5 bitů) 98% konstant je v rozsahu ±511 (10 bitů) 95% podprogramů potřebuje pro předání parametrů méně než 24 bytů
Výzkum DEC V typickém programu bylo použito 58% instrukční sady pro 98% instrukcí stačilo pouhých 15% firmware
Instrukční sady do 80. let trend rozšiřovat a budovat komplexní sady stovky instrukcí v souboru, nejrůznější varianty 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ší
MIPS 80. léta, John Hennessy Stanford University Stanford silný v kompilátorech vývoj procesoru, jehož architektura by vyjadřovala snížení kompilátoru na úroveň HW (místo obvyklého povyšování HW na úroveň SW)
CISC vs RISC CISC Coplex 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 Implementace pomocí mikrokódu se dá snadno změnit
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 dnávrh obvodového řešeníš í silná závislost na kompilátoru
Pokus o definici RISC N.J.Davis: omezená a jednoduchá instrukční sada velké množství obecných registrů důraz na optimalizaci pipelinep Colwell: provádění instrukcí v 1 taktu architektura load/store hardwired ddesign relativně málo instrukcí a způsobů adresování pevný formát instrukcí větší význam kompilátoru
První procesory typu RISC Výzkumné systémy: MIPS (Stanford) RISC 1, RISC 2 (Berkeley) IBM-801
RISC typičtí představitelé Desktop/Server: Alpha (Digital) PA-RISC (Hewlett-Packard) PowerPC (IBM + Motorola) MIPS (Silicon Graphics) SPARC (Sun Microsystems)
RISC typičtí představitelé Embedded systems: ARM (Advanced RISC Machines) Thumb (Advanced RISC Machines) SuperH (Hitachi) M32R (Mitsubishi) MIPS16 (Silicon Graphics) Web Extension I: Survey of RISC Architectures
Alpha MIPS I PA-RISC 1.1 PowerPC SPARC V8 Date announced 1992 1986 1986 1993 1987 Instruction size (bits) 32 32 32 32 32 Address space 48 bits, 64 bits, flat 32 bits, flat (size, model) segmented 32 bits, flat 32 bits, flat Data alignment Aligned Aligned Aligned Unaligned Aligned Data addressing 1 modes 1 5 4 2 Protection Page Page Page Page Page Minimum page size 8 KB 4 KB 4 KB 4 KB 8 KB I/O Memory mapped Memory mapped Memory mapped Memory mapped Memory mapped Integer registers 31 GPR 31 GPR 31 GPR 32 GPR 31 GPR (number, model, x 64 bits x 32 bits x 32 bits x 32 bits x 32 bits size) Separate 31 x 32 or 16 x 32 or 56 x 32 or 32 x 32 or 32 x 32 or floating-point 31 x 64 bits 16 x 64 bits 28 x 64 bits 32 x 64 bits 32 x 64 bits registers Floating-point format IEEE 754 single, IEEE 754 single, double double IEEE 754 single, double IEEE 754 single, double IEEE 754 single, double
Návrh procesoru 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ěď! Kvantitativní přístup: porovnat velikosti programů a rychlost provádění Kvalitativní přístup: vyhodnotit podporu vyšších programovacích jazyků a schopnosti technologií Problémy: žádné dva procesory RISC a CISC nejsou přímo porovnatelné tlé není konečná sada testovacích programů obtížné odlišit vliv HW a vliv kompilátoru 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 schopné vykonávat v 1 taktu více instrukcí, 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é ztěchto kategorií (přesto si RISC 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 Beyond RISC The Post-RISC Architecture (1996)
Přechod RISC Post-RISC
Nové komponenty: predecode unit renaming registers reorder buffer retire unit generic post-risc
Nové komponenty: predecode unit renaming registers reorder buffer retire unit cí he) Vyrovnáva paměť (cach LOAD STORE Paměť Predekódování 1 Vyrovnávací paměť instrukcí Fetch/Flow Decode/Branch 3 Dispatch Reorder Buffer Exekuční jednotky BRANCH Completed Instruction Buffer 6 1 2 4 5 generic post-risc Retire Unit 6
Predecode unit, I-cache instrukce načítány po blocích částečné dekódování zjistí vlastnosti instrukcí a uloží je do vyrovnávací paměti instrukcí dodatečné příznaky určují: identifikaci skoků typ potřebné exekuční jednotky zda bude instrukce potřebovat paměť
příklad záznamu v I-cache ve vyrovnávací paměti uloženo: blok instrukcí historie skoků predekódované příznaky historie vykonávání bloku
fetch / flow načítání z I-cache musí být chytré záznam v I-cache ukazuje na další blok instrukcí ukáže-li se odkaz jako špatný, je změněn
decode / branch vlastní dekódování instrukce rozdělení na dva proudy do doby, než je znám skutečný cíl skoku barvení instrukcí
Barvení instrukcí
Výsledky z Branch Unit Fetch/Flow Unit aktualizace flow history načtení správných instrukcí Branch/Decode Unit aktualizace branch history Dispatch and Reorder Buffer zahození instrukcí, které se nemají vykonat Completed ltdinstruction ti Buffer Bff zahození instrukcí, které se neměly vykonat
Instruction Dispatch and Reorder Buffer dekódované instrukce čekají na provedení k provedení dojde, jsou-li k dispozici vstupní hodnoty výstup exekuční jednotka přednost mají starší instrukce instrukce load
Datové závislosti při přerovnání True data dependency RAW (Read after Write) výstup instrukce je použit jako vstup následující Output dependency WAW (Write after Write) dvě instrukce zapisují na stejné místo Anti-dependency WAR (Write after Read) zatímco jedna instrukce zpracovává data, další instrukce tato data změní (WAW a WAR lze vyřešit přeznačením)
Eliminace WAW MOVE r3, r7 ADD r3, r4, r5 MOVE r1, r3 MOVE r3, r7 ADD r8, r4, r5 MOVE r1, r8
out-of-order execution
out-of-order execution
execution units podobně jako u RISC jednotky, které nepočítají v 1 cyklu, použijí pipeline jednotky load/store obvykle umožňují rozpracovat více přístupů najednou
Completed Instruction Buffer, Retire Unit ukládání vykonaných instrukcí, spolu s: příznakem vygenerované výjimky mapováním (přejmenováním) použitých registrů Retire unit odebírá instrukce z bufferu: v takovém pořadí, v jakém by byly sekvenčně zpracovány může uvolnit v 1 taktu více instrukcí
Problém výjimky při výskytu výjimky musí procesor zastavit činnost na tomto místě instrukce, které mají být vykonány až po této instrukci, nesmí ovlivnit stav stroje nesmí existovat nezpracované instrukce ležící před touto instrukcí všechny výjimky způsobené ů předchozími ř dh iinstrukcemi i jsou vyřízeny precizní přerušení/výjimka
RISC vs post-risc RISC: výkon je dán stupněm paralelismu post-risc: výkon je dán počtem najednou odkládaných instrukcí
Představa proudové linky u post-risc Fetch Decode Vyrovnávací paměť jednotky přidělování instrukcí Execute Vyrovnávací paměť odkládací jednotky Instrukce Retire
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 )
DEC Alpha 21164 používá pouze minimum z návrhu post-risc vysoký základní hodinový kmitočet predikce skoku tabulka historie skoků obecně nepoužívá spekulativní provádění instrukcí (pouze některé mimo pořadí) nemá precizní přerušení
DEC Alpha 21164 21164 Instruction Cache Instruction Fetch Decode Branch Integer Integer FP FP Slučovací logika Vyrovnávací paměť dat 40-bit adresa Paměť Bus Vnější Cache Interface vyrovnávcí 98 kb Unit paměť 128-bit data
SUN UltraSPARC více RISC než Post-RISC instrukce v balíku po 4 vicache I-cache 2 záznamy pro branch history mezi fetch a dispatch je fronta 12 instrukcí některé instrukce odkládány out-of-order 2xINT ALU, 5xFP ALU 9 Load, 8 Store buffer fast context switch, traps, motion estimation
SUN UltraSPARC
MIPS R10000 exceptionally Post-RISC zaměřený na grafiku a floating-point plně 4cestně superskalární architektura 64k dvoucestná cache on chip tři plánovací fronty (pro 5 pipeline) nemá flow prediction, branch prediction klasické shadow map ukládání mapy registrů před skokem branch resume cache ukládání instrukcí
MIPS R10000
HP PA-8000 (PA-7000 typický RISC, PA-8000 zcela jinak) IRB pro 56 instrukcí (28 aritm. + 28 memory) velká SRAM cache off chip plně asociativní BTAC (Branch Target Address Cache) pro predikci toku instrukcí (32) inside CPU možnost vypnout dynamic branch prediction
HP PA-8000
PowerPC 604 čtyřcestný superskalární návrh predikční mechanismus vyrovnávací paměť cílových adres (BTAC) tabulka historie větvení (BHT, dvoubitová) přejmenovávané registry, registry podmínkových kódů rezervační stanice pro exekuční jednotky speciální jednotka pro "branch-on-counter"
PowerPC 604 Time Base Fetcher Instruction Queue (8 words) INSTRUCTION UNIT 64 BTAC Branch Processing Unit Rename Buffers CTR 128 / IMMU Clock Multiplier JTAG 128 Dispatch Unit BHT 128 Reservation Station (2 Entry) Multiple l Cycle Integer Unit + - * / 32 / Reservation Station (2 Entry) Single Cycle Integer Unit + - * / 32 GPR File Rename Buffers (8) 32 Reservation Station (2 Entry) FPR File 32 Rename Buffers (8) Load/Store 64 Unit 64 EA Calculation Reservation Station (2 Entry) Floating Point Unit + - * / COMPLETION UNIT 32 Tags 16 kbyte Cache 16 Entry Reorder Buffer Finish Load Queue / 32 DMMU Tags 16 kbyte Cache Bus Interface Unit 32-bit Address Bus 64-bit Data Bus
Intel Pentium P6 instrukční sada CISC interpretována mikrooperacemi na jádře post-risc instrukce rozkládány na mikroinstrukce pipeline provádí mikroinstrukce třícestný superskalární návrh spekulativní provádění
P6 block diagram Bus Interface Unit L1 I-Cache L1 D-Cache Fetch/Decode Unit Dispatch/ Execute Unit Retire Unit Instruction Pool
P6 6detailed edstructure ucue System Bus (External) L2 Cache Bus Interface Unit Instruction Fetch Unit Instruction Cache Next IP Unit Simple Instruction Decoder Instruction Decoder Simple Instruction Decoder Complex Instruction Decoder Branch Target Buffer Microcode Instruction Sequencer Memory Reorder Buffer Register Alias Table Retirement Unit Reorder Unit (Instruction Pool) Retirement Register File (IA Registers) Data Cache Unit Reservation Station FP FP Integer Integer Unit Unit Unit Unit Memory Interface Unit Internal Buses
odbočka Intel Pentium Pipelines
P6 Pipeline
Proudová linka v P6 Reservační stanice a exekuční jednotky Vyrovnávací paměť cílů větvení Jednotka vyzvednutí instrukcí Dekódování instrukcí Přejmenování registrů a změna uspořádání Port0 Port1 Odkládací jednotka BTB0 BTB1 IFU0 IFU1 IFU2 ID0 ID1 RAT ROB RS Port2 ROB RRF Port3 Členění proudové linky Port4 Dvě paralelní linky proudového zpracování X1 X2 WBF Pohyblivá řádová čárka PF D1 D2 EX WB Pevná řádová čárka MR/W Mex MW/M M WBM MMX
Bus Interface Unit
Fetch Unit
Dispatch/Execute Unit
Execution Units
Retire Unit
Dekódování makroinstrukcí maximálně tři makroinstrukce na jeden cyklus maximálně šest mikrooperací na jeden cyklus makroinstrukce kce může být max. 7 bytů a dekóduje se : operace registr/registr 1 μop operace load 1 μop operace store 2 μop operace read/modify/write 4 μop p složitější makroinstrukce mají více než 4 μop a potřebují více cyklů na dekódování
Dataflow CPU vs Post-RISC