Osnova přednášky Procesory využívající ILP. Dynamická predikce skoku. Zpracování komplexních instrukcí v pipeline



Podobné dokumenty
Principy překladačů. Architektury procesorů. Jakub Yaghob

Pokročilé Architektury Procesorů

Proudové zpracování instrukcí II. Hazardy v proudovém zpracování Proudové zpracování FP instrukcí

Principy počítačů a operačních systémů

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

Proudové zpracování instrukcí I. Celočíselná pipeline RISC

Architektury CISC a RISC, uplatnění v personálních počítačích

Architektury VLIW M. Skrbek a I. Šimeček

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Řetězené zpracování. INP 2008 FIT VUT v Brně

Architektura počítačů Zvyšování výkonnosti

Procesor. Procesor FPU ALU. Řadič mikrokód

Charakteristika dalších verzí procesorů v PC

Pokročilé architektury počítačů

Základní typy procesorů, principy zřetězeného zpracování, plnění fronty instrukcí.

Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/

Sekvenční logické obvody

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

Kvadratické rovnice pro učební obory

Architektura počítačů Zvyšování výkonnosti

Techniky zvýšení výkonnosti procesoru, RISC a CISC procesory

Nerovnice s absolutní hodnotou

Intel (2) Intel (1) Intel (3) Intel (4) Intel (6) Intel (5) Nezřetězené zpracování instrukcí:

Vítězslav Bártl. březen 2013

Struktura a architektura počítačů

Část 1 ZÁKLADNÍ RYSY VÝPOČETNÍ PROSTŘEDKŮ DOSTUPNÝCH NA IT4INNOVATIONS

Principy počítačů I ZVYŠOVÁNÍ VÝKONU PROCESORŮ. Sériové zpracování. Pipeline. Úspora při použití pipeline. Problém 1: přístup k datům.

Přednáška. Strojový kód a data. 4. Přednáška ISA J. Buček, R. Lórencz

Úvod do architektur personálních počítačů

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

2010/2011 ZS. operačních systémů. Copak je po jméně? Co růži zvou, i zváno jinak vonělo by stejně. William Shakespeare

Struktura a architektura počítačů (BI-SAP) 12

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Procesory, mikroprocesory, procesory na FPGA O. Novák, CIE 11 1

PROCESOR. Typy procesorů

( ) Kreslení grafů funkcí metodou dělení definičního oboru I. Předpoklady: 2401, 2208

Technické prostředky počítačové techniky

Pokročilé architektury počítačů

Assembler RISC RISC MIPS. T.Mainzer, kiv.zcu.cz

Pokročilé architektury počítačů

( ) Neúplné kvadratické rovnice. Předpoklady:

Operační systém teoreticky

Signály Mgr. Josef Horálek

2.8.9 Parametrické rovnice a nerovnice s absolutní hodnotou

PŘÍRUČKA K POUŽÍVÁNÍ APLIKACE HELPDESK

Architektura AMD K10. Kozelský Martin, koz230. Datum:

RISC a CISC architektura

Operační systémy. Přednáška 8: Správa paměti II

STEREOMETRIE. Vzdálenost bodu od přímky. Mgr. Jakub Němec. VY_32_INOVACE_M3r0113

Převodník DL232. Návod pro instalaci. Docházkový systém ACS-line. popis DL232.doc - strana 1 (celkem 5) Copyright 2013 ESTELAR

Principy počítačů a operačních systémů

IMPORT A EXPORT MODULŮ V PROSTŘEDÍ MOODLE

Kvadratické rovnice pro studijní obory

Luděk Matyska. Jaro 2015

Čítače e a časovače. v MCU. Čítače a časovače MCU. Obsah

9.2.5 Sčítání pravděpodobností I

( ) ( ) ( ) 2 ( ) Rovnice s neznámou pod odmocninou II. Předpoklady: 2715

Identifikátor materiálu: ICT-1-12

6. Procesory jiných firem... 1

Operační paměti počítačů PC

Petr Havíček HAV319. Rodina procesorů Intel Nehalem (historie a vývoj)

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013

{ } Kombinace II. Předpoklady: =. Vypiš všechny dvoučlenné kombinace sestavené z těchto pěti prvků. Urči počet kombinací pomocí vzorce.

E-ZAK. metody hodnocení nabídek. verze dokumentu: QCM, s.r.o.

SWI120 ZS 2010/ hookey.com/digital/

Procesor. Základní prvky procesoru Instrukční sada Metody zvýšení výkonu procesoru

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

PNG (Portable Network Graphics)

Provádění instrukcí. procesorem. Základní model

Pohled do nitra mikroprocesoru Josef Horálek

Architektura počítačů

PŘÍLOHA č. 2B PŘÍRUČKA IS KP14+ PRO OPTP - ŽÁDOST O ZMĚNU

Procesor z pohledu programátora

Vícejádrový procesor. Dvě nebo více nezávislých jader Pro plné využití. podporovat multihreading

Vývoj architektur PC 1

4.2.7 Voltampérová charakteristika rezistoru a žárovky

