Technische Universität Dortmund

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Vom HW-Automaten zum Prozessor
Vorlesung Compilertechnik Sommersemester 2008
CPI Der einzelne Befehl braucht immer noch 5 Zyklen (stimmt nicht ganz, einige brauchen weniger!) Was verbessert wird, ist der Durchsatz = #Befehle /
Leistung.
Befehlssatz und Struktur
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
Technische Universität Dortmund
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Technische Universität Dortmund
Imperative Programmierung
1 Energiebewusste Compilierung für digitale Signalprozessoren Markus Lorenz Peter Marwedel Universität Dortmund Lehrstuhl Informatik XII Projekt Prozessorarchitekturen.
0 Energieeffiziente Compilierung für Digitale Signalprozessoren Markus Lorenz Peter Marwedel Rainer Leupers Projekt Prozessorarchitekturen und Compilertechniken.
Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer.
On a Buzzword: Hierachical Structure David Parnas.
WS 2009/10 1 Systeme 1 Kapitel 1 Aufbau von Rechnern.
Parser generieren Yet Another Compiler – Compiler YACC.
Kapitel 3 5 Rechnerorganisation
Anfragesprachen – Dipl. Ing. Ulrich Borchert / FH Merseburg1/7 Datenbanken werden als Anhäufung von Werten eines Wertebereiches aufgefasst und Datenbankabfragen.
Neumannrechner.
Algorithmentheorie 04 –Hashing
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Aufbau und Funktionsweise von Prozessoren
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
2.5. Mikrocontroller-Komponenten
Agenda Motivation Formale Sprachen Compiler Compilerentwicklung
Vorlesung 2 Rechnerarchitektur Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Vorlesung 3: Verschiedenes Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
Christian Schindelhauer
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Einführung.
EPIC, IA-64 und Itanium Eine Kurzpräsentation von Jan Hübbers bei Prof. Dr.-Ing. Risse im Fach Labor Rechnerstrukturen an der Hochschule Bremen
1 Vorlesung 3 Verschiedenes Peter B. Ladkin
Von der Sprache zum Programm
Programmiersprachen II Integration verschiedener Datenstrukturen
2.3 Register-Transfer-Strukturen
Duo- und Quad Prozessor-Architektur
Eignung von Grammatik-basiertem Layout für grafische Programmiersprachen Seminar Layout-Algorithmen für Graphen Institut für Informatik Christian-Albrechts.
Aufbau eines von-Neumann- Rechners Marcel Waldvogel.
Effiziente Algorithmen
Entwicklung der Programmiersprachen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Systemsoftware und Betriebssysteme
Rechnerarchitekturen
Petrinetze 1. Einführung Informatik : wesentlich Modellierung von
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Parallele Programmierung mit Java, SS 2001 Spar/Timber - Programmiersprache und Compiler für high-performance Berechnungen Technische Universität München.
Code-Optimierung Philipp Bergener Seminar „Übersetzung künstlicher Sprachen“
Analyse der Laufzeit von Algorithmen
Das Java-Hamster-Modell
7. Formale Sprachen und Grammatiken
Der Prozessor Von Stephan Blum.
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Gliederung der Vorlesung
Lernfeld 4: Informationstechnische Systeme Bereitstellen
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Prozessoren Ein Referat von Maximilian Reisner. Inhalt  Erklärung  Grundbestandteile  Prinzipielle Arbeitsweise eines Prozessors  Werkstoffe  Umweltfreundliche.
1. Betreuer: Prof. Dr. Jörg Striegnitz 2. Betreuer: Dr. Martin Schindler Kontextsensitive Autocompletion für Klassendiagramme in der UML/P Florian Leppers.
Graphen.
VHDL-Modellierung der Pipeline eines DLX-Prozessors
Vom HW-Automaten zum Prozessor
Compiler für Eingebettete Systeme [CS7506]
Compiler für Eingebettete Systeme [CS7506]
 Präsentation transkript:

Technische Universität Dortmund Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung für Eingebettete Systeme

Kapitel 9 Ausblick

Gliederung der Vorlesung Kapitel 1: Compiler – Abhängigkeiten und Anforderungen Kapitel 2: Interner Aufbau von Compilern Kapitel 3: Lexikalische Analyse (Scanner) Kapitel 4: Syntaktische Analyse (Parser) Kapitel 5: Semantische Analyse Kapitel 6: Instruktionsauswahl Kapitel 7: Register-Allokation Kapitel 8: Code-Optimierung Kapitel 9: Ausblick Instruktionsanordnung Retargierbarkeit Folie 3 / 16

