ITPE/DATS 2400: Datamaskinarkitektur og Nettverk Forelesning 9: Instruksjonsettarkitektur 3 Knut H. Nygaard / T. M. Jonassen Institute of Computer Science Faculty of Technology, Art and Design Oslo and Akershus University College of Applied Sciences 02. Februar 2015
Oversikt 1 ARC 1 2 Flagg 3 Litt om flytkontroll 4 Funksjoner (subrutiner) 5 Formater - koder 6 Om adresser 7 Speedup - Ytelsesanalyse 8 Datapath/kontroll - intro 9 Datapath - to varianter 10 Kontrollenhet
Instruksjonstyper I Fire typer instruksjoner: Minne (load/store) Logiske operasjoner (AND, OR etc) Aritmetiske (ADD etc) Kontroll (CALL, JUMP etc) Hver instruksjon har sin egen forkortelse.
Instruksjonstyper II
Instruksjonstyper II Alle instruksjoner er på 32 bits. Registere er på 32 bits. Hvordan laste en konstant i et register/minne? Må gjøres i to operasjoner. sethi 22 bits først (mest signifikante). Deretter OR på minst signifikante bits.
Eksempel sethi 0x2AAEF3, %r2 or %r2, 0xDD, %r2 Merk: sethi simm22, rdst 22 bits for konstant, 10 bits for å spesifisere operasjon, og destinasjonsregister.
Et ARC eksempel! Legg sammen to tall! File: addnum.asm.begin.org 2048 andcc %r4, %r0, %r4 sethi 0x8, %r4 or %r4, 0x00, %r4 prog1: ld [%r4+0], %r1! Legg x i r1 ld [%r4+4], %r2! Legg y i r2 addcc %r1, %r2, %r3! r3 = r1 + r2 st %r3, [%r4+8]! Lagre r3 i z jmpl %r15 + 4, %r0! Avslutt! Data.org 0x2000! Dette er 8192 x: 15 y: 12 z: 0.end
sethi addnum.asm Hvordan finne argumentet til sethi, vi har: 2 13 = 8192 Binært: 0000000000000000001000 0000000000 22 mest signifikante bits: 0000000000000000001000 Heksadesimalt: {}}{ 000000000000000000 1000 Altså, argumentet til sethi i addnum.asm blir: 0x8 8
Flagg 1 Et flagg er ett bit (0 eller 1), kalles også betingelseskoder. Aritmetiske eller logiske instruksjoner kan sette disse. Vi legger da til cc til slutt i instruksjonen. Eksempler: add -> addcc sub -> subcc and -> andcc
Flagg 2 Fire flagg: Z : Null-flagg, settes hvis resultatet av en logisk eller aritmetisk instuksjon er null. N : Negativt-flagg, settes hvis mest signifikante bit (MSB) er 1. C : Mente-flagg, settes hvis det er mente ut på MSB, eller må lånes inn på MSB. V : Overflow-flagg, settes hvis resultatet ikke kan representeres som et 32-bits tall.
Flagg 3 Vi bruker flagg til å kontrollere program-flyt. Eksempler: ba : Alltid hopp, 1 bn : Aldri hopp, 0 bne : Hopp på ulik, NOT Z be : Hopp på lik, Z Se tabell 4.10, side 121.
Eksempel goto goto (Mye brukt i Fortran, kalles også spagetti-programmering, hvis mange goto). ARC kode: ba Merke Hopp alltid til Merke.
Eksempel if-else Konstruksjonen kan skrives som if (expr) kode1 else kode2; Vi antar expr : x==y, x i r1, y i r2. subcc %r1, %r2, %r0 bne Merke1! kode1 ba Slutt Merke1:!kode2 Slutt:!programmet fortsetter her
Eksempel while Konstruksjonen kan skrives som while (expr) kode; Eksempel: while (r1 == r2) r3++; ba Merke Sann: add %r3, 1, %r3 Merke: subcc %r1, %r2, %r0 be Sann
Eksempel for Konstruksjonen har form: for (kode1; kode2; kode3) kode4; Kan skrives som en while: kode1; while (kode2) { kode4; kode3; }
Call Instruksjoner: call - jmpl Ting å tenke på: Hvordan overføre parametere til funksjonen? Stack eller registere? Hva er mest effektivt? Hvordan returnere data fra funksjonen?
Eksempel Høynivå språk: int foo(int a, int b); Tar to heltalls arumenter, returnerer et heltall. int foo(int a, int b) { int c; } c = a + 2*b + a*b; return(c);
Format
Mer om koder To (tre) mest signifikante bit angir type. 00 sethi 00(0) forgrening 10 aritmetisk 11 minne (laod / store)
Adresserommet bruker 32 bits. Vi trenger 2 5 = 32, altså 5 bit per adresse. Derfor 3 registere bruker 15 bits. I tillegg trenger vi bits for å angi hva maskinen skal gjøre. (3-5 bits)
Ytelsesanalyse Kalles ofte benchmarking. En rekke faktorer spiller inn: Hardware. Problem type. Hva vi ønsker å sammenlikne. Skal se på en metrikk her.
Speedup 1 Eksempel på en metrikk for ytelse. Brukes til for eksempel å sammenlikne to maskiner. Kan brukes til å sammenlikne implementeringer av programmer. Metrikk hvor kjøretid er mål. Speedup sammenlikner to kjøretider, en med, og en uten forbedringer. Forbedring kan være i hardware, eller software.
Speedup 2 T wo kjøretid uten forbedring. T w kjøretid med forbedring. S speedup. Da er S definert som S = T wo T w Merk: Hvis T w < T wo så er S > 1. I prosent blir formelen for S S p = T wo T w T w 100%
Speedup 3 Eksempel 1: Hvis S = 2 blir S p = 100%. Eksempel 2: Anta vi bytter noe hardware på en maskin, og T wo = 21s mens T w = 14s, så er S = T wo T w = 21s 14s = 3 2 = 1.5 eller S p = 21s 14s 14s 100% = 7 100% = 50% 14
Speedup 4 Vi definerer følgende symboler: τ klokkeperode på maskin. CPI (gjennomsnittlig) antall klokkesykler per instruksjon. IC antall instruksjoner utført av programmet vi måler. Total kjøretid for programmet er da gitt ved T = IC CPI τ
Speedup 5 Dette gir oss følgende to formler, tilsvarende de vi hadde tidligere: og S = IC wo CPI wo τ wo IC w CPI w τ w S p = IC wo CPI wo τ wo IC w CPI w τ w IC w CPI w τ w 100%
Speedup 6 Eksempel: Vi bytter en CPU med CPI på 5, til en CPU med CPI på 3.5, men klokkeperioden øker fra 100ns til 120ns. (Ny CPU har mindre klokkefrekvens, nano=10 9 ). IC er lik i begge tilfeller. Da er S p = CPI wo τ wo CPI w τ w 100% CPI w τ w 5 100 3.5 120 = 100% 3.5 120 = 80 19.048% 19% 420
Introduksjon Vi skal se på datapath for ARC modellen To måter å lage kontrollenhet. En enklere modell for en datapath Senere microprogrammer for den siste modellen I dag bare en rask introduksjon
ARC-modellen
Enklere modell RW (1) D DA (3) 8 x 32 register fil AA (3) Konstant inn A B BA (3) 1 0 MUX B MB (1) 01 01 01 01 A B Data inn Adresse MW (1) Cnt (4) ALU Data minne FS (4) F Data ut MD (1) 0 1 MUX D
To måter Microprogrammert (seksjon 5.3 i boka). Hardwired - altså i hardware (seksjon 5.4 i boka).
Microprogrammert
Hardwired
The End Spørsmål? Ingen forelesning fredag 6. februar grunnet næringslivsdag Neste forelesning mandag 9. februar kl 10.30 PS35-PI254