Architektura počítače

Výsledky testování školy. Druhá celoplošná generální zkouška ověřování výsledků žáků na úrovni 5. a 9. ročníků základní školy. Školní rok 2012/2013

2.7.2 Mocninné funkce se záporným celým mocnitelem

Kubatova Y36SAP 9. Strojový kód ISA architektura souboru instrukcí střadačově, zásobníkově orientovaná, GPR Kubátová Y36SAP-ISA 1

PAVIRO Zesilovač PVA-2P500

Historie výpočetní techniky Vývoj počítačů 4. generace. 4. generace mikroprocesor

Číselné soustavy Ing. M. Kotlíková, Ing. A. Netrvalová Strana 1 (celkem 7) Číselné soustavy

CHARAKTERISTIKA MODERNÍCH PENTIÍ. Flynnova klasifikace paralelních systémů

PROVÁDĚCÍ PŘEDPIS K BURZOVNÍM PRAVIDLŮM

Struktura a architektura počítačů (BI-SAP) 7

Intel Procesor a jeho konstrukce. Vývojové typy, činnost procesoru

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Postup práce s elektronickým podpisem

JEDNACÍ ŘÁD FORMÁTOVÉHO VÝBORU NÁRODNÍ DIGITÁLNÍ KNIHOVNY

Klientský formát POHLEDÁVKY platný od

Identifikátor materiálu: ICT-1-06

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

CHARAKTERISTIKA PROCESORU PENTIUM První verze:

Změny v právních předpisech s dopady na RÚIAN. Marika Kopkášová

Paměti EEPROM (1) Paměti EEPROM (2) Paměti Flash (1) Paměti EEPROM (3) Paměti Flash (2) Paměti Flash (3)

Architektury CISC a RISC, uplatnění v personálních počítačích - pokračování

Architektury CISC a RISC, uplatnění rysů architektur RISC v personálních počítačích - pokračování

Transkript:

Pokročilé architektury procesorů II. Dynamická predikce skoku a plánování instrukcí Spekulativní provádění instrukcí Pipelining CISC procesorů a přesné přerušení Ing. Miloš Bečvář Osnova přednášky Zvýšení výkonnosti ILP techniky Snížení IC VLIW (více paralelních operací v jedné instrukci) Snížení CPIpipe_ideal pomocí paralelním prováděním více instrukcí superskalární proc. Snížení clk superpipelining (více stupňů pipeline) a rychlejší technologie CPU = IC * (CPI pipe_ideal + Stalls Per Instr) * clk Překrytí pozastavování (stallů) užitečným výpočtem dynamické plánování, dynamická predikce skoku, spekulativní provádění instrukcí Procesory využívající ILP Superpipelinové procesory Velký počet stupňů pipeline umožňuje dosáhnout krátkého clk CPI bývá horší v důsledku latencí v pipeline a paměťovém subsystému Statické superskalární procesory (static, in-order superscalar) Zpracovávají více instrukcí paralelně ale v programovém pořadí ypická šířka 3-4 instrukce Velmi závislé na kvalitním překladači VLIW procesory Instrukce obsahuje více paralelních operací Hazardy detekuje a řeší překladač (téměř výlučně) Šířka instrukcí typicky 6-10 paralelních operací Dynamické superskalární procesory (dynamic, out-of-order superscalar) Zpracovává více instrukcí paralelně i mimo programové pořadí Dnes typicky podporuje spekulativní provádění instrukcí za skokem a někdy i spekulativní provádění Load/Store instrukcí Zpětná kompatibilita a vysoká výkonnost? Řešení založené na překladači nepomohou tam, kde máme velké množství programů, kde rekompilace není pravděpodobná či vůbec možná Zvětšení šířky pipeline (superscalar) nebo hloubky (superpipeline) zvyšují Stalls Per Instruction (SPI) Potřebujeme HW techniky na snížení SPI =>Potřebujeme predikci skoku ke snížení pozastavování kvůli skokům => Potřebujeme překrývat pozastavování kvůli RAW hazardům užitečným výpočtem jiných instrukcí provádění instrukcí mimo pořadí (dynamické plánování) => Potřebujeme pokračovat vykonávat instrukce i když všechny hazardy nebyly ještě rozpoznány a vyřešeny - spekulativní provádění instrukcí yto techniky snižují CPI (zvyšují IPC=1/CPI) ale mohou zvýšit clk Osnova přednášky

