Datorteknik ERIK LARSSON

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

Datorarkitekturer med operativsystem ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Datorteknik ERIK LARSSON

Datorarkitekturer med operativsystem ERIK LARSSON

Digitala System: Datorteknik ERIK LARSSON

Närliggande allokering Datorteknik

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

Datorarkitekturer med operativsystem ERIK LARSSON

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

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

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

Tentamen den 18 mars svar Datorteknik, EIT070

Grundläggande datavetenskap, 4p

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Digitala System: Datorteknik ERIK LARSSON

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

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

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)

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

Datorteknik ERIK LARSSON

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

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

F5: Högnivåprogrammering

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

F5: Högnivåprogrammering

Exempeltentamen Datorteknik, EIT070,

Pipelining i Intel Pentium II

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

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Datorsystemteknik DVGA03 Föreläsning 8

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

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

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

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

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.

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Datorarkitekturer med operativsystem ERIK LARSSON

Minnet från processorns sida Datorteknik

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

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Stack och subrutiner Programmeringskonventionen

Tentamen den 14 januari 2016 Datorarkitektur med operativsystem, EDT621

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

Digital- och datorteknik

F4: Assemblerprogrammering

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

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

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

Datorteknik ERIK LARSSON

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Digital- och datorteknik

TSEA28 Datorteknik Y (och U)

Digital- och datorteknik

CE_O2. Nios II. Subrutiner med mera.

DEC Alpha instruktions Arkitektur

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Datorteknik ERIK LARSSON

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

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

Digital- och datorteknik

Institutionen för datavetenskap 2014/15

Tentamen. Datorteknik Y, TSEA28

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

Parallellism i CDC 7600, pipelinens ursprung

Programexempel för FLEX

TSEA28 Datorteknik Y (och U)

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

Lösningar till tentamen i EIT070 Datorteknik

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Datorteknik ERIK LARSSON

LABORATION DATORTEKNIK Y,C,I DATORTEKNIK D

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

TSEA28 Datorteknik Y (och U)

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

Datorarkitektur. Fö 9: Datorarkitektur. Datororganisation. Typiska Arkitekturattribut. Introduktion till datorarkitektur.

Tentamen den 17 mars 2016 Datorteknik, EIT070

Det finns en hemsida. Adressen är

Datorsystem. Exempeltentamen

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

Tentamen. Datorteknik Y, TSEA28

Pipelining i Intel 80486

IT för personligt arbete F5

Lösningsförslag till Tenta i Mikrodator

Digitala System: Datorteknik ERIK LARSSON

Omtentamen i CDT204 - Datorarkitektur

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

Datorarkitektur. Informationsteknologi sommarkurs 5p, Agenda. Slideset 3

CE_O3. Nios II. Inför lab nios2time

Tentamen. Datorteknik Y, TSEA28

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

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

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.

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

Läs igenom hela laboration 5 innan du börjar beskriva instruktionsavkodaren i VHDL!

Transkript:

Datorteknik ERIK LARSSON

Program Abstraktionsnivå: Högnivåspråk» t ex C, C++ Assemblyspråk» t ex ADD R1, R2 Maskinspråk» t ex 001101.101

Exekvering av en instruktion (1) Hämta instruktion på 00001000 (där PC pekar) Fetch (2) Flytta instruktionen 0000101110001011 till CPU (3) Avkoda instruktionen: 00001 MOVE, 01110001 Adress, 011 Register 3 (4) Hämta data på adress: 01110001 Execute (5) Lagra datan i register 3 Primärminne Address Instruktion/data 00001000 0000101110001011 00001001 0001101110000011 00001010 0010100000011011 00001011 0001001110010011 Data Instruktioner Register CPU Kontrollenhet Aritmetisk Logisk Enhet (ALU)

Kontrollenhet ADD XOR ClearY System buss Z Z in ALU Y MBR MAR PC Z out Carry in Y out Y in MBR out MBR in MAR in PC out PC in R0 out R0 in RN out RN in IR in IR out Kontroll signaler MBR out R 0 R n IR Klocka Kontrollenhet Y in R0 RN out out MAR in Statussignaler Carry, overflow MAR out PC in ADD

