DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen fredag d. 16. januar 2004

Relaterede dokumenter
DATALOGI 1E. Skriftlig eksamen fredag d. 16. januar 2004

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 18. april 2007

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen fredag den 7. juni 2002

Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Oversættere Skriftlig eksamen onsdag d. 20. april 2005

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj min min min min.

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen torsdag den 16. januar 2003

Oversættere / Datalogi 1E

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 23. juni 2003

Oversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 25. januar 2006

DATALOGI MASKINARKITEKTUR

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

MIPS, registerallokering og MARS

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Repræsentation af tal

DATALOGI 1F. Skriftlig eksamen tirsdag den 10. juni % 2 10 % 3 25 % 4 10 % 5 30 %

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Sider og segmenter. dopsys 1

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Sproget Rascal (v. 2)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Sider og segmenter. dopsys 1

Maskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

MIPS modulet og registerallokatoren

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Lageradministration Paging og segmentering

Repræsentation af tal

Repræsentation af tal

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Selvstudium 1, Diskret matematik

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Repræsentation af tal

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

Lageradministration. dopsys

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Danmarks Tekniske Universitet

It og informationssøgning Forelæsning november 2006 Nils Andersen. Regulære udtryk og formelle sprog

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 2 2 n 1/n (logn) n. n 2

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Noter til C# Programmering Selektion

CPUer og maskinkode DM534. Rolf Fagerberg

Lageret i maskinarkitekturen. Beregningsenhed, lagre (registre, RAM, disk), ydre enheder

Danmarks Tekniske Universitet

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Grundlæggende køretidsanalyse af algoritmer

Iteration af et endomorft kryptosystem. Substitutions-permutations-net (SPN) og inversion. Eksklusiv disjunktion og dens egenskaber

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Danmarks Tekniske Universitet

Operativsystemer of C Efterår 2013 Virtuel hukommelse (kap. 9)

Løsningsforslag Skriftlig eksamen 9. januar 2012

Danmarks Tekniske Universitet

Skriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater

Med TI-89 / TI-92 Plus kan du også sammenligne eller manipulere binære tal bit for bit.

Skriftlig eksamen i Datalogi

Python programmering. Per Tøfting. MacFest

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

DM507 Algoritmer og datastrukturer

DATALOGISK INSTITUT, AARHUS UNIVERSITET

Computerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Algoritmer og invarianter

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 3/2. n logn (3/2) n. 2 3logn (3/2) n

Oversigt. Operativsystemer [6]: Virtuelt lager. Virtuel lager. Virtuelt lager. Virkemåde. Virtuelt lager eksempel virtuelt lager

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

DATALOGISK INSTITUT, AARHUS UNIVERSITET

DM507 Algoritmer og datastrukturer

Skriftlig Eksamen Kombinatorik, sandsynlighed og randomiserede algoritmer (DM528)