Predikce Skoku Instr. Fetch IF ID RF EX 1 EX N WB Instr. Decode Frontend Pipeline FRONA INSR. Reg. Fetch Execute Stages Backend Pipeline Write Back U SUPER-SUPER procesorů je problém s latencí skoku. Nelze to vyřešit rozšířením delay slotu (to je častým řešením u VLIW) a proto se používá PREDIKCE skoku. Frontend načítá instrukce podle predikce a ukládá je do fronty. Backend provádí instrukce a verifikuje predikci. V případě chybné predikce vypláchneme všechny chybně načtené instrukce z pipeline (včetně zmíněné fronty) Penalizace za chybnou predikci skoku = délka pipeline Pokud instrukce za skokem jsou provedeny dříve než je ověřena jeho predikce, hovoříme o tzv. spekulativním provádění instrukcí. Dynamická predikce skoku Predikce může být Statická (v době překladu, zakódována v instrukci) nebo Dynamická (za běhu v HW) Predikce je užitečná pouze pokud cílová adresa skoku je známa dříve než výsledek podmínky (to platí pro nejčastější PC-relativní skoky) Je dynamická predikce skoku lepší než statická? - Zdá se, že ano. Nejlepší statická predikce skoku na bázi profilování kódu dosahuje přesnosti kolem 90 % pro FP programy a 70-90 % for celočíselné programy (měření SPEC). o není dostatečné pro superskalární procesory. - Dynamické prediktory často vyžaduje zahřívací dobu než se stabilizuje na správné predikci. Statická predikce (je-li správná) tuto nevýhodu nemá. Dynamická predikce je jedinou možností pokud nemůžeme změnit ISA a chceme vyšší výkonnost ze starých programů, které nelze rekompilovat. 1-bitová Branch History able (BH) v Pipeline +4 Instruction Fetch Stage 31 PC 0 Instruction Cache Pipeline Registers (IF/ID) 31 PC 0 31 IR 0 16 PC (11:0) 32 12 Branch Displacement Instruction Decode Stage BH 4096 x 1 bit Instruct. Decode + aken / Not aken (1 bit) Branch arget Address 32 It is a branch Change PC! 1-bitová Branch History able Nižší bity PC adresují tabulku 1-bitových hodnot BH indikuje zdali skok naposledy byl nebo nebyl proveden Kompletní adresa PC není kontrolována u BH (s chybnou predikcí se počítá) Problém: v cyklu, 1-bitová BH bude mít dvě chybné predikce (průměrný cyklus má 10 iterací => 20 % neúspěšnost predikce): V poslední iteraci (BH predikuje pokračování cyklu místo ukončení) V první iteraci když cyklus provádíme znovu (BH predikuje ukončení cyklu místo pokračování) Not aken Not aken instr_before_loop Predict Predict. Not aken. aken aken.. BNEZ R1, LOOP instr_after_loop Looping aken Graf přechodů jednobitové predikce skoku Next time executing this code including loop 2-bitová Branch History able Řešení: 2-bitová schemata kde se predikce mění až po dvou chybných predikcích Dvě implementační varianty (výkonnost podobná). (11) Predict Strongly aken N Saturační čítač (11) Predict Strongly aken N Hystereze (10) Predict Weakly aken (10) Predict Weakly aken N (01) Predict Weakly Not aken N (01) Predict Weakly Not aken N N (00) Predict Strongly Not aken (00) Predict Strongly Not aken Nevýhoda 2-bitového prediktoru vůči 1-bitovému - delší doba zahřívání N N Shrnutí dynamické predikce skoků 2-bitový prediktor je základem složitějších technik predikce využívající lokální a globální historii skoků Nevýhoda predikce skoku je nutné zpoždění kvůli dekódování instrukce a výpočet cílové adresy skoku (ztrácíme i při úspěšné predikci nejméně jeden takt a neumíme předpovídat počítané skoky instrukce JR) Agresivnější technikou je predikce cílové adresy skoku založené na Branch arget Address Caches (BAC), Branch arget Instruction Caches (BIC) a Return Address Stack (RAS) umožňuje implementovat tzv. zero cycle branches Pokročilé procesory kombinují několik technik predikce k docílení více než 90 % úspěšnosti predikce skoku => Vysvětlení BAC, BIC a RAS je v doplňkovém výukovém materiálu (pro zájemce).