Exekveringstid Instruktion: ADD R1, R3 // R1 <- R1 + R3 Kontrollsteg = Klockcykler per instruktion (CPI) 1. PC out, MAR in, Read, Clear Y, Carry-in, Add, Z in 2. Z out, PC in 3. MBR out, IR in 4. R1 out, Y in 5. R3 out, Add, Z in 6. Z out, R1 in, End

Exekveringstid Antal klockcykler för att exekvera en maskininstruktion Clocks per instruction (CPI) Tid för en klockcykel Tid för en klockperiod (T) Frekvens (f) är: f=1/t Antal maskininstruktioner Instruction count (IC) Exekveringstid i klockcykler = CPI x T x IC

Exekveringstid Prestanda kan ökas genom: Öka klockfrekvensen (f) (minska T) Minska antal instruktioner (IC) Minska antal klockcykler per instruktion (CPI)

Prestanda Algoritm Bestämmer vilka och hur många operationer som ska utföras Programmeringsspråk, kompilator, arkitektur Bestämmer hur många maskininstruktioner som ska utföras per operation Processor och minnessystem Bestämmer hur snabbt instruktioner exekveras I/O (Input/Output) och operativsystem Bestämmer hur snabbt I/O operationer ska exekveras

Maskininstruktioner Typer av instruktioner: Aritmetiska och logiska (ALU) Dataöverföring Hopp In- och utmatning

Maskininstruktioner Definitioner: Vad ska göras (operationskod)? Vem är inblandad (source operander)? Vart ska resultatet (destination operand)? Hur fortsätta efter instruktionen?

Maskininstruktioner Att bestämma: Typ av operander och operationer Antal adresser och adresserings format Registeraccess Instruktionsformat» Fixed eller flexibelt

Aritmetiska operationer Addition (+) och subtraktion (-) Två källor (sources) och en destination (destination) add a, b, c // a = b + c Alla aritmetiska funktioner följer detta mönster Design regel: Enkelhet föredrar regelbundenhet Regelbundenhet gör implementation enklare Enkelhet ökar möjligheten till högre prestanda till lägre kostnad

Aritmetiska operationer C kod: f = ( g + h ) ( i + j ); Kompileras till assemblykod (MIPS): add t0, g, h # temp t0 = g + h add t1, i, j # temp t1 = i + j sub f, t0, t1 # f = t0 - t1

Adressering Immediate adressering ADD R4,#3 //R4<-R4+3 Operanden finns direkt i instruktionen ADD R4 3

Adressering Direkt adressering ADD R4, 3 //R4<-R4+[3] Adressen till operanden ligger i instruktionen ADD R4 3 Adress 0 1 2 3 4 Data 11 22 33 44 55

Adressering Register adressering ADD R4,R3 //R4<-R4+R3 Liknar direkt adressering men istället för att peka ut i minnet så pekas ett register ut ADD R4 3 Register 0 1 2 3 4 Data 11 22 33 44 55

Adressering Memory indirect ADD R4,(3) R4<-R4+[[3]] Instruktionen innehåller adressen till en minnesplats som innehåller den önskade adressen ADD R4 3 Med indirekt adressering kan en större minnesarea adresseras då stora adresser kan läggas i minnet och instruktionen pekar ut dem. Adress Data

Adressering Register indirect ADD R4,(R3) R4<-R4+[R3] Liknar indirekt adressering men instruktion pekar ut register istället för minnesplats ADD R4 3 R3 Adress Data

Adressering Displacement ADD R4,R1.X R4 R4+[R1+X] Ett basregister (vanligen ett general purpose register) ger basen och ett par bitar ger displacement (en offset från basregister) ADD R1 3 R1 + Adress Data

Adressering Relativ adressering Använd t ex PC för att skapa adress. Enbart liten bit finns i instruktionen ADD R4 3 PC + Adress Data

Varför olika sätt att adressera? Öka flexibiliteten vid programmering, vilken förenklar programmering Antal bitar för att specificera en adress är begränsat. Exempel: Om 8-bitar används: Minne. Adress.. Extra tid (jmf ovan) kan 2 8 adresser pekas ut. Men, om 8-bitar används att peka ut ett register som innehåller adress kan 2 16 adresser pekas ut. Adress.. Minne R1 Adress. (16-bitar)

