Superoptimierer. Manuel Odendahl
|
|
- Nora Holst
- vor 6 Jahren
- Abrufe
Transkript
1 Superoptimierer Manuel Odendahl 2. Juni 2003
2 Inhaltsverzeichnis 1 Einführung 1 2 Beispiel: Berechnen des Vorzeichens einer Integer Zahl 2 3 Implementierung Befehlsdefinition Befehlsfolgengenerierung und Testen Erweiterungen 5 Literatur 6 1 Einführung Bei vielen Projekten, besonders im Bereich der eingebetteten Applikationen, ist handoptimierter Assemblercode immer noch notwendig, da optimierende Compiler oft suboptimalen Maschinencode erzeugen. Assemblerprogrammierung benötigt jedoch eine tiefgreifende Kenntniss der unterliegenden Maschinenarchitektur, und handoptimierter Code lässt sich nur sehr geringfügig auf andere Architekturen portieren. In seinem Artikel Superoptimizer - A Look at the Smallest Program [4] stellt Massalin ein Programm vor, mit dem Code erzeugt werden kann, der qualitativ gleichrangig, wenn nicht besser als handoptimierter Code ist. Den Superoptimierer, den er vorstellt, optimiert eine gegebene Assemblercodesequenz A, in dem er den Suchraum der Assemblerprogramm mit einer Breitensuche durchgeht, und jedes Programm für bestimmte Testwerte mit A vergleicht. Sind die Ergebnisse verschieden, wird das Assemblerprogramm verworfen, sonst ist eine mögliche Optimierung von A gefunden worden. Das Programm von Massalin benutzt dazu die unterliegende Hardware als Emulationsplattform, indem er generierte Programm einfach direkt ausführt. Spätere Ansätze benutzen virtuelle Instruktionen, und können somit auch für unterschiedliche Hardwarearchitekturen Code optimieren. Wegen der überwältigenden Grösse des Suchraums (alle mögliche Zielmaschinenprogramme) werden verschiedene Kompromisse gemacht und Optimierungen eingesetzt. In einem ersten Abschnitt werde ich ein kurzes Beispiel aus dem Artikel von Massalin vorstellen, an dem gezeigt wird, welche Art von Optimierung ein Superoptimierer durchführen kann. Anschliessend werde ich die Implementierung eines Superoptimierers anhand der des Programms Aha! von Henry S. Warren, Jr und einer eigenen Implementierung erläutern. Schliesslich werde ich kurz verschiedene Erweiterungen und mögliche Optimierungen des Verfahrens beschreiben. 1
3 2 Beispiel: Berechnen des Vorzeichens einer Integer Zahl In dem Artikel von Massalin wird als Beispiel die Funktion signum gegeben, die in C folgendermaßen aussieht: int signum(int x) { if (x > 0) return 1; else if (x < 0) return -1; else return 0; } signum wird von den meisten Übersetzern in Befehle übersetzt (Massalin verwendet in seiner Arbeit den Befehlssatz). Handoptimierte Assemblerlösungen sind ungefähr 8 Instruktionen lang, ein guter Programmierer kann daraus 6 Befehle machen. Der Superoptimierer jedoch generiert folgenden Code (x ist in d 0, das Ergebnis wird in d 1 zurückgeliefert): add.l d0, d0 ; addieren von d0 mit sich selbst subx.l d1, d1 ; substrahieren von (d1 + carry flag) von d1 negx.l d0 ; (0 - d0 - carry flag) nach d0 addx.l d1, d1 ; addieren von (d1 + carry flag) auf d1 Die Vorgehensweise hinter diesem Codebeispiel ist wie bei den meisten superoptimierten Programmen recht komplex. Das Programm funktionniert in etwa so: add.l d0, d0 verdopplet den Inhalt von d 0, verlegt aber vor allem das Vorzeichenbit in den Carry Flag. subx.l d1, d1 berechnet d 1 d 1 carry = carry, so dass d 1 = 0, falls d 0 >= 0, und d 1 = 1, falls d 0 < 0. negx.l d0 setzt den Carry Flag gdw. d 0 0. addx.l d1, d1 berechnet d 1 = d 1 + d 1 + carry. Falls d 0 < 0 war, dann ist d 1 = 1 und carry = 1, so dass d 1 = d 1 + d 1 + carry = 1. Falls d 0 = 0 war, dann ist d 1 = 0 und carry = 0, so dass d 1 = d 1 + d 1 + carry = 0. Falls d 0 > 0 war, dann ist d 1 = 0 und carry = 1, so dass d 1 = d 1 + d 1 + carry = 1. Dieses Beispiel zeigt, wie effektiv ein Superoptimierer sein kann. 2
4 3 Implementierung 3.1 Befehlsdefinition Der Superoptimierer von Massalin generierte anhand von Befehlsmasken gültige Maschinenbefehle für den unterliegenden Prozessor. Dabei wurde eine Breitensuche mit maximaler Tiefe durch den Suchraum der gültigen Programme gemacht. Allerdings wurde weder Masken für Speicherzugriffs noch fuer Kontrollflussbefehle benutzt, da sie zu Speicherschutzverletzungen bzw. zu unendlichen Schleifen führen konnten. Die neueren Ansätze von Torbjörn Granlund [1] und Henry S. Warren Jr. [3] benutzen nicht mehr die unterliegende Hardware zum Testen der Programme, sondern virtuelle Befehle, mit denen beliebige Architekturen emuliert werden können. Ich werde in diesem Abschnitt auf die Vorgehensweise von Warren Jr. eingehen, die in dem Benutzerhandbuch zu seinem Superoptimierer Aha! [3] beschrieben wird, und insbesondere auch auf einer eigenen Implementierung in LISP, die auf Aha! basiert. Bei Aha! können nur 3-Register-Befehl Architekturen emuliert werden, da der eigentliche Registersatz der Zielarchitektur nicht modelliert wird. Es werden nur virtuelle Register benutzt, die entweder die Eingabeparameter beinhalten, oder Ergebnisse von vorigen Befehlen. Es ist also dem Benutzer überlassen, Programme, die auf einer bestimmten Architektur (z.b. x86) nicht gültig sind, zu eliminieren. Allerdings sind die meisten modernen RISC Architekturen 3-Register-Befehl Architekturen. Bei Aha! werden Befehle durch folgende Parameter beschrieben: 1. Eine Funktion, die die Instruktion emuliert 2. Die Anzahl an Operanden (Eingangsparameter) 3. Die Kategorie der einzelnen Operanden Jeder Befehlsparameter gehört einer der folgenden Kategorien an: Zahlenwert (z.b. 0, 1, -1, usw...). Es können nur bestimmte vorgegebene Zahlenwerte benutzt werden, da das Durchlaufen des kompletten Integerbereichs den Verzweigungsfaktor ins Unermessliche erhöhen würde (> auf einer 32-Bit Architektur). Zahlenwert zum Schieben (meistens 1, 2, 3, 4, usw...). Der Operand wird als Verschiebungsindex benutzt. Register. Bei Aha! werden die Eingabeargumente und die Ergebnisse der einzelnen Befehle als Register benutzt. Bevor der erzeugte Assemblercode eingesetzt werden kann muss der Programmierer die Register an die Zielmaschine wieder anpassen. 3
5 In der LISP Implementierung sind Befehlsdefinition geringfügig flexibler, da beliebige Wertelisten als Operandendefinitionen benutzt werden können (z.b. bei der add Instruktion die literalen Wert 1, 1, 4, 4, siehe Abbildung 1). (make-instruction add ; Name des Befehls ( register (register )) ; Operanden ;; Implementierung des Befehls (multiple-values-bind (res carry) (add-bits 16 r0 r1) (setf (get-flag-value machine carry) (if carry 1 0)))) Abbildung 1: Add Befehl in der LISP Implementierung Anhand dieser Befehldefinitionen werden konkrete Befehle generiert, in dem für die Operanden aus den Beschreibungen konkrete Werte berechnet werden (siehe Abbildung 2 für add). Wenn ein Register als Parameter übergeben werden kann, werden folgende virtuelle Register eingesetzt: 1. Eins der Eingaberegister (Eingabewerte für die zu optimierende Funktion) 2. Eins der Ergebnisse der vorigen Befehle (z.b. Ergebnis des 2. Befehls) Die LISP-Implementierung berechnet zu einer Befehlsdefinition alle möglichen Kombinationen der Operandenwerte, und instanziiert mit ihnen konkrete Instruktionen. Aha! geht dabei ein bisschen feinfühliger vor, indem redundante Instruktionen (z.b. permutierte Operanden bei kommutativen Befehlen) eliminiert werden. (generate-concrete-instructions add ; Add Befehl (list (make-register 0)) ; Liste der benutzbaren Register :result-register (make-register 1)) ; Ergebnisregister => (INS{r1 = ADD r0, r0} INS{r1 = ADD r0, -4} INS{r1 = ADD r0, 4} INS{r1 = ADD r0, -1} INS{r1 = ADD r0, 1}) Abbildung 2: Konkrete Befehl zu dem Add Befehl in der LISP Implementierung 4
6 3.2 Befehlsfolgengenerierung und Testen Zu jeder Befehlsdefinition wird die Menge der gültigen konkreten Befehle generiert, und zu Programmmen der Länge l kombiniert. Dabei wird der komplette Raum der gültigen Programme der Länge l eingespannt. Jedes dieser Programme wird dann in einem Breitensuchverfahren ausgewertet, und die Ergebnisse mit den Ergebnissen der zu optimierenden Funktion verglichen. Stimmen diese überein, ist möglicherweise ein optimales Programm gefunden worden. Um die Suche zu beschleunigen, wird jedes Programm nur für ein paar Eingabewerte ausgewertet. Somit ist es möglich, auch falsche Programme zu finden. Es wird dem Benutzer überlassen, die Korrektheit des gefundenen Programms genauer zu überprüfen. Lässt man die LISP Implementierung optimierte Assemblerprogramme für das Programm in 2 suchen, kommt es zu folgenden Ergebnissen: (search-program test ; Testimplementierung eines Prozessors 4 ; Gesuchte Länge ;; Zu optimierende Funktion # (lambda (x) (cond ((> x 0) 1) ((< x 0) -1) (t 0))) ;; Testwerte ((1) (-1) (0) (2) (-2) (10000) (20000) ( ) ( ))) => (INS{r2 = ADD rs0, rs0} INS{r3 = SUB rs0, rs0} INS{r4 = NEG rs0} INS{r5 = ADD r3, r3}) (INS{r2 = ADD rs0, rs0} INS{r3 = SUB r2, r2} INS{r4 = NEG rs0} INS{r5 = ADD r3, r3}) (INS{r2 = NEG rs0} INS{r3 = ADD rs0, rs0} INS{r4 = ADD rs0, rs0} INS{r5 = SUB r3, r4}) (INS{r2 = NEG rs0} INS{r3 = ADD rs0, rs0} INS{r4 = SUB r3, rs0} INS{r5 = SUB r4, rs0}) (INS{r2 = NEG rs0} INS{r3 = SUB rs0, r2} INS{r4 = ADD r2, r3} INS{r5 = SUB rs0, r4})... Wie man sieht wurde hier dieselbe Lösung wie mit dem Optimierer von Massalin gefunden. Die restlichen Programme sind auf einer 2-Register Architektur (wie z.b. der Prozessor) nicht implementierbar und können ignoriert werden. Sie sind meistens nur Umordnungen der gültigen Lösung. 5
7 4 Erweiterungen Rajeev Joshi, Greg Nelson und Keith Randall [2] entwarfen Denali, ein Superoptimierer, der basierend auf einen automatischen Beweiser korrekten Code generiert, allerdings wurde das System noch nicht vollständig implementiert. Torbjörn Granlund und Richard Kenner benutzten einen Superoptimierer, um für den GCC optimierten Code für die RS6000 Architektur zu generieren. Desweiteren wär es möglich, die Breitensuche des Superoptimierers zu massiv zu parallelisieren. 5 Zusammenfassung Ein Superoptimierer ist ein Programm, der den kompletten Raum der gültigen Programme durchläuft, um ein möglichst kurzes Programm zu finden, dass dieselben Ergebnisse wie eine Referenzimplementierung des zu optimierenden Programms liefert. Damit können aufwendige Handoptimierungen maschinell durchgeführt werden. Allerdings ist der Aufwand des Verfahrens sehr hoch, so dass kaum optimierte Programme mit mehr als 8 Befehlen gefunden werden können. Genauso können keine komplexe Programme mit Sprungbefehlen gefunden werden. 6
8 Literatur [1] Torbjörn Granlund and Richard Kenner. Eliminating branches using a superoptimizer and the gnu c compiler [2] Rajeev Joshi, Greg Nelson, and Keith Randall. Denali: A goal-directed superoptimizer [3] Henry S. Warren Jr. Aha! manual [4] Henry Massalin. Superoptimizer - a look at the smallest program
Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44
Aufgabe 33 a) Der Pseudobefehl move $rd,$rs wird als addu $rd,$0,$rs übersetzt. Dabei macht sich SPIM zunutze, dass das Register $0 immer Null ist. Somit wird das Register $rd ersetzt durch $rd=0+$rs=$rs,
MehrMikroprozessor bzw. CPU (Central Processing. - Steuerwerk (Control Unit) - Rechenwerk bzw. ALU (Arithmetic Logic Unit)
Der Demo-Computer besitzt einen 4Bit-Mikroprozessor. Er kann entsprechend Wörter mit einer Breite von 4 Bits in einem Schritt verarbeiten. Die einzelnen Schritte der Abarbeitung werden durch Lampen visualisiert.
MehrDie Mikroprogrammebene eines Rechners
Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.
MehrDas Prinzip an einem alltäglichen Beispiel
3.2 Pipelining Ziel: Performanzsteigerung é Prinzip der Fließbandverarbeitung é Probleme bei Fließbandverarbeitung BB TI I 3.2/1 Das Prinzip an einem alltäglichen Beispiel é Sie kommen aus dem Urlaub und
MehrProgrammierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.
1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache
MehrBetriebssysteme Teil 4: Übersetzung von C-Programmen
Betriebssysteme Teil 4: Übersetzung von C-Programmen 18.10.13 1 Übersicht Übersetzungsprozess gcc(i) als Steuerprogramm Assembler Binder Hauptprogramme in C In dieser Einheit werden nur die Grundprinzipien
MehrStatic-Single-Assignment-Form
Static-Single-Assignment-Form Compilerbau Static-Single-Assignment-Form 195 Static-Single-Assignment-Form besondere Darstellungsform des Programms (Zwischensprache) vereinfacht Datenflussanalyse und damit
MehrCompiler: Vom Code zum Maschinen-Code. C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg
Compiler: Vom Code zum Maschinen-Code C Programmierung - Vorlesung 2 Hochschule Regensburg 19.03.2012 Universitätsstraße 31, 93053 Regensburg Prof. Dr. Jan Dünnweber Zusammenhänge: C und Assembler Hochsprachen
MehrMikrocontroller effektiv in C programmieren - ein noch unbekanntes Land
Mikrocontroller effektiv in C programmieren- ein noch unbekanntes Land Mikrocontroller effektiv in C programmieren - ein noch unbekanntes Land HS Pforzheim Fakultät Technik Mikrocontroller-Labor Tiefenbronner
MehrDer Computer von Neumann
1. Einführung Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Aufbau eines Computers!Systemumgebung!Vorgang des Programmierens!Editor, Debugger, Linker!Programmiersprachen - Geschichte Copyright:
MehrEinführung ins Programmieren
Einführung ins Programmieren Prof. Dr. Markus Gross Informatik I für D-MAVT (FS 2015) Aufbau eines Computers Systemumgebung Vorgang des Programmierens Editor, Debugger, Linker Programmiersprachen - Geschichte
MehrCompiler und Codegenerierung. Hw-Sw-Co-Design
Compiler und Codegenerierung Hw-Sw-Co-Design Wo sind wir? System Verhalten Modul Architektur Block SW HW Logik Struktur Compiler und Codegenerierung Compiler - Aufbau Codegenerierung Codeoptimierung Codegenerierung
Mehrx86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013
x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle
MehrHaskell auf der Überholspur mit LLVM. Henning Thielemann 2014-06-20
Haskell auf der Überholspur mit LLVM Henning Thielemann 2014-06-20 1 2 Funktionsweise 3 Übungen Motivation 1 Motivation LLVM 2 Funktionsweise 3 Übungen Motivation Motivation Haskell-Programmierer: Was
MehrAssembler-Programmierung
Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung
MehrHardware/Software-Codesign
Klausur zur Lehrveranstaltung Hardware/Software-Codesign Dr. Christian Plessl Paderborn Center for Parallel Computing Universität Paderborn 8.10.2009 Die Bearbeitungsdauer beträgt 75 Minuten. Es sind keine
Mehr4.2 Universalrechner: Schaltung unabhängig vom Problem 185
4.2 Universalrechner: Schaltung unabhängig vom Problem 85 a) Geben Sie binär die Befehlsworte an, mit denen Sie die Eingänge a, b und c in die Register R, R2 und R übernehmen. K D M4 M M2 M Kommentar XXXXXXXXXXX
MehrAusarbeitung des Interpreter Referats
Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache
Mehr5.BMaschinensprache und Assembler
Die Maschinenprogrammebene eines Rechners Jörg Roth 268 5.BMaschinensprache und Assembler Die vom Prozessor ausführbaren Befehle liegen im Binärformat vor. Nur solche Befehle sind direkt ausführbar. So
MehrAssembler-Programme. Systemprogrammierung (37-023) Elementare Komponenten eines Assembler-Programmes
Systemprogrammierung (37-023) Assemblerprogrammierung Betriebssystemgrundlagen Maschinenmodelle Dozent: Prof. Thomas Stricker krankheitshalber vertreten durch: Felix Rauch WebSite: http://www.cs.inf.ethz.ch/37-023/
MehrEinführung in die Programmierung mit C++
Seite 1 Einführung in die Programmierung mit C Teil IV - Weiterführende Themen 16. SIMD Programmierung Was bedeutet SIMD Seite SIMD Single-Instruction, Multiple-Data, also eine Instruktion, mehrere Daten
MehrKap 4. 4 Die Mikroprogrammebene eines Rechners
4 Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten (Befehl holen, Befehl dekodieren, Operanden holen etc.).
MehrGrundlagen der Rechnerarchitektur
Grundlagen der Rechnerarchitektur ARM, x86 und ISA Prinzipien Übersicht Rudimente des ARM Assemblers Rudimente des Intel Assemblers ISA Prinzipien Grundlagen der Rechnerarchitektur Assembler 2 Rudimente
MehrInformatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 1 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen This semester s menu... Imperative Programmierung
MehrWirtschaftsinformatik I
Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation
MehrInstruktionssatz-Architektur
Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile
MehrKode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen
Kode-Erzeugung, Abstrakte Maschinen, Rechnerarchitekturen Kode-Erzeugung: Syntaxbaum Ausgabeprogramm Starte mit Syntaxbaum: Darstellung des eingegebenen Programms Wähle Zielarchitektur Wähle abstrakte
MehrKarlsruher Institut für Technologie
Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt
MehrAlgorithmen zur Integer-Multiplikation
Algorithmen zur Integer-Multiplikation Multiplikation zweier n-bit Zahlen ist zurückführbar auf wiederholte bedingte Additionen und Schiebeoperationen (in einfachen Prozessoren wird daher oft auf Multiplizierwerke
MehrTechnische Informatik 1
Technische Informatik 1 2 Instruktionssatz Lothar Thiele Computer Engineering and Networks Laboratory Instruktionsverarbeitung 2 2 Übersetzung Das Kapitel 2 der Vorlesung setzt sich mit der Maschinensprache
MehrWHERE Klausel Generierung mit.net und Oracle. Aus unserer Projekterfahrung und Architektur-Kurs
Betrifft Art der Info Quelle WHERE Klausel Generierung mit.net und Oracle Technical Info Aus unserer Projekterfahrung und Architektur-Kurs Where ist the WHERE? Der Artikel untersucht die Möglichkeiten,
Mehr3.0 8051 Assembler und Hochsprachen
3.0 8051 Assembler und Hochsprachen Eine kurze Übersicht zum Ablauf einer Programmierung eines 8051 Mikrocontrollers. 3.1 Der 8051 Maschinencode Grundsätzlich akzeptiert ein 8051 Mikrocontroller als Befehle
MehrProgrammieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff
Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet
MehrEinführung in die Systemprogrammierung
Einführung in die Systemprogrammierung Speedup: Grundlagen der Performanz Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 30. April 2015 Eine Aufgabe aus der Praxis Gegeben ein
MehrDiplomarbeit Antrittsvortrag
Diplomarbeit Antrittsvortrag Christian Müller Run-time byte code compilation, interpretation and optimization for Alice Betreuer: Guido Tack Verantwortlicher Prof.: Gert Smolka Die nächsten 15 Minuten...
MehrBeispiel einer Übersetzung
Beispiel einer Übersetzung Ausdruck in C aktuelle_zeit = Startzeit + vergangene_minuten*60 + vergangene_sekunden; Ausdruck im Instruktionssatz des R10000 LW r1,minuten LW r1,sekunden ADDI r2,r0,60 ADD
MehrSoftwarelösungen: Versuch 4
Softwarelösungen: Versuch 4 Nichtstun in Schleife wird ersetzt durch zeitweilige Zurücknahme der Anforderung, um es anderen Prozessen zu erlauben, die Ressource zu belegen: /* Prozess 0 */ wiederhole flag[0]
Mehr2D22 Prinzipien der Softwareentwicklung. Prinzipien der Softwareentwicklung S. Strahringer 1
2D22 1 Inhalte der Lehrveranstaltung Einführung in die Programmierung mit PHP Literatur: Theis, Thomas (2010): Einstieg in PHP 5.3 und MySQL 5.4. [für Programmieranfänger geeignet]. 6., aktualisierte Aufl.
Mehr3 Rechnen und Schaltnetze
3 Rechnen und Schaltnetze Arithmetik, Logik, Register Taschenrechner rste Prozessoren (z.b. Intel 4004) waren für reine Rechenaufgaben ausgelegt 4 4-Bit Register 4-Bit Datenbus 4 Kbyte Speicher 60000 Befehle/s
MehrUmsetzung in aktuellen Prozessoren
Kapitel 8: Umsetzung in aktuellen Prozessoren 4 Realisierung elementarer Funktionen Reihenentwicklung Konvergenzverfahren 5 Unkonventionelle Zahlensysteme redundante Zahlensysteme Restklassen-Zahlensysteme
MehrNuetzlicher Kleinkram
Ein paar Hilfestellungen zur Arbeit unter Linux/Unix FB Physik Freie Universität Berlin Computerphysik WS 2007/2008 1 2 3 user@ host :~ > gcc -o programm quelltext. c macht gleich mehrere Dinge auf einmal
MehrProgrammiertechnik. Prof. Dr. Oliver Haase Raum G124 haase@htwg-konstanz.de Tel: 07531/206-150. Oliver Haase Hochschule Konstanz 1
Programmiertechnik Prof. Dr. Oliver Haase Raum G124 haase@htwg-konstanz.de Tel: 07531/206-150 Oliver Haase Hochschule Konstanz 1 Organisatorisches Vorlesung: montags, 8:00 9:30h, Raum C-109 freitags, 8:00
MehrDebuggen mit GDB (Gnu DeBugger) unter Eclipse
Debuggen mit GDB (Gnu DeBugger) unter Eclipse Boris Budweg, 16.11.2009 Version 0.4 Abstract: Kleine Einführung in die Bedienung des GDB über Eclipse und die Möglichkeiten eines Debuggers. Viele Screenshots
MehrCodesigned Virtual Machines
Codesigned Virtual Machines Seminar Virtualisierung Philipp Kirchhofer philipp.kirchhofer@student.kit.edu Institut für Technische Informatik Lehrstuhl für Rechnerarchitektur Universität Karlsruhe (TH)
MehrMikroprozessor als universeller digitaler Baustein
2. Mikroprozessor 2.1 Allgemeines Mikroprozessor als universeller digitaler Baustein Die zunehmende Integrationsdichte von elektronischen Schaltkreisen führt zwangsläufige zur Entwicklung eines universellen
Mehr1 Einleitung zum RISC Prozessor
1 Einleitung zum RISC Prozessor Wesentliche Entwicklungsschritte der Computer-Architekturen [2, 3]: Familienkonzept von IBM mit System/360 (1964) und DEC mit PDP-8 (1965) eingeführt: Gleiche Hardware-Architekturen
MehrPraktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization
Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10 Übersicht In den ersten Wochen: Einführung in objektorientierte Programmierung mit C++ Anschließend: Einführung in die programmierbare
MehrElementare logische Operationen
RECHNERARCHITEKTUR 2 - ELEMENTARE LOGISCHE OPERATIONEN 1 Elementare logische Operationen Modifizieren, Testen,Vergleichen In diesem Abschnitt wollen wir zeigen, wie man mit den elementaren logischen Verknüpfungen
MehrProgrammierung. Programme, Compiler, virtuelle Maschinen, Java
Programmierung Programme, Compiler, virtuelle Maschinen, Java Programme Ein Programm ist eine Folge von Anweisungen, die einem Computer sagen, was er tun soll tuwas.c for(int i=0; i=0; i
MehrGrundlagen der Informatik - 6. Praktikum
Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt
MehrÜbungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen
Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe
Mehr0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.
3. Assembler-Programmierung Der PIC 16F84A Microcontroller kennt 35 verschiedene Befehle. Für eine ausführliche Beschreibung aller Befehle siehe PIC16F84A-Datenblatt Kapitel 7.1. 3.1 Wichtige Flaggen im
MehrProgrammieren in C Einführung
Programmieren in C Einführung Aufbau eines Programms Einfache Programme Datentypen und Vereinbarungen Das Entwicklungswerkzeug Seite Einfache Programme Kugeltank-Berechnung #include void main
Mehr9.0 Komplexe Schaltwerke
9.0 Komplexe Schaltwerke Die Ziele dieses Kapitels sind: Lernen komplexe Schaltwerke mittels kleinerer, kooperierender Schaltwerke zu realisieren Verstehen wie aufgabenspezifische Mikroprozessoren funktionieren
MehrTechnische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015
Technische Informatik 1 Übung 2 Assembler (Rechenübung) Georgia Giannopoulou (ggeorgia@tik.ee.ethz.ch) 22./23. Oktober 2015 Ziele der Übung Aufgabe 1 Aufbau und Aufruf von Funktionen in Assembler Codeanalyse
MehrÜbungspaket 19 Programmieren eigener Funktionen
Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame
Mehr9 Strukturierte Programmierung
9 Die "strukturierte Programmierung" ist entstanden aus dem Wunsch, die Korrektheit von Programmen beweisen zu können. Dies wäre ein ziemlich hoffnungsloses Unterfangen, wenn jede beliebige Programmstruktur
MehrDATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE
D - CA - IV - AA - 1 HUMBOLDT-UNIVERSITÄT ZU BERLIN INSTITUT FÜR INFORMATIK Vorlesung 4 DATEN UND BEFEHLSFORMATE, ADDRESSIERUNGSARTEN UND MASCHINEN- PROGRAMMIERUNGSKONZEPTE Sommersemester 2003 Leitung:
MehrLösungsvorschlag zur 4. Übung
Prof. Frederik Armknecht Sascha Müller Daniel Mäurer Grundlagen der Informatik 3 Wintersemester 09/10 Lösungsvorschlag zur 4. Übung 1 Präsenzübungen 1.1 Schnelltest a) Welche Aussagen zu Bewertungskriterien
MehrEinführung in Generatives Programmieren. Bastian Molkenthin
Einführung in Generatives Programmieren Bastian Molkenthin Motivation Industrielle Entwicklung *!!*,(% % - #$% #!" + '( & )!* Softwareentwicklung Rückblick auf Objektorientierung Objektorientierte Softwareentwicklung
MehrProgrammierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil IV: Programmieren an Beispielen
Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13 Eine Einführung in Aufbau, Funktionsweise, Programmierung und Nutzen von Mikroprozessoren Teil IV: Programmieren an Beispielen Die
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 1. Einführung und Grundbegriffe
1 Kapitel 1 2 Ziele Begriffsbildungen: Informatik, Algorithmus, Programm, Compiler, Einordnung von Java Ein einfaches Java-Programm erstellen, übersetzen und ausführen Java-Programme dokumentieren 3 Informatik
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrPropädeutikum. Dipl.-Inf. Frank Güttler
Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik
MehrFunktionaler Aufbau eines Computers Untersuchung von Delphi-Compilaten
Funktionaler Aufbau eines Computers Im Folgenden soll der Weg untersucht werden, wie ein Programm, das von einem Compiler/Interpreter in Maschinencode übertragen wurde, schließlich vom Prozessor abgearbeitet
MehrEinführung in die Systemprogrammierung
Einführung in die Systemprogrammierung Sprachen und Übersetzer Prof. Dr. Christoph Reichenbach Fachbereich 12 / Institut für Informatik 4. Juni 2015 Sprachen vs. Übersetzer Sprache C11 Übersetzer GNU C
MehrC++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet
C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()
MehrNebenläufige Programmierung
Nebenläufige Programmierung Perspektiven der Informatik 27. Januar 2003 Gert Smolka Telefon-Szenario Eine Telefonzelle Mehrere Personen wollen telefonieren Immer nur eine Person kann telefonieren Ressource
MehrGliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik
Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.
MehrTI II. Sommersemester 2009 Prof. Dr. Mesut Güneş 7. Aufgabenblatt mit Lösungen
7. Aufgabenblatt mit Lösungen Problem 1: IEEE-Gleitkommazahlen (2+2+4=8) a) Welchen Bereich der positiven Zahlen kann man mit normalisierten Gleitkommazahlen im IEEE-754-Format mit 64 Bit darstellen? b)
MehrProgrammierkurs: Delphi: Einstieg
Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache
MehrL3. Datenmanipulation
L Datenmanipulation Aufbau eines Computers Prozessor, Arbeitsspeicher und system Maschinensprachen und Maschinenbefehle Beispiel einer vereinfachten Maschinensprache Ausführung des Programms und Befehlszyklus
MehrBefehlssatz AVR RISC Controller
Befehlssatz AVR RISC Controller Design-Philosophie des AVR Befehlssatzes Assembler-Sprache AVR-Befehlssatz Philosophie RISC = Reduced Instruction Set Computing keine komplexen Befehle möglichst symmetrischer
MehrPython Programmieren. Variablen, Ausdrücke und Anweisungen
Python Programmieren Funktionen Module und Namensräume Datentypen in Python Was noch zu sagen bleibt... richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Variablen Variablennamen und
Mehr5. Übung: Binäres Rechnen und Fließkommazahlen Abteilung Verteilte Systeme, Universität Ulm
5. Übung: Binäres Rechnen und Fließkommazahlen Aufgabe 1: Binäres Rechnen a) Berechnen Sie: x = 01100101b*(0101101b-10110100b)+10101b. Alle Zahlen sind 8 Bit breit und in Zweierkomplement-Notation angegeben.
MehrKostenmaße. F3 03/04 p.188/395
Kostenmaße Bei der TM nur ein Kostenmaß: Ein Schritt (Konfigurationsübergang) kostet eine Zeiteinheit; eine Bandzelle kostet eine Platzeinheit. Bei der RAM zwei Kostenmaße: uniformes Kostenmaß: (wie oben);
MehrSoftwarepraktikum: Einführung in gcc / g++
Softwarepraktikum: Einführung in gcc / g++ (Eingebettete Systeme und Robotik),, http://ai3.inf.uni-bayreuth.de /home/db_lehre/softwarepraktikum/einfuehrungsvortraege/gcc-vortrag.01.sxi Unterschied gcc
MehrAlgorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18.
Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013 Vorlesung 9, Dienstag 18. Dezember 2012 (Performance Tuning, Profiling, Maschinencode) Prof. Dr.
MehrProgrammiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm
Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i
MehrBTree.dll - Balancierte und verkettete Bäume. Ecofor. BTree.dll. Realisiert mit Microsoft Visual Studio 16.04.2015 1/9
BTree.dll Realisiert mit Microsoft Visual Studio 16.04.2015 1/9 INHALT 1. Allgemein... 3 2. Class BTree1 (balanciert)... 3 3. Class BTree2 (balanciert und verkettet)... 4 4. Beschreibung BTree1 und BTree2...
MehrTechnische Informatik 2 Adressierungsarten
Technische Informatik 2 Adressierungsarten Prof. Dr. Miroslaw Malek Sommersemester 2009 www.informatik.hu-berlin.de/rok/ca Thema heute X-Adressmaschine 0-Adressmaschine 1-Adressmaschine 2-Adressmaschine
MehrName: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:
Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel
MehrJ.5 Die Java Virtual Machine
Java Virtual Machine Die Java Virtual Machine 22 Prof. Dr. Rainer Manthey Informatik II Java-Compiler und Java Virtual Machine Quellcode-Datei class C... javac D.java Java-Compiler - Dateien class class
MehrBeispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging
Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit
MehrEinführung in die C-Programmierung
Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).
MehrRechnerarchitektur. M. Jakob. 1. Februar 2015. Gymnasium Pegnitz
Rechnerarchitektur M. Jakob Gymnasium Pegnitz 1. Februar 2015 Inhaltsverzeichnis 1 Aufbau eines Computersystems Praktische Grundlagen Von-Neumann-Rechner 2 Darstellung und Speicherung von Zahlen 3 Registermaschinen
MehrKap.2 Befehlsschnittstelle. Prozessoren, externe Sicht
Kap.2 Befehlsschnittstelle Prozessoren, externe Sicht 2.1 elementare Datentypen, Operationen 2.2 logische Speicherorganisation 2.3 Maschinenbefehlssatz 2.4 Klassifikation von Befehlssätzen 2.5 Unterbrechungen
Mehr3 Assembler- und Maschinenbefehle, Programmablauf-Steuerung
3 Assembler- und Maschinenbefehle, Programmablauf-Steuerung In der Vorlesung wurde folgendes Beispiel-Programm in der höheren Programmiersprache C vorgestellt: int x=0; int i= 0; for (i=1;i
MehrKapitel 1. Programmierkurs. 1.2 Allgemeiner Aufbau des Computers. 1.1 Hallo, Computer...?
Kapitel 1 Programmierkurs Birgit Engels, Anna Schulze ZAIK Universität zu Köln Einführung Hallo, Computer...? Aufbau eines Computers Was ist eine Programmiersprache? Der Programmierprozess Warum Java?
MehrFunktionen in PHP 1/7
Funktionen in PHP 1/7 Vordefinierte Funktionen in PHP oder vom Entwickler geschriebene Funktionen bringen folgende Vorteile: gleiche Vorgänge müssen nur einmal beschrieben und können beliebig oft ausgeführt
MehrRechnerarchitektur. Dr. Andreas Müller TU Chemnitz Fakultät für Informatik Fakultätsrechen- und Informationszentrum anmu@informatik.tu-chemnitz.
Rechnerarchitektur Dr. Andreas Müller TU Chemnitz Fakultät für Informatik Fakultätsrechen- und Informationszentrum anmu@informatik.tu-chemnitz.de Rechnerarchitektur Dr. Andreas Müller TU Chemnitz Fakultät
MehrRechnerarchitektur und Betriebssysteme (CS201): AVR-CPU und -Assembler
Rechnerarchitektur und Betriebssysteme (CS201): AVR-CPU und -Assembler 1. Oktober 2013 Prof. Dr. Christian Tschudin Departement Mathematik und Informatik, Universität Basel Wiederholung / Diskussion 1.
MehrPraktikum ASP Blatt 2 6. LEHRSTUHL FÜR RECHNERTECHNIK UND RECHNERORGANISATION Aspekte der systemnahen Programmierung bei der Spieleentwicklung
Praktikum ASP Blatt 2 6 LEHRSTUHL FÜR RECHNERTECHNIK UND RECHNERORGANISATION Aspekte der systemnahen Programmierung bei der Spieleentwicklung T1 Organisatorisches T1.1 Handhabung der Boards 26.10.2015-30.10.2015
MehrKapiteltests zum Leitprogramm Binäre Suchbäume
Kapiteltests zum Leitprogramm Binäre Suchbäume Björn Steffen Timur Erdag überarbeitet von Christina Class Binäre Suchbäume Kapiteltests für das ETH-Leitprogramm Adressaten und Institutionen Das Leitprogramm
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Rückblick Datentypen (int, long, double, boolean, String) Variablen und Variablendeklarationen
MehrATM18-Projekt Arbeiten mit CodeVisionAVR C-Compiler Teil 02 - Aufbau eines C-Projektes
Teil 01 - Einführung 1 Eine Einführung in C 1.1 Warum C? 1.2 Wie entstand C? 1.3 Der AVR-Mikrocontroller in einem eingebetteten System 1.4 1.5 Editieren von Quell-Dateien 2 Was ist ein C-Projekt? 2.1 Erzeugen
MehrEinführung in die Programmiersprache C und in den C166-Compiler
Einführung in die Programmiersprache C und in den C166-Compiler Die vorliegenden Unterlagen sollen einen kurzen Überblick über die Software-Entwicklung in C geben. Diese Unterlagen erheben keinen Anspruch
MehrStudentische Lösung zum Übungsblatt Nr. 7
Studentische Lösung zum Übungsblatt Nr. 7 Aufgabe 1) Dynamische Warteschlange public class UltimateOrderQueue private Order[] inhalt; private int hinten; // zeigt auf erstes freies Element private int
MehrBinärcodierung elementarer Datentypen: Darstellung negativer Zahlen
Binärcodierung elementarer Datentypen: Darstellung negativer Zahlen Statt positive Zahlen von 0 bis 2 n -1mit einem Bitmuster der Länge n darzustellen und arithmetische Operationen darauf auszuführen,
MehrBesprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online
Themen heute Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Besprechung des 3. Übungsblattes Aufgabe 3 Speicherplätze für Mikrocode-Anweisungen
Mehr