agens temaer Mer om adresseringsmodi LC-2 har fem adresseringmodi : Umiddelbar, Register, irekte, Indirekte og Base+Offset. agens emner er hentet fra nglander kapittel 10 (side 279-318 ) Mer om adresseringsmodi RISC og CISC-prosessorer Pipelining Skalare og superskalare prosessorer Alle CPU er har flere typer adresseringsmodi, men type og antall varierer, bl.a. mellom RISC og CISCprosessorer. Register-indirekte adressering er en blanding av register og indirekte adressering. n utvidet variant av register-indirekte legger til offset og auto-inkrement/dekrement i samme operasjon. I register-indirekte adressering ligger adressen til adressen til operanden i et register i stedenfor i den eksterne hukommelsen. 26.09.03 IN 103 1 26.09.03 IN 103 2 Register-indirekte adressering Register 1) I instruksjonen ligger et registernummer. 2.) I registeret referert til i instruksjonen ligger Adresse_1 3) Innholdet på Adresse_1 er en ny adresse () 4) Innholdet av er Operanden instruksjonen leter etter OpKode... Adresse_1 2 Adresse Adresse_1 RegisterNummer Hukommelse 1 Innhold Operand 3 4 Indeksert adressering med offset og auto-inkrement eller dekrement OpKode Baseregister Base-offset... Adresse_1 Adresse Innhold Operand 1) I instruksjonen ligger Adresse_1 2) I baseregisteret ligger et Base-offset 3) I indeksregisteret ligger en Indeks 4) Ved å summere sammen Adresse_1, Base-offset og Indeks får man 5) På i minnet ligger Operand til instruksjonen 6) Ved auto-inkrement/dekrement settes Indeks=Indeks+/-1 hver gang innholdet leses slik at man kan adressere enten + 1, eller - 1 1 2 3 + - 1 + 1 4 Indeksregister Indeks 5 6 26.09.03 IN 103 3 26.09.03 IN 103 4
RISC og CISC (1) RISC og CISC er to forskjellige strategier for design og organisering av en CPU. CISC-arkitektur har en lang rekke maskinspråkinstruksjoner som kompilatorer kan bruke når de skal oversette et program skrevet i høynivå-språk til masinkspråk. Assemblerprogramering blir også gjort enklere i en CISC-arkitektur fordi det finnes mange spesialiserte instruksjoner. n CISC-instruksjon kan bestå av et variabelt antall midre steg eller sub-instruksjoner, og hvert steg trenger en klokkesykel på å fullføres. I en moderne CISC-arkitektur (f.eks Pentium) varierer antall steg i instruksjonene fra et ti-talls til flere hundre for de mest avanserte maskinspråkinstruksjonene. RISC og CISC (2) RISC-arkitektur har mye færre maskinspråkinstruksjoner tilgjengelige for assemblerprogram og kompilatorer. Hver instruksjon i en RISC-maskin er optimalisert slik at den kun krever én klokkesykel på å eksekvere ferdig. ilosofien bak RISC er å optimalisere og tilby de mest brukte instruksjonene som høynivå-programmer bruker (mange ulike tester har vist at Load/Store og hopp-instruksjoner står for mellom 70-80% av alle instruksjonene i et program). er som brukes sjelden implementeres som en sekvens av instruksjoner og blir ikke nødvendigvis implementert mest mulig effektivt. Kompilatorer og assemblerprogrammer blir gjerne større og mer kompliserte fordi hver høynivåinstruksjon må brytes ned til mange flere maskinspråk-instruksjoner sammenlignet med CISC. 26.09.03 IN 103 5 26.09.03 IN 103 6 CISC RISC RISC og CISC (3) 1 2 Steg 1 Steg 2 Steg 3 Steg 1 Steg 2 Steg 3 Steg 4 1 2 3 4 5 6 7 I en RISC-arkitektur tar alle instruksjoner like lang tid. Hva er best RISC eller CISC? Begge arkitekturer har fordeler og ulemper, men tabellen under oppsummerer de viktigste forskjellene. Noen typer optimalsering lar seg lettere designe sammen med RISC-arkitektur, som f.eks pipelining. Visse typer anvendelser som f.eks mobiltelefoner ser også ut til å egne seg bedre for RISC enn CISC pga statisk kode med lite behov for spesialinstruksjoner for avansert grafikk, matematikk o.l. I en CISC-arkitektur ikke er noe slikt krav, slik at to instruksjoner kan bruke forskjellig tid på å bli ferdige. MN: et er vanlig også i RISC arkitektur å dele opp instruksjoner i mindre steg. Ikke alle instruksjoner trenger alle stegene, men de blir allikevel tvunget til å bruke alle dem (eventuelt ikke gjøre noe) for at hver instruksjon skal ta like lang tid. ette kravet gjør det lettere å forenkle og optimalisere instruksjons-eksekveringen i en RISCmaskin. RISC nkelt og begrenset instruksjonssett Register-orienterte instruksjoner med få instruksjoner for minneaksess ast lengde og format på instruksjoner å adresseringsmodi Stort antall interne registre CISC Komplisert og rikholdig instruksjonssett Alle instruksjoner er fleksible i adresseringsmekanismer for operander Variabelt format og lengde på instruksjoner Mange adresseringsmodi Lite antall interne registre 26.09.03 IN 103 7 26.09.03 IN 103 8
RISC og pipelining et utvikles stadig nye teknikker for å øke prosesseringshastigheten til datamaskiner. n teknikk som egner seg spesielt godt sammen med en RISCtype arkitektur er pipelining. Pipeling kan sammenlignes med enkel samlebåndsproduksjon: Isteden for å vente til forrige instruksjon er ferdig eksekvert, setter man i gang neste instruksjon så fort som første steg av forrige instruksjon er ferdig. Med pipelining øker man antallet instruksjoner som blir ferdig eksekvert per tidsenhet, men: hver instruksjon tar fortsatt like lang tid! or at pipelining skal fungere, må hver enhet som behandler/utfører et steg av en del-instruksjon arbeide uavhengig av de andre delene som utgjør pipelinen ( samlebåndet ). Antar en enkel RISCmaskin hvor instruksjone kan deles opp i 4 mindre deler som kan løses uavhengig av hverandre i en bestemt rekkefølge: TCH (Hent instruksjon) CO (ekod instruksjonen) XCUT (Utfør instruksjonen) WRIT BACK (Skriv resultatet til minne) Antar videre at det finnes 4 separate hardwareenheter som utfører hver av disse stegene uavhengig av de andre..eks kan TCH ikke bruke XCUT-enheten for å hente en instruksjon eller laste inn en variabel (men derimot er XCUT avhengig av input fra CO-steget, og CO-steget er avhengig av input fra TCH-steget osv) Til sist må alle enhetene kunne jobbe i parallell, med hver sine steg fra ulike instruksjoner, uten å gå i bena på hverandre. 26.09.03 IN 103 9 26.09.03 IN 103 10 Uten pipelining 1 2 3 Uten pipelining 1 2 3 Med pipelining Med pipelining 1 1 2 3 2 3 4 5 26.09.03 IN 103 11 4 5 Uten pipelining ser vi at TCH-steget til instruksjon 2 først kan starte etter at WRIT-BACK steget til instruksjon 1 er avsluttet. Med pipelining starter TCH-steget til instruksjon 2 rett etter at TCH-steget til instruksjon 1 er ferdig 0 1 2 3 4 5 6 7 Uten pipelining er det kun ett steg fra én instruksjon som prosesseres ad gangen i prosessoren. I klokkesykel 4 prosesseres TCH-steget fra instruksjon 2 Med pipelining er det opptil 4 steg fra forskjellige instruksjoner som prosesseres i parallell..eks er prosessoren i klokkesykel 4 opptatt med å prosessere WRIT-BACK fra instruksjon 2, XCUT fra instruksjon 3, CO fra instruksjon 4 og TCH fra instruksjon nummer 5 26.09.03 IN 103 12
1 2 3 Uten pipelining Med pipelining 1 2 3 4 0 1 2 3 4 5 6 7 5 Uten pipelining avsluttes en instruksjon hver fjerde klokkesykel. 1 ferdig etter 3. klokkesykel, instruksjon 2 ferdig etter klokkesykel 7 Med pipelining er instruksjon 1 ferdig etter 3. klokkesykel, instruksjon 2 ferdig etter 4. klokkesykel, instruksjon 3 ferdig etter 5 klokkesykel osv. Mao: Én instruksjon er ferdig hver klokkesykel. Problemer med pipelining ksemplene viser hvor effektiv pipelining er. MN: et er skjær i sjøen! 1. ordi en ny instruksjon starter hver klokkesykel, må alle stegene ta like lang tid (én klokkesykel). erfor må en klokkesykel minst må være like lang som tiden det tar for det langsomste steget å gjøre seg ferdig. Mao gjøres alle steg like trege. 2. Hvis programmet inneholder hopp-instruksjoner, ser man ikke dette før tidligst i CO-steget (eller etter XCUT ved betingede hopp), og da har man allerede satt igang og eksekvere etterfølgende instruksjoner som IKK skal utføres (fordi man skal hoppe forbi dem). 3. Hvis neste instruksjon er avhengig av resultatet fra forrige instruksjon, vil den ikke kunne lese riktig verdi før forrige instruksjon har skrevet resultatet tilbake til register eller hukommelse. Men da er neste instruksjon allerede ferdig og har brukt feil verdi. 26.09.03 IN 103 13 26.09.03 IN 103 14 Mulige løsninger på problem 1 lere alternativer for å forhindre at det tregeste steget bestemmer hva korteste klokkesykel kan være: 1. Variabel klokkesykel: Langsommere steg har lengre klokkesykel Vurdering: Meget vanskelig å løse i praksis og fungerer best på papiret. Mer om problem 2 Gitt en sekvens av instruksjoner: JNZ R4, Label ;Hopp til Label hvis R4=0 AN R5, R6, R1 L R5, Offset SUB R2, R3, #5 Label LR R4, R2, #0 2. Raskere hukommelse; e langsomste (minneaksess) stegene reduseres med en faktor 10 2 10 4. Løses i praksis ved en spesiell type raskt minne som kalles cache, som sitter mellom CPU og RAM og brukes til mellomlagring av både instruksjoner og data. Vurdering: Meget vanlig og mest brukt JNZ R4, Label AN R5, R6, R1 L R5, Offset SUB R2, R3, #5 3. Stoppe prosessoren: Mens den venter på svar fra hukommmelsen stanser all programeksekvering Vurdering: Kun brukt i spesielle tilfeller der hvor 2) ikke vil fungere 3. Bytte om rekkefølgen: Utføre andre instruksjoner mens man venter Vurdering: Utbredt, men komplisert Klokke Vet først på dette tidspunktet om vi skal hoppe eller ikke! Hvis hoppsinstruksjonen slår til, er det satt i gang instruksjoner som IKK skal eksekveres (AN, L og SUB-instruksjonene). 26.09.03 IN 103 15 26.09.03 IN 103 16
Mulige løsninger på problem 2 1. Selv om JNZ R4, Label først er ferdig eksekvert etter -steget, er resultatet av instruksjonen klart etter XCUT-steget. På dette tidspunktet kan man la vær å starte den siste instruksjonen (SUBinstruksjonen). ette kalles forwarding, fordi man sender et resultat bakover i pipelinen før tiden. Mer om problem 3 Gitt en sekvens av instruksjoner i et tenkt språk: A R1, R2, R6 AN R5, R6, R1 L R5, Offset 2. Man se på hva prgrammet gjorde forrige gang det eksekverte den samme kodesekvensen. Hoppet programmet da, er det stor sjanse for at det vil hoppe igjen, og man kan laste inn de riktige instruksjonene med en gang. ette kalles prediksjon, fordi man prøver å forutsi oppførselen til programmet og handler ut fra det. A R1, R2, R6 AN R5, R6, R1 L R5, Offset Her blir R1 oppdatert med riktig verdi 3. I verste fall må man tømme pipelinen (også kalt flushing) for de instruksjonene som feilaktig ble påbegynt, og fylle opp med de riktige instruksjonene. Man har da kastet bort 2 (eller mer, avhengig av pipelinens lengde). AN-instruksjonen trenger riktig verdi av R1 her AN-instruksjonen trenger output fra Ainstruksjonen for å beregne riktig. Svaret er først klart 2 senere, mens AN-instruksjonen trenger riktig verdi ved CO-steget og beregingen blir derfor feil. 26.09.03 IN 103 17 26.09.03 IN 103 18 Mulige løsninger på problem 3 1. Kan benytte seg av forwarding dvs. å gjøre en verdi tilgjengelig før tiden bakover i pipelinen (dvs for instruksjoner som kommer etter) 2. Stokke om på rekkefølgen av instruksjonene, slik at A-instruksjonen (i dette tilfellet) rakk å gjøre seg helt ferdig før AN-instruksjonen starter opp. Kan gjøres av kompilatoren, men er komplisert og vil ikke alltid fungere. 3. Løsingen 3 er å sette inn en eller flere NOPinstruksjoner, som fyller opp pipelinen med en tom instruksjon slik at de neste instruksjonene starter en klokke-sykel senere, og slik at avhengigheter fjernes. Superskalare prosessorer Selv om pipelining er effektivt, er prosessoren forsatt begrenset til å eksekvere ferdig en instruksjon per klokkesykel. esignet kan forbedres ved å eksekvere flere instruksjoner i parallel. ette kan enten gjøre ved å kjøre flere instruksjoner samtidig, eller man kan kjøre enkelte steg samtidig, men ha f.eks sekvensielle TCH-steg. ordelen er at man kan ha flere HW-enheter som gjør heltalls og flyttalls-aritmetikk, load/store osv i parallell; operasjoner som typisk tar mye lenger tid enn vanlige operasjoner sperrer ikke for andre instruksjoner. A R1, R2, R6 NOP NOP Superskalare prosessorer er raskere enn vanlig skalare, men også mye mer kompliserte og krever mer logikk, flere registre etc. AN, R5, R6, R1 Moderne CPUer som Pentium og G4 er superskalare 26.09.03 IN 103 19 26.09.03 IN 103 20
Vanlig pipelining 1 2 3 4 ksempel på superskalar arkitektur Buss-interface enhet Adresseenhet 1 2 Superskalar pipelining s enhet 3 ksekveringsenhet ksekveringsenhet ksekveringsenhet 4 Viktigste forskjell: Mens det i en vanlig pipeline eksekveres ferdig en instruksjon per tidsenhet, blir flere instruksjoner ferdige samtidig i en superskalar prosessor. 26.09.03 IN 103 21 Registre Superskalare prosessorer har de samme problemene som skalare, men det er mye mer komplisert å gjøre prediksjon, forwarding, sette inn NOP er, og avgjøre hvilke instruksjoner som kan kjøres i parallell, og å koordinere dem. 26.09.03 IN 103 22