Adressering: avvägningar Få och enkla adresseringsmöjligheter Stora adressfält i instruktion för att kunna täcka stor adressrymd Begränsar programmering Snabbare adressberäkning Mindre komplex processor Många och avancerade adresseringsmöjligheter Tillåter mindre addressfält utan att påverka adressrymd Flexibel programmering Kan ge långsam adressberäkning Ökar komplexitet av processorn

Kontrollenhet komplexitet ADD XOR ClearY System buss Z Z in ALU Y MBR MAR PC Z out Carry in Y out Y in MBR out MBR in MAR in PC out PC in R0 out R0 in RN out RN in IR in IR out Kontroll signaler MBR out R 0 R n IR Klocka Kontrollenhet Y in R0 RN out out MAR in Statussignaler Carry, overflow MAR out PC in ADD

Hoppinstruktioner Exempel 1 a=a+b; c=a-b; d=a*f; Instruktionerna utförs i ordning Instruktionen här görs flera gånger Exempel 2 a=0; while (a<10) a=a+1; if (b==5) c=10; else c=0; d=a*f; Beroende på villkor görs olika saker (olika instruktioner exekveras)

Hoppinstruktion Nästa instruktion är normalt nästa i programmet. PC=PC+1; Programräknaren (program counter) räknas upp och nästa instruktion hämtas För att göra hopp till annan del av kod, ladda programräknaren med nytt värde PC=ditt hopp ska sek Två typer av hopp Ovillkorliga hopp Villkorliga hopp

Ovillkorliga hopp Exempel: Programräknaren får nytt värde och hämtar nästa instruktion på nytt ställe 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

Villkorliga hopp Villkor bestäms av flaggor i statusregister De vanligaste flaggorna är: N: 1 om resultatet är negativt (annars 0) Z: 1 om resultatet är noll (annars 0) V: 1 om aritmetiskt overflow (annars 0) C: 1 om carry (annars 0) UT OP ALU IN 1 IN 2 Status

Villkorliga hopp Exempel: SUB R1, #1 BEZ TARGET Kan påverka statusflagga // R1=R1-1 // IF Z=1 THEN PC=TARGET Kollar statusflagga OP IN 1 N Z V C UT ALU IN 2 Statusregister Status

Villkorliga hopp ADD XOR ClearY System buss Z Z in ALU Y MBR MAR PC Z out Zero Carry in Y out Y in MBR out MBR in MAR in PC out PC in R0 out R0 in RN out RN in IR in IR out Kontroll signaler MBR out R 0 R n IR Klocka Kontrollenhet Y in R0 RN out out MAR in Statussignaler Carry, overflow MAR out PC in ADD

Subrutiner och funktioner Program: void main(void){ int a, b, c; a=5; b=6; c=my_add(a,b); } Exekvering: a=5 //instruktion 1 b=6 //instruktion 2 funktionsanrop +parameteröverföring c=my_add(a,b); instruktion 11 återhopp+parameteröverföring int my_add(int x, int y) { return x+y; }

Subrutiner och funktioner Problem instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Hopp till subrutin Återhopp från subrutin Parameteröverföring Nästlade subrutinanrop 3 1 4 2 proca: instruktion 11 Instruktion 12 instruktion 13 return 1 2 3 4 Exekvering: instruktion 1 instruktion 11 //Proc A Instruktion 12 //Proc A Instruktion 13 //Proc A instruktion 3 instruktion 4 instruktion 11 //Proc A Instruktion 12 //Proc A instruktion 13 //Proc A instruktion 6

Subrutiner och funktioner Problem instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Hopp till subrutin Återhopp från subrutin Parameteröverföring Nästlade subrutinanrop 5 1 8 4 proca: instruktion 11 call proc B instruktion 13 return 2 3 6 7 1 2 3 4 5 6 7 8 procb: Instruktion 21 Instruktion 22 return Exekvering: instruktion 1 instruktion 11 //Proc A Instruktion 21 //Proc B Instruktion 22 instruktion 13 //Proc A instruktion 3 instruktion 4 instruktion 11 //Proc A Instruktion 21 //Proc B Instruktion 22 instruktion 13 //Proc A instruktion 6