Motivation Instruktionsanordnung (Scheduling): Lexikalische Analyse Token- Folge Syntaktische Analyse Syntax- Baum Semantische Analyse Quell- Code Level IR High- Code- Optimierung Low- Level IR Instruktions- Auswahl High- Level IR Code- Optimierung Level IR Low- Register- Allokation Low- Level IR Instruktions- Anordnung ASM Code Instruktionsanordnung (Scheduling): Umordnen von Maschinenbefehlen zur Erhöhung der Parallelität Einfügen von NOP-Befehlen zur Erhaltung der Code-Korrektheit Wegen Kürze der Zeit in Vorlesung nicht weiter behandelt Folie 4 / 16

Pipeline-Verarbeitung (1) Eine triviale Prozessor-Pipeline: Fetch: Holt den nächsten auszuführenden Befehl aus dem Speicher. Decode: Dekodiert den Befehl und zerlegt diesen in Opcodes, Operanden, Adressierungsmodi, ... Execute: Führt einen Befehl gemäß Opcodes und Operanden aus. Das Ergebnis der Ausführungsphase wird in einem internen Zwischenregister gepuffert. Write Back: Schreibt den Inhalt des Puffer-Registers in das Registerfile des Prozessors zurück. Fetch Decode Execute Write Back Folie 5 / 16

Pipeline-Verarbeitung (2) Eine triviale Prozessor-Pipeline: Jede Stufe der Pipeline arbeitet i.d.R. in einem Taktzyklus Zu einem Zeitpunkt t kann die Pipeline parallel vier verschiedene Befehle enthalten: Befehl i1 in Fetch-Phase, i2: Decode, i3: Execute, i4: Write Back Im Idealfall beendet eine volle Pipeline mit jedem Taktzyklus die Abarbeitung eines Befehls Dieser Idealzustand kann jedoch sehr leicht gestört werden... Fetch Decode Execute Write Back Folie 6 / 16

Pipeline-Verarbeitung (3) Mögliche Störungen des Ablaufs einer Pipeline: Datenabhängigkeiten bei Speicherzugriffen: Ein Lade-Befehl i1 sei in Execute-Phase. Ein anderer Befehl i2, der das Register benutzt, das i1 aus dem Speicher lädt, sei in Decode-Phase. Da der Speicherzugriff von i1 i.d.R. mehrere Takte dauert, muss die Pipeline für diese Dauer angehalten werden. Sprünge: Ein Sprung wird in der Execute-Phase ausgeführt, so dass die dem Sprung folgenden Befehle bereits in Fetch und Decode enthalten sind. Wird der Sprung genommen, sind Fetch- und Decode-Stufen zu leeren und ab Adresse des Sprungziels erst neu zu füllen. Folie 7 / 16

Anordnung von Instruktionen Grundsätzliche Idee: Maschinenbefehle können in einem Programm in beliebiger Reihenfolge umgeordnet werden, solange zwischen je zwei Befehlen i1 und i2 ... ...Datenabhängigkeiten beachtet werden. Wenn z.B. i1 ein Register benutzt, das i2 definiert, darf i1 im Code nicht hinter i2 angeordnet werden. ...Kontrollabhängigkeiten beachtet werden. Wenn z.B. aufgrund des Kontrollflusses gilt, dass eine Ausführung von i1 stets eine Ausführung von i2 nach sich zieht, so dürfen i1 und i2 nicht so umgeordnet werden, dass diese Beziehung später nicht mehr gilt. Folie 8 / 16

Instruktions-Scheduling im Compiler Grundsätzliche Idee: Für jede Instruktion i kann man ein Intervall [v, h] bestimmen: um wie viele Instruktionen kann man i nach vorne / hinten im Code verschieben, ohne die Korrektheit des Programms zu verletzen. Ein Scheduler im Compiler kann diese Intervalle nun ausnutzen, um den Code so umzuordnen, dass die Prozessor-Pipeline(s) möglichst wenig gestört werden. Bsp. Datenabhängigkeiten: Schiebe einen weiteren Befehl i3 zwischen Lade-Befehl i1 und i2. Bsp. Sprünge: Schiebe 1 oder 2 Befehle, von denen ein Sprung i nicht datenabhängig ist, hinter i, um die sog. Delay-Slots zu füllen. Bsp. TriCore: Ordne Befehle so an, dass alle 3 Pipelines stets laufen. Folie 9 / 16