Niveauer af abstrakte maskiner

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Transkript:

Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Vejledende løsninger til Skriftlig eksamen fredag d. 16. januar 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes som en helhed. Vægtningen af de enkelte spørgsmål i en opgave vil ikke være præcist proportional med tidsangivelserne, som altså kun er vejledende. Opgave Tid 1 60 min. 2 60 min. 3 60 min. 4 60 min. Alle de sædvanlige hjælpemidler må benyttes, herunder også lydløse elektroniske lommeregnere og PDA ere (f.eks. Palm Pilot), dog ikke hvis disse har trådløs netadgang eller telefoni. En almindelig bærbar PC vil ikke være tilstrækkelig lydløs p.g.a. blæser, harddisk og støjende tastatur. I tvivlstilfælde gælder eksamensvagtens afgørelse. Det er tilladt at bruge blyant til besvarelsen, såfremt denne er tydeligt læselig.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 1 af 19 Opgave 1: Arkitektur (60 min.) Spørgsmål 1.1 (15 min.) Lad y = f (x) være en logisk funktion, hvor x og y begge er ikke-negative heltal, mindre end 8, og repræsenteret diskret ved 3 bit x 2 x 1 x 0 og y 2 y 1 y 0. Funktionen f er defineret ved: f (x) = 8 2x hvis x er ulige og mindre end 4 2x 8 hvis x er ulige og større end 4 x 1 hvis x er lige og større end 0 don t care hvis x = 0 a) Angiv optimerede logiske udtryk for for de 3 værdier y 2, y 1, og y 0. Sandhedstabellen for f er givet ved: x 2 x 1 x 0 y 2 y 1 y 0 0 0 0 x x x 0 0 1 1 1 0 0 1 0 0 0 1 0 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 0 (fortsættes)

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 2 af 19 (fortsat) Det fremgår direkte at y 0 = x 0, hvis vi vælger at f (0) skal være ulige. Karnaughkortene for de to andre funktioner er: (x 1 x 0 ) y 1 00 01 11 10 0 x 1 1 0 (x 2 ) 1 1 1 1 0 Idet vi vælger x = 1 fås det optimerede udtryk: y 1 = x 1 + x 0 (x 1 x 0 ) y 2 00 01 11 10 0 x 1 0 0 (x 2 ) 1 0 0 1 1 Idet vi vælger x = 1 fås det optimerede udtryk: y 2 = x 2 x 1 + x 2 x 1 Spørgsmål 1.2 (15 min.) En maskine, der har en ordlængde på 16 bit benytter en repræsentation af flydende tal, der er identisk med IEEE 754-standarden for normaliserede tal, bortset fra at der kun er afsat 5 bit til eksponenten og 10 bit til mantissen. a) Angiv den decimale værdi af den bias, der benyttes ved repræsentation af eksponentdelen. b) Angiv den binære repræsentation af decimalværdien 448.0. c) Angiv den uforkortelige brøk der svarer til den binære repræsentation 1001111011000000.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 3 af 19 Bias er givet ved 2 5 1 1 = 15. Da 2 8 = 256 < 448 < 512 = 2 9 er eksponentværdien lig 8, eller 8+15 = 23 i bias notation. Binært er eksponentværdien lig 10111. Fortegnsbitten er 0 da 448 er positivt. Mantisseværdien er lig 256 448 192 1 = 256 = 3 4 = 1 2 + 1 4. Binært prepræsenteres mantissen derfor ved: 1100000000. Samlet fås repræsentationen: 0 10111 1100000000. I det sidste spørgsmål er fortegnsbitten 1 så tallet er negativt. Eksponentfeltet er 00111 eller 7 decimalt. Mantissefeltet i de sidste 10 bit angiver værdien 1 2 + 1 8 + 16 1 11 eller 16. Bitmønsteret repræsenterer derfor tallet: (1 + 11 16 ) 27 15 = 27 2 12 = 4096 27. Spørgsmål 1.3 (15 min.) Beskriv kort hvad der forstås ved afbrydelses-styret (eng. interrupt driven) dataoverførsel og DMA-overførsel (eng. Direct Memory Access), samt hvad fordelene og ulemperne ved de to metoder er. Ved afbrydelsesstyret overførsel af data (f.eks. fra disk til lager) forstås en metode hvor processoren initierer overførslen og derefter kan kan afvikle andre opgaver indtil den afbrydes af et interupt (fra den ydre enhed). Afbrydelsen kan eksempelvis angive at den ydre enhed er klar med de data som processoren rekvirerede. Afbrydelsen bevirker afvikling af en (interupt- )rutine, der eksempelvis kan læse de rekvirede data og gemme disse i lageret. Ved returnering fra afbrydelsesrutinen genoptages afviklingen af den opgave som processoren blev afbrudt i. Fordelen ved afbrydelsesstyret dataoverførsel er at processoren er fri til at afvikle andre opgaver medens den ydre enhed arbejder. Ulempen er at der er et vist overhead forbundet med kald af afbrydelsesrutinen, samt at processoren afbrydes hver gang den ydre enhed er klar med en dataenhed (f.eks. et ord). Ved DMA-styret overførsel initierer processoren en DMA-enhed, der selvstændigt foretager dataoverførslen uden at forstyrre processoren undervejs. Processoren afbrydes først (af DMA-enheden) når hele overførslen er afsluttet. Fordelen ved denne metode er at processoren kun afbrydes sjældent.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 4 af 19 Spørgsmål 1.4 (15 min.) En maskine med 1 MB fysisk adresserum og 2 MB virtuelt adresserum benytter paging med en sidestørrelse på 4 KB. Maskinen er udstyret med en TLB på 4 pladser. a) Beskriv hvilke bit der indgår ved oversættelse fra virtuelle til fysiske adresser. En given proces omfatter ialt 8 sider hvorfor sidetabellen for processen har 8 indgange. På et givet tidspunkt har sidetabellen nedenstående indhold (hvor lageradresserne er skrevet på hexadecimal form): index valid adresse 0 1 03 1 1 04 2 0 disk.page.ref.a 3 1 0A 4 0 disk.page.ref.b 5 0 disk.page.ref.c 6 0 disk.page.ref.d 7 1 78 TLB en har på samme tidspunkt udseendet: index valid tag adresse 0 1 000 03 1 1 003 0A 2 0 001 B2 3 1 007 78 Nedenstående angives fire lagerreferencer (skrevet hexadecimalt). ref. adresse 0 003A01 1 0042BC 2 007A10 3 00100A b) Angiv for hver reference om denne vil medføre et TLB-hit, et TLB-fault, og/eller en page-fault. Referencerne skal betragtes isoleret uden hensyn til den rækkefølge som de er opskrevet i.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 5 af 19 De virtuelle hhv. fysiske adresser er på 21 hhv. 20 bit. Af disse udgør offset de 12 mindst betydende bit. I adresseoversættelsen erstattes de 9 mest betydende bit i en virtuel adresse med 8 bit. Ved ekstraktion af de 3 mest betydende hexadecimale cifre i de virtuelle adresser (offset-feltet angiver de 3 mindstbetydende cifre) ses at adresserne tilhører de virtuellse sidenumre 3, 4, 7 og 1. Af indholdet af TLB og sidetabel fås: ref. adresse TLB hit/fault page-hit/fault 0 003A01 hit - 1 0042BC fault fault 2 007A10 hit - 3 00100A fault hit Bemærk at for TLB-hit vil sidetabellen ikke blive undersøgt.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 6 af 19 Opgave 2: Grammatikker og automater (60 min.) Spørgsmål 2.1 (20 min.) Følgende grammatik beskriver regneudtryk, hvor der er parenteser om hver brug af en operator: E id E ( E ) E (E + E ) E (E E ) a) Lav venstrefaktorisering (left factorisation) på denne grammatik. E id E (E 1 E 1 E ) E 1 E E 2 E 2 +E ) E 2 E ) b) Udvid den venstrefaktoriserede grammatik med en ekstra startproduktion til håndtering af $, og beregn FIRST for hver produktion i den udvidede grammatik. Vink: Der er ikke Nullable produktioner i grammatikken. Produktion FIRST E E {id, (} E id {id} E (E 1 {(} E 1 E ) { } E 1 E E 2 {id, (} E 2 +E ) {+} E 2 E ) { }

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 7 af 19 c) Lav en LL(1) syntaksanalysetabel for den udvidede grammatik. Vink: Der er ikke Nullable produktioner i grammatikken, så det er unødvendigt at beregne FOLLOW. id + ( ) $ E E E$ E E$ E E id E (E 1 E 1 E 1 E E 2 E 1 E) E 1 E E 2 E 2 E 1 +E) E 1 E) d) Er grammatikken entydig? Begrund svaret. Der er ingen konflikter i LL(1) tabellen, så grammatikken er LL(1) og dermed entydig. Spørgsmål 2.2 (40 min.) Vi definerer to funktioner even og odd over regulære udtryk: Givet et regulært udtryk r er even(r) et regulært udtryk, som genkender alle de tegnfølger i L(r), som har et lige antal tegn og odd(r) et regulært udtryk, som genkender alle de tegnfølger i L(r), som har et ulige antal tegn. Da der muligvis slet ikke findes nogle tegnfølger af lige/ulige længde, bliver vi nødt til at have et regulært udtryk φ, der genkender den tomme mængde af tegnfølger, jvf. opgave 2.10 i Basics of Compiler Design. F.eks. er odd(ε) = φ, da den tomme tegnfølge har længden 0 (som er lige). Andre eksempler er: even(ab) = ab odd(ab) = φ even(a ) = (aa) odd(a ) = a(aa) even((a bb) ) = (bb a(bb) a) Det bemærkes, at even(s) er defineret modulo ækvivalens af regulære udtryk, så for eksempel vil ethvert regulært udtryk ækvivalent med a(aa) være en korrekt værdi for odd(s). Det gælder bl.a. (aa) a og a(aa) + a. a) Find regulære udtryk for følgende:

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 8 af 19 even((a ε)) odd((a ε)) even((a ε)(b ε)) odd((a ε)(b ε)) even(a b ) odd(a b ) even((a ε)) = ε odd((a ε)) = a even((a ε)(b ε)) = ε ab odd((a ε)(b ε)) = a b even(a b ) = (aa) (bb) (aa) ab(bb) odd(a b ) = (aa) a(bb) (aa) b(bb) b) Herunder er en ukomplet definition af even og odd som gensidigt rekursive funktioner. a repræsenterer et vilkårligt alfabetsymbol. even(ε) =??? even(a) =??? even(s t) =??? even(st) =??? even(s ) = (even(s) odd(s)(even(s)) odd(s)) odd(ε) = φ odd(a) = a odd(s t) =??? odd(st) =??? odd(s ) = even(s )odd(s)even(s ) Gør definitionen færdig ved at erstatte forekomsterne af??? med regulære udtryk, der kan indeholde even(s), even(t), odd(s) og odd(t) som deludtryk. Vink: Tænk på de mængder af tegnfølger, de forskellige regulære udtryk definerer, og hvordan man kan beskrive delmængder med lige/ulige antal tegn.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 9 af 19 even(ε) = ε even(a) = φ even(s t) = even(s) even(t) even(st) = even(s)even(t) odd(s)odd(t) even(s ) = (even(s) odd(s)(even(s)) odd(s)) odd(ε) = φ odd(a) = a odd(s t) = odd(s) odd(t) odd(st) = even(s)odd(t) odd(s)even(t) odd(s ) = even(s )odd(s)even(s ) c) Brug den rekursive definition til at beregne even((a ε)(b ε)(c ε)), og vis det resulterende regulære udtryk inklusive evt. mellemregninger. Brug evt. de algebraiske regler fra figur 2.2 og opgave 2.10 i Basics of Compiler Design til at reducere udtrykkene undervejs. even((a ε)(b ε)(c ε)) = even((a ε)(b ε))even(c ε) odd((a ε)(b ε))odd(c ε) = even((a ε)(b ε))(even(c) even(ε)) odd((a ε)(b ε))(odd(c) odd(ε)) = even((a ε)(b ε))(φ ε) odd((a ε)(b ε))(c φ) = even((a ε)(b ε)) odd((a ε)(b ε))c = (even(a ε)even(b ε) odd(a ε)odd(b ε)) (odd(a ε)even(b ε) even(a ε)odd(b ε))c = (εε ab) (aε εb)c = ε ab ac bc

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 10 af 19 Opgave 3: Oversætterteknik (60 min.) Spørgsmål 3.1 (15 min.) Definitionen af interferens (definition 8.2 i Basics of Compiler Design) er: A variable x interferes with a variable y if x is at the left-hand side of an assignment-instruction i, where y out[i] and the assignment isn t of the form x := y. a) Argumenter for at følgende definition er ækvivalent: A variable x interferes with a variable y if there is an instruction i, where x kill[i], y out[i] and the instruction i isn t of the form x := y. I figur 8.1, som definerer kill[i], er x kill[i] netop når x er venstresiden af en tildelingssætning. b) I afsnit 9.6 i Basics of Compiler Design (s. 193 i 2003-udgaven) nævnes det, at man kan sikre at variabler, der er levende henover funktionskald, bliver allokeret til callee-saves registre ved at lade disse variabler interferere med alle caller-saves registre. Beskriv en nem måde at sørge for at variabler, der er levende henover funktionskald, interfererer med alle caller-saves registre. Vink: Man kan med fordel bruge den modificerede interferensdefinition herover. Et funktionskald skal dræbe alle caller-saves registre. Det sker ved i reglen for x := CALL f (args) i figur 8.1 i Basics of Compiler Design at sætte kill[i] til {x} callersaves, hvor callersaves er mængden af alle caller-saves registre. Spørgsmål 3.2 (25 min.) Vi modificerer sætningssproget fra Grammar 6.4 i Basics of Compiler design sådan at produktionen erstattes med produktionen Stat id := Exp Stat Ids := Exps

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 11 af 19 hvor Exps er beskrevet i Grammar 6.2 og Ids er defineret ved produktionerne Ids id Ids id, Ids Semantikken af den nye tildelingssætning er, at alle udtrykkene beregnes fra venstre mod højre, hvorefter alle variablerne tildeles de tilsvarende værdier. For eksempel vil sætningen x, y := y, x bytte om på indholdet af variablerne x og y, og sætningen x, y, n := x + y, x, n 1 vil kunne bruges i en løkke til beregning af fibonacci-tal. a) Givet at Exps bliver oversat med funktionen Trans Exps fra figur 6.3, modificer da Trans Stat fra figur 6.5 til at oversætte den nye tildelingssætning (vis kun den ændrede del af funktionen). Vink: Definer og brug en funktion Trans Ids. Trans Stat (Stat,vtable, ftable) = case Stat of Ids := Exps (code 1,vars) = Trans Exps (Exps,vtable, ftable) code 2 = Trans Ids (Ids,vtable,vars) code 1 ++code 2 Trans Ids (Ids,vtable,vars) = case Ids of id place = lookup(vtable, name(id)) t := head(vars) [place := t] id, Ids place = lookup(vtable, name(id)) t := head(vars) code 1 := Trans Ids (Ids,vtable,tail(vars)) [place := t]++code 1 b) Vis koden for x, y, n := x + y, x, n 1 givet at vtable binder variablerne til mellemkodevariabler af samme navn.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 12 af 19 Spørgsmål 3.3 (20 min.) t 1 := x t 2 := y t 0 := t 1 +t 2 t 3 := x t 5 := n t 6 := 1 t 4 := t 5 t 6 x := t 0 y := t 3 n := t 4 Vi vil generere kode til en 32-bit processor HYP, der bruger aritmetiske flag. Et flag er et et-bits register, der sættes ved aritmetiske operationer og læses ved betingede hop. En addition eller subtraktion af 32-bit tokomplementtal vil sætte flagene Z,N,V ud fra følgende regler: Z sættes til 1, hvis resultatet af additionen/subtraktionen er lig med 0, og sættes til 0 ellers. N er en kopi af bit 31 af resultatet af additionen/subtraktionen. V sættes til 1, hvis additionen/subtraktionen gav aritmetisk overflow (se COD s. 222), og sættes til 0 ellers. Indholdet af flagene bevares indtil næste aritmetiske operation. De aritmetiske instruktioner er: ADD a, b, c udfører a := b + c. SUB a, b, c udfører a := b c. Betingede hop i HYP tester kombinationer af flagværdier: B l hopper ubetinget til l. BEQ l hopper til l, hvis Z = 1. BLT l hopper til l, hvis N V.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 13 af 19 a) Lav kodesekvenser i HYP for hver af følgende mellemkodeinstruktioner: IF a = b THEN label t ELSE label f IF a b THEN label t ELSE label f IF a < b THEN label t ELSE label f Brug evt. et ekstra register t. Opskriv sekvenserne i en tabel i stil med figur 7.1 i Basics of Compiler Design. SUB t, a, b BEQ label t B label f SUB t, a, b BEQ label f B label t SUB t, a, b BLT label t B label f IF a = b THEN label t ELSE label f IF a b THEN label t ELSE label f IF a < b THEN label t ELSE label f b) Find korte sekvenser af mellemkode, hvor man kan generere kortere HYP kode end den man får ved at generere kode for hver mellemkodeinstruktion for sig. Beskriv oversættelsen af disse sekvenser i en tabel i stil med figur 7.1 i Basics of Compiler Design. Fokuser på sekvenser, der indeholder mellemkodeinstruktionerne fra delspørgsmål a.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 14 af 19 Herunder er et par oplagte forslag: label f : label f : label t : label t : label f : label f : SUB c, a, b BEQ label t SUB t, a, b BEQ label t SUB c, a, b BEQ label t B label f SUB c, a, b BEQ label f SUB t, a, b BEQ label f SUB c, a, b BEQ label f B label t SUB c, a, b BLT label t SUB t, a, b BLT label t SUB c, a, b BLT label t B label f c := a b IF a = b THEN label t ELSE label f LABEL label f IF a = b THEN label t ELSE label f LABEL label f c := a b IF a = b THEN label t ELSE label f c := a b IF a b THEN label t ELSE label f LABEL label t IF a b THEN label t ELSE label f LABEL label t c := a b IF a b THEN label t ELSE label f c := a b IF a < b THEN label t ELSE label f LABEL label f IF a < b THEN label t ELSE label f LABEL label f c := a b IF a < b THEN label t ELSE label f

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 15 af 19 Opgave 4: Maskinsprog og ydelse (60 min.) Spørgsmål 4.1 (25 min.) Vi har fået udleveret en assembler-procedure, der kan tælle antallet af nuller i et array med heltaller. Arrayet ligger fortløbende i arbejdslageret, og hvert element fylder 4 bytes. Input til proceduren er adressen på første element i arrayet samt antallet af elementer i arrayet ialt. Det følgende er en ufuldstændig og ikkekommenteret udgave af assembler-proceduren. 1 zerocount: add $t0, $a0, $zero 2 add $t1, $a1, $zero 3 add $v0, $zero, $zero 4 loop: beq $t1, $zero,?? 5 lw $t2, 0($t0) 6 bne $t2, $zero,?? 7 addi $v0, $v0, 1 8 continue: addi $t0, $t0, 4 9 subi $t1, $t1, 1 10 j loop 11 end: jr $ra a) De to betingede hop i hhv. linje 4 og 6 mangler en label. Angiv hvad de rigtige labels er. Argumenter for dit valg. Register $t1 angiver antallet af elementer som endnu ikke er undersøgt. Når dette register er 0, afsluttes proceduren, dvs. labelen i linje 4 skal være end: beq $t1, $zero, end Linje 6 7 tæller antallet af nuller. Hvis det netop indlæste element, som findes i registret $t2 er 0, skal $v0 tælles en op. Den korrekte label til linje 6 er derfor continue: bne $t2, $zero, continue b) Proceduren benytter en række forskellige registre. Beskriv detaljeret hvilken funktion de enkelte registre har i proceduren.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 16 af 19 $a0 Første argument til proceduren, der indeholder adressen på første element i arrayet. $a1 Andet argument til proceduren, der indeholder antallet af elementer i arrayet. $t0 Adresse på element som skal undersøges; itererer igennem hele arrayet. $t1 Antallet af ikke-undersøgte elementer, initielt lig med det samlede antal elementer i arrayet. $v0 Retur-register, hvori antallet af nuller i arrayet bliver talt op. $t2 Indhold af aktuelt element (heltal) i arrayet. $ra Retur-adresse. c) Skriv en procedure i et højniveausprog (f.eks. Java eller C/C++), der udfører samme funktion som assembler-proceduren. Proceduren skal så vidt muligt foretage det samme som assembler-proceduren. Her er en mulig C-procedure: int zerocount(int* A, int n) { int* p = A; /* pegepind til aktuelt element */ int i = n; /* antal elementer er skal behandles */ int z = 0; /* antal nuller i array */ while (i!= 0) { if (*p == 0) z++; p++; i--; } return z; }

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 17 af 19 Spørgsmål 4.2 (20 min.) Assembler-proceduren zerocount fra opgave 4.1 udføres på en pipelinet maskine M 1 med en klokfrekvens på 2 GHz. Det vides at arrayet indeholder 5 millioner elementer. Desuden vides, at det gennemsnitlige CPI (Cycles Per Instruction) ved udførelsen af proceduren er 1.5. a) Er det muligt at beregne den samlede udførelsestid på baggrund af disse oplysninger? Begrund svaret. Antallet af udførte ordrer afhænger af antallet af nuller i arrayet. Idet vi derfor ikke kender det samlede antal udførte ordrer kan vi heller ikke beregne udførelsestiden. b) Det oplyses nu at 70% af elementerne i arrayet er nuller. Hvad bliver udførelsestiden? (Det er ikke nødvendigt at tælle ordrer, som kun bliver udført en gang.) I hvert gennemløb af løkken udføres 6 ordrer, hvis det indlæste element ikke er 0, ellers 7 ordrer, dvs. i gennemsnit 0.3 6 + 0.7 7 = 6.7 ordrer. Det samlede antal klokcykler er derfor Køretiden er: 1.5 5 10 6 6.7 = 50.25 10 6 50.25 10 6 /2 10 9 s = 25.125 10 3 s = 25.125 ms c) Proceduren udføres nu med samme input på en anden maskine M 2 (med samme ordresæt), der har en klokfrekvens på 2.5 GHz. Maskinen M 2 har et dårligt ydende lagerhierarki, hvilket betyder at CPI for hent-ordren i gennemsnit er 3.2. Dette CPI er dobbelt så højt som CPI for hent-ordren ved udførelse på maskinen M 1. CPI for alle andre ordrer er uændrede. Hvad bliver udførelsestiden af proceduren på maskinen M 2?

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 18 af 19 Maskinen M 2 udfører (3.2/2) 5 10 6 = 8 10 6 flere klokcykler end M 1. Udførelsestiden bliver derfor (50.25 10 6 + 8 10 6 )/2.5 10 9 s = 23.3 10 3 s = 23.3 ms Spørgsmål 4.3 (15 min.) Vi ønsker nu at forbedre ydelsen af assembler-proceduren zerocount fra opgave 4.1. a) Beskriv hvordan vi helt kan slippe for at anvende register $t1, således at det kun er register $t0, der inkrementeres i hver eneste iteration af løkken. Dette kan eksempelvis gøres ved først at udregne slutadressen på arrayet, mere præcist adressen lige efter slutadressen. Dette gøres ved at gange antallet af elementer med 4 og addere dette til startadressen. Lad os antage at denne adresse gemt i registret $t3. Herefter kan vi slette linje 9 i programmet og ændre linje 4 til beq $t0, $t3, end b) Det viser sig nu at alle arrays der skal behandles af zerocount kun indeholder elementerne 0 og 1. Angiv hvordan man i dette tilfælde yderligere kan forbedre udførelsestiden for proceduren.

Vejledende løsning til skriftlig eksamen januar 2004 i Datalogi 1E side 19 af 19 I dette tilfælde kan man helt enkelt summere alle elementerne i arrayet. Altså skal linje 6 7 erstattes med add $v0, $v0, $t2 Dette giver så det samlede antal 1-taller. Derfor skal man til sidst trække dette tal fra det samlede antal elementer for at få antallet af nuller: sub $v0, $a1, $v0