Subrutiner och funktioner instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Vid call: Innan hopp, spara PC proca: instruktion 11 call proc B instruktion 13 return Vid call: Innan hopp, spara PC procb: Instruktion 21 Instruktion 22 return Vid call: Innan hopp, spara PC Vid return: Kolla återhopp Vid return: Kolla återhopp

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 1 Stackpekare Stack 2 2 1100 0011 3 3 0011 0011 4 4 1111 1111 5 5 0000 1111 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 2 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 0000 1111 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 3 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 4 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack 1 2 Två operationer: push och pop Push A A Adress Byte Data Push 0 A 0 1111 0000 1 1 1010 0101 3 Push B B A 4 Pop A 5 Pop 5 Stackpekare 2 2 1100 0011 3 3 0011 0011 4 4 A 5 5 B 6 6 1111 0000 7 7 1010 1010

Stack för subrutiner och funktioner Push 10 (tid 2) Push 2 (tid 1) Push 10 (tid 6) 10 2 5 10 2 instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 Push 5 (tid 5) proca: instruktion 11 call proc B instruktion 13 return Pop (tid 4) ger 2 10 2 procb: Instruktion 21 Instruktion 22 return Pop (tid 3) ger 10 10 2 5 Pop (tid 8) Pop (tid 7) Ger 5 10 ger 10 5 10 5

Register för subrutiner och funktioner R 0 Alla register R N Level i Register window In Local Out CWP: Current Window Pointer Level i+1 Level i+2 CWP CWP In Local Out In Local Out instruktion 1 call proc A instruktion 3 instruktion 4 call proc A instruktion 6 proca: instruktion 11 call proc B instruktion 13 return procb: Instruktion 21 Instruktion 22 return CWP

Återhopp och parameteröverföring Register Använd ett antal register för att spara återhoppsadress och för parameteröverföring Fördel: snabbt. Nackdel: register behövs Stack Reservera en del av minnet och skapa en kö som fungerar enligt Last-In First-Out Fördel: stort. Nackdel: långsamt (jmf register)

In- och utmatning Läsning och skrivning: Enhet för indata Primärminne (CPU) Enhet för utdata Sekundärminne

Minnesmappad och isolerad I/O

Exempel på minnesmappad I/O LOAD R1, 7 //Ladda R1 med värde på adress 7 STORE R1, 6 //Lagra värdet i R1 på adressplats 6 Adress Instruktion/ Data 0 1111 0000 1 1010 0101 2 1100 0011 3 0011 0011 4 1111 1111 5 0000 1111 6 0010 0000 7 0010 0000

Maskininstruktioner Aritmetiska och logiska (ALU) Dataöverföring (adressering) Hopp och subrutiner Inmatning/utmating (Input/Output (I/O))

Instruktionsformat Hur definiera fälten i instruktioner? Opcode Operand1 Operand2 Hur ska högnivåspråk kompileras och exekveras effektivt? Abstraktionsnivå Högnivåspråk Maskinspråk Semantiskt gap

Antal adresser i instruktion För att beräkna: X = (A+B)*C 4-adress instruktioner: Op A1, A2, A3, A4 //A1 <- [A2] op [A3], nästa instruktion = A4 I1: ADD X, A, B, I2 I2: MUL X, X, C, I3 I3: 3-adress instruktioner: Op A1, A2, A3 //A1 <- [A2] op [A3] I1: ADD X, A, B I2: MUL X, X, C I3: OP A1 A2 A3 A4 OP A1 A2 A3

Antal adresser i instruktion För att beräkna: X = (A+B)*C 2-adress instruktioner: Op A1, A2 //A1 <- [A1] op [A2] MOVE A, X ADD X, B MUL X, C 1-adress instruktioner: Op A1 //Acc <- [Acc] op [A1] LOAD A ADD B MUL C STORE X OP A1 A2 OP A1

Antal adresser i instruktion Vanligast med 2 och 3 adresser i instruktioner 4 adress instruktioner är opraktiskt. Nästa instruktion antas vara nästa instruktion. PC räknas upp av sig själv. Måste ha hopp-instruktioner 1 adress instruktion är ganska begränsande Exempel, antag 32 register (5 bitar behövs): 3-adress format: 15 bitar 2-adress format: 10 bitar 1-adress format: 5 bitar OP Rdest Rsrc1 Rsrc2 Få adresser, få instruktioner förenklar processorn men gör den mer primitiv

