Redesign of the Oz Compiler Av Markus Bohlin och Lars Bruce.

Slides:



Advertisements
Liknande presentationer
F. Drewes, Inst. f. datavetenskap1 Föreläsning 13: Resolution •Resolution i satslogiken •Resolution i predikatlogiken.
Advertisements

Talföljder formler och summor
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Översikt av operativsystem (kap 1 & 2)
Funktioner och programorganisation
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
Föreläsning 1.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning.
Arv.
Abstract & sealed.
Objektorienterad tänkande
Programmering II C#, ID1304.
Polymorfism.
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Databaser i B2KUNO Johan Eklund. Hur går jag vidare? Avancerade tillämpningar:  Analysera data  Generera information Utveckla följande färdigheter:
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 7: Deadlocks.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 11: Implementation av filsystem.
Java. Kortfattat om Java Syntaxen påminner i hög grad om C++ Stöd för objektorientering Kod kan köras i en virtuell maskin som finns tillgänglig för nästan.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
EN KOMPLETT INDUSTRIPARTNER ! ALLMÄNT OM MELSEC STYRSYSTEM.
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
Föreläsning 2, Kapitel 2 Att förstå klassdefinitioner Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Polymorfism.
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 6: Semantik Statisk semantik Attributgrammatiker Dynamisk semantik Axiomatisk.
1. En infrastruktur för programutveckling
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 10: Objektorientering Objektorientering och abstrakta datatyper Dynamisk bindning Singel mot multipelt.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
MV500B: Introduktion till interaktiv ljuddesign David Yanagisawa, Anders-Petter Andersson 4.5 högskolepoängLektion 3.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Introduktion till forskningsområde Lars Bruce Distributed Systems Laboratory.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Lågnivåprogrammering Översikt av I/O-mekanismer i hårdvara Olika språkkrav och modeller för komponent- hantering(device driving) Modeller för komponent-hantering.
INTRODUKTION TILL PROGRAMMERING
Läsbar prolog CM 8.1. allmäna principer correctness user-friendliness efficiency readability modifiability robustness documentation.
Föreläsning 1. Innehåll Introduktion till objektorientering –OOP (objektorienterad programmering) –Objekt, instanser, klasser C++ –OO i C++ –Standardbibliotek.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Föreläsning 4 Klasser Och Objekt.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Introduktion till programmeringsspråket Java -Den allmänna.
Föreläsning 11 Logik med tillämpningar Innehåll u Generell resolution u Kapitel i Ben-Ari.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Föreläsning 14 Logik med tillämpningar Innehåll u Cuts och negation u Input/output u Extralogiska predikat u Interaktiva program, failure-drivna.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 6 ( )‏ Innehåll:  Att designa parallella program - manuell vs. automatisk parallellisering.
14.1 Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Repetition.
Formella metoder i MDI Behovet Vad menas med formell? Verktyg Exempel Att läsa: Kapitel 14 i kursboken.
Program indata ? utdata 1/20 Vahid Mosavat, Nada, KTH.
Föreläsningsanteckningar Kortfattat om programmeringsmetodik Ola Ågren Hur det går till att göra ett program.
Föreläsning om RUP RUP – Rational Unified Process
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Anpassa fri programvara - Frihet ett, hur nyttjar man den? Copyright © 2006, 2007 Marcus Rejås Rejås Datakonsult Jag ger härmed rätten till alla att nyttja.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Redesign of the Oz Compiler Av Markus Bohlin och Lars Bruce

Översikt presentation Introduktion Oz och Mozart Design Mellankodsformat i kompilatorn Registerallokering Kodemission Framtida arbete Slutsatser

Varför en ny kompilator? Originalkompilatorn är mycket effektiv, men… Kompilering sker per definition vilket försvårar modifiering av kompilatorn Den gamla kompilatorn saknar designdokumentation samt är mycket sparsamt kommenterad Utökning av kompilatorn är planerad i framtida projekt Kunskapen om kompilatorn fanns tidigare i Tyskland

Mål med examensarbetet Förståelse för hur kompilatorn fungerar Ny design av kompilatorn på ett öppet, modulärt sätt så att det går lätt att utöka kompilatorn med ny funktionalitet Implementation av den nya kompilatorn I mån av tid: undersök nya analys- och optimeringsmöjligheter

Historien om Oz Utvecklades vid DFKI i Saarbrücken Oz 1 bygger på AKL som utvecklades på SICS Nuvarande version är Oz 3/Mozart Utvecklingen sker numer främst inom DSL på SICS

Språket Oz Dynamiskt typat Automatisk minneshantering Felhantering via undantag Logiska varibler Entiteter med tillstånd, Celler, atomär uppdatering Multiparadigmspråk

Villkorsprogrammering Villkor över ändliga mängder Programmerbara sökstrategier Funktionellt Ivrig och lat evaluering Alla entiteter i språket är första klassens objekt Ej rent funktionellt, har sidoeffekter Multitrådat med dataflödes synkronisering Rättvis schemaläggning, avbrytbara trådar Ultralättviktiga trådar Objektorienterat Multipelt arv

Oz Core language En delmängd av Oz Innehåller ej, t.ex., villkors programmering och objektorientering Alla regelrätta Oz program kan uttryckas i Oz Core language