Osnova přednášky Přidání komplexnějších instrukcí k DLX Chceme přidat následující instrukce k DLX 1. LW Rd, (Rs + Rt) Reg(Rd)=Mem(Reg(Rs)+Reg(Rt)) 2. SW (Rs + Rt), Rd Mem(Reg(Rs)+Reg(Rt))=Reg(Rd) 3. LW Rt, Imm(Rs)! Reg(Rt)=Mem(Imm+Reg(Rs)); Reg(Rs)=Reg(Rs)+Imm 4. SW Imm(Rs)!,Rt Mem(Imm+Reg(Rs)) =Reg(Rt); Reg(Rs)=Reg(Rs)+Imm Přidané instrukce v DLX pipeline ID stage LW Rd, (Rs+Rt) busa= Reg[Rs] busb= Reg[Rt] SW Rd, (Rs + Rt) busa=reg[rs] busb=reg[rt]??? = Reg[Rd] LW Rt, Imm(Rs)! busa= Reg[Rs] ImmExt = Imm SW Imm(Rs)!, Rt busa = Reg[Rs] busb = Reg[Rt] ImmExt<= Imm EX stage S= busa + busb S= busa + busb S = busa + ImmExt M=Mem(S) Reg[Rt]=M Reg[Rs]=S S = busa + ImmExt Mem(S)=busB Reg[Rs]=S MEM stage M=Mem(S) Mem(S) =??? WB stage Reg[Rd]=M 1.a 4. instrukce může být přidána do procesoru beze změny struktury pipeline. Instrukce SW Rd, (Rs + Rt) vyžaduje tři čtecí porty ve stupni ID Instrukce LW Rt, Imm(Rs)! vyžaduje dva zápisové porty ve stupni WB. yto instrukce jsou užitečné, ale ne tak časté aby se vyplatilo měnit kvůli nim pipeline. Řešením je rozbít tyto instrukce na sekvenci dvou mikroinstrukcí. - Rozbití instrukcí na mikroinstrukce SW (Rs + Rt), Rd nahradíme při dekódování sekvencí 1. add R32, Rs, Rt Reg(R32)=Reg(Rs)+Reg(Rt) 2. sw (R32), Rt Mem(Reg(R32))<=Reg(Rt) LW Rt, Imm(Rs)! nahradíme při dekódování sekvencí 1. addi Rs, Rs, Imm Reg(Rs)=Reg(Rs)+Imm 2. lw Rt, (Rs) Reg(Rt)=Mem(Reg(Rs)) Mikroinstrukce jsou v pipeline přímo proveditelné, R32 je programátorovi nepřístupný registr využívaný mikroinstrukcemi (tzv. microarchitecture scratch-pad register). CISC procesory jsou charakteristické existencí takovýchto registrů. Výsledné instrukce budou provedeny ve dvou taktech. Provádění komplexních instrukcí v pipeline SW (R1+R2), R3 IF ID add R32, R1, R2 sw (R32), R3 ID EX MEM WB Komplexní instrukce stráví více taktů ve stupni ID - V každém taktu je emitována jedna mikroinstrukce Jednoduché RISC instrukce jsou přeloženy na právě jednu mikroinstrukci. EX forwarding of R32 MEM ADD R6, R4, R5 IF stall Dekodér ve stupni ID již musí být sekvenční obvod a procesor musí obsahovat další registry (pro implementaci komplexních instr.). ato technika je používána např. v procesorech PowerPC. WB Pipelining CISC processorů Přímý pipelining komplexních instrukcí je obtížný Nativní CISC pipeline se vyznačuje vícetaktovými stupni (Pokud je třeba, stráví instrukce v daném stupni více taktů). Komplexní adresační módy a dekódování => dodatečná ALU pro výpočet efektivní adresy (Instrukce typu register-memory) Register Memory Pipeline: Fetch Decode- Register Fetch Address Calculation - Memory Execute Write Back) Složitá detekce hazardů, forwarding (instrukce čtou a zapisují data v průběhu provádění) Složité řešení přesného přerušení (schopnost přerušení a restartu uprostřed komplexní instrukce) Používaná řešení jsou unikátní pro každý CISC procesor Alternativou je rozbití komplexních instrukcí do mikroinstrukcí a implementace pipeliningu na úrovni mikroinstrukcí.

Proudový CISC: pipelining mikroinstrukcí Prediction and Fetch Control PC Instruction Cache (unif. Cache) Frontend Pipeline Flush IQueue Instr. Queue µp C Instruction Decoder and µsequencer Control Memory (µinstructions) µinstructions = µoperations = RISC-like instr. Proudově pracující CISC procesory Instrukce jsou překládány na sekvence jedné či více mikroinstrukcí. (CISC instrukce odpovídá obvykle jedné mikronstrukci protože komplexní instrukce se vyskytují v programech zřídka.) Vertikální mikroinstrukce připomínají RISC instrukce Mikronstrukce jsou vykonávány pomocí RISC-like pipeline Osnova přednášky Comb. Log. S1 Comb. Log. S2 Comb. Log. S3 ento přístup byl zvolen u pozdějších modelů CISC počítačů VAX, IBM360, M68030 a též i486 a všechny novější x86. Branches, Calls, Returns,... Microinstruction Pipeline = similar to RISC pipeline ( Backend Pipeline ) ento přístup je základem implementace moderních superskalárních CISC procesorů firem Intel i AMD. Sekvenční zpracování instrukcí - Základní cyklus Provedení Instrukce #1 Načtení Instrukce Dekódování Instrukce est Přerušení Sekvenční sémantika: Procesor zpracovává instrukce sekvenčně v programovém pořadí. Zpracování instrukcí se nepřekrývá. Běh programu může být přerušen pouze na hranici mezi instrukcemi Provedení Instrukce #N HW obsluha Přerušení Sekvenční sémantika vs proudové zpracování Požadavky na korektnost provádění programu 1. Program vypočítá správný výsledek (v souladu se sekvenční sémantikou - stejný jako na procesoru bez pipeliningu) 2. Program generuje stejná přerušení (výjimky) Stav procesoru při přerušení je konzistentní se sekvenční sémantikou provádění instrukcí (stejný jako na procesoru bez pipeliningu ) Splnění požadavků na proudově pracujícím procesoru Ad 1: Instrukce mohou být zpracovávány proudově pokud zabráníme datovým, řídícím a strukturním hazardům..j. respektujeme datové a řídící závislosti v programu. Ad 2: Splnění tohoto požadavku na proudově pracujícím procesoru není obecně zaručeno. Procesor, který má tuto vlastnost je schopen tzv. přesného přerušení (precise interrupt, precize exception). Příklady přerušení (výjimek) Žádost V/V zařízení o obsluhu (I/O device request) Volání služeb OS (Supervisor Call SVC) rasování programu, breakpoint Aritmetické přerušení přeplnění, podtečení, dělení nulou Výpadek stránky (Page Fault) Nezarovnaný přístup k paměti (Misaligned Memory Access) Porušení ochrany paměti (Memory Protection Fault) Nedefinovaná instrukce (Undefined opcode) Chyba HW parita, ECC chyba, pokles úrovně napájení (Machinecheck exception, power down, brownout)