Intel x86 ISA Utveckling med backward compatibility 8080 (1974): 8-bit microprocessor» Accumulator, plus 3 index-register pairs 8086 (1978): 16-bit extension to 8080» Complex instruction set (CISC) 8087 (1980): floating-point coprocessor» Adds FP instructions and register stack 80286 (1982): 24-bit addresses, MMU» Segmented memory mapping and protection 80386 (1985): 32-bit extension (now IA-32)» Additional addressing modes and operations» Paged memory mapping as well as segments

Intel x86 ISA Bakåtkompabilitet (Backward compatibility)

Semantiskt glapp Två alternativ: CISC (Complex Instruction Set Computers): utveckla komplex arkitektur med många instruktioner och många adresseringsmöjligheter; ta med instruktioner som liknas högnivåinstruktioner. RISC (Reduced Instruction Set Computers): förenkla instruktionsuppsättningen och anpassa den till de verkliga kraven ett applikationsprogram har

Utvärdering av applikationsprogram Många studier har gjorts för att ta fram karaktärsdrag av maskinkod som genererats från högnivåspråk Intressanta aspekter: Hur ofta används varje instruktion? Hur används operander? Och hur ofta? Hur mycket används hopp, loopar, anrop till procedurer/ funktioner/subrutiner?

Utvärdering av applikationsprogram Typ Instruktioner i högnivåspråk (%) Instruktioner i maskinspråk (%) Minnesreferenser (%) Pascal C Pascal C Pascal C Tilldelning 45 38 13 13 14 15 Loop 5 3 42 32 33 26 Call 15 12 31 33 44 45 Villkor (if) 29 43 11 21 7 13 Andra 6 1 3 1 2 1 Många tilldelningar i högnivåspråk men dessa ger få instruktioner i maskinspråk och relativt få minnesreferenser Relativt få loopar men looparna resulterar i många maskininstruktioner och många minnesreferenser

Utvärdering av applikationsprogram Typ Instruktioner i högnivåspråk (%) Instruktioner i maskinspråk (%) Minnesreferenser (%) Pascal C Pascal C Pascal C Tilldelning 45 38 13 13 14 15 Loop 5 3 42 32 33 26 Call 15 12 31 33 44 45 Villkor (if) 29 43 11 21 7 13 Andra 6 1 3 1 2 1 Få CALL (anrop till funktioner/ procedurer/subrutiner) men de ger många instruktioner i maskinspråk och relativt många minnesreferenser Relativt många villkor med de ger relativt få maskininstruktioner och relativt få minnesreferenser

Utvärdering av applikationsprogram Fördelning av maskininstruktioner (frekvens av användande): Flytta data (move): ~33% Villkorliga hopp: ~20% ALU operationer: ~16% Adressering Komplexa adressering: ~18% (memory indirect, indexed+indirect, displacement+indexed, stack) Enkel adressering: vanligast (adress kan beräknas i en klockcykel, register, register indirekt, displacement)

Utvärdering av applikationsprogram Typer av operander 74-80% av operander är skalärer (heltal, flyttal, tecken, etc), vilka kan lagras i register (icke-skalär, t ex array) Resterande (20-26%) är arrayer; 90% är globala variabler 80% av skalärer är lokala variabler Slutsats: Lagring i register

Utvärdering av applikationsprogram Trots att endast 10-15% av högnivå instruktionerna var funktion/procedure/ subrutin anrop, så svarar dessa CALL och RETURN instruktioner för: 31-43% av maskininstruktionerna 44-45% av minnesreferenserna För procedurer: Endast 1.25% har fler än 6 parametrar Endast 6.7% har fler än 6 lokala variabler Antal nästlingar är ofta få (korta) och mycket sällan längre än 6 int x, y; float z; void proc3(int a, int b, int c) { ---------------- } void proc2(int k) { int j, q; ---------------- proc3(j, 5, q); } void proc1() { int i; ---------------- proc2(i); } main () { proc1(); }

Karaktärsdrag hos RISC processorer Enkla och få instruktioner Enkla och få adresseringsmöjligheter Fixt (fast) instruktionsformat Stort antal register Load-and-store architecture