Mozart Ett mjukvarusystem som implementerar Oz VM och utvecklingsmiljö med kompilator, debug- och monitorerings-verktyg Distribution Transparent Kontroll över distributionen Windows 95/NT och flera UNIX-dialekter

Mozart Virtual Machine - MVM Baseras på Warren Abstract Machine Registermaskin Består av: Motor Schemaläggare Garbage Collector Store – variabelsystem Kan ladda sub-system dynamiskt, t.ex. distribution

Register i MVM Tre typer: X-register  Liknar vanliga register  Används för parameteröverföring  Förstörs i samband med procedur anrop  4096 st. i normala konfigurationen Y-register  Påminner om stacken i C  Förstörs inte vid procedur anrop G-register  Referenser till icke-lokala variabler

Proceduranrop X-register i används för parameter i. För ett anrop till en procedur med ariteten n, används alltså x(0)...x(n-1). Går inte att veta vilka X-register som förstörs av den anropade proceduren – spara alla till Y-register. Inbyggda procedurer i MVM Vanligt förekommande procedurer, t.ex. aritmetiska Laddas in när systemet startar Kompilatorn bestämmer vilka X-register som ska användas Det är känt vilka argument som förstörs.

Design av back-end i originalkompilatorn

Mål med en ny design Övergripande mål: Lätt att modifiera kompilatorn Oberoende moduler / faser Rent gränssnitt mellan faserna Datautbyte mellan faser via mellankodsformat

Design av back-end i den nya kompilatorn

Översättning till mellankodsformat Sista steget i front-end delen av kompilatorn Varför? Ett kodformat som underlättar analys och optimering i back-end Underlättar modularisering av back-end Gör det möjligt att använda samma front- end till flera målmaskiner och samma back- end till flera språk

Fördelen med ett mellankodsformat

Abstrakta instruktioner Bygger mycket på det tidigare mellankodsformatet – virtuella instruktioner En abstrakt instruktion är en högnivåversion av en, eller flera, maskininstruktioner Förändras för varje pass i back-end Saknar hoppinstruktioner, använder istället direkta referenser Ett program uttrycks som en graf bestående av abstrakta instruktioner – enkel att traversera

Kod struktur

Omvandling I front-end representeras programmet av en objektgraf En klass för varje typ av Oz-sats Varje klass har en metod som översätter satsen till abstrakta instruktioner Variabelnamn ersätts med virtuella register Vi spenderade mycket tid på att förstå denna del!

Registerallokering Registerallokering = tilldelning av register till variabler Mål med registerallokering: Generellt:  Minska exekveringstid För MVM:  Nödvändigt, eftersom MVM är registerbaserad  Minimera omgruppering av register  Minska användning av Y-register.

Registerallokering för MVM Registerallokering arbetar primärt med X- register Dessa behöver inte allokeras Speciella egenskaper i MVM: Stor mängd X-register Alla registertyper accessas lika snabbt Y-register tar tid att allokera Procedur- och builtin-anrop förstör X-register Parametrar passas i X-register Standardtekniker passar inte bra för MVM

Livenessanalys för MVM Grundläggande analys för att kunna utföra optimeringar När måste vi ha en variabel i ett register? Utförs på virtuella register Vi har valt en enkel strategi: två linjära pass Hitta initieringar Hitta sista accesserna Liveness representeras i en abstrakt instruktion av en bit per virtuellt register

Registerallokering i den nya kompilatorn Endast variabler som är aktiva hålls i register Look-ahead försöker avgöra vad en variabel används för Om en variabel används som argument, försöker man allokera rätt X-register på en gång Hantering av svårigheter Förgreningar, builtins, speciella MVM-instruktioner …

Slutsatser registerallokering Reguljära tekniker är av begränsat intresse Gamla registerallokeringen är bättre Fördröjda allokeringar (mycket effektivt)  Instruktioner som initierar lokala variabler flyttas tills just innan de behövs  Problemet skjuts upp, vi kan bestämma register senare!  Integrerad i registerallokatorn, bör ligga i ett separat pass Stark koppling till övriga delar Nya tekniker behövs!

Översättning till bytekod ”Emitting code” Abstrakta instruktioner till relativa bytekodsinstruktioner Alla referenser i den abstrakta koden ersätts med hopp-instruktioner till symboliska adresser

Peephole optimering Lokal optimering - analyserar och optimerar endast några få instruktioner, ibland endast en, åt gången Fyra typer: Eliminering av onåbar kod Instruktionskombinering Svansanrop, extra viktigt vid svansrekursion Eliminering av onödiga hoppinstruktioner  Hopp till hopp  Hopp till retursatser

Sista stegen Ersätter de symboliska adresserna med den verkliga Översätter instruktioner till OP-koder Körbart program! Sparas till fil Exekveras direkt i en egen tråd (om den interaktiva kompilatorn används)

Framtida utökningar Bättre GC kräver stöd i kompilatorn Registerallokering Fördröjda allokeringar Analys av registerutnyttjande i procedurer Adaptiv parameteröverföring Sökningstekniker för registerallokering Optimeringar Finns en uppsjö värda att testa i litteraturen

Slutsatser Kompilatorns back-end har modulariserats på ett bra sätt Implementationen är förberedd för utbyggnad Registerallokeringen behöver omkonstrueras Kompilatorn själv kan optimeras