Klasifikace typů přerušení 5 parametrů Synchronní x Asynchronní vůči běhu programu - synchronní způsobené instrukcí (vnitřní přerušení) - asynchronní způsobené externím HW (vnější přerušení) Žádané uživatelem x Vynucené - obsluha uživatelem žádaných je snazší (je možné dokončit instrukci) Maskovatelné x Nemaskovatelné - aritmetické přerušení lze u některých poč. maskovat V rámci instrukce x Mezi instrukcemi - přerušení v rámci instrukce způsobuje nemožnost instrukci dokončit Nutnost návratu po obsluze x Ukončení programu s chybou Přerušení u proudově pracujícího procesoru K přerušení může dojít v každém taktu Současně může dojít k přerušení z více zdrojů Pořadí výskytu přerušení nemusí odpovídat pořadí instrukcí v programu Stav procesoru nemusí být v okamžiku přerušení konzistentní se sekvenční sémantikou vykonávání instrukcí (sekvenčně konzistentní) Řešení je relativně snadné pro přerušení mezi instrukcemi (většina vnějších přerušení a uživatelem žádaná přerušení): 1. Dokončíme provádění rozpracovaných instrukcí (uvedeme procesor do sekvenčně konzistentního stavu) 2. Do pipeline vložíme sekvenci vnitřních instrukcí, která uloží stav PC (příp. i dalších reg.) a spustí obslužnou rutinu přerušení (viz instrukce RAP v DLX) Obtížná je přesná obsluha přerušení v rámci instrukce (většina vnitřních přerušení), která vyžadují návrat po obsluze. Zdroje vnitřních přerušení v celočíselném DLX IF ID EX Výpadek stránky, nezarovnaný přístup, chyba ochrany paměti Nedefinovaná instrukce Aritmetické přerušení (záleží na definici v ISA) MEM Výpadek stránky, nezarovnaný přístup, chyba ochrany paměti WB Nemůže nastat V každém taktu mohou nastat až 4 vnitřní přerušení Příklad programu se vznikem více přerušení LW R1, (R2)-13 MULF F0,F1,F2 ADD R5, R6, R4 VM page boundary???? Procesor má schopnost přesného přerušení pokud: 1. Procesor obsluhuje přerušení v programovém pořadí (to nemusí být shodné s pořadím jejich objevení v pipeline). 2. Stav procesoru při obsluze musí být sekvenčně konzistentní: Instrukce před zdrojem přerušení musí být dokončeny. Instrukce za zdrojem přerušení nesmí změnit stav procesoru nebo paměti. (Provedení instrukce, která je zdrojem přerušení závisí na definici v ISA a typu přerušení.) Missaligned memory access Unsupported instruction Arithmetic overflow Page fault / LB miss Podmínky pro přesné přerušení u proudového zpracování Stupeň potvrzení (commit) v pipeline Stupeň potvrzení (commit) je takový stupeň pipeline, kde platí, že všechna přerušení v pipeline mohou vzniknout nejpozději v tomto stupni. => Po stupni potvrzení již víme, že instrukce dobře dopadne (tj. nedojde k přerušení.) Podmínky pro přesné přerušení 1. Všechny instrukce dorazí do stupně potvrzenív programovém pořadí 2. Instrukce nemění stav procesoru ani paměti před stupněm potvrzení. Principy implementace: Požadavky na přerušení se akumulují ve speciálním stavovém slově, které společně s instrukcí a hodnotou jejího PC postupuje v pipeline až do stupně potvrzení. Procesor testuje přerušení u instrukcí ve stupni potvrzení, přerušení v rámci instrukce jsou potom obsluhována v pořadí jejich vzniku. Obsluha je zahájena zrušením všech instrukcí v pipeline před stupněm potvrzení a dokončení provádění instrukcí za stupněm potvrzení. Obsluha přerušení u celočíselného DLX LW R1, (R2)-13 MULF F0,F1,F2 ADD R5, R6, R4 VM page boundary???? Save WB_PC and trap to service routine IF ID EX IF ID IF Stupněm potvrzení (commit) je stupeň MEM u IntDLX Celočíselný DLX má schopnost přesného přerušení neboť 1. Všechny instrukce dorazí do MEM v programovém pořadí 2. Instrukce nemění stav procesoru ani paměti před stupněm MEM. NOP NOP NOP

