Närliggande allokering Datorteknik

Relevanta dokument
Datorarkitekturer med operativsystem ERIK LARSSON

Digitala System: Datorteknik ERIK LARSSON

Digitala System: Datorteknik ERIK LARSSON

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Tentamen den 18 mars svar Datorteknik, EIT070

Datorarkitekturer med operativsystem ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Pipelining i Intel Pentium II

Hantering av hazards i pipelines

Datorarkitekturer med operativsystem ERIK LARSSON

Minnet från processorns sida Datorteknik

Exempeltentamen Datorteknik, EIT070,

Program Datorteknik. Kontrollenhet. Exekvering av en instruktion. Abstraktionsnivå: Högnivåspråk. Assemblyspråk. Maskinspråk.

Datorteknik ERIK LARSSON

TSEA28 Datorteknik Y (och U)

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Datorteknik ERIK LARSSON

Datorsystemteknik DVGA03 Föreläsning 8

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Grundläggande datavetenskap, 4p

TSEA28 Datorteknik Y (och U)

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Datorarkitekturer med operativsystem ERIK LARSSON

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Arm Cortex-A8 Pipeline

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

En något mer detaljerad bild av en processor. De tre delarna i processorn är: Nere 3ll vänster finns e' antal register som används för a' lagra data.

Hantering av hazards i multi-pipelines

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Tentamen i Digitala system - EDI610 15hp varav denna tentamen 4,5hp

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

Datorteknik ERIK LARSSON

Program som ska exekveras ligger i primärminnet. Processorn hämtar instruk7on för instruk7on. Varje instruk7on, som är e= antal 1:or och 0:or, tolkas

Digitala System: Datorteknik ERIK LARSSON

Spekulativ exekvering i CPU pipelining

Hannes Larsson - IDA 2, LTH Campus Helsingborg. NEC V R 4300i. Interlock-handling EDT621

En processor kan ha en klockfrekvens på flera GHz. Det går alltså a9 exekvera en instruk=on väldigt for, givet a9 instruk=onen finns i processorn.

Pipelining i Intel 80486

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Datorteknik ERIK LARSSON

Datorteknik. Tomas Nordström. Föreläsning 2. För utveckling av verksamhet, produkter och livskvalitet.

Datorteknik ERIK LARSSON

Föreläsningsanteckningar 5. Cacheminnen

Processor pipelining genom historien (Intel i9-intel i7)

Moment 2 Digital elektronik. Föreläsning Inbyggda system, introduktion

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

IBM POWER4, den första flerkärniga processorn och dess pipelines.

LABORATION DATORTEKNIK D. Pipelining. Namn och personnummer. Version: (OS,OVA,AN)

Datorteknik ERIK LARSSON

Minnets komponenter. Digitala System: Datorteknik. Programexekvering. Programexekvering. Enhet för utdata. Enhet för indata CPU.

Pipelining i RISC-processorn. Joakim Lindström Institutionen för informationsbehandling Åbo Akademi E-post: jolindst@abo.fi

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

Fetch-Execute. Datorteknik. Pipelining. Pipeline diagram (vid en viss tidpunkt)

Uppgift 1: a) u= a c + a bc+ ab d +b cd

Datorhistorik. Föreläsning 3 Datorns hårdvara EDSAC. Eniac. I think there is a world market for maybe five computers. Thomas Watson, IBM, 1943

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

DatorsystemteknikDAVA14 Föreläsning 9

Datorarkitekturer med operativsystem ERIK LARSSON

Filsystem - Inode. Datorteknik. Minnets komponenter. Programexekvering. Enhet för indata. Enhet för utdata CPU. Primärminne.

Tentamen den 17 mars 2016 Datorteknik, EIT070

Vad bör göras? Steg 1. RISC => pipelining. Parallellism. Pipelining. Nya LDA 13. RISC(reduced instruction set computer) Öka klockfrekvensen

Föreläsningsanteckningar 4. Pipelining

Pipeline hos ARM Cortex-A53 och ARM Cortex-A73

Datorsystem. Exempeltentamen

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

MESI i Intel Core 2 Duo

Parallellism i CDC 7600, pipelinens ursprung

Superscalar Bra: Hårdvaran löser allt: Hårdvara detekterar poten6ell parallellism av instruk6oner Hårdvara försöker starta exekvering (issue) av så

Datorteknik ERIK LARSSON

4. Pipelining. 4. Pipelining

Föreläsningsanteckningar 2. Mikroprogrammering I

Tentamen Datorteknik D del 2, TSEA49