Gliederung der Vorlesung Kapitel 1: Compiler – Abhängigkeiten und Anforderungen Kapitel 2: Interner Aufbau von Compilern Kapitel 3: Lexikalische Analyse (Scanner) Kapitel 4: Syntaktische Analyse (Parser) Kapitel 5: Semantische Analyse Kapitel 6: Instruktionsauswahl Kapitel 7: Register-Allokation Kapitel 8: Code-Optimierung Kapitel 9: Ausblick Instruktionsanordnung Retargierbarkeit Folie 10 / 16

Motivation Bisherige Sichtweise auf einen Compiler: Ein Ziel-Prozessor P sei fest vorgegeben. Dann besteht die Auf-gabe darin, einen Übersetzer von einer Quell- in die Maschinen-sprache von P zu konstruieren, mit möglichst hoher Codequalität. Die meisten Komponenten des Compilers brauchen Detailwissen über die Architektur von P. Dieses Wissen ist fest in die einzelnen Phasen / Optimierungen des Compilers einprogrammiert. Was, wenn man statt eines Compilers für P einen für P’ braucht? Alle Compiler-Komponenten für P’ neu programmieren? Folie 11 / 16

Retargierbarkeit Retargierbarkeit: Ist die Fähigkeit, einen Compiler an eine andere Ziel-Architektur (target architecture) anzupassen. Struktur hochoptimierender Compiler: Die bisher in dieser Vorlesung betrachtete Struktur von Compilern ( siehe Folie 4) ist schlecht retargierbar. Zum Retargieren müssen Code-Selektion, sämtliche LIR-Optimierungen, Register-Allokator und Scheduler zu großen Teilen neu implementiert werden. Folie 12 / 16

Ein besser retargierbarer Compiler Medium- Level IR Code Optimierung Medium- Level IR Instruktions- Auswahl Quell- Code Frontend Level IR Low- Instruktions- Anordnung Low- Level IR Register- Allokation ASM Code Eigenschaften: Statt einer HIR enthält dieser Compiler eine MIR und LIR. Sämtliche Code-Optimierungen finden auf MIR-Ebene statt, sind daher prozessorunabhängig und brauchen nicht retargiert werden. Hochgradig spezielle Optimierungen, die komplexe Prozessor-Features ausnutzen, sind nur schwer bis gar nicht zu integrieren. Aufwand zur Retargierung des Backends bleibt bestehen. Folie 13 / 16

Automatische Compiler-Konstruktion Framework zur Compiler- Konstruktion Compiler Beschreibung Ziel- Architektur IR RT-Libs Frontend CS- Generator RA- Generator IA- Generator Optimier- ungen … Compiler-Konstruktion: Ausgangspunkt ist eine Beschreibung des Ziel-Prozessors entweder in HW-Beschreibungssprache (z.B. VHDL) oder in System-Beschreibungssprache (z.B. SystemC oder Lisa) Aus dieser Beschreibung heraus wird automatisch ein Compiler-Backend erzeugt. Folie 14 / 16

Automatische Compiler-Konstruktion Framework zur Compiler- Konstruktion Compiler Beschreibung Ziel- Architektur IR RT-Libs Frontend CS- Generator RA- Generator IA- Generator Optimier- ungen … Compiler-Konstruktion (Fortsetzung): Aus der Prozessor-Beschreibung wird der komplette Befehlssatz des Prozessors extrahiert. Mit diesem wird dann eine vollständige Baum-Grammatik zur Generierung des Code-Selektors erzeugt. Analog werden Features der Register-Files extrahiert, um einen Register-Allokator zu generieren. (Analog für einen Scheduler) Folie 15 / 16

Automatische Compiler-Konstruktion Framework zur Compiler- Konstruktion Compiler Beschreibung Ziel- Architektur IR RT-Libs Frontend Assembler Linker CS- Generator RA- Generator IA- Generator Optimier- ungen … Simulator Compiler-Konstruktion (Fortsetzung): Diese Backend-Komponenten werden mit „vorgefertigten” Stan-dard-Komponenten gekoppelt, die die zentrale IR, das Frontend sowie IR-Optimierungen und Laufzeit-Bibliotheken bereitstellen. Neben einem Compiler kann ein solches Framework zusätzlich Assembler, Linker und Zyklus-genauen Simulator generieren. Folie 16 / 16