Úplný DLX nemá schopnost přesného přerušení 1 2 3 4 5 6 7 8 9 10 Úplný DLX s přesným přerušením 1 2 3 4 5 6 7 8 9 10 Osnova přednášky MULF F1, F4, F6 IF ID MX1 MX2 MX3 MX4 MEM WB MULF F1, F4, F6 IF ID MX1 MX2 MX3 MX4 MEM WB SW 4(R2), R1 ADDF F0, F3, F2 IF ID MX1 AX1 MX2 AX2 AX3 MEM WB Instrukce nedorazí do stupně potvrzení (MEM) v programovém pořadí. Přerušení generované instrukcí MULF nemusí být přesné neboť následující instrukce mohla změnit stav procesoru nebo paměti. Instrukce jsou spouštěny v programovém pořadí, ale dokončeny jsou mimo programové pořadí. (In-order issue, out-of-order completion). Procesor těchto vlastností obecně nemá zaručeno přesné přerušení. SW 4(R2), R1 ID stall ID stall ID IF ID stall EX MEM WB ADDF F0, F3, F2 stall IF stall ID IF MX1 stall MX2 IF IF ID IF AX1 AX2 AX3 Pomocí pozastavení pipeline je možné opět dosáhnout přesného přerušení. Je to ovšem za cenu snížení výkonnosti o cca 20 % (dle simulace na SpecFP92). Možné přístupy k problému přesného přerušení u procesorů a) Některá přerušení příp. vůbec žádná nejsou přesná (definice v ISA) b) Dva módy činnosti: s přesným přerušením a bez něj (rychlejší) c) Kombinované techniky nepřesného přerušení se SW podporou d) HW náročné techniky založené na reorder bufferu, history file a nebo future file. (Nad rámec předmětu X36APS). Dynamické plánování instrukcí = provádění instrukcí mimo pořadí (Out of Order - OoO) Proč v HW za běhu programu? Funguje i pro závislosti nerozpoznatelné v době překladu Jednodušší překladač Program přeložený pro jeden procesor funguje dobře i na jiném Základní myšlenka: Umožnit instrukcím za pozastavením pokračovat: DIVD F0,F2,F4 ADDD F10,F0,F8 SUBD F12,F8,F14 Provádění mimo pořadí = Provádění mimo programové pořadí Nevýhody? Složitost implementace nové typy hazardů, forwarding Implementace přesných přerušení je složité Problémy dynamického plánování? Jak vyřešit WAR a WAW hazardy? mohou nastat a jsou častější Jak vyřešit problém odlišné latence instrukcí? Forwarding kvůli RAW hazardům je obtížnější. Dynamické plánování bylo vyvinuto koncem 60. let dávno před superskalárními a superpipeline procesory (CDC 6600, IBM 360/91) David Patterson, CS252 UCB 2000 Clock Cycle Number Instruction 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 LD F6,34(R2) LD F2,45(R3) MULD F0,F2,F4 IF ID stall M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 MEM WB SUBD F8,F6,F2 IF ID A1 A2 MEM WB RAW DIVD F10,F0,F6 IF ID stall stall stall D1 D2 stall stall stall stall stall stall ADDD F6,F8,F2 IF ID A1 A2 MEM WB WAR DIVD je pozastaven kvůli RAW hazardu vůči MULD, ADDD je provedeno mimo pořadí => F6 je přepsáno novou hodnotou => WAR hazard může nastat Dynamické plánování základní princip Stupeň ID je rozdělen do dvou podstupňů - Issue (vydávání)- instrukce jsou dekódovány, jsou vyřešeny strukturní hazardy a instrukce jsou vloženy do instrukčního okna (rezervačních stanic) kde čekají na své operandy - Dispatch (spouštění)- instrukce které mají připravené operandy zahájí provádění - Instrukce jsou vydávány v (programovém) pořadí ale spouštěny mimo pořadí (Spuštění závisí na tom, kdy jsou operandy k dispozici tzv. datově-řízené plánování) Mezi vydáním a spuštěním čekají instrukce na data různou dobu v rezervačních stanicích (také nazývané instruction pool, instruction issue queue, scheduler, instruction window) Procesory se liší v implementaci stupňů vydávání/spouštění ale používají stejného základního principu (také terminologie se liší) Instrukce čtou a zapisují operandy mimo programové pořadí => WAW a WAR hazardy David Patterson, CS252 UCB 2000