DEC Alpha instruktions Arkitektur

Tentamen. Datorteknik Y, TSEA28

Digitalteknik och Datorarkitektur 5hp

Foto: Rona Proudfoot (some rights reserved) Datorarkitektur 1. Datapath & Control. December

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

HF0010. Introduktionskurs i datateknik 1,5 hp

Fö 8: Operativsystem II. Minneshantering. Minneshantering (1) Minneshantering (2) Minneshantering och Virtuelltminne.

LV6 LV7. Aktivera Kursens mål:

Jämförelse av skrivtekniker till cacheminne

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Snapdragon 810: Cacheminnet

Tentamen den 9 januari 2018 Datorarkitekturer med operativsystem (EITF60)

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

Digitalteknik och Datorarkitektur 5hp

Datorsystem. Tentamen

CDC en jämförelse mellan superskalära processorer. EDT621 Campus Helsingborg av: Marcus Karlsson IDA

Datorarkitekturer med Operativsystem

Läsminne Read Only Memory ROM

Tentamen. Datorteknik Y, TSEA28

Dugga 1 status 41 godkända 39 ej godkända ERIK LARSSON

Institutionen för datavetenskap 2014/15

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Transkript:

Närliggande allokering Datorteknik ERIK LARSSON TID Problem: Minnet blir fragmenterat Paging Demand paging Sida (S) Dela upp primärminnet i ramar (frames) och program i sidor (pages) Program 0 RD.0 1 RD.1 2 RD.2 3 RD.3 1 Logisk adress CPU 111 (S) 2 011 (o) o S SIDTABELL S R 0 3 1 5 2 6 3 1 001 (R) 011 (o) Fysisk adress PRIMÄRMINNE R 3 o Ram (R) 0 Primärminne Data 1 RD.3 2 3 RD.0 4 5 RD.1 6 RD.2 7 Ladda endast de pages som behövs till primärminnet CPU utnyttjande OS tar alltmer tid för att hantera sidfel Grad av multiprogrammering (hur många program som är aktiva)

Virtuellt minne Virtuellt minne Memory Management Unit (MMU) Använd primärminne som cache för sekundärminne (hårddisk) Hanteras med hårdvara och operativsystem Program delar primärminnet Varje program får sin virtuella adressrymd Skyddas från andra program CPU och OS översätter virtuella adresser till fysiska adresser Ett block kallas för sida (page) Miss kallas för sidfel (page fault) Virtuell adress: 20 bitar Sidtabell (page table) Ctrl-bits Frame nr. 0 1 2 20-1 31 bitar 11 bitar Om sidfel (page fault), OS laddar in sida Fysisk adress: 13 bitar 11 bitar Primärminne Frame 0 Frame 1 Frame 2 13-1 24 bitar Dator Programexekvering (1) Hämta instruktion på 00001000 (där PC pekar) (2) Flytta instruktionen 0000101110001011 till CPU Primärminne Instruktioner och data Data/instruktioner Kontroll Central processing unit (CPU) (3) Avkoda instruktionen: 00001 MOVE, 01110001 Adress, 011 Register 3 (4) Hämta data på adress: 01110001 (5) Lagra datan i register 3 instruction instruction Primärminne Address Instruction 00001000 0000101110001011 00001001 0001101110000011 00001010 0010100000011011 00001011 0001001110010011 Data Instruktioner Register CPU Kontrollenhet Aritmetisk Logisk Enhet (ALU)

- Utan pipelining: Tid: 1 2 3 4 5 6 Instruktion 1 Instruktion 2 Instruktion 3 Med pipelining: Tid: 1 2 3 4 Instruktion 1 Instruktion 2 Instruktion 3 Pipelining 6-stegs pipeline: instruction () Decode instruction (DI) Calculate operand address (CO) operand (FO) instruction () Write operand () Tid: 1 2 3 4 5 6 7 8 Instruktion 1 Instruktion 2 Instruktion 3 Pipelining Pipeline diagram (vid en viss tidpunkt) Fler pipeline steg ger bättre prestanda, men Mer overhead att hålla koll på pipeline Komplexare processor Svårt att hålla pipelinen full pga pipeline hazards 80486 och Pentium: Fem-stegs pipeline för heltal (integer) instruktioner Åtta-stegs pipeline för flyttals (float) instruktioner PowerPC: Fyra-stegs pipeline för heltal (integer) Sex-stegs pipeline för flyttal (float)