Karaktärsdrag hos RISC processorer Ett litet exempel: Antag ett program med 80% enkla instruktioner och 20% komplexa instruktioner som exekveras på en CISC och en RISC CISC: enkla instruktioner tar 4 klockcykler medan komplexa instruktioner tar 8 klockcykler. Antag klockcykel tid på 100 ns (10-7 s) RISC: enkla instruktioner 1 klockcykel medan komplexa instruktioner implementeras som en sekvens av enkla. Antag att det tar i genomsnitt 14 instruktioner för en komplex instruktion. Antag klockcykel tid på 75 ns (0.75*10-7 ). Hur lång tid tar det att exekvera 1 000 000 instruktioner? CISC: (10 6 *0.80*4 + 10 6 *0.20*8)*10-7 =0.48s RISC: ( 10 6 *0.80*1 + 10 6 *0.20*14)*0.75*10-7 =0.27s

Karaktärsdrag hos RISC processorer Ett litet exempel (fortsättning): Komplexa instruktioner tar längre tid på en RISC, men det är relativt fler enkla instruktioner På grund av sin (relativa) enkelhet, kan RISC operera med kortare cykeltid (högre klockfrekvens). För CISC bromsas enkla instruktioner av mer komplex data path och mer komplex kontrollenhet (det som inte är kontrollenhet kallas för data path)

Karaktärsdrag hos RISC processorer Instruktioner använder få adresseringsmöjligheter: Typiskt: register, direkt, register indirekt, displacement Instruktioner har fixt (fast) längd och uniformt format Detta förenklar och snabbar upp laddning och avkodning. Processorn behöver inte vänta på att hela instruktionen är laddad innan avkodning kan påbörjas Uniformt format, dvs opcode och adressfält är placerat på samma position för olika instruktioner, gör att avkodning förenklas.

Karaktärsdrag hos RISC processorer Stort antal register Register kan användas för att lagra variabler och för mellanlagring resultat. Det minskar behov av att använda upprepade load och store med primärminnet. Alla lokala variabler från CALL/RETURN strukturer (anrop till funktioner, procedurer, subrutiner) kan lagras i register. Vad händer vid anrop till funktioner och procedurer? Register innehåll måste sparas, parametrar ska föras över, återhopps adresser ska sparas. Relativt mycket minnes access, vilket tar mycket tid. Med många register, kan nya register allokeras vid anrop

RISC eller CISC? Ett entydigt svar är svårt att ge Flera prestanda jämförelser (benchmarking) visar att RISC exekverar snabbare än CISC Men, det är svårt att identifiera vilket karaktärsdrag som är avgörande. Det är svårt att jämföra; t ex olika halvledartekniker, kompilatorer Ett argument för CISC: Den enklare RISC konstruktionen gör att program behöver mer minne (fler instruktioner) jämfört med samma program för en CISC processor Processorer av idag använder sig ofta av lite RISC och lite CISC

Några exempel CISC VAX 11/780 Nr. of instructions: 303 Instruction size: 2 57 bytes Instruction format: not fixed Addressing modes: 22 Number of general purpose registers: 16 Pentium Nr. of instructions: 235 Instruction size: 1 11 bytes Instruction format: not fixed Addressing modes: 11 Number of general purpose registers: 8 (32-bitar mode), 16 (64-bitar mode)

Några exempel RISC Sun SPARC Nr. of instructions: 52 Instruction size: 4 bytes Instruction format: fixed Addressing modes: 2 Number of general purpose registers: up to 520 PowerPC Nr. of instructions: 206 Instruction size: 4 bytes Instruction format: not fixed (but small differences) Addressing modes: 2 Number of general purpose registers: 32

Några exempel ARM (Advanced RISC Machine och Acorn RISC Machine) Antal instruktioner (standard set): 122 Instruktions storlek: 4 (standard), 2 (Thumb) byte Instruktions format: fixerat (olika mellan standard och Thumb) Adresserings modes: 3 Antal general purpose register: 27 (16 kan användas samtidigt) Dagens ARM processorer kan exekvera både standard set (32 bitars instruktioner och 16 bitars Thumb instruktions set. Thumb består av en delmängd av 32-bitars setet, kodat som 16-bitars instruktioner).