Řešení WAW a WAR hazardů Detekce WAW a WAR hazardů instrukce nemůže být spuštěna pokud je prováděna instrukce zapisující do stejného registru (WAW) a nemůže zapsat data pokud jiná instrukce ještě potřebuje starou hodnotu (WAR) (poprvé použito v CDC6600) - vyřešeno technikou scoreboardingu - scoreboard indikuje stav všech registrů a řídí vydávání/spouštění instrukcí viz např. M88110 NEBO Odstranění WAW a WAR hazardů přejmenování registrů (IBM 360/91) - Každá instrukce dostane přidělen nový cílový fyzický registr, zdrojové registry jsou přejmenovány podle mapovací tabulky Existuje několik odlišných implementací tohoto postupu a je použit ve většině současných superskalárních procesorů (Pentium Pro a pozdější x86, Alpha 21264, MIPS R10K, R12K, IBM Power4, Power5 HP PA RISC 8600 a další,...) - Pokud každá instrukce má unikátní cílový registr, WAW a WAR hazardy nemohou nastat (Vydávání instrukcí je zastaveno až pokud nám dojdou fyzické registry.) Osnova přednášky Dosažení vyšší výkonnosti pomocí spekulace Požadavky na korektnost provádění programu 1. Program vypočítá správný výsledek (v souladu se sekvenční sémantikou - stejný jako na procesoru bez pipeliningu) 2. Program generuje stejná přerušení (výjimky) (stejně jako na procesoru bez pipeliningu ) Postačující podmínky pro dosažení korektnosti provádění programu A. Respektujeme datové závislosti (Instrukce čekají na vyřešení datových závislostí) B. Respektujeme řídicí závislosti (instrukce za skokem není provedena dokud není znám výsledek skoku) Řídicí závislosti => podmíněné datové závislosti C. Implementujeme přesné přerušení. Spekulativní provádění = částečné (dočasné) narušení podmínek A a B, při zachování korektnosti provádění programu (1. a 2.) ypy spekulativního provádění (v současnosti) Řídící spekulace : Instrukce za skokem jsou prováděny před znalostí výsledku skoku (dnes standard) Load / Store spekulace (Dynamic Memory Disambiguation) : Load je proveden před tím než je známa adresa předchozích instrukcí store (např. Itanium, Power 5, Core2) Spekulace vyžaduje dokončení instrukcí v programovém pořadí (kvůli kontrole na korektnost programu) Pokud dojde k chybné spekulaci => nastává zotavení a restart Zotavení a restart je poměrně nákladnou událostí (až desítky ztracených taktů) Dvě HW struktury podporující spekulaci a zotavení - fronty - History Buffer HB - M88110 - Reorder Buffer RB ostatní procesory Nový stupeň v pipeline - dokončení (graduování, potvrzení) : Všechny instrukce jsou při dokončení vyjmuty z HB nebo RB v programovém pořadí a je provedena kontrola správnosti spekulace a výjimky jsou obsluhovány => o zároveň řeší problém přesného přerušení (podmínka 2) Clock cycle 1 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 First iteration Next iteration LF F0,0(R1) (initial mapping) pf1 pf2 pf3 pi1 F0 renamed to pf1 and LF issued pf physical FP reg. pi physical int. reg. Clock cycle 2 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 LF F0,0(R1) pf1 pf2 pf4 pi1 F4 renamed to pf4 and LF dispatched

Clock cycle 3 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 SF 0(pi1), pf4 3 Clock cycle 4 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 Clock cycle 5 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 BNEZ pi2, LOOP 5 LF F0,0(R1) LF F0,0(R1) LF F0,0(R1) pf1 pf2 pf4 pi1 SF issued, LF computes the address pf1 pf2 pf4 pi2 R1 renamed to pi2, SUBI issued, L1 Data Cache miss occured (LF) pf1 pf2 pf4 pi2 BNEZ predicted, SUBI dispatched, LF in progress Clock cycle 6 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 LF F0,0(R1) LF pf5, 0(pi2) 6 pf5 pf2 pf4 pi2 SUBI finished, BNEZ dispatched, F0 renamed to pf5, new LF issued Clock cycle 7 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 ADDF pf4, pf1, pf2 2 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 ADDF pf6, pf5, pf2 7 BNEZ finished (prediction OK), LF dispatched, F4 renamed to pf6, ADDF issued Clock cycle 8 Renamed version Issued Dispatched Finished Graduated LF F0,0(R1) LF pf1, 0 (pi1) 1 2 8 ADDF pf4, pf1, pf2 2 8 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 ADDF pf6, pf5, pf2 7 SF 0(pi2), pf6 8 1st LF finished (L2 cache hit), ADDF dispatched, 2nd LF calculates addr.