Pipeline diagram Pipeline kontroll Kontrollsignaler fås från instruktion Kontrollenhet utan pipeline (FÖ1) Z Z in ADD XOR ClearY ALU Y System buss MBR MAR PC Kontrollenhet utan pipeline (FÖ1) Instruktion: ADD R1, R3 // R1 <- R1 + R3 Kontrollsteg: Z out Carry in Y out Y in MBR out MBR in MAR in PC out PC in 1. PC out, MAR in, Read, Clear Y, Carry-in, Add, Z in 2. Z out, PC in R0 out R0 in RN out RN in IR in IR out Kontroll signaler 3. MBR out, IR in R 0 R n IR Klocka Kontrollenhet Statussignaler Carry, overflow MBR out Y in R0 RN out out MAR in MAR out PC in ADD 4. R1 out, Y in 5. R3 out, Add, Z in 6. Z out, R1 in, End

Strukturella hazards Strukturella hazards Resurs (minne, funktionell enhet) behövs av fler än en instruktion samtidigt Instruktionen ADD R4, X R4 <- R4 + X I steget FO hämtas operanden X från minnet. Minnen accepterar en läsning i taget Tid: 1 2 3 4 5 6 7 8 ADD R4, X Vill läsa i minnet! Tid: 1 2 3 4 5 6 7 8 ADD R4, X Penalty: 1 cykel Men här då? Inget problem då instruktionern () använder register Strukturella hazards Data hazards För att minska strukturella hazards öka antalet resurser. Ett klassiskt sätt att undvika hazards vid minnesaccess är att ha separat data och instruktions cache Primärminne Instruktioner och data Cacheminne Kopior av instruktioner Cacheminne Kopior av data Central processing unit (CPU) Register Antag två instruktioner, I1 och I2. Utan pipeline, så är I1 helt färdig innan I2 startar. Men, så är det inte med pipelines. Det kan bli så att I2 behöver resultat från I1 men I1 är inte klar I1: MUL R2, R3 R2 <- R2 * R3 I2: R1 <- R1 + R2 MUL R2, R3 Penalty: 2 cykler Här görs * Här skrivs resultatet till R2 FO STALL DI CO FO CO FO Här vill I2 ha resultat från *

Data Hazards Data Hazards För att minska penalty kan forwarding/bypassing användas Resultat från ALUn kopplas direkt (forward/bypass) till ingångar. Man behöver alltså inte vänta på -steget Ändra ordning på instruktioner (re-schedule) för att undvika att använda resultat från load i direkt följande instruktion C kod: A=B+E; C=B+F; MUL R2, R3 MUX MUX DI ALU CO FO DI CO FO stall stall lw $t1, 0($t0) lw $t2, 4($t0) add $t3, $t1, $t2 sw $t3, 12($t0) lw $t4, 8($t0) add $t5, $t1, $t4 sw $t5, 16($t0) lw $t1, 0($t0) lw $t2, 4($t0) lw $t4, 8($t0) add $t3, $t1, $t2 sw $t3, 12($t0) add $t5, $t1, $t4 sw $t5, 16($t0) 13 cycles 11 cycles Kontroll hazards Kontroll hazards Kontroll hazards uppkommer på grund av hopp (branch) instruktioner Ovillkorliga hopp (unconditional branch) Adress Instruktion Kommentar.. 01011 Instruktion 29 //Instruktion 29, PC=PC+1 01100 BR 10101 // PC = 10101, PC=PC+1 01101 Instruktion 31 //Instruktion 31, PC=PC+1 10101: Instruktion 89 //Instruktion 89, PC=PC+1 01011 Instruktion 29 01100 BR 10101 01101 Instruktion 31 10101: Instruktion 89 BR 10101 Instruktion 31 Här vet vi att det är en hoppinstruktion Penalty: 3 DI CO Instruktion 31 är alltså fel Efter FO är hoppadressen känd FO DI CO FO Här börjar vi med rätt instruktion (instruktion 89)