Clock cycle 9 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 SF 0(pi2), pf6 8 SUBI pi3, pi2, #4 9 pf5 pf2 pf6 pi3 1st LF graduated, 2nd LF finished (Cache hit), etc. Clock cycle 10 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 SF 0(pi1), pf4 3 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 SF 0(pi2), pf6 8 SUBI pi3, pi2, #4 9 10 BNEZ pi3, LOOP 10 BNEZ predicted and issued Clock cycle 11 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 11 SF 0(pi1), pf4 3 11 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 SF 0(pi2), pf6 8 SUBI pi3, pi2, #4 9 10 11 BNEZ pi3, LOOP 10 11 1st ADDF finished, 1st SF dispatched, SUBI fin., BNEZ disp. Clock cycle 12 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 11 12 SF 0(pi1), pf4 3 11 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 12 SF 0(pi2), pf6 8 12 SUBI pi3, pi2, #4 9 10 11 BNEZ pi3, LOOP 10 11 12 2nd ADDF finished, 2nd SF dispatched Clock cycle 13 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 11 12 SF 0(pi1), pf4 3 11 13 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 12 SF 0(pi2), pf6 8 12 SUBI pi3, pi2, #4 9 10 11 BNEZ pi3, LOOP 10 11 12 1st SF finished Clock cycle 14 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 11 12 SF 0(pi1), pf4 3 11 13 14 SUBI pi2, pi1,#4 4 5 6 BNEZ pi2, LOOP 5 6 7 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 ADDF pf6, pf5, pf2 7 9 12 SF 0(pi2), pf6 8 12 14 SUBI pi3, pi2, #4 9 10 11 BNEZ pi3, LOOP 10 11 12 First two iterations finished within 14 cycles

Clock cycle 21 Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 2 8 11 12 SF 0(pi1), pf4 3 11 13 14 SUBI pi2, pi1,#4 4 5 6 15 BNEZ pi2, LOOP 5 6 7 16 LF F0,0(R1) LF pf5, 0(pi2) 6 7 9 17 ADDF pf6, pf5, pf2 7 9 12 18 SF 0(pi2), pf6 8 12 14 19 SUBI pi3, pi2, #4 9 10 11 20 BNEZ pi3, LOOP 10 11 12 21 -- -- -- -- First two iterations graduated within 21 cycles. Same Example on 4-way Dynamic Superscalar Renamed version Issued Dispatched Finished Graduated ADDF pf4, pf1, pf2 1 8 11 12 SF 0(pi1), pf4 1 11 13 14 SUBI pi2, pi1,#4 1 2 3 14 BNEZ pi2, LOOP 2 3 4 14 LF F0,0(R1) LF pf5, 0(pi2) 2 3 9 14 ADDF pf6, pf5, pf2 2 9 12 15 SF 0(pi2), pf6 2 12 14 15 SUBI pi3, pi2, #4 3 4 5 15 BNEZ pi3, LOOP 3 5 6 15 Note: Simple instruction finished within 6 cycles. ime between prediction of 2nd BNEZ and branch evaluation is 3 cycles (up to 12 instructions issued) Shrnutí příkladu Každá iterace použivá odlišné fyzické registry pro F0, F4 a R1 Provádění iterací se překrývá => de-facto rozbalení cyklu v HW Krátké instrukce dokončeny v průběhu 12 taktů (10 instrukcí) Provádění instrukcí s dlouhou latencí se překrývá s instrukcemi s krátkou latencí i vzájemně Spekulativní provádění : Ulož mapu registrů v době zahájení spekulace (v průběhu vydání instrukce BNEZ), obnov tuto mapu zpět v případě chybné spekulace (je k dispozici např. 4-6 map umožňující spekulovat až do hloubky 4-6 skoků...) Délka překryté latence závisí na počtu fyzických registrů a velikosti reorder bufferu (instrukce je v reorder bufferu mezi issue a graduate) Výkonnost je výrazně zlepšena načítáním, vydáváním a dokončením více instrukcí => superscalar out-of-order CPU Současné procesory kombinace těchto technik 1st generation superscalar : static scheduling, static prediction 2nd generation superscalar : dynamic scheduling, dynamic prediction 3rd generation superscalar : dynamic scheduling, dynamic prediction, speculation, superpipeline Současné superskalární CPU (Pentium 4, MIPS R12K, Power4, PowerPC 620, Alpha 21264...) jsou nejčastěji Superscalar / Superpipeline (SUPER -SUPER) dynamicky plánované spekulativní procesory Staticky plánované a nespekulativní procesory a VLIWy jsou používány v aplikacích méně náročných na výpočetní výkon, zejména ve vestavných aplikacích. Dynamické plánování a spekulace jsou velmi náročné na plochu čipu a spotřebu! Při čtení popisu soudobých komerčních procesorů je důležité se neztratit v odlišné terminologii se spoustou výrazů, které jsou jen marketingem. Nové techniky využití ILP jsou stále ve vývoji (trace caches, value speculations) ale zdá se, že jsme blízko limitu paralelismu rozpoznatelného za běhu pomocí HW. Závěry Byl prezentován přehled technik využívajících ILP ke zvýšení výkonnosti procesoru Superscalar, Superpipeline, VLIW Dynamické plánování = provádění instrukcí mimo pořadí Moderní procesory jsou kombinací těchto technik a dalších specifických optimalizací pro danou ISA. Zdá se, že současné procesory se blíží limitu HW rozpoznatelného a využitelného ILP Budoucnost může přát více kooperaci HW a SW na využití ILP IA-64 (EPIC) nebo využití paralelismu na úrovni vláken na jednom čipu buď formou multithreadingu (Pentium 4 with H) nebo implementaci multiprocesorů na čipu (IBM Power 4, Opteron, Sun Gemini) nebo obou těchto přístupů (Power 5)