Kontroll hazards Villkorliga hopp (conditional branch) //R1 <- R1 + R2 BEZ Target //Branch if zero instruktion 31 Target: instruktion 89 Alternativ: Hoppet görs (Branch taken) BEZ Target instruktion 31 Penalty: 3 cykler Här vet vi att det är en hoppinstruktion DI CO FO Instruktion 31 kan vara fel Här görs additionen som påverkar Z-flaggan (om hoppet ska göras eller inte. Här är hoppadressen känd DI CO FO Kan hämta instruktion 89 Kontroll hazards Villkorliga hopp (conditional branch) //R1 <- R1 + R2 BEZ Target //Branch if zero instruktion 31 Target: instruktion 89 Alternativ: Hoppet görs inte (Branch not taken) BEZ Target instruktion 31 Penalty: 2 cykler Här vet vi att det är en hoppinstruktion DI CO FO Instruktion 31 kan vara rätt Här görs additionen som påverkar Z-flaggan (om hoppet ska göras eller inte. Här är hoppadressen känd DI CO FO Instruktion 31 är rätt.. Minska penalties vid hopp Delayed branching Hoppinstruktioner påverkar prestandan av en pipeline Vanligt med hoppinstruktioner: 20%-35% av alla instruktioner är hoppinstruktioner (villkorliga och ovillkorliga) Villkorliga hopp är vanligare än ovillkorliga hopp (mer än dubbelt så många villkorliga hopp som ovillkorliga hopp) Mer än 50% av villkorliga hopp tas Viktigt att minska penalties som uppstår pga hoppinstruktioner Vid villkorliga hopp undersökte vi fallen: hopp görs och görs inte (se tidigare exempel) Alternativ: Hoppet görs (Branch taken) BEZ Target instruktion 31 Penalty: 3 cykler Alternativ: Hoppet görs inte (Branch not taken) BEZ Target instruktion 31 Penalty: 2 cykler DI CO FO DI CO FO DI CO FO DI CO FO

Delayed branching Tanken med delayed branching är att låta processorn göra något istället för att göra stalls Med delayed branching så exekverar processorn alltid den instruktion som kommer efter hoppinstruktionen, och sedan kan programflödet ändra riktning (om nödvändigt) Instruktionen som hamnar efter ett hopp men som exekveras oavsett utgången av hoppet, sägs ligga i branch delay slot Delayed branching Detta har programmeraren skrivit: MUL R3, R4 R3<-R3*R4 SUB #1, R2 R2<-R2-1 R1<-R1+R2 BEZ TAR Branch om zero MOVE #10, R1 R1<-10 Den här instruktionen påverkar inte det som händer fram till hoppet Den här instruktionen exekveras bara om hoppet inte tas Detta är det som kompilatorn (assemblatorn) genererar: Den här instruktionen SUB #1, R2 R2<-R2-1 kommer exekveras oavsett R1<-R1+R2 om hoppet tas eller ej BEZ TAR Branch om zero MUL R3, R4 R3<-R3*R4 Den här instruktionen MOVE #10, R1 R1<-10 kommer exekveras bara om hoppet inte tas Delayed branching Här görs additionen som påverkar Z-flaggan (om hoppet ska göras eller inte). Delayed branching Alternativ: Hoppet görs (Branch taken) BEZ Target DI CO FO MUL R3, R4 DI CO FO Instruktion vid Target DI CO FO Penalty 2 cykler (innan 3) Här är det klart om Alternativ: Hoppet görs inte (Branch not taken) vi ska fortsätta BEZ Target DI CO DI FO CO FO med MOVE. MUL R3, R4 DI CO FO MOVE #10, R1 DI CO FO Penalty: 1 cykler (innan 2) Här är hoppadressen känd Om kompilatorn inte hittar en instruktion att flytta till branch delay slot, så läggs en NOP (no operation) instruktion in. MUL R2, R4 R2<-R2*R4 SUB #1, R2 R2<-R2-1 R1<-R1+R2 BEZ TAR Branch om zero MOVE #10, R1 R1<-10 Nu kan inte MUL flyttas eftersom resultatet påverkar instruktionerna efter I 60%-85% av fallen med hoppinstruktioner, kan en kompilator hitta en instruktion som kan flyttas till branch delay slot

Instruction fetch unit och instruktionskö Branch prediction De flesta processorer har fetch unit som hämtar instruktioner innan de behövs Dessa instruktioner lagras i en instruktionskö Instruktions cache Instruction fetch unit Instruktions kö Resten av pipeline unit kan känna igen hoppinstruktioner och generera hoppadress. Penalty för ovillkorliga hopp minskar. unit kan alltså hämta instruktion enligt hopp. För villkorliga hopp är det svårare då man måste veta om hopp ska tas eller inte I förra exemplet såg vi att i fallet branch not taken där vi fortsatte med nästa instruktion fick följande: Branch penalty:» 1 om branch not taken (prediction fullfilled)» 2 om branch is taken (prediction is not fullfilled) Vi kan anta motsatsen, dvs branch taken. Då gäller följande (se detaljer på nästa slide): Branch penalty:» 1 om branch is taken (prediction fullfilled)» 2 om branch is not taken (prediction is not fullfilled) Branch prediction Antagande (prediction): Nästa instruktion exekveras (inget hopp) Alternativ: Hoppet görs inte (Branch not taken) (om vi gissat rätt!) BEZ Target DI CO FO MUL R3, R4 DI CO FO MOVE #10, R1 DI CO FO Penalty 1 cykler Alternativ: Hoppet görs (Branch taken)(om vi gissat fel!) BEZ Target MUL R3, R4 Instruktion vid target Penalty: 2 cykler DI CO FO DI CO FO DI CO FO Branch prediction Antagande (prediction): Instruktion vid target exekveras (hopp görs) Alternativ: Hoppet görs (Branch taken)(om vi gissar rätt) BEZ Target DI CO FO MUL R3, R4 DI CO FO Instruktion vid Target DI CO FO Penalty 1 cykler Alternativ: Hoppet görs inte (Branch not taken)(om vi gissar fel) BEZ Target MUL R3, R4 MOVE #10, R1 Penalty: 2 cykler DI CO FO DI CO FO DI CO FO

Branch prediction Speculative execution Rätt branch prediction är viktigt Baserat på prediction, kan respektive instruktion hämtas (och näst följande) för att placeras i instruktionskön. När hoppvillkoret är bestämt, kan exekveringen fortsätta (enligt gissningen (prediktering). Om gissningen är fel, måste hämtning av rätt instruktioner göras. För att utnyttja branch prediction maximalt, kan vi påbörja exekveraing innan hoppvillkoret är bestämt spekulativ exekvering Med speculativ exekvering menas att instruktioner exekveras innan processorn vet om det är rätt instruktion som ska exekveras. Om gissningen (spekuleringen) var rätt, kan processorn fortsätta. Annars, för man göra om (hämta rätt instruktion) Branch prediction strategies: Statisk prediktering Dynamisk prediktering Static branch prediction I statisk branch prediktering tas ingen hänsyn till exekverings historiken Statiska tekniker: Predict never taken antar att hoppet inte kommer tas (Motorola 68020) Predict always taken antar att hoppet alltid kommer tas Predict beroende på riktning (Power PC 601):» Predict branch taken för tillbaka hopp» Predict branch not taken för framåt hopp Dynamisk branch prediction I dynamisk branch prediction tas hänsyn till exekverings historik En bit för prediktion Sparar utfall från förra gången hoppinstruktionen användes och man predikterar (gissar) att samma sak ska hända som förra gången. Om hoppet inte togs förra gången, gissar man att man inte tar det (och vice versa) Nackdel: LOOP.. BNZ LOOP När loopen exekverades förra gången, noterades att hoppet inte ska tas. Vid ny exekvering, tas inte hoppet (det är fel gissat). Sedan gissas rätt, fram tills slutvillkor är uppfyllt. Totalt 2 fel. Vid statisk prediction (backwards tas alltid) ges ett fel

Tvåbitars prediktering Branch history table (branch target buffer) Med tvåbitars prediktering görs gissning baserat på de senaste två fallen av en instruktion. Vanligt att ändra gissning (prediction) när man gissat fel två gånger. Not taken Taken 11 Prediction: taken 10 Prediction: not taken Not taken Taken Taken Not taken Not taken 01 Prediction: taken 00 Prediction: not taken Taken LOOP.. BNZ LOOP Antag: 11 för BNZ. Så länge hopp tas är det rätt. Sista gången tas ej hoppet. Tillstånd flyttas till 01 (men prediction samma) Instruktions cache Instruktions adress Adress till hoppinstruktion Target adress Instruction fetch unit Prediction bits Vart hoppinstruktion hoppar, dvs var instruktion finns Instruktions kö Avbryt fetches och börja på rätt adress Uppdatera Skapa ny Pipeline Nej Nej Ja Branch in table? Prediction right? Ja Intel 80486 pipeline Intel 80486 är den sista icke-superscalar processorn från Intel. 80486 är exempel på avancerad non-superscalar pipeline Fem pipeline steg och ingen branch prediction (always not taken) : Instruktioner hämtas från cache och placeras i instruktionskö. Instruktionskön organiserad som två pre-fetch buffrar som opererar operoende av varandra för att hålla prefetch buffert full) Decode1: Tar de 3 första byten i en instruktion avkodar: opkod, adresserings mode och instruktionslängd Decode2: Avkodar resten av instruktionen och producerar kontrollsignaler. Gör adressberäkning. : ALU operations. Cache access för operander. Write back: Updaterar register, status flaggor. ARM pipeline ARM7 pipeline (3-steg) : hämtar instruktioner från cache Decode: Avkodar : Läser register, gör ALU beräkningar och skriver tillbaka svar ARM9 pipeline (5-steg): : hämtar instruktioner från cache Decode: Avkodar : Läser register, gör ALU beräkningar Data memory access: skriver tillbaka svar till/från D-cache Register write: Skriver till register

Fallgropar Karaktärsdrag hos RISC processorer (FÖ2) Pipelining är enkelt Principen är enkel, problemen finns i detaljerna:» T ex detektera kontroll hazards Pipelining är teknologioberoende Varför inte använt pipelining innan?» Mer transistorer gör det möjligt med mer avancerade tekniker Dålig design av instruktionsuppsättning (ISA) kan göra pipelining svårare Komplex instruktionsuppsättning Komplexa adresseringsmöjligheter Enkla och få instruktioner Enkla och få adresseringsmöjligheter Fixt (fast) instruktionsformat Stort antal register Load-and-store architecture Karaktärsdrag hos RISC processorer Delayed load problem Load-and-store architecture: Endast LOAD och STORE instruktioner refererar data i minnet (primärminnet). Alla andra instruktioner opererar enbart på register (register-till-register instruktioner). Alltså, endast ett fåtal instruktioner behöver mer än en klockcykel för att exekvera (efter fetch och decode) Pipeline vid minnesreferenser: DI CA TR LOAD och STORE instruktioner refererar data i minnet (primärminnet). Alla andra instruktioner opererar enbart på register (register-till-register instruktioner). LOAD och STORE instruktioner hinner inte bli exekverade på en klockcykel. LOAD R1, X ADD R2, R1 ADD R4, R3 DI CA TR Här är R1 tillgängligt CA: Compute adress, TR: Transfer

Delayed load problem Delayed load problem Två alternativ: Hårdvaran gör delay (stall) av instruktioner som följer efter LOAD Kompilatorn ändrar ordningen genom delayed load (jämför med delayed branching) Med delayed load exekveras alltid instruktionen som följer en LOAD instruktion (inget stall). Det är programmerarens (kompilatorns) ansvar att se till att instruktionen direkt efter LOAD inte behöver just det värde som laddas. Om programmet är: LOAD R1, X ADD R2, R1 ADD R4, R3 SUB R2, R4 Genererar kompilatorn: LOAD R1, X ADD R4, R3 ADD R2, R1 SUB R2, R4 DI CA TR DI CA TR Här är R1 tillgängligt Här används R1 Här är R1 tillgängligt Här används R1 Delayed load problem Om programmet är: LOAD R1, X ADD R2, R1 ADD R4, R2 SUB R4, X Genererar kompilatorn: LOAD R1, X NOP ADD R2, R1 ADD R4, R2 STORE R4, X DI CA TR DI CA TR Här är R1 tillgängligt Här används R1 Här är R1 tillgängligt Om kompilatorn inte hittar en instruktion, tas en NOP (no operation) instruktion Här används R1 DI CA TR Sammanfattning Instruktioner exekveras som en sekvens av steg; t ex instruction (), Decode instruction (DI), Calculate operand address (CO), operand (FO), instruction () och Write operand () En pipeline består av N steg. Vid ett visst ögonblick kan N instruktioner vara aktiva. Om 6-steg används (, DI, CO, FO,, ) kan 6 instruktioner vara aktiva Att hålla piplinen full med instruktioner är svårt pga pipeline hazards. Strukturella hazards beror på resurskonflikter. Data hazards beror på detaberoende mellan instruktioner Control hazards beror på hoppinstruktioner

Sammanfattning Hoppinstruktioner påverkar pipelinen mycket. Viktigt att minska penalties Instruktion fetch unit kan känna igen hoppinstruktioner och ta fram vart hoppet går. Genom att hämta snabbt från instruktions cachen och hålla instruktionskön full så kan penalties för ovillkorliga hopp reduceras till noll. För villkorliga hopp är det svårare då man måste veta om hoppet ska tas eller ej Delayed branching är en kompilator-baserad teknik för att minska branch penalty genom att flytta instruktioner till branch delay slot Viktigt för att minska branch penalty är att ha bra branch prediction teknik. Statiska tekniker tar inte hänsyn till exekverings historik, vilket dynamiska tekniker gör Branch history tables används för att lagra utfall av ett hopp och target adress (vart hoppet går)