Technische Informatik

Größe: px
Ab Seite anzeigen:

Download "Technische Informatik"

Transkript

1 Technische Informatik Teil A: Mikroprozessoren Stand: 22. November 2010 Institut für Roboterforschung Abteilung Informationstechnik Prof. Dr.-Ing. Uwe Schwiegelshohn

2 Inhaltsverzeichnis Inhaltsverzeichnis Inhaltsverzeichnis 1 Einführung 3 2 Mikroprozessoren Grundbegriffe Leistungsfähigkeit eines Rechnersystems Messung der Leistungsfähigkeit Zusammenfassung und Ausblick Der Instruktionssatz Zugriff auf den Speicher Instruktionen mit Immediate Operanden Arithmetische und logische Instruktionen Steuerung des Kontrollflusses Zusammenfassung und Ausblick Der Compiler Aufbau eines Compilers Analyse der Quelldatei Compileroptimierung Abhängigkeiten Darstellung von Abhängigkeiten Grundblockoptimierungen Registerzuweisung Pipelining Instruktionsausführung Grundlagen des Pipelining Resource-Hazard Daten-Hazards Kontroll-Hazard Interrupts Behandlung von Interrupts Komplikationen beim Pipelining Mikrocontroller Verwendung mehrerer Ausführungseinheiten Dynamisches Scheduling Superskalare Prozessoren Multi- und Manycore Architekturen Hyper-Threading Intels Core-Mikroarchitektur Der Cell-Prozessor Die Nvidia CUDA Architektur Zusammenfassung und Ausblick

3 2 MIKROPROZESSOREN 1 Einführung Gegenstand der Vorlesung Technische Informatik sind moderne Rechnersysteme. Zunächst werden Methoden besprochen, wie die Leistung von solchen Rechnersystemen beurteilt werden kann. Danach wird der Prozessor als Kern eines Rechnersystems erläutert, wobei die Schwerpunkte auf dem Instruktionssatz (der Sprache des Prozessors) und der Parallelverarbeitung mit Hilfe von Pipelining und mehreren Verarbeitungseinheiten liegen. Dieser Teil beinhaltet ebenfalls Grundlagen von Übersetzern (Compiler) und einfacher Codeoptimierung. Danach wird auf die Kommunikation sowohl innerhalb eines Rechnersystems (Buskonzept) als auch zwischen verschiedenen Rechnern (Stichwort Internet) näher eingegangen. Dann erfolgt eine Erläuterung der verschiedenen Formen von Speichertechnologien. Anschließend wird dargestellt, wie diese unterschiedlichen Speichertechnologien in Form einer Speicherhierarchie gemeinsam zur Erhöhung der Systemleistung eingesetzt werden können. Dieser Abschnitt schließt mit einem Vergleich mehrerer moderner Mikroprozessoren. Nach Besuch der Vorlesung Technische Informatik sollen Studierende ein Grundverständnis für den Aufbau typischer Rechnersysteme haben und dadurch in der Lage zu sein, bei der Auswahl und Beurteilung von Rechnersystemen in Bezug auf häufige ingenieurwissenschaftliche Anwendungen mitzuwirken. Voraussetzung für die Vorlesung Technische Informatik sind Kenntnisse in der Schaltungstechnik, wie sie in den Vorlesungen Grundlagen der Elektrotechnik und Halbleitertechnologie vermittelt werden. Das Beherrschen einer Programmiersprache (zum Beispiel C) und Grundkenntnisse über Codierung sind von Vorteil. Diese Kenntnisse sind zum Beispiel Gegenstand der Veranstaltung Einführung in die Programmierung für Ingenieure. Die Vorlesung Technische Informatik wird durch die Wahlpflicht-Vorlesungen Parallele Rechnersysteme und Distributed Systems ergänzt. Parallele Rechnersysteme bespricht wesentliche Aspekte des Aufbaus von komplexen Rechnersystemen, wie zum Beispiel Symmetric-Multiprocessing- oder Cluster-Systeme. Schließlich werden in der in englischer Sprache abgehaltenen Vorlesung Distributed Systems vor allem Systemheterogenität, Middleware und Sicherheitsaspekte behandelt. Die Kenntnis der grundlegenden Inhalte der Vorlesung Technische Informatik ist für die Vorlesungen Parallele Rechnersysteme und Distributed Systems notwendig. 2 Mikroprozessoren 2.1 Grundbegriffe In der diskreten Datenverarbeitung - oft auch als digitale Datenverarbeitung bezeichnet - werden häufig Fachausdrücke verwendet, die heute auch schon in der Umgangssprache auftauchen: 1. Digitalschaltungen sind die Grundeinheiten für die elektronische digitale Datenverarbeitung. In Digitalschaltungen befinden sich die Transistoren im Allgemeinen in 3

4 2.2 Leistungsfähigkeit eines Rechnersystems 2 MIKROPROZESSOREN einem von meist zwei Sättigungszuständen. 2. Eine ALU (Arithmetisch Logische Einheit) ist der Kern einer digitalen Verarbeitungseinheit. Sie besteht aus Digitalschaltungen. In einer ALU werden zum Beispiel Rechenoperationen mit binär dargestellten Werten durchgeführt. Komponenten einer ALU sind zum Beispiel Volladdierer und Halbaddierer. 3. Eine CPU (Central Processing Unit) ist eine digitale Verarbeitungseinheit, in der vielfach Register zur Speicherung von unmittelbar benötigten Instruktionen und Daten eingesetzt werden. Moderne CPUs können mehrere ALUs enthalten. 4. (Mikro-) Prozessoren sind die Kernstücke heutiger Rechner. Neben der CPU enthält ein Prozessor unter Anderem meist Speicher und Schnittstellen. Die einzelnen Komponenten eines Prozessors kommunizieren im Allgemeinen über interne Busse miteinander. 5. Signalprozessoren sind spezielle Prozessoren für gezielte Anwendungen. Neben dem eigentlichen Prozessor enthält ein Rechner heute oft mehrere Signalprozessoren zum Beispiel für die Netzwerkanbindung. Im Gegensatz zu vielen älteren Signalprozessoren sind viele modernen Signalprozessoren auch in Hochsprachen (C oder C++) programmierbar. 6. Mikrocontroller sind leicht veränderte Prozessoren, die in einem so genannten eingebetteten System verwendet werden, ohne direkt von einem Benutzer gesteuert zu werden. Gegenüber Mikroprozessoren enthalten Mikrocontroller oft zusätzliche Elemente wie Timer, I/O Anschlüsse oder Analog-Digital Wandler. Bezüglich der Ausstattung und Leistungsfähigkeit gibt es bei Mikrocontrollern große Unterschiede. Die Anzahl der in einem Jahr gefertigten Mikrocontroller übersteigt die der Mikroprozessoren bei weitem. Mikrocontroller zeichnen sich durch eine große Breite in der Leistungsfähigkeit (8 Bit bis 64 Bit Prozessoren) und im Preis (<1 $ bis 200 $) aus. In der Vorlesung Technische Informatik liegt der Schwerpunkt auf der digitalen Datenverarbeitung der Mikroprozessoren. Dies beinhaltet besonders den Aufbau und die Funktionalität von Mikroprozessoren, von Speichermedien und -hierarchien sowie die Grundlagen der Datenkommunikation. Besondere Eigenschaften von Signalprozessoren werden nicht behandelt. 2.2 Leistungsfähigkeit eines Rechnersystems Bei der Beschaffung eines neuen Rechnersystems sind die Kosten und die Leistungsfähigkeit des Systems die wesentlichen Kriterien. Heute sind verschiedene Methoden gebräuchlich, um die Leistungsfähigkeit eines Rechnersystems und/oder eines Mikroprozessors zu beschreiben. Wiederum werden zunächst einige Begriffe und Abkürzungen eingeführt: 4

5 2 MIKROPROZESSOREN 2.2 Leistungsfähigkeit eines Rechnersystems CPI : CPU Zyklen/Anzahl der ausgeführten Instruktionen MIPS : Millionen Instruktionen pro Sekunde MFLOPS : Millionen Gleitkomma Operationen pro Sekunde Während es sich bei Instruktionen um elementare Befehle eines Mikroprozessors handelt, ist eine Operation ein dem menschlichen Verständnis näher stehender Begriff und wird oft mit mehreren Instruktionen realisiert Messung der Leistungsfähigkeit Die Ausführungszeit eines Programms auf einem Rechner kann häufig direkt gemessen werden. time ghostview im UNIX (AIX) Betriebssystem Dieses Kommando erzeugt folgendes Ergebnis auf einem Beispielsystem: real 51,43s user 17,47s sys 4,99s Dabei ist die Zeitdauer nach real die vergangene Zeit vom Start bis Ende der Programmausführung. Beachten Sie, dass das Ende der Programmausführung hier vom Benutzer bestimmt wird. Die Zeitangabe nach user ist die so genannte Benutzerzeit, das heißt die CPU Zeit im Benutzerprogramm. Schließlich ist die Zeitdauer nach sys die Systemzeit, das heißt die CPU Zeit für die Systemverwaltung für dieses Programm. Die Wartezeit oder Reaktionszeit des Benutzers bleibt in der Benutzerzeit und der Systemzeit unberücksichtigt. In vielen Rechnersystemen laufen einige Verwaltungsprogramme oft im Hintergrund ab. Heute stehen eine Vielzahl von verschiedenen Mikroprozessoren mit unterschiedlichen Eigenschaften und Strukturen zur Verfügung. Einem Vergleich dieser Mikroprozessoren und der Darstellung von Gemeinsamkeiten sollte immer erst eine Funktionalitätsuntersuchung und eine Leistungsbewertung vorausgehen. Schließlich sollte jedes Teil eines Mikroprozessors direkt oder indirekt der Erhöhung der Gesamtleistung dienen. Dabei wird eine Verbesserung der Zuverlässigkeit als eine indirekte Verbesserung der Gesamtleistung betrachtet. Im engen Sinn lässt sich die Leistung eines Mikroprozessors am besten durch die Erfüllung des Benutzerwunsches nach möglichst kurzer Ausführungszeit seiner Ausführungsprogramme beschreiben. Hierbei ist Korrektheit natürlich vorausgesetzt. Daneben gibt es auch noch Randbedingungen, wie zum Beispiel die Kompatibilität, die auch den Gesamtaufwand mitbestimmen. 5

6 2.2 Leistungsfähigkeit eines Rechnersystems 2 MIKROPROZESSOREN Vergangene Zeit CPU Zeit für das Benutzerprogramm Wartezeit auf Ein und Ausgabeoperationen. (Benutzer, Speicher,...) Verwendung des Rechners für andere Benutzer. Dies gilt bei Rechnern im Mehrbenutzer oder Multiuserbetrieb. Ähnliches tritt auch bei Multitasking auf. Zeitaufwand für die Systemverwaltung des Rechners durch das Betriebssystem für das Nutzerprogramm. Offensichtlich ist der Rechner in dem Beispiel nicht während der ganzen vergangenen Zeit aktiv. Daher ist es interessant, sich die Aufteilung der abgelaufenen Zeit näher zu betrachten. Nur die CPU-Zeit für das Benutzerprogramm sollte für die Bewertung des Rechnersystems herangezogen werden, da die anderen Zeiten vorwiegend von externen Faktoren abhängen. Allerdings ist die Bewertung eines Prozessorsystems programmabhängig, da sich die einzelnen Programme zum Beispiel stark im Anteil der Gleitkommaoperationen oder in der Verzweigungshäufigkeit unterscheiden. Jeder Benutzer muss sich daher die Frage stellen, welche Programme für die Bewertung der in Frage kommenden Rechnersysteme gut geeignet sind. Grundsätzlich sind dies vor allem die eigenen Anwendungsprogramme. Die Verwendung der eigenen Programme zur Systembewertung erfordert aber die Erfüllung zweier Voraussetzungen: 1. Die Anwendungsprogramme dürfen sich auch in der Zukunft nicht wesentlich verändern. Dies ist vielfach nicht gegeben. 2. Eine Testmöglichkeit der Anwendungsprogramme auf verschiedenen Systemen muss bestehen. Der damit verbundene Aufwand lohnt sich oft nur bei umfangreichen Rechnerbestellungen. Aufgrund des hohen Aufwands bei der Verwendung eigener Programme wird oft zu alternativen Bewertungsmethoden gegriffen, die allerdings auch keine allgemeine Gültigkeit besitzen. Angenommen ein Programm benötigt auf einem Rechnersystem N Taktperioden zur Ausführung von M Instruktionen und die gesamte Ausführungszeit beträgt T Sekunden, dann folgt: 6

7 2 MIKROPROZESSOREN 2.2 Leistungsfähigkeit eines Rechnersystems 1. Taktfrequenz: Die Taktfrequenz f ist das Verhältnis zwischen der Anzahl der Taktperioden N und der Ausführungszeit T : f = N T. Unter der Annahme eines konstanten CPI-Wertes ist ein Prozessor mit einer höheren Taktfrequenz schneller. Dies gilt vor allem für die Prozessoren der gleichen Familie (zum Beispiel Pentium IV 1,2 GHz und Pentium IV 2,8 GHz). Allerdings sind die Prozessorleistung und die Taktfrequenz selbst in diesem Fall nicht zueinander proportional. 2. CPI: Der CPI-Wert ist bei gleicher Architektur unabhängig von der Taktfrequenz und lässt sich aus der Anzahl der Taktperioden N und der Anzahl der Instruktionen M bestimmen: CPI = N M. Umgekehrt lässt sich aus dem CPI-Wert die Anzahl an Instruktionen bestimmen zu: M = N CPI. Bei bekannter Taktfrequenz f kann der Quotient aus der Anzahl der Instruktionen M und der Ausführungszeit T bestimmt werden als: M T = f CPI. Da der CPI-Wert bei gleicher Architektur unabhängig von der Taktfrequenz ist gibt der CPI-Wert Auskunft über die Architektur eines Prozessors. Manchmal wird auch eine Kombination von Taktfrequenz und CPI-Wert verwendet. Für die CPU-Zeit eines Programms ergibt sich näherungsweise ohne Berücksichtigung der Speicherhierachien CPU Zeit = M CPI. f Dabei bleibt der CPI-Wert abhängig vom ausgeführten Programm und den Eingabedaten. 3. MIPS: Bei der MIPS-Bewertung werden die ausgeführten Instruktionen pro Zeiteinheit bestimmt. Dabei ist zu beachten, dass es sich um Millionen Instruktionen pro 7

8 2.2 Leistungsfähigkeit eines Rechnersystems 2 MIKROPROZESSOREN Sekunde handelt, und demnach der Quotient aus der Anzahl der Instruktionen M und der Ausführungszeit T durch den Faktor 10 6 dividiert werden muss: MIPS = M/T 10 6 f = 10 6 CPI. Auch diese Bewertung ist aus den folgenden Gründen nicht problemlos: (a) Abhängigkeit vom Instruktionssatz: Architekturen mit unterschiedlichen Instruktionssätzen (zum Beispiel Pentium IV und Ultra SPARC) können nur schwer verglichen werden. Dies wird bei der Besprechung des Instruktionssatzes deutlich. (b) Abhängigkeit vom Programm: Der MIPS-Wert besitzt keine allgemeine Gültigkeit, sondern hängt stark vom jeweiligen Programm ab. Manchmal besteht zwischen der MIPS-Bewertung und der Prozessorleistung sogar ein umgekehrter Zusammenhang. (1) Gleitkomma-Koprozessoren: Die Ausführung eines nummerischen Programms erfordert auf einem Prozessor mit Gleitkomma-Koprozessor (historisches Beispiel Intel 486DX) wenige lange Instruktionen, was zu einem geringen MIPS-Wert führt. (2) Gleitkomma-Emulation durch Software: Das gleiche numerische Programm wird auf einem äquivalenten Prozessor ohne Gleitkomma-Koprozessor (historisches Beispiel Intel 486SX) in einer längeren Zeit mit sehr vielen kurzen Instruktionen durchgeführt. Daher liegt der MIPS-Wert höher, obwohl die Ausführungszeit länger als im Fall (1) ist. 4. MFLOPS: Der MFLOPS-Wert wird vorwiegend für technisch-wissenschaftliche Anwendungen verwendet. Er besitzt zum Beispiel nur eine geringe Aussagekraft für den Compiler. Daher liegt bei der MFLOPS Bewertung eine noch größere Abhängigkeit von dem Anwendungsprogramm vor. Im Gegensatz zur MIPS-Bewertung werden hier die ausgeführten Gleitkommaoperationen pro Zeiteinheit betrachtet. Eine einzelne Gleitkommaoperation kann viele Instruktionen zur Ausführung benötigen. Trotzdem treten ähnliche Probleme wie bei der Leistungsbewertung mit MIPS auf. Dies liegt unter anderem an der unterschiedlichen Dauer von Gleitkommaoperationen. So benötigt eine Addition beim MIPS R Zyklen während für die Division bis zu 40 Zyklen notwendig sind. Hier wird durch normalisierte MFLOPS teilweise Abhilfe geschaffen. Dabei werden zum Beispiel folgende Gewichte verwendet: 8

9 2 MIKROPROZESSOREN 2.2 Leistungsfähigkeit eines Rechnersystems Addition, Multiplikation 1 Division, Wurzeloperation 4 Exponentialfunktion, trigonometrische Funktion 8 5. Leistungsbewertung durch Programme: Wenn auch der Benutzer seine eigenen Programme nicht zur Bewertung heranziehen kann, so stehen ihm oft Systembewertungen anhand von verschiedenen allgemeinen Programmen zur Verfügung. Hierbei unterscheidet man vor allem 3 Gruppen reale Programme (zum Beispiel Gnu CC, TEX, Spice) - 2. Kernel Hierbei handelt es sich meist um innere Schleifen, die in vielen Programmen vorkommen. Allerdings bleibt das Ein-Ausgabeverhalten des Prozessors weitgehend unberücksichtigt (Beispiel Livermore Loops) Synthetische Benchmarks Dabei handelt es sich um Spezialprogramme zum Testen von Rechnern. Diese Programme kommen nicht in realen Programmen vor. Beispiel dafür sind Whetstone (FORTRAN Gleitkomma) und Drystone (FORTRAN Integer). Bei der Leistungsbewertung durch Programme werden der Compiler und das Rechnersystem gemeinsam getestet, wenn das Programm, wie meist üblich, im Quellcode vorhanden ist. Dabei treten folgende Probleme auf: - Das Verhalten eines Systems bei großen Programmen mit großen Eingabesätzen soll durch kleine oft eingabelose Programme (synthetische Benchmarks und Kernelprogramme) dargestellt werden. - Optimierungen des Compilers haben auf Benchmarks andere Wirkungen als auf reale Programme. So führte die Einbettung von Unterprogrammen zu so hervorragenden Ergebnissen bei Drystone, dass es schließlich verboten wurde. Andererseits wirken viele Schleifenoptimierungen nicht auf Whetstone und werden daher auch nicht bewertet. Außerdem können Hersteller ihre Compiler auf die Erkennung von (bekannten) Benchmarks programmieren und damit zu gute Ergebnisse erzeugen. - Veränderung des Anforderungsprofils. Selbst bei der Verwendung einer Reihe von realen Programmen ist zu berücksichtigen, dass das Anforderungsprofil der einzelnen Benutzer unterschiedlich ist und auch mit der Zeit variiert. Diesen Problemen wird versucht mit folgenden Konzepten entgegenzuwirken: - Auswahl eines breiten Spektrums von Testprogrammen, die in regelmäßigen Abständen angepasst werden. - Gewichtung der einzelnen Testprogramme nach der Häufigkeit in den eigenen Anwendungsprogrammen. 9

10 2.2 Leistungsfähigkeit eines Rechnersystems 2 MIKROPROZESSOREN Dies erfordert von dem Benutzer eine genaue Kenntnis der Testprogramme und des eigenen Anwendungsprofils. Im wissenschaftlichen Bereich spielen zur Zeit die Benchmarks der Standard Performance Evaluation Corporation (SPEC) die bedeutendste Rolle. Die aktuelle Version, der SPEC- Benchmark CPU2006 setzt sich aus einer Gruppe von Tests für Festkomma- (CINT2006) und einer für Gleitkommaberechnungen (CFP2006) zusammen. Die SPEC-Benchmarks werden regelmäßig im Abstand von rund drei bis sechs Jahren aktualisiert und so an neue Rechnergenerationen angepasst. Die bisherigen Versionen lauten CPU89, CPU92, CPU95 und CPU2000. Mitte 2006 wurde die zur Zeit aktuelle Version veröffentlicht. Erforderlich wurde sie, da einzelne Testverfahren der CPU2000 mit aktuellen CPUs eine Laufzeit von weniger als einer Minute aufwiesen. Des Weiteren war eine Anpassung an die Komplexität und Struktur heutiger Anwendungen notwendig. Die Open Systems Group (OSG) der SPEC hat deshalb einen neuen Satz von Programmen (Suite) zusammengestellt, deren Ergebnisse mit CPU2000-Resultaten nicht mehr vergleichbar sind. So gibt es zwar wie bisher Resultate für eine nach strengen Regeln festlegte Parametrisierung der Compiler (base) und solche mit höchster Optimierung (peak). Bei base sind aber gegenüber früher Methoden wie die Feed-Back-Optimierung zur Leistungssteigerung nicht mehr zulässig. Rate-Messung (Throughput) der CPU2006 liegen im Unterschied zur CPU2000 auf dem gleichen Skalenniveau wie die Speed-Resultate. Die Messungen mit einer Task (Speed) erscheinen als SPECint oder SPECfp, die für Multiprozessoren mit mehreren gleichzeitig laufenden Tests als SPECint rate oder SPECfp rate mit dem Zusatz base- oder peak2006. Die Laufzeit der Testsuite ist bis zu zehnmal höher als bei CPU2000. Die generelle Anforderungen des CPU2006-Benchmark beinhalten Windows oder Unix als Betriebssystem, ein DVD-Laufwerk, 1 bis 2 GB Hauptspeicher, 8GB Festplattenplatz und verschiedene Compiler. Das Ziel von CPU2006 ist primär eine Beurteilung der CPU-Leistung, wobei allerdings auch der zur Übersetzung der Programme verwendete Compiler und die Anbindung der CPU an den Speicher (vor allem Second Level Cache) einen Einfluss auf das Ergebnis haben. Soll jedoch das gesamte Rechnersystem beurteilt werden, müssen andere Benchmarks verwendet werden. Hierfür steht eine Vielzahl unterschiedlicher Testsätze zur Verfügung, die eine Bewertung von Rechnersystemen durch Testläufe mit verbreiteter Büro- und Anwender- Software durchführen. Bekannte Beispiele sind die BAPCo-Suite SYSmark oder die Ziff- Davis-Benchmarks WinBench und Winstone. Zusätzlich existieren noch einige Multimedia- Benchmarks, wie zum Beispiel Intels Media Bench oder Futuremarks 3DMark, die vor allem für Multimedia-PCs ein aussagekräftiges Ergebnis liefern sollen. Zur Bewertung der Ergebnisse wird oft ein Referenzwert zu einem realen System statt der absoluten Zeitwerte verwendet. Für den SPEC2006 wird eine Ultra Enterprise von Sun mit einer UltraSPARCII-CPU mit 296 MHz und 2GB Hauptspeicher als Referenz genutzt. Für jedes Programm wird dann das Verhältnis Ausführungszeit auf dem Referenzsystem Ausführungszeit auf dem Testsystem = Speedup 10

11 2 MIKROPROZESSOREN 2.2 Leistungsfähigkeit eines Rechnersystems Processor System AMD Opteron 280 FSC Primergy RX220 Intel Core 2 X6800 Dell Precision 390 Intel Core 2 QX6800 Dell Precision 390 Intel Core i7-965 Extreme Edition ASUS Revolution workstation Clock rate 2400 MHz 2930 MHz 2930 MHz 3200 Mhz Cores/Chips 4/2 2/1 4/1 4/1 Cache pro Core (L1,L2,L3) 64KI+64KD, 1M, - 32KI+32KD, -, 4M (chip) 32KI+32KD, -, 8M (chip) 400.perlbench bzip gcc mcf gobmk hmmer sjeng libquantum h264ref omnetpp astar xalancbmk SPECint rate base bwaves gamess milc zeusmp gromacs cactusADM leslie3d namd dealII soplex povray calculix GemsFDTD tonto lbm wrf sphinx SPECfp rate base Tabelle 1: SPEC2006rate base-werte für verschiedene Rechnersysteme 32KI+32KD, 256 KB, 8M (chip) 11

12 2.2 Leistungsfähigkeit eines Rechnersystems 2 MIKROPROZESSOREN verwendet. Die Charakterisierung der Gesamtleistung erfolgt über das geometrische Mittel aller Verhältnisse: n n Speedup i Testprogramme i Das geometrische Mittel berücksichtigt aber nicht die tatsächliche Ausführungszeit von Programmen. Zur Erhöhung der SPEC-Bewertung können Hersteller sich auf die leicht zu verbessernden Testprogramme konzentrieren und damit ein verfälschtes Bild erzeugen. Daher ist die Verwendung von Gewichten für die einzelnen Programme hier von Vorteil. Testprogramm A Testprogramm B Ausführungszeit Faktor Ausführungszeit Faktor Referenzsystem 1000 s 20 s Testsystem s 2 2 s 10 Testsystem s 5 10 s 2 Gesamtleistung Testsystem 1 Testsystem Die nach dem geometrischen Mittel berechnete Gesamtleistung von Testsystem 1 ist um den Faktor 1,41 besser als der Wert von Testsystem 2. Trotzdem ist Testsystem 2 besser geeignet, sofern Testprogramm B nicht mehr als 37 mal so oft wie Testprogramm A verwendet wird. Bei dem Entwurf und/oder der Beschaffung von Computersystemen gilt zum Erreichen der besten Leistung die Regel: Das Verhalten in der typischen Anwendung muss verbessert werden. Diese Regel ist zum Beispiel die Grundlage für RISC-Architekturen und für Speicherhierarchien. Sie lässt sich quantitativ durch Amdahls Gesetz verdeutlichen. Bei einer Hardwareänderung basiert Amdahls Gesetz auf folgender Modellvorstellung: 1. Ein Bruchteil α eines Programms wird durch die Hardwareänderung nicht beeinflusst. 2. Der Rest des Programms (1 α) erfährt durch die Hardwareänderung eine Beschleunigung (Speedup) von S. Mit dem ursprünglichen System als Referenzsystem und einer Normierung der Programmlaufzeit auf 1 ergibt sich als Gesamt-Speedup S g : S g = 1 α + 1 α S 12

13 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz Selbst bei beliebig viel Aufwand S ist der Gesamt-Speedup auf 1 begrenzt. Man sollte α sich daher auf die Hardwarekomponenten beschränken, die nur auf wenige Programmteile nicht wirken (α 0). Allerdings ist zu beachten, dass das Amdahl sche Modell sehr stark vereinfacht. In einem typischen Programm wird es immer Teile geben, auf die eine Hardwareveränderung nur bis zu einem bestimmten Grad wirkt Zusammenfassung und Ausblick 1. Eine korrekte Leistungsbewertung eines Rechnersystems kann sich nicht auf den Mikroprozessor allein beschränken. Es müssen viele periphere Komponenten ebenfalls berücksichtigt werden. Speicher, Betriebssystem, Compiler Diese Komponenten und ihr Zusammenwirken sind Gegenstand dieser Vorlesung. 2. Die Leistungsbewertung eines Rechnersystems ist nicht allgemeingültig, sondern sie hängt von den Anwendungen ab. 3. Die üblichen Leistungsbewertungen von Rechnersystemen haben alle ihre Schwachstellen. Diese sollten bei der Auswahl eines Systems berücksichtigt werden. 4. Rechnersysteme werden heute in vielen Konfigurationen angeboten. Ein gutes System sollte ausgewogen sein. Insbesondere ist ein leistungsstarker Prozessor alleine nicht ausreichend. 5. Zur Beurteilung eines Rechnersystems sind Kenntnisse über den Aufbau des Systems sehr vorteilhaft. Diese beinhalten sowohl die Struktur des Prozessors als auch das Zusammenspiel der einzelnen Komponenten innerhalb des Rechnersystems. 2.3 Der Instruktionssatz Der Prozessor muss Anwenderprogramme ausführen. Diese Programme müssen daher in einer dem Prozessor verständlichen Form vorliegen. Die vom Prozessor gesprochene Sprache wird als Instruktionssatz bezeichnet. Das Kommunikationsmodell eines Prozessors lässt sich damit grob mit der folgenden Darstellung beschreiben: Kontrollsignale Prozessor Daten Instruktionen Dabei bestimmen die Instruktionen, wie der Prozessor die Daten verarbeiten soll. Die Kontrollsignale dienen der Ablaufsteuerung des Prozessors und der Reaktion auf nicht oder nicht vollständig vorhersehbare Ereignisse. Eine Instruktion muss daher spezifizieren 13

14 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN - welche Daten (Operanden) der Prozessor verwenden soll und - welche Operation er mit diesen Daten durchführen soll. Obwohl alle Instruktionssätze diesem Kommunikationsmodell genügen, gibt es unter den Instruktionssätzen verschiedene Sprachfamilien, verschiedene Sprachen und verschiedene Dialekte. Grob lassen sich die Instruktionssätze in folgende Architekturen unterteilen: 1. Stack-Architektur 2. Akkumulator-Architektur 3. (Allgemeine) Register Architektur Unter einem Stack versteht man eine Sequenz von Daten, auf die nur von einem Ende (Anfang des Stacks) aus zugegriffen werden kann (LIFO : Last-In-First-Out). Operationen verknüpfen die (beiden) nächsten Daten an dieser Zugriffsstelle. Des Weiteren gibt es die Operationen push und pop, die ein neues Element in den Stack einführen beziehungsweise das Element an der Zugriffsstelle des Stacks entfernen, das heißt, es drucken oder abspeichern. a = b + c.. Instruktion Stack push c c? push b b c? add b+c? pop a.?. Diese Architekturen werden heute fast nur noch in Taschenrechnern eingesetzt. Eine Stack- Architektur sollte allerdings nicht mit dem Speicherstack beim Unterprogrammaufruf verwechselt werden, der bei allen Prozessoren angewendet wird. Akkumulator-Architekturen besitzen ein besonderes Register, den Akkumulator, in den Daten geladen oder aus dem Daten gespeichert werden können. Alle Verknüpfungsoperationen erlauben nur 2 Operanden und verknüpfen den Akkumulator mit einem Datum im Speicher. Das Endergebnis steht dann wieder im Akkumulator. Heutige Prozessoren besitzen spezielle Speicher zur Haltung weniger Daten. Diese Speicher heißen Register und erlauben den schnellen wahlfreien Zugriff der CPU auf die dort gespeicherten Daten. Im idealen Fall kann von der CPU jedes Register als Quellenregister für einen Operanden oder als Zielregister für ein Ergebnis ausgewählt werden. Bei diesen Registerarchitekturen unterscheidet man Load-Store Architekturen, bei denen sich die 14

15 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz a = b + c. Instruktion load b add c store a. Akkumulator b c+b c+b.. Operanden und das Ergebnis nur in Registern befinden können und Register-Speicher Architekturen, bei denen ein Datum aus dem Speicher direkt zur Verknüpfung herangezogen werden kann. a = b + c Register-Speicher Architektur: Instruktion R1 Speicherzelle a load R1, c c? add R1, b c + b? store a, R1 c + b c + b Load-Store(Register-Register) Architektur: Instruktion R1 R2 R3 Speicherzelle a load R1, b b??? load R2, c b c?? add R3, R1, R2 b c b + c? store a, R3 b c b + c b + c Die in der Register-Speicher Architektur und in der Load-Store Architektur verwendeten Register sind ein Teil der Speicherhierarchie und zum Beispiel in folgenden Situationen nützlich: 1. Speicherung von temporären Größen bei der Auswertung von Ausdrücken. g = a b + c d - e f t 1 = a b t 2 = c d t 1 = t 1 + t 2 t 2 = e f g = t 1 - t 2 Da diese Architektur nur Ausdrücke mit zwei Operanden verwenden kann, müssen Teilergebnisse zwischengespeichert werden, um bald wieder verwendet zu werden. 15

16 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN 2. Zwischenspeicherung von häufig benötigten Variablen. a = b + c f = a d g = a + e Die Geschwindigkeit eines Programms kann deutlich erhöht werden, wenn die Zahl der Zugriffe auf den Hauptspeicher reduziert wird. Damit sind die Register ein Teil der Speicherhierarchie. 3. Verwendung für Spezialzwecke. MIPS R12000 HI- und LO-Register für die Multiplikation. Das HI-Register speichert die oberen 64 Bits des Resultats einer Multiplikation, während das LO-Register die unteren 64 Bits enthält. Die Zahl der GPR (General Purpose Register) eines Prozessors hat Einfluss auf die Flexibilität und den Hardwareaufwand. Während die Flexibilität durch eine größere Anzahl von Registern erhöht wird, kann sich diese größere Anzahl aufgrund der höheren Registerzugriffszeiten auch nachteilig auf die Systemleistung auswirken. Da Stack- und Akkumulator-Architekturen gegenwärtig ungebräuchlich sind, lassen sich heutige Prozessoren nach der Anzahl der sich in Registern befindlichen Operanden charakterisieren. Am häufigsten sind die reinen Load/Store Architekturen anzutreffen, bei denen sich alle (bis zu 3 oder 4) Operanden einer Instruktion in Registern befinden. Diese Art von Architektur ist ein kennzeichendes Merkmal von sogenannten RISC 1 -Architekturen. Sie haben insbesondere folgende Eigenschaften: 1. Feste Instruktionswortlänge 2. Einfache Instruktionserzeugung mit vielen Optimierungsmöglichkeiten 3. Ähnliche Ausführungsdauer der einzelnen Instruktionen Bei RISC-Architekturen ist die Zahl der Instruktionen in einem Programm relativ hoch. Außerdem können einzelne Instruktionen aufgrund der festen Instruktionslänge eine große Anzahl von redundanten Positionen enthalten. Die Load/Store Architekturen sind Schwerpunkt in dieser Vorlesung. Prozessorfamilien mit Load/Store-Architektur: MIPS, SPARC, PowerPC Bei Register-Speicher Architekturen kann sich einer von zwei oder drei Operanden einer Instruktion direkt im Speicher befinden. Damit können Load- und Store-Instruktionen 1 Reduced Instruction Set Computing 16

17 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz manchmal entfallen. Die Länge der Instruktionen variiert, was eine größere Codedichte erlaubt. Entsprechend ist die Decodierung der Instruktionen aufwändiger. Aufgrund des Speicherzugriffes kann auch die Ausführungsdauer der einzelnen Instruktionen stark schwanken. Falls nur 2 Operanden verwendet werden, wird bei vielen Operationen der Inhalt des Operandenregisters zerstört. Motorola 68000, Intel 80x86 Daneben existieren auch Rechner, bei denen alle Operanden aus dem Speicher genommen werden. Während der Code sehr kompakt ist, haben diese Architekturen den Nachteil großer Variationen in Instruktionslänge und Ausführungszeit der Instruktionen. Außerdem kann sich der oftmalige Speicherzugriff als ein Nachteil bezüglich der Ausführungszeit erweisen. DEC VAX Zugriff auf den Speicher Im Instruktionssatz von RISC-Architekturen gibt es zwei spezielle Arten von Instruktionen, die zu einem Transfer von Daten zwischen dem Speicher und den Registern führen. LOAD : Transfer vom Speicher in ein Register STORE : Transfer von einem Register in den Speicher Dabei ist der Zugriff auf Daten nur in folgenden festvorgegebenen Quantisierungsstufen möglich: Byte 8 Bit Character Halbwort 16 Bit kurzer Integer Wort 32 Bit langer Integer, Single Precision Floating Point Doppelwort 64 Bit Double Precision Floating Point Es wird davon ausgegangen, dass die Dateneinheiten nur an bestimmten Positionen im Speicher beginnen können. Man spricht dann auch von der Ausrichtung (Alignment) der 17

18 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN Daten. Dieses Alignment kann den Adressierungsaufwand reduzieren. Wortzugriff in einem Speicher mit 32 MByte = Bit Beliebige Wortposition : 28 Bit Adresse Wortgrenzen : 23 Bit Adresse Daneben kann auch die Speicherzugriffszeit reduziert werden. Misalignment liegt vor, wenn die Zugriffspositionen nicht eingehalten werden. 16 Bit 16 Bit Wortquantisierung Datenwort (misaligned) Misalignment kann bei einer kompakten Datenhaltung entstehen. Durch das folgende Misalignment wird der unbenutzte Speicherblock an das unbenutzter Speicherplatz Halbwort Wort Wortquantisierung Wortquantisierung Speicherende verschoben. unbenutzter Speicherplatz Halbwort Wort Wortquantisierung Wortquantisierung Grundsätzlich wird auf Daten mindestens in Bytequantisierung zugegriffen. Dies schränkt die Möglichkeiten des Misalignment bereits erheblich ein. Ein Byte ist niemals misaligned, während ein Wort bei Beginn an den Bytepositionen 1, 2, 3, 5, 6 und 7 misaligned ist. Im Allgemeinen kann man feststellen, dass die Verwendung von Misalignment fast immer zu einer reduzierten Systemleistung führt. Während viele Architekturen Misalignment 18

19 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz erlauben, wird es durch ALU Operationen kaum unterstützt (Ausnahme Intel 80x86). In einem Wort lassen sich die 4 enthaltenen Bytes verschieden anordnen. Hierbei sind die Formate Little und Big Endian gebräuchlich. Beim Little Endian befindet sich das LSB Little Endian Wort 0 Wort Wortadresse (Least Significant Byte) 3 an der Wortadresse. Big Endian Adressen Wortadresse Beim Big Endian hingegen wird dort das MSB (Most Significant Byte) 0 abgelegt. Alle Architekturen müssen auf Daten im Speicher zugreifen und Daten in den Speicher transferieren. Dabei hat jedes Speicherelement eine eindeutige Adresse, die für den Datentransfer angegeben werden muss. Für die Bestimmung der Adresse gibt es eine Vielzahl von Verfahren, von denen einige nachstehend beschrieben sind. Direkte oder absolute Adressierung: LOAD R1 (1100): Register[R1]=Speicher[1100]; Die Speicheradresse wird direkt in der Instruktion angegeben. Dieses Verfahren kann sehr lange Instruktionswörter erfordern und ist aufgrund der Beeinträchtigung des Speichermanagements nur begrenzt verwendbar. Indirekte Adressierung über ein Register: LOAD R1 (R2): Register[R1]=Speicher[Register[R2]]; Die Speicheradresse befindet sich in einem Register. Damit ist die verwendbare Speichergröße nur durch die Größe der Register (heute 32 oder 64 Bit) begrenzt. Für jeden Transfer wird ein Adressenregister benötigt, was die Eignung dieses Verfahrens auf reguläre Datenstrukturen (Felder) beschränkt. Adressierung mit Basisregister (Displacement): LOAD R1 10(R2): Register[R1]=Speicher[Register[R2]+10]; Die Umgebung der gewünschten Speicheradresse wird durch den Inhalt eines Basisregisters angegeben. Die genaue Speicheradresse wird dann durch einen in der Instruktion angegebenen Wert (Offset) festgelegt. Diese Methode erlaubt den Zugriff auf einen großen Speicherbereich bei kleiner Instruktionswortlänge, während sie nur 19

20 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN wenige Register für die Adressierung benötigt. Die Datenblöcke eines Programms können von verschiedenen Stellen im Hauptspeicher geladen werden, indem der Wert des Basisregisters entsprechend verändert wird. Innerhalb der Instruktionsklassen LOAD und STORE gibt es eine Vielzahl einzelner Instruktionen, die zum Beispiel von der zu transferierenden Datenmenge und von der Ausrichtung der Daten abhängen. Einige Speicherinstruktionen im MIPS R10000 aligned LB Load Byte Auffüllen mit dem Vorzeichen (sign extend) LBU Load Byte Unsigned Auffüllen mit 0 (0 extend) SB Store Byte Analoge Instruktionen gibt es für Halbwort-, Wort- und Doppelwortzugriffe. Die Position vom MSB ist dabei abhängig von der voreingestellten Verwendung von Big oder Little Endian. Außerdem gibt es beim R10000 spezielle Instruktionen für den Zugriff auf nicht ausgerichtete Daten. nicht aligned LWL LWR SWL SWR Load Word Left Load Word Right Store Word Left Store Word Right Hierbei sind 2 Instruktionen pro Transfer notwendig. Einen analogen Befehl gibt es auch für das Doppelwort. Instruktionen in RISC Prozessoren zeichnen sich durch eine einheitliche Länge und durch wenige untereinander ähnliche Formate aus. In den meisten RISC Prozessoren umfasst jede Instruktion 32 Bits (1 Wort) Instruktionen mit Immediate Operanden Immediate Operanden sind Konstanten, deren Wert direkt in der Instruktion angegeben ist. Diese Instruktionen erlauben daher die effiziente Durchführung von Operationen mit Konstanten. Diese Instruktionen verwenden ein Quell- und ein Zielregister. Aufgrund der Ähnlichkeit des Instruktionformats mit den LOAD- und STORE-Instruktionen wird die Verwendung von Immediate Operanden auch als eine Adressierung bezeichnet. Es ist zu beachten, dass die Instruktionsgröße die Größe der verwendbaren Konstante beschränkt. Falls diese Größe überschritten wird, muss die Konstante zunächst in einem Register ge- 20

21 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz LOAD- und STORE-Instruktionen im MIPS R10000 LOAD LW Basis RT Offset Register[RT] = Speicher[Register[Basis]+Offset] STORE SB Basis RT Offset Speicher[Register[Basis]+Offset] = Register[RT] Alle LOAD und STORE Befehle haben das gleiche Format. In der Codierung unterscheiden sich die Befehle nur in Bit speichert werden. Dies erfordert im Allgemeinen mehrere Instruktionen. Instruktionen mit Konstanten if (i < 6) Vergleich mit einer Konstanten a = 3 + b Operation mit einer Konstanten a = 4 a Shiftoperation mit einer Konstanten MIPS R10000 ANDI RS RT Immediate Register[RT] = Register[RS] AND Immediate Analog gibt es auch weitere ähnliche Instruktionen, wie: ADDI Add Immediate : Register[RT] = Register[RS] + Immediate SLTI Set on Less Than Immediate: Register[RT] = (Register[RS] < Immediate). 21

22 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN Arithmetische und logische Instruktionen Die hier angesprochenen Instruktionen führen Operationen durch, die im Allgemeinen den Inhalt von 2 Registern (Quellregister) verknüpfen und den Inhalt eines dritten Registers (Zielregister) bestimmen. Rechenoperationen : Addition, Subtraktion, Multiplikation, Division auf verschiedenen Basen (Wort, Doppelwort) Vergleichsoperationen : Set on Less Than oder ähnliches Logische Operationen : AND, OR, EXOR oder ähnliches Shiftoperationen : SRA, SLLV oder ähnliches. Bei Multiplikation und Division mit ganzen Zahlen treten folgende Probleme, die im MIPS R10000 durch die Verwendung zweier Spezialregister HI und LO gelöst werden: ˆ Die Multiplikation erzeugt die doppelte Wortlänge. Daher werden bei der Multiplikation die obersten (most significant) Bits im Register HI gespeichert. Die anderen Bits befinden sich nach der Operation im Register LO. ˆ Die ganzzahlige Division erzeugt einen Quotienten und einen Rest, das heißt zwei Ergebnisse. Dabei enthält das Register LO den ganzzahligen Teil des Quotienten und das Register HI den Rest. Außerdem ist zu beachten, dass bei einer Division durch 0 der Prozessor keine Fehlermeldung erzeugt. Daher ist bei Programmen auf dem MIPS R10000 eine Überprüfung des Divisors notwendig. Division im MIPS R10000 (32 Bit Integer) RS RT DIV Register[LO] = Quotient (Register[RS]/Register[RT]) Register[HI] = Rest (Register[RS]/Register[RT]) Dieses Konzept der Verwendung von LO und HI erfordert Instruktionen zum Kopieren der Spezialregister auf ein GPR. So wird mit der Instruktion MFHI der Inhalt von HI in das Register RD kopiert. In dieser Instruktion werden nur 6 Bit für den Instruktionsnamen und 5 Bit für die Registerbezeichnung verwendet. Damit sind 21 Bit des Instruktionswortes redundant. Diese Instruktion ist daher ein Beispiel für die teilweise wenig kompakte (speicherineffiziente) Darstellung von Programmen in Load-Store Architekturen. 22

23 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz Example: Arithmetische und logische Instruktionen im MIPS R10000 Subtrahieren von 64 Bit Integer RS RT 5 5 RD Register[RD] = Register[RS]-Register[RT] Ein Overflow erzeugt einen Interrupt DSUB Shiften nach rechts um SA Stellen RT 5 5 RD SA 5 5 Register[RD] = Register[RT] SA Das Vorzeichenbit wird in die freien Stellen dupliziert SRA Shiften nach links um eine variable Anzahl von Stellen RS RT 5 5 RD SLLV Register[RD] = Register[RT] Register[RS] 5LSB 6 Die Instruktionen in den Beispielen enthalten redundante Teile. Dafür sind alle Instruktionen gleich lang, und die jeweiligen Registernummern befinden sich an den gleichen Positionen. Damit können Teile des Instruktionswortes weitgehend unabhängig von anderen Teilen des Instruktionswortes dekodiert und interpretiert werden. Dies erlaubt eine erhöhte Verarbeitungsgeschwindigkeit und einfachere Logikschaltungen im Prozessor. Weiterhin ist es für das Pipelining von großer Bedeutung. Dagegen erfordert die redundante Instruktionsdarstellung mehr Speicher und hat über die Speicherhierarchie auch einen negativen Einfluss auf die Systemleistung. Daher muss beim Entwurf des Prozessors ein geeigneter Kompromiss gefunden werden. Fast alle Prozessoren unterstützen zur Zeit einheitliche Datenformate. Daneben gibt es dezimale Datenformate, bei denen 4 Bit verwendet werden, um eine Dezimalziffer zu kodieren. Ein Byte enthält dann zwei derartige Ziffern. Dieses Datenformat findet aber im technisch-wissenschaftlichen Umfeld kaum Anwendung. Durch neue Anwendungsbereiche können auch neue Datenformate entstehen. So unterstützen viele Prozessoren heute spezi- 23

24 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN elle Pixeldatenformate für Multimediaanwendungen. Datenformate in Prozessoren Datum Format Charakter ASCII Integer Zweierkomplement Gleitkomma IEEE Standard 754 Die sogenannte Floating-Point-Multiply-Add Instruktion (FPMA oder FMADD) erlaubt die Verwendung von 3 Operanden. Beim MIPS R10000 dient das Format dabei der Unterscheidung zwischen Gleitkomma- und Festkomma-Darstellung sowie der Festlegung der Datenlänge. Dies ist eine Ausnahme zu der ansonsten vorhandenen Begrenzung auf 3 Register pro Instruktion. Der Grund liegt in dem häufigen Auftreten von Skalarproduktberechnungen bei wissenschaftlichen Programmen. COP 1x FR FT 5 5 FS FD MADD Format Register[FD] = Register[FS] x Register[FT] + Register[FR] Steuerung des Kontrollflusses Eine Programmausführung ist eine lange Sequenz von Instruktionen, die nacheinander abgearbeitet werden. Diese Abarbeitungsfolge nennt man Kontrollfluss. Programme können aber im Allgemeinen nicht als eine lineare Folge von Instruktionen geschrieben werden. Abschätzung der Länge eines linearen Programms Bei einem 1GHz Prozessor mit Pipelining wird im idealen Fall jede Nanosekunde eine neue Instruktion ausgeführt. Ein Programm von 1 Minute Länge enthält damit Instruktionen. In Programmen werden daher viele Instruktionen mehrmals ausgeführt 2. Dabei können jeweils unterschiedliche Daten benutzt werden. Der Kontrollfluss ist deshalb nicht linear und muss gesteuert werden. Für diese Steuerung gibt es 4 Arten von Instruktionen: 1. Bedingte Verzweigungen: if (a < b) 2. Unbedingte Sprünge: goto label 1; 3. Unterprogrammaufrufe: matrix solve (a, b, n); 4. Unterprogrammrücksprünge: return; 2 Diese Tatsache wird auch später bei der Speicherhierarchie verwendet. 24

25 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz Dabei kann das Ziel eines Kontrollflusswechsels auf 2 Arten bestimmt werden: 1. statisch: Verzweigung, Sprung, Unterprogrammaufruf 2. dynamisch Rücksprung aus einem Unterprogramm Bei einem Unterprogramm, das von zwei Stellen im Programm aus aufgerufen wird, ist die Rücksprungadresse vor der Ausführung des Programms nicht eindeutig bestimmbar. Diese Rücksprungadresse wird daher in einem Register abgelegt, da diese Information wahrscheinlich bald wieder benutzt wird (beim Aussprung aus dem Unterprogramm). Im Allgemeinen wird das (statische) Ziel eines Kontrollflusswechsels relativ zur Adresse der gegenwärtig ausgeführten Instruktion angegeben. Wie bei der indirekten Adressierung mit einem Basisregister erlaubt dieses Verfahren die Verwendung weniger Bits der Instruktion. Außerdem wird die genaue Position des Programms im Speicher nicht in der Instruktion festgeschrieben. Dies erfordert die Speicherung dieser aktuellen Adresse in einem speziellen Register, dem Program Counter (PC). Die Existenz eines Program Counters ist eines der kennzeichnenden Merkmale der sogenannten von-neumann-architektur. Kontrollflussänderung im MIPS R10000 Im MIPS R10000 haben alle Verzweigungen eine architekturbedingte Verzögerung von einer Instruktion (Branch Delay). Der Grund für diese Eigenschaft liegt im sogenannten Kontroll-Hazard. Dies wird in einem späteren Kapitel näher erläutert. Daher wird die auf die Verzweigung folgende Instruktion auf jeden Fall ausgeführt. Es ergeben sich somit 2 Möglichkeiten: 1. Verwendung des Ergebnisses der Instruktion in jedem Fall. 2. Verwendung des Ergebnisses der Instruktion nur falls ein/kein Aussprung erfolgt. Auf diese Eigenschaft des Prozessors wird später ebenfalls noch genauer eingegangen. 1. Unbedingter Sprung innerhalb einer 256(=2 28 ) MB Region J instruction index 26 Der PC nach dem Sprung: bit 0-1 (LSB) = 0 0 (aligned) bit 2-27 Instruktionsindex ab bit 28 die entsprechenden Adressbits der Instruktion im Branch Delay Slot 25

26 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN 2. Ausführung eines Unterprogramms, dessen Instruktionsadresse in einem Register gespeichert ist RS RD JALR Register[RD] = Rücksprungadresse, Inhalt[PC] = Register[RS] Aufgrund des Branch Delay Slots ist die Rucksprungadresse die 2. Instruktion, die auf den Sprung folgt. 3. Falls RS RT erfolgt ein Sprung um den Offset relativ zum PC. Dabei wird das Ergebnis der nachfolgenden Operation nur verwendet, falls der Sprung durchgeführt wird. BNEL RS RT Offset Es wird eine lokale (18 Bit) Umgebung des PC verwendet. Die zusatzlichen 2 Bit ergeben sich durch das notwendige Alignment, da ein Instruktionswort immer 4 Byte enthält. Bei einem bedingten Sprung bestimmt die Auswertung eines Ausdrucks mit einem boolschen Ergebnis, ob der Sprung durchgeführt oder der lineare Kontrollfluss fortgesetzt wird. Für diese Auswertung der Verzweigungsbedingung gibt es mehrere Verfahren. Vergleich und Sprung: Da die Sprungausführung und Auswertung der Verzweigungsbedingung Teile derselben Instruktion sind, wird nur eine Instruktion benötigt. Allerdings kann sich dieser Gesamtaufwand innerhalb der Instruktion begrenzend auf die Taktfrequenz und damit auf die Systemleistung auswirken. Speicherung des Vergleichsergebnisses in einem Register: Die Verzweigungsbedingung wird unabhängig vom Sprung in einer eigenen Instruktion zugewiesen. Das Ergebnis wird dann in einem Register gespeichert. Für den anschließenden bedingten Sprung muss nur zwischen den Registerinhalten 0 und 1 unterschieden werden. Dieser Ansatz ist einfach und erlaubt Compileroptimierungen. Allerdings wird ein Register verbraucht. Verwendung von Condition Codes: Zunächst wird die Verzweigung in einer Instruktion ausgewertet, dann folgt in einer der nächsten Instruktionen der bedingte Sprung. Gegenüber der Speicherung des Vergleichsergebnisses in einem allgemeinen Register sind die Condition Code Register nur sehr kleine Spezialregister, die nur boolsche Werte speichern müssen. Dabei muss das Ergebnis der Verzweigungsbedingung nur kurzzeitig zwischengespeichert werden. 26

27 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz Beim Intel Itanium 2 wird ein ähnliches Verfahren eingesetzt, um Sprünge ganz zu vermeiden. Hierbei wird das Ergebnis einen Vergleiches in einem Prädikatregister gespeichert. Nachfolgende Instruktionen werden dann je nach gespeichertem Ergebnis ausgeführt oder als NOP behandelt. if (a>b) c = c + 1 else d = d * e + f Diese Verzweigung kann durch das Prädikatregister entfernt werden: pt, pf = compare(a>b) if (pt) c = c + 1 if (pf) d = d * e + f Hierbei wird der Kontrollfluss nicht verändert, da beide Instuktionen immer ausgewertet werden, aber je nach Prädiktionsregister nur ein Ergebnis gespeichert wird. Diese und weitere Optimierungsmöglichkeiten werden in der Vorlesung Parallele Rechnersysteme behandelt. Daneben bestehen noch eine Vielzahl weiterer Varianten. Beim Aufruf von Unterprogrammen muss der gegenwärtige Inhalt der Register gesichert werden, da das Unterprogramm die Register selbst benötigt. Hierzu gibt es zwei Verfahren: Caller-Saved: Das aufrufende Programm speichert den Inhalt dieser Register im Speicher. Nach dem Rücksprung werden die Register vom aufrufenden Programm wieder geladen. Callee-Saved: Das aufgerufene Unterprogramm speichert den Inhalt dieser Register im Speicher, falls es sie benötigt. Vor dem Rücksprung muss das Unterprogramm den alten Zustand wieder herstellen. Des Weiteren werden verschiedene Unterprogrammparameter in Registern übergeben. Die Übergabe von Parametern in Registern ist effizienter als die Übergabe über den Stack, die auch möglich ist. Zur Einbindung von fremden bereits kompilierten Unterprogrammen aus Bibliotheken muss ein Standard definiert werden. Ein Beispiel für einen solchen Standard ist in der nachfolgenden Tabelle angegeben Zusammenfassung und Ausblick Der Instruktionssatz von RISC-Architekturen zeichnet sich vor allem durch folgende Eigenschaften aus: 1. LOAD/STORE Architektur. 27

28 2.3 Der Instruktionssatz 2 MIKROPROZESSOREN R0 R1 R2-R7 R8-R15 R16-R29 R30 R31 FP0-FP3 FP4-FP17 FP18-FP31 0 keine Speicherung möglich Ergebnis des Unterprogramms Die ersten 6 Argumente des Aufrufs Caller saved Register Callee saved Register Stack Pointer Rücksprungadresse Die ersten 4 Argumente des Aufrufs Caller saved Register Callee saved Register Abbildung 1: Konvention zur Benutzung der Register bei Unterprogrammaufrufen 2. Festes Instruktionsformat bezüglich Länge und Position von Untergruppen. 3. Geeignete Auswahl der in Instruktionen realisierten Operationen. Die letzte Eigenschaft ist eine Konsequenz des festen Instruktionsformats und dem Streben nach Beschränkung der Redundanz in den Instruktionen. Nicht direkt realisierte Operationen müssen durch das Zusammenwirken mehrerer Instruktionen umgesetzt werden. Dies führt zu folgenden Konsequenzen: 1. Der Instruktionssatz hat eine einfache Struktur. 2. Die Hardwareausführung ist sehr schnell. 3. Selten verwendete Operationen können einen zusätzlichen Zeitaufwand erfordern. Damit wird entsprechend der Regel für den Entwurf von Computersystemen eine hohe Systemleistung erreicht. Es ist allerdings nicht korrekt anzunehmen, dass RISC-Architekturen nur einen zahlenmäßig kleinen Instruktionssatz haben. Um hohe Stückzahlen zu erreichen, werden Prozessoren heute oft nicht nur für den Einsatz in PCs oder Workstations, sondern auch für die Verwendung in eingebetteten Systemen entworfen. Dieses erweiterte Anwendungsgebiet hat auch einen direkten Einfluss auf Entscheidungen beim Entwurf eines Prozessors. Außerdem ist der Entwurfsprozess durch eine so große Zahl von Kompromissen gekennzeichnet, dass sich bisher keine optimale Architektur durchgesetzt hat. Während zum Beispiel der MIPS R10000 nur die beiden Spezialregister HI und LO besitzt, zeichnet sich die Power PC Architektur durch eine Vielzahl von Spezialregistern aus: CTR TBL, TBU XER CR Count Register Zeitbasisregister Integer Carry- und Overflowbits Condition Code Register 28

29 2 MIKROPROZESSOREN 2.3 Der Instruktionssatz Wie bereits erwähnt, dient das Condition Code Register der effizienten Zwischenspeicherung von Vergleichsoperationsergebnissen und erlaubt zusätzliche Compileroptimierungen. Beim PowerPC beispielsweise ist dies ein 32 Bit Register und enthält acht 4 Bit Felder zur Speicherung der Vergleichsoperationsergebnisse. Das Count Register umfasst 64 Bit und wird automatisch getestet und dekrementiert. Die Existenz dieses Registers muss im Instruktionssatz und vom Compiler berücksichtigt werden. Verwendung des Count Registers C Code: for (k=0; k < 512; k++) x[k]=r x[k] + t y[k] Power PC Code unter folgenden Annahmen: Die Register R3 und R4 enthalten die Adressen von x[0] und y[0]. Die Adresse von Element x[k] ergibt sich dann zu x[0] + k 4. Analoges gilt für das Element y[k] (4 Byte pro Datum). Die Gleitkommaregister Fp1 und Fp3 enthalten die Werte t und r. Das CTR enthält den Wert 512. LOOP: lfsu Fp0 = y(r4=r4+4) Aktualisierung von R4 als Nebeneffekt fmuls Fp0 = Fp0, Fp1 Floating Point Multiplikation lfs Fp2 = x(r3, 4) fmadds Fp0 = Fp0, Fp2, Fp3 Floating Point Multiply Add stfsu x(r3 = R3+4) = Fp0 Aktualisierung von R3 als Nebeneffekt bc LOOP, CTR 0 Dekrementieren des Inhalts von CTR und dann Verzweigung falls der Inhalt von CTR nicht Null ist. Damit kann der Schleifencode sehr kompakt dargestellt werden. Allerdings kann es für den Compiler sehr schwierig sein, eine Schleife in einer Hochsprache in derart kompakten Maschinencode zu übersetzen. Außerdem ist nicht klar, ob dieser Maschinencode auch tatsächlich zu einer höheren Prozessor- oder gar Systemleistung führt. Ein besonderer Weg wird für Hochleistungsprozessoren der Serie 80x86, wie zum Beispiel der Intel P6 Familie (Pentium Pro, Pentium II, Pentium III, Pentium IV) eingeschlagen. Zunächst unterscheiden sich die 80x86 Instruktionen erheblich von RISC Instruktionssätzen: - Für Integer-Daten werden Akkumulatoren verwendet. - Für Gleitkomma-Daten wird ein Stack benutzt. - Der Instruktionssatz erlaubt direkten Speicherzugriff bei Operationen. - Die Instruktionslänge variiert. 29

30 2.4 Der Compiler 2 MIKROPROZESSOREN - Segmentierung wird statt Paging unterstützt (siehe Abschnitt Speicherhierarchie). Auf der einen Seite erschweren diese Eigenschaften die Weiterentwicklung der Prozessoren erheblich, andererseits sollen aus markttechnischen Gründen auch nachfolgende Architekturen kompatibel mit dem Instruktionssatz sein. Beim Pentium IV werden daher die 80x86 Instruktionen im Prozessor zunächst in eine oder mehrere RISC ähnliche Mikrooperationen (µops) umgewandelt, die dann wie in einem RISC-Prozessor ausgeführt werden. Abgesehen von dem Umwandlungsteil kann der Intel Pentium IV daher praktisch als RISC Prozessor bezeichnet werden. 2.4 Der Compiler Der Instruktionssatz lässt sich als die Sprache des Prozessors bezeichnen. Heute bedienen sich allerdings nur noch sehr wenige Programmierer dieser Sprache. In den meisten Fällen wird ein Programm in einer Hochsprache wie zum Beispiel FORTRAN, C++ oder JAVA geschrieben. Dieses Programm wird entweder von einem Programm interpretiert oder von einem anderen Programm, einem sogenannten Compiler, in die Maschinensprache übersetzt. Ein solcher Compiler soll dabei folgende Eigenschaften haben: 1. Korrekte Übersetzung 2. Erzeugen eines schnellen Maschinencodes 3. Kurze Übersetzungszeit 4. Unterstützung bei der Fehlersuche (Debugging) Sofern ein Benutzer selbst Programme entwickelt, ist ein Compiler für ihn ein wichtiger Bestandteil des Rechnersystems. Daher kann der Prozessorentwurf einschließlich des Instruktionssatzes nicht unabhängig von der Compilerentwicklung gesehen werden. Wie bereits erwähnt, wird deshalb heute auch der Compiler in den Leistungstest von Rechnersystemen einbezogen. Meist besitzen die Quelldateien ein hohes Abstraktionsniveau und sind durch den Benutzer relativ leicht les- und veränderbar. Die Zieldateien sind dagegen oft an die Hardware angepasst. Damit bildet der Compiler eine Brücke zwischen dem Benutzer und der Maschine. Darstellung eines Ausdrucks in einer Hochsprache aktuelle Zeit = Startzeit + vergangene Minuten 60 + vergangene Sekunden; Darstellung desselben Ausdrucks im Instruktionssatz des MIPS R10000: 30

31 2 MIKROPROZESSOREN 2.4 Der Compiler LW r1, minuten LW r1, sekunden ADDI r2, r0, 60 ADD r1, r1, r3 LW r3, startzeit MFLO r3 MULTU r1, r2 ADD r1 r1, r3 Kenntnisse über Compiler sind insbesondere in folgenden Fällen für Ingenieure hilfreich: 1. Der Compilerbau ist ein sehr gut untersuchter Bereich. Viele von Ingenieuren bearbeitete Anwendungen verlangen den Entwurf von kleinen Spezialcompilern. Diese werden am effizientesten von einer Person mit sehr guten Hardwarekenntnissen entwickelt. 2. Wenn das Verhalten der Zieldatei nicht dem Wunsch des Benutzers entspricht, dann hilft oft das Verständnis des Übersetzungsprozesses bei der Suche nach Verbesserungsmöglichkeiten. 3. Der Entwurf von Hardware und den dazugehörigen Compilern ist untrennbar verbunden. Außerdem bedeutet die Erstellung von großen Compilern einen erheblichen Aufwand. Eine hohe Effizienz ist daher nur mit einem kombinierten Entwurf zu erreichen. Daher wird von Ingenieuren in der Prozessorentwicklung auch ein guter Kenntnisstand bei der Compilertechnik erwartet Aufbau eines Compilers Für viele Hochsprachen stehen heute oft eine große Anzahl von Compilern zur Verfügung, so dass der Benutzer sich meist einem schwierigen Auswahlprozess gegenüber sieht. Dazu benötigt er Kriterien zur Beschreibung der Güte eines Compiler: Leistungsfähigkeit der erzeugten Zieldatei: Darunter fallen zum Beispiel die Korrektheit des Programms und die Ausführungsdauer. Benutzerunterstützung: Der Compiler soll leicht anwendbar sein und den Benutzer bei der Fehlersuche oder bei der Optimierung des Programms unterstützen. Ressourcenverbrauch des Übersetzungsvorgangs: Obwohl der Compiler seine Arbeit vor dem Ablauf eines Programms beendet, sind gerade im Entwicklungsprozess die Laufzeit und der Speicherbedarf des Compilers sehr wichtig. Der typische Ablauf eines Übersetzungsvorganges zur Erzeugung von ausführbarem Maschinencode aus einer Hochsprache lässt sich diesen Kriterien eng zuordnen, siehe Abbildung 1. Das erste Element in dieser Kette ist der Präprozessor. Er dient der Benutzerunterstützung. Dabei besitzt er folgende Aufgaben: 31

32 2.4 Der Compiler 2 MIKROPROZESSOREN Quelldatei des Benutzers weitere Module Präprozessor Fehlermeldung modifizierte Quelldatei Frontend eines Compilers Symboltabelle Analyse der Quelldatei Fehlermeldung Zwischencode Synthese des Assemblercodes Kommentare, Hinweise Kern des Compilers, abgeschlossene Einheit Assemblerdatei Assembler Backend eines Compilers manchmal im Compiler enthalten verschiebbarer Objektcode weiterer Objektcode Laden/ Binden Fehlermeldungen ausführbarer Maschinencode Abbildung 1: Ablauf eines typischen Compilevorgangs 32

33 2 MIKROPROZESSOREN 2.4 Der Compiler Definition von Makros: Mit Makros kann das Abstraktionsniveau einer Sprache gehoben werden, und die Quelldatei des Benutzers wird so leichter lesbar. Makro zur Bestimmung des Betrages einer Differenz in C # define ABSDIFF(a,b) ((a)>(b)? (a)-(b):(b)-(a)) Achtung, dieses Makro weist erhebliche Unterschiede zur Definition einer ähnlichen Funktionalität über ein Unterprogramm auf! Einkopieren von Dateien: Dateien mit Standardmodulen werden in die Quelldatei des Benutzers hineinkopiert, ohne die originale Datei übermäßig groß und unübersichtlich zu machen. Einbinden der Standard I/O Datei in C # include <stdio.h> Bedingtes Compilieren: Der nachfolgende Übersetzungsprozess kann von den Werten oder der Existenz von speziellen Eingabedaten abhängig gemacht werden. Übersetzung nur, wenn die Konstante DEBUG nicht definiert ist # ifdef DEBUG... Der Präprozessor erlaubt ebenfalls die einfache Veränderung von Konstanten, die mehrmals in der Quelldatei vorkommen. Er ist kein Bestandteil des eigentlichen Compilers. Dies kann gelegentlich zu Problemen bei der Fehlersuche führen. In den meisten Fällen entfernt der Präprozessor auch Kommentare aus dem Quellcode. Der Compiler erzeugt einen Assemblercode, der durch eine vom Benutzer relativ leicht lesbare Beschreibung gekennzeichnet ist. ADDI R4, R31, 276 entspricht R4 R Diese Beschreibung wird vom Assembler in eine, von dem Rechner lesbare Binärfolge umgewandelt. Ebenso bestimmt der Assembler die relative Position der Speicheradressen von Sprüngen und Daten. LW R1 Minuten wird umgewandelt in LW R1 168(SP) In vielen Compilern ist bereits ein Assembler integriert, da der Assemblercode im Allgemeinen vom Benutzer nicht modifiziert wird. Schließlich wird durch den Lader ein ausführbarer Maschinencode erzeugt. Dies erfordert eine Festlegung der Adressen bezogen auf eine Grundadresse. Gleichzeitig kann der Objektcode von anderen Modulen in das Programm eingebunden werden. Dies erlaubt: 33

34 2.4 Der Compiler 2 MIKROPROZESSOREN Verwendung besonders optimierter Bibliotheksroutinen: Beispiele für derartige Bibliotheken sind die BLAS Fortranroutinen, die LEDA-Routinen für Graphenalgorithmen oder die MPI-Routinen für die Kommunikation zwischen Prozessen. In diesem Zusammenhang ist auch die Standardisierung der Unterprogrammschnittstellen sehr wichtig, da die externen Routinen nicht neu übersetzt werden. Modularer Übersetzungsprozess bei sehr großen Programmen: Bei Veränderungen einer einzelnen Programmkomponente im Zuge der Softwareentwicklung muss dann nur diese rekompiliert werden. Dies führt zu einer Reduktion der Laufzeit des Compilers bei großen Programmen Analyse der Quelldatei Vor der Erzeugung der Zieldatei muss die Quelldatei erst analysiert werden. Dies geschieht in 3 Schritten, siehe Abbildung 2. Quelldatei lexikalische Analyse Fehlermeldungen syntaktische Analyse Symboltabelle semantische Analyse Abbildung 2: Analyseschritte eines Compilers Bei der lexikalischen Analyse wird der linear eingelesene Strom der Zeichen der Quelldatei in Symbole zur Weiterverarbeitung umgewandelt. Für die Weiterverarbeitung werden irrelevante Zeichen oder Zeichenfolgen nicht weitergeleitet. Dazu gehören zum Beispiel Tabulatoren, Leerzeichen und noch nicht entfernte Kommentare. Eine Folge von Zeichen zwischen zwei Trennzeichen bildet ein Lexem. Damit ein solches Lexem als ein Symbol 34

35 2 MIKROPROZESSOREN 2.4 Der Compiler erkannt werden kann, muss es dem Muster des Symbols entsprechen. Identifier in C Allgemeine Darstellung Buchstabe Folge von Unterstrich Unterstrich Spezielle Beispiele % 7 DB 7 von 10 ungültige Identifier wert Buchstabe Zahl gültiger Identifier. Die lexikalische Analyse wird durch einen Scanner durchgeführt. Da jedes einzelne Zeichen der Quelldatei eingelesen werden muss, benötigt der Scanner oft einen erheblichen Zeitbedarf. Die Erstellung eines Scanners erfordert zunächst die Spezifikation der Symbole. Während der lexikalischen Analyse entdeckte Fehler werden dem Benutzer gemeldet. Dabei wird die lexikalische Analyse weiter durchgeführt. Somit kann zum Beispiel ein vergessenes Kommentarzeichen zu einer großen Anzahl von Folgefehlern führen. Während der lexikalischen Analyse wird für jeden Identifier ein Eintrag in einer Symboltabelle vorgenommen. Die Symboltabelle ist eine Datenstruktur, die weitere Informationen über den Identifier enthält, wie zum Beispiel den Typ, die Verwendung und die Speicheradresse. Diese zusätzlichen Informationen werden in den späteren Analyseschritten eingetragen. Sobald die einzelnen Symbole aus dem Quelltext extrahiert sind, müssen die Sätze bestimmt werden. Dabei wird überprüft, ob jeder Satz den grammatikalischen Regeln der Sprache entspricht. Diese sogenannte syntaktische Analyse wird von einem Parser durchgeführt. Viele Fehler in einer Quelldatei sind syntaktischen Ursprungs. Syntaktische Fehler führen leicht zu Folgefehlern. Syntaxfehler ; 6 + (3 + (2-5); Der Ausdruck ist In diesem Ausdruck fehlt eine Klammer, syntaktisch korrekt. obwohl alle Symbole korrekt sind. Bei der semantischen Analyse wird die Bedeutung der syntaktisch richtigen Sätze überprüft. Einen wesentlichen Anteil stellt dabei die Typüberprüfung dar. Überprüfung eines Teils eines C-Programms int feld[3]; 35

36 2.4 Der Compiler 2 MIKROPROZESSOREN int element;. Der Ausdruck ist syntaktisch korrekt. element = element + feld; feld ist aber ein Zeiger und kann nicht zu einem Integer addiert werden. Daher liegt ein semantischer Fehler vor. Schwierigkeiten können auch bei Ausdrücken auftreten, die den Kontrollfluss beeinflussen. while (a < b) { } break;. korrekte Syntax kein umschließendes while, do, for, switch oder case statement Jede Zeile hat eine korrekte Syntax. Allerdings ist die Position von break; falsch wenn es kein umschließendes while, do, for, switch oder case statement gibt. Neben dieser statischen Typüberprüfung können auch dynamische Fehler auftreten. Dynamische Fehler können nicht in jedem Fall von einem Compiler entdeckt werden. Auftreten eines möglichen dynamischen Fehlers int feld[10]: int index;. index = wert; zahl = feld[index]; wert sei abhängig von Eingabedaten (keine Konstanten). Es kann nicht sichergestellt werden, dass index im Bereich von 0 bis 9 liegt. Nach den verschiedenen Analysephasen erzeugt ein Compiler im Allgemeinen einen Zwischencode. Die Verwendung eines Zwischencodes hat mehrere Vorteile: 1. Der Zwischencode trennt das sprachenabhängige Front-End eines Compilers von dem maschinenabhängigen Back-End. Damit muss bei der Portierung auf eine andere Architektur nur das Back-End des Compilers ausgetauscht werden. Auf der anderen Seite lässt sich das gleiche Back-End für mehrere Sprachen mit unterschiedlichen Front-Ends verwenden. 2. Teile der Codeoptimierung können maschinen- und sprachenunabhängig durchgeführt werden. Allerdings sind manche Optimierungen maschinenabhängig. 36

37 2 MIKROPROZESSOREN 2.4 Der Compiler Für den Zwischencode wird häufig ein sogenannter Drei-Adress-Code verwendet. Im Folgenden sind einige typische Operationen im Drei-Adress-Code aufgeführt: x = y op z goto L if x relop y goto L x = y [i] x = & y x = y : bedingter Sprung relop ist eine Vergleichsoperation : indizierte Zuweisung : Adresse von y : Inhalt der Adresse von y Bei der Erzeugung von Drei-Adress-Codes entsteht eine Vielzahl von temporären Variablen. Umwandlung eines Ausdrucks in einen Drei-Adress-Code a = - b c - d t0 : = - b t1 : = t0 c t2 : = t1 - d a : = t2 } Die beiden letzten Zeilen können zu einer Zeile zusammengefasst werden. Zur Vereinfachung der Codeoptimierung wird oft jede temporäre Variable nur einmal verwendet. Dies führt zu einer sehr großen Symboltabelle mit entsprechendem Speicherplatzbedarf des Compilers. Viele Operationen müssen aufwändig in den Drei-Adress-Code umgesetzt werden. Umwandlung des Ausdrucks a = b < c Es gibt keine Zuweisung mit Vergleichsoperationen. 100 : if b < c goto : a : = : goto : a : = : Die Ziele von Sprungadressen im Drei-Adress-Code werden oft nachträglich eingeführt. Dieses Verfahren nennt man Backpatching. In Beispiel wird ein Drei-Adress-Code für den Kern eines einfachen C-Programms erzeugt Compileroptimierung Die Laufzeit eines Programms kann in erheblichem Maß durch Compileroptimierungen beeinflußt werden. Bei den Optimierungsmethoden unterscheidet man zwischen High-Level und Low-Level Optimierung. Die High-Level Optimierung ist maschinenunabhängig und wird innerhalb des Zwischencodes durchgeführt. Die Low-Level Optimierung ist maschinenabhängig und findet beim Übergang vom Zwischencode zum Maschinencode statt. 37

38 2.4 Der Compiler 2 MIKROPROZESSOREN Erzeugung von Drei-Adress-Code für ein Bubble-Sort-Programm Dabei seien i und j Integer. for (i=n-2; i>=0; i--) for (j=0; j<=i; j++) if (A[j] > A[j+1]) { temp = A[j]; } A[j] = A[j+1]; Vertauschen von A[j] und A[j+1] A[j+1] = temp; } Annahme: ˆ A[j] benötigt ein Wort (4 Byte) ˆ A[j] befindet sich an addr (A) + 4 j i = n-2 L5: if i < 0 goto L1 j = 0 L4: if j > i goto L2 t1 = j t2 = 4 t1 t3 = A[t2] #A[j] 5 t4 = j+1 t5 = 4 t4 t6 = A[t5] #A[j+1] if t3 <= t6 goto L3 #if... t7 = j t8 = 4 t7 temp = A[t8] #temp = A[j] 7 8 t9 = j+1 t10 = 4 t9 t11 = A[t10] 6 t12 = j t13 = 4 t12 A[t13] = t11 t14 = j+1 t15 = 4 t14 A[t15] = temp L3: j = j+1 goto L4 L2: i = i-1 goto L5 L1: halt #A[j+1] #A[j] = A[j+1] #A[j+1] = temp 38

39 2 MIKROPROZESSOREN 2.4 Der Compiler Von einem optimierenden Compiler wird erwartet, dass seine Transformation zu einem Programm führt, das bei gleichen Eingaben dieselben Ergebnisse erzeugt. Liegt eine legale Optimierung vor? Ursprungsprogramm Optimiertes Programm void test (a, b, n, k) void test (a, b, n, k) int n, k; int n, k; float a, b; float a, b; { int i; { int i; for (i=n-1; i>=0; i--) float c; a[i] = a[i] + b[k] ; c = b[k] ; return; for (i=0; i<n; i++) } a[i] = a[i] + c; return; } 1. Ein Überlauf kann auftreten wenn a[i] negativ und b[k] sehr groß ist. Dann ist die Reihenfolge der Ausführung wichtig. 2. Verschiedene Ergebnisse können durch Rundungsfehler entstehen. 3. Falls n < 1 gilt, findet im optimierten Programm trotzdem ein Speicherzugriff auf b[k] statt. Dies kann zu einem Interrupt führen. 4. Falsche Ergebnisse können entstehen, falls b[k] und a[i] die gleiche Speicherposition besetzen Abhängigkeiten Es ist das Bestreben der Optimierungsmethoden, die einzelnen Operationen so anzuordnen, dass ˆ keine unnötigen Operationen durchgeführt und ˆ alle Ressourcen der Zielarchitektur möglichst gleichmäßig und vollständig ausgenutzt werden. Einer beliebigen Umordnung von Operationen stehen allerdings Abhängigkeiten zwischen den Operationen entgegen. Hierbei werden zwei Arten von Abhängigkeiten unterschieden: 1. Kontrollabhängigkeit 2. Datenabhängigkeiten 39

40 2.4 Der Compiler 2 MIKROPROZESSOREN Die Instruktion J ist von der Instruktion I kontrollabhängig, wenn I bestimmt, ob J ausgeführt wird. Kontrollabhängigkeit I if (a > 3) J b = 5; Bei der Datenabhängigkeit werden 3 Typen unterschieden: Diese Datenabhängigkeiten stehen in engem Zusammenhang mit den Daten-Hazards beim Pipelining (siehe Kapitel 2.5.4). (a) Echte Abhängigkeit (Flow Dependence) Eine echte Abhängigkeit besteht zwischen Instruktion I und Instruktion J, wenn I einen Wert schreibt, den J liest. Echte Abhängigkeit I a = b + c; J d = a + e; (b) Blockierabhängigkeit (Antidependence) Eine Blockierabhängigkeit besteht zwischen Instruktion I und Instruktion J, wenn J eine Variable verändert, die I liest. Blockierabhängigkeit I a = b + c; J b = d + e; (c) Schreibabhängigkeit (Outputdependence) Eine Schreibabhängigkeit besteht zwischen Instruktion I und Instruktion J, wenn I und J die gleiche Variable verändern. Schreibabhängigkeit I a = b + c; J a = d + e; Eine Umordnung von zwei kontrollabhängigen Instruktionen führt zu der spekulativen Ausführung einer Instruktion. Spekulative Ausführung der Instruktion b = c Ursprünglicher Code Optimierter Code 100 if (a=3) goto 105 b = c 101 b = c if (a=3) goto Die spekulative Ausführung von Instruktionen ist dann vorteilhaft, wenn ansonsten Prozessorressourcen ungenützt bleiben würden. Bei der spekulativen Ausführung müssen aber 40

41 2 MIKROPROZESSOREN 2.4 Der Compiler auch häufig Datenabhängigkeiten berücksichtigt werden. Besondere Probleme treten bei Interrupts auf. Die spekulative Ausführung von Instruktionen wird manchmal direkt von der Hardware unterstützt. Falls eine echte Datenabhängigkeit zwischen zwei Instruktionen besteht, dann ist die Reihenfolge der beiden Instruktionen zwingend vorgeschrieben. Diese strikte Bedingung gilt bei der Blockierabhängigkeit nicht. Durch Umbenennung der Variablen können beide Instruktionen völlig unabhängig voneinander gemacht werden. Umbenennung von Variablen über eine Kopierinstruktion Ursprünglicher Code Optimierter Code 100 a = b + c a = b + c 101 b = d + e x = d + e. 110 f = b + g 109a b = x Kopierinstruktion f = b + g Diese Umbenennung führt zur Einführung einer zusätzlichen Kopierinstruktion. In vielen Fällen kann diese allerdings durch Optimierungsverfahren später wieder entfernt werden. Zur Vermeidung der Einführung von Blockierabhängigkeiten werden bei der Zwischencodeerzeugung in optimierenden Compilern temporäre Variablen nur einmal verwendet. Eine Schreibabhängigkeit führt entweder zu unnützem Code oder steht häufig mit Kontrollabhängigkeiten in Beziehung. Schreibabhängigkeit 100 a = b + c Instruktion 100 hat keinen Einfluss auf das Ergebnis, 101 a = d + e kann aber einen zusätzlichen Interrupt erzeugen Instruktion 100 kann daher entfernt werden. Schreibabhängigkeit bei Kontrollabhängigkeiten Ursprünglicher Code i = 0; for(k = 0; k < n; k++) Kontroll- if(func1(a[k])) abhängigkeiten i = func2(g); Optimierter code i = 0; Umbenennung j = func2(g); for(k = 0; k < n; k++) ( Dabei sei func2 eine sehr aufwändige Funktion) Schreibabhängigkeit 41

42 2.4 Der Compiler 2 MIKROPROZESSOREN if(func1(a[k])) i = j; Es kann allerdings ein Interruptproblem bei Funktion func2 auftreten. Die Datenabhängigkeiten sind nicht immer zur Übersetzungszeit offenbar, sondern sie hängen manchmal von Eingabewerten ab und ergeben sich dann erst bei der Programmausführung. Dynamische Datenabhängigkeiten I feld[i] = feld[j] a J feld[k] = feld[j] + c Echte Abhängigkeit i = j Blockierabhängigkeit k = j Schreibabhängigkeit k = i sonst keine Abhängigkeiten Darstellung von Abhängigkeiten Ein Programm kann einfach durch einen gerichteten Kontrollflussgraphen (CFG) dargestellt werden, bei dem zunächst jeder Knoten eine Instruktion und jede Kante den Übergang von einer Instruktion zur nächsten repräsentiert. In einem Drei-Adress-Code hat der bedingte Sprung zwei Nachfolger und jede andere Instruktion, außer dem Rücksprung aus einer Prozedur, höchstens einen Nachfolger. Zur Vereinfachung werden rekursiv zwei Knoten verschmolzen, wenn sie jeweils voneinander der einzige Nachfolger oder Vorgänger sind. Die Knoten dieses Graphen heißen dann Grundblöcke (Basic Blocks). Beachten Sie, dass ein Grundblock immer die größtmögliche Anzahl von Instruktionen enthält. Innerhalb eines Grundblocks können die Datenabhängigkeiten durch einen Abhängigkeitsgraphen dargestellt werden. Dabei wird jede Instruktion durch einen Knoten und jede Datenabhängigkeit durch eine gerichtete Kante dargestellt. Zur Reduktion von Blockierabhängigkeiten und Schreibabhängigkeiten werden die Variablen so gewählt, dass außer den indizierten Variablen jede Variable höchstens einmal beschrieben wird (Static Single Assignment). Dies erfordert neue Kombinationsinstruktionen, wenn 2 Ausführungspfade verschmelzen. Die Länge des längsten Pfades im Abhängigkeitsgraphen gibt die minimale Ausführungszeit des Grundblocks bei beliebig vielen Prozessorressourcen an Grundblockoptimierungen Grundblockoptimierungen sind relativ einfach durchzuführen. Bei einigen Compilern werden Grundblockoptimierungen zur Reduktion der Problemgröße für komplexere Optimierungen und zur Beseitigung von Zusatzinstruktionen nach komplexeren Optimierungen mehrfach durchgeführt. Einige der bekanntesten Grundblockoptimierungen werden nachstehend aufgeführt. 42

43 2 MIKROPROZESSOREN 2.4 Der Compiler Kontrollflussgraph des Bubble-Sort Programms Start 1 Die Knotennummerierung entspricht der bereist verwendeten Blocknummerierung 3 2 Halt Abhängigkeitsgraph des Grundblocks 6 vom Bubble-Sort Programm Die Knoten werden durch die beschriebenen Variablen identifiziert. t7 t9 t12 t14 temp Blockierabhängigkeit? t8 t10 t13 t15 t11 A[t13] A[t15] echte Abhängigkeiten Schreibabhängigkeit? 43

44 2.4 Der Compiler 2 MIKROPROZESSOREN Bubble-Sort Programm } t1 = j t2 = 4 j Copy Propagation t2 = 4 t1 t3 = A[t2] } BB5 t4 = j + 1 t5 = t2 + 4 Com. Subexprest5 = 4 t4 sion Elimination t6 = A[t5] if t3 t6 goto L3 ( } t7 = j t8 = 4 j Copy Propagation t8 = 4 t7 temp = A[t8] ( } t9 = j + 1 t10 = t8 + 4 Com. Subexprest10 = 4 t9 sion Elimination t11 = A[t10] BB6 ( } t12 = j t13 = 4 j t13 = 4 t12 A[t8] = t11 A[t13] = t11 Com. Subexpres- ( t14 = j + 1 sion Elimination t15 = 4 t14 A[t10] = temp A[t15] = temp Copy Propagation Bei der Erzeugung von Zwischencode oder bei verschiedenen globalen Optimierungen entsteht oft eine Vielzahl von Kopieroperationen, bei denen der Wert einer Variable direkt in eine andere Variable kopiert wird. Durch Verwendung der ersten Variablen in nachfolgenden Operationen können diese Kopieroperationen in Kontrollflussrichtung weitergegeben und unter Umständen entfernt werden. Dieser Art der Optimierung nennt man Copy Propagation. Sie reduziert die Anzahl der aktiven Variablen an einer Stelle im Code. Da derartige Variablen meist in Registern gespeichert werden, führt Copy Propagation neben einer Reduktion der Anzahl der Instruktionen auch zu mehr freien Registern und damit zu 44

45 2 MIKROPROZESSOREN 2.4 Der Compiler mehr Flexibilität bei der Maschinencodeerzeugung. Copy Propagation t1, j aktiv t1 = j t2 = 4 t1 3-Adress-Code t2 = 4 j t1 = j j aktiv Optimierter 3-Adress-Code. Falls t1 später im Code nicht mehr gebraucht wird, kann t1 = j ganz entfallen. (Useless Code Elimination) Ein Programm enthält häufig eine Vielzahl von meist kleinen Konstanten. Durch die Optimierung Constant Propagation können Zuweisungen von Konstanten ebenso wie Kopieroperationen auch in Kontrollflussrichtung weitergereicht werden. Damit reduziert der Compiler zum einen den Rechenaufwand des Programms, und zum anderen ergeben sich oft neue Optimierungsmöglichkeiten. Constant Propagation c = 3 a[j] = a[j] + c; c = 3 t1 = 4 j t2 = a[t1] t3 = t2 + c t4 = 4 j a[t4] = t3 t1 = 4 j t2 = a[t1] t3 = t2 + 3 t4 = 4 j a[t4] = t3. c = 3 C-Instruktion 3-Adress-Code Optimierter 3-Adress-Code Durch andere Optimierungen entstehen häufig Operationen, die Variablen beschreiben, die anschließend nicht mehr benötigt werden. Damit wird die Operation selbst unnötig und kann entfernt werden. Die Optimierungsform heißt Useless Code Elimination. Voraussetzung für Useless Code Elimination ist die Untersuchung, ob eine Variable nach einer gegebenen Position noch benötigt wird, das heißt, ob die Variante live oder dead ist. Dies 45

46 2.4 Der Compiler 2 MIKROPROZESSOREN geschieht durch die sogenannte Live-Variable Analysis. Useless Code Elimination t1 = j t2 = 4 t1 t1 wird nicht mehr benötigt. 3-Adress-Code t2 = 4 j Copy Propagation + Useless Code Elimination Optimierter 3-Adress-Code. In engem Zusammenhang mit Useless Code Elimination steht die Optimierungsform Dead Variable Elimination. Hierbei handelt es sich um das Entfernen von Variablen, deren Wert nie benutzt wird. Daher ist es auch nicht notwendig, diese Variable überhaupt anzulegen, das heißt, Speicherplatz für sie zu reservieren. Dead Variable Elimination t1 = j t2 = 4 t1 t2 = 4 j t1 wird nicht benötigt.. In dem Beispiel ist t1 eine temporäre Variable und wurde im originalen Programm nicht angelegt. Bei der Fehlersuche können dann Probleme auftreten, wenn eine ursprünglich definierte Variable entfernt wird und nun beim Debugging nicht mehr gefunden wird. Dead Variable Elimination wird oft nach Constant Propagation durchgeführt. Manchmal wird derselbe Ausdruck (Subexpression) mehrmals in einem Grundblock bestimmt. Durch die sogenannten Common Subexpression Elimination wird der Ausdruck dann nur in einer Instruktion ermittelt, und die anderen Variablen werden durch Kopieroperationen bestimmt. Diese Kopieroperationen können später häufig durch Copy Propagation und Useless Code Elimination entfernt werden. Bei vielen Compilern geschieht 46

47 2 MIKROPROZESSOREN 2.4 Der Compiler das auch in einem Schritt. Common Subexpression Elimination 3-Address-Code 3-Address-Code nach Common Subexpression Elimination Optimierter 3-Address-Code t8 = 4 j t8 = 4 j t8 = 4 j temp = A[t8] temp = A[t8] temp = A[t8] t9 = j + 1 t9 = j + 1 t9 = j + 1 t10 = 4 t9 t10 = 4 t9 t10 = 4 t9 t11 = A[t10] t11 = A[t10] t11 = A[t10] t13 = 4 j t13 = t8 A[t13] = t11 A[t13] = t11 A[t8] = t11 t14 = j +1 t14 = t9 t15 = 4 t14 t15 = 4 t14 A[t15] = temp A[t15] = temp A[t10] = temp Allerdings wird die sogenannten Reichweite (Live Range) einer Variablen bei der Common Subexpression Elimination vergrößert. Daher ist es für diese Optimierung günstig, wenn Variablen nur einmal verwendet werden (Single Assignment). Außerdem kann sich die Common Subexpression Elimination manchmal als ungünstig erweisen, da durch die Erhöhung der Reichweite von Variablen möglicherweise die Register des Prozessors nicht für die Speicherung der Variablen ausreichen. Dann müssen Variablen über STORE und LOAD Instruktionen zwischengespeichert werden, was die Vorteile der Optimierung mehr als zunichte machen kann. Unter dem Begriff Superoptimierung versteht man den Austausch einer Sequenz von Instruktionen gegen eine optimale Alternative. Dabei ist die Ermittlung von geeigneten Sequenzen sehr aufwändig und erfordert oft die Umordnung der Instruktionen im ursprünglichen Grundblock. Außerdem hängt die optimale Instruktionssequenz eng mit dem Instruktionssatz des jeweiligen Prozessors zusammen. Daher wird die Superoptimierung nur für 47

48 2.4 Der Compiler 2 MIKROPROZESSOREN kleine Sequenzen und meist kurz vor der Erzeugung des Assemblercodes angewendet. Superoptimierung t1 = j t2 = 4 t1 t3 = A[t2] t4 = j + 1 t5 = 4 t4 t6 = A[t5] if t3 t6 goto L3 t1 = j t2 = 4 t1 t4 = j + 1 t5 = 4 t4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 t2 = 4 j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L6. 3-Adress Code 3-Adress Code nach Umordnung 3-Adress Code nach Superoptimierung Einige der Optimierungsmethoden lassen sich über die Grenzen von Grundblöcke hinaus anwenden. Dabei muss der Kontrollfluss allerdings berücksichtigt werden. Vor allem Constant Propagation, Copy Propagation und Common Subexpression Elimination lassen sich von einem Grundblock unter gewissen Bedingungen zum nächsten Grundblock weiterrei- 48

49 2 MIKROPROZESSOREN 2.4 Der Compiler chen. Teil des Kontrollflussgraphen des Bubble-Sort Programms Eine Übertragung der Optimierungen von Block 5 auf Block 6 ist möglich Eine Übertragung der Optimierungen von Block 5 auf Block 7 ist nicht möglich Optimierte Grundblöcke 5 und 6 des Bubble-Sort Programms 5 6 t2 = 4 j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 t8 = 4 j t10 = t8 + 4 temp = A[t8] t11 = A[t10] A[t8] = t11 A[t10] = temp t2 = 4 j t5 = t2 + 4 t3 = A[t2] t6 = A[t5] if t3 t6 goto L3 A[t2] = t6 A[t5] = t3. 3-Adress Code nach Grundblockoptimierung 3-Adress Code nach erweiterter Grundblockoptimierung Registerzuweisung Vor der Erzeugung des Maschinencodes muss jeder Variablen ein Register zugewiesen werden. Falls keine freien Register mehr vorhanden sind, muss der Inhalt von Registern im Hauptspeicher zwischengespeichert werden (Register Spilling). Dies bedeutet die zusätzliche Einführung von LOAD und STORE Instruktionen. Die Registerzuweisung ist keine Optimierung im eigentlichen Sinn sondern ein Teil der Codeerzeugung. 49

50 2.4 Der Compiler 2 MIKROPROZESSOREN Konzept der Registerzuweisung - Auf jedem Ausführungspfad lebt eine Variable von ihrer Erzeugung bis zu ihrem letzten Gebrauch. - Für jede Instruktion werden dort lebende Variablen unterschiedlichen Registern zugewiesen oder zwischengespeichert. - Für das Programm wird ein Interferenzgraph erzeugt, bei dem jede Variable einem Knoten entspricht, und zwei Knoten adjazent sind, falls die entsprechenden Variablen an einer Instruktion im Programm gleichzeitig leben. - Der Interferenzgraph wird nun mit möglichst wenig Farben so gefärbt, dass alle benachbarten Knoten unterschiedliche Farbe zugewiesen bekommen. - Falls die Zahl der Farben die Anzahl der Register übersteigt, muss eine (oder mehrere) Variablen zwischengespeichert und der Vorgang wiederholt werden. Registerzuweisung.... t1 = 4 j t2 = A[t1] t3 = t1 + 4 t4 = A[t3] t5 = t3 + 4 t6 = t4 + t2 A[t5] = t6.... j t1 t2 t3 t4 t5 t6 R1 R3 R2 R3 R4 R3 R4. 3-Adress Code Ausschnitt Lebensdauer der Variablen t5 t6 t4 j t3 t1 t2 R3 = 4 R1 R2 = A[R3] R3 = R3 + 4 R4 = A[R3] R3 = R3 + 4 R4 = R4 + R2 A[R3] = R4 Interferenzgraph 50 3-Adress Code nach Registerzuweisung

51 2 MIKROPROZESSOREN 2.5 Pipelining Die Verlängerung der Lebensdauer eines Registers als Nebeneffekt einer Optimierung führt zu mehr Interferenz und kann daher mehr Farben (Register) erfordern. Damit verbundenes Spilling (Zwischenspeichern eines Registerinhaltes auf dem Stack) kann die Effekte einer Optimierung leicht umkehren. Dies gilt zum Beispiel für die Common Subexpression Elimination. 2.5 Pipelining Die Instruktionen eines Programms und die Daten befinden sich zunächst im Hauptspeicher des Rechners und müssen von dem Prozessor geladen werden. Die meisten heutigen Hochleistungsprozessoren besitzen dazu einen kleinen Speicher direkt auf dem Prozessorchip, der der CPU schnellen Zugriff auf die Daten und Instruktionen erlaubt. Auf dieses Konzept wird unter dem Thema Speicherhierarchie noch näher eingegangen. Hier sei nur festgestellt, dass sich die Zugriffe auf Instruktionen und Daten erheblich unterscheiden. So werden zum Beispiel nur Daten vom Prozessor geändert. Daher wird meist der Instruktions und der Datenspeicher auf dem Prozessor getrennt. Eine derartige Architektur nennt man auch Harvard Architektur. Da die Prozessorleistung mit der Ausführungszeit der Instruktionen zusammenhängt, wird zunächst der Ablauf einer Instruktionsausführung vom Laden aus dem Instruktionsspeicher bis zum Verändern von Registern oder des Datenspeicher näher betrachtet Instruktionsausführung Zunächst wird ein vereinfachtes Modell der Instruktionsausführung zu Grunde gelegt. Die Ausführung einer Instruktion kann in 5 Schritte aufgegliedert werden. 1. Instruction Fetch IF IR Speicher[PC] NPC PC+4 Dabei werden mit IR, PC und NPC die Inhalte des Instruktionsregisters, des Program Counters und des Next Program Counters bezeichnet. In diesem Schritt wird die nächste Instruktion vom Speicher in das Instruktionsregister geladen und gleichzeitig die Instruktionsadresse bei sequentieller Adressenfolge bestimmt. In dem Zusammenhang ist zu beachten, dass eine Instruktion 4 Byte umfasst und daher die Instruktionsadresse um 4 erhöht werden muss. 2. Instruction Decode / Register Fetch ID A Register [IR x IR x+4 ] B Register [IR y IR y+4 ] Imm IR s IR s+15 51

52 2.5 Pipelining 2 MIKROPROZESSOREN In diesem Schritt werden die Operandenregister A und B mit dem Inhalt der in der Instruktion bezeichneten Quellenregister geladen. Gleichzeitig wird gegebenenfalls ein Teil des Instruktionswortes als Konstante (Immediate Operand) interpretiert. Ebenso wird der die Instruktion bestimmende Opcode an die ALU weitergeleitet. Diese Vorgänge laufen unabhängig voneinander ab und können sogar gleiche Teile des Instruktionswortes betreffen. Mehrfachverwendung des Instruktionsregisters SRA RT RD SA ANDI RS RT Immediate Bits 11 bis 15 des Instruktionswortes werden einmal als Registeradresse und einmal als Konstante interpretiert. 3. Execution EX Die Aktionen in diesem Schritt hängen von der Instruktionsart ab, die im vorhergehenden Dekodierungsschritt ermittelt wurde. (a) ALU Instruktionen mit zwei Quellregistern ALU Ergebnis A op B (b) ALU Instruktionen mit einem Quellregister ALU Ergebnis A op Imm (c) Speicherinstruktion ALU Ergebnis A + Imm (d) Verzweigungsinstruktion ALU Ergebnis NPC + Imm Bedingung A op 0 Hierbei wird angenommen, dass sich der einfache hier verwendete Instruktionssatz bei bedingten Verzweigungen auf einfache Vergleiche mit 0 beschränkt. Diese einfachen Vergleiche werden in einer Instruktion zusammen mit der Zielberechnung des Sprungs in der Execution Phase ausgeführt. In dem EX Schritt wird jeweils ein Ergebnis erzeugt, dass in dem temporären Register ALU-Ergebnis abgespeichert wird. Daneben kann auch eine Verzweigungsbedingung 52

53 2 MIKROPROZESSOREN 2.5 Pipelining ausgewertet und in dem temporären Register Bedingung abgelegt werden. Zur Auswertung der Verzweigungsbedingung wird eine eigene (sehr einfache) ALU benötigt, da die ALU des Prozessors bereits belegt ist. 4. Memory Access ME In diesem Schritt sind Speicherzugriffe aktiv. Außerdem wird die Adresse der nächsten Instruktion bestimmt. (a) Load Instruktion LMD Speicher[ALU Ergebnis] Das vom Speicher gelesene Datenwort wird in das temporäre Register LMD geschrieben. (b) Store Instruktion Speicher[ALU Ergebnis] = B Der Inhalt des zweiten Quellregisters wird in den Speicher geschrieben. (c) Alle Instruktionen if (Bedingung) PC ALU Ergebnis else PC NPC Dabei wird davon ausgegangen, dass der Inhalt des temporären Registers Bedingung nur bei Verzweigungsoperationen einen von 0 verschiedenen Wert annehmen kann. 5. Write Back WB Im letzten Schritt wird das Zielregister beschrieben. (a) Load Operation Register [IR z IR z+4 ] LMD (b) ALU Operationen Register [IR z IR z+4 ] ALU Ergebnis Dieses fünfstufige Modell kann in vieler Hinsicht erweitert werden - 2 getrennte Stufen für Instruction Decode und Register Fetch, siehe Übung. - mehrere Stufen für die Execution Phase. Der Verzicht auf das Beschreiben des Zielregisters in Schritt 4 (ME) erlaubt eine einfachere Prozessorstruktur. Außerdem hat dieser Verzicht bei Verwendung von Pipelining in dem 53

54 2.5 Pipelining 2 MIKROPROZESSOREN einfachen hier verwendeten Modell keinen Einfluss auf die Prozessorleistung. Die Ablaufsteuerung der Instruktionsausführung im Prozessor übernimmt heute im Allgemeinen ein festverdrahteter Kontrollblock. Die Verarbeitungsgeschwindigkeit in diesem Kontrollblock hat wesentlichen Einfluss auf die Taktfrequenz des Prozessors, so dass dabei ein sehr sorgfältiger Schaltungsentwurf vorgenommen werden muss. Bei älteren Prozessoren wird die Ablaufsteuerung über ein Mikroprogramm realisiert Grundlagen des Pipelining Alle modernen CPUs benutzen Pipelining zur Erhöhung ihrer Prozessorleistung. Pipelining ist eine Methode der parallelen Datenverarbeitung und hängt eng mit den verschiedenen Phasen in der Ausführung einer Instruktion zusammen. Qualitativ stellt sich der zeitliche Ablauf einer Instruktion unseres Modells wie folgt dar: IF ID EX ME WB t Bei genauer Betrachtung der einzelnen Schritte stellt man fest, dass in jeder Phase weitgehend unterschiedliche Hardware verwendet wird. So wird die ALU zum Beispiel nur in der Phase EX benutzt. Wenn alle Teilschritte gleich lang dauern, ist die ALU nur zu 20% der Zeit aktiv. Ähnliches gilt auch für andere Komponenten. Damit ist die Hardwareeffizienz eines Prozessors gering. Alternativ bietet es sich an, die einzelnen Instruktionen überlappend auszuführen. Dieses Verfahren nennt man Pipelining. IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB IF ID IF EX ID ME WB EX ME WB t Die sequentielle Ausführung benötigt 20 (=5 * 4) Zyklen für 4 Instruktionen IF ID EX ME WB IF ID EX ME WB Die Pipeline Ausführung erfordert dagegen nur 8 (=5+(4-1)) Zyklen für 4 Instruktionen. Nach einem Startabschnitt wird mit jedem Zyklus eine Instruktion abgeschlossen. Im Idealfall wird die Hardware beim Pipelinebetrieb mit größter Effizienz verwendet. Bei gleichen Taktfrequenzen führt Pipelining zu einer Reduktion des CPI Werts. Die Realisierung von Pipelining erfordert allerdings die Erfüllung einiger Voraussetzungen: 1. Jede Stufe oder jeder Schritt verwendet völlig getrennte Hardware. Unter Umständen muss dafür Hardware dupliziert werden. 54

55 2 MIKROPROZESSOREN 2.5 Pipelining 2. Die Dauer der Bearbeitung ist in jedem Schritt ähnlich, das heißt es kommt zu einem gleichzeitigen Wechsel der Schritte für alle aktiven Instruktionen. 3. Die einzelnen Schritte müssen voneinander abgetrennt werden. EX und ID (nächste Instruktion) ALU Die ALU benötigt stabile Operanden während der ganzen EX Phase. A B Register block Die neuen Operanden (Registerinhalt) werden in der ID Phase geladen. Daher werden temporäre Register A und B zur Trennung von ALU und Registerblock eingeführt. Diese Register können ihren Inhalt nur bei einem Taktsignal, welches den Schrittwechsel anzeigt, ändern. Die Abtrennung der Schritte durch temporäre Register bewirkt einen zusätzlichen Hardwareaufwand (Hardware-Overhead) in der Implementierung. Dieser führt auch zu einer zusätzlichen Latenzzeit. Im idealen Fall würde der asymptotische Zeitgewinn der Anzahl der Pipelinestufen (abtrennbare Teilschritte der Instruktionen) entsprechen. In der Realität 55

56 2.5 Pipelining 2 MIKROPROZESSOREN ist dieser Wert jedoch geringer. Zeitdauer der 5 Pipelinestufen: 1 60 ns 1 55 ns 3 50 ns Pipelineoverhead pro Stufe: 5 ns Asynchroner Ablauf einer Instruktion: 265 ns Taktperiode im Pipelinebetrieb: 65 ns 265 Asymptotischer Zeitgewinn: 65 4,1 Daneben kann die Durchführung des Pipelinebetriebs zusätzlichen Implementierungsaufwand erfordern. Zusätzlicher Implementierungsaufwand Die zweite Instruktion muss bereits im zweiten Taktzyklus geladen werden. Der PC wird aber erst in Schritt ME geändert. Diese Änderung des PC s im Schritt ME ist aber nur im Fall eines Sprungs notwendig, da bei einem linearen Ablauf des Programms der Inhalt des PC s gleichmäßig um 4 erhöht wird, was auch im Schritt IF geschehen kann. Eine entsprechende Architekturänderung führt nun zur möglichen Veränderung des PC s in 2 verschiedenen Schritten. Da Pipelining die zeitlich parallele Abarbeitung von Instruktionen bewirkt, kann es im Programmablauf zu Problemsituationen, den sogenannten Hazards, kommen. Hierbei werden 3 Arten unterschieden: 1. Resource (Struktur)-Hazards: Bei Resource-Hazards werden Hardwarekomponenten gleichzeitig von zwei Instruktionen benötigt. 2. Daten-Hazards: Bei einem Daten-Hazard stehen Ergebnisse einer Instruktion noch nicht oder nicht mehr zur Verfügung, wenn sie benötigt werden. 3. Kontroll-Hazards: Bei Kontroll-Hazards führen Veränderungen des Kontrollflusses zu einer Beeinflussung der Pipeline. Häufig resultieren Hazards in sogenannten Pipeline Stalls, das heißt in temporären Unterbrechungen des Pipelinebetriebs. Ein derartiger Stall, der durch eine spezifische Instruktion hervorgerufen wurde, darf keinen Einfluss auf vorausgehende Instruktionen haben. Alle noch folgenden Instruktionen werden dagegen verzögert. Im Extremfall kann es zu einer Sequentialisierung des Programms kommen. 56

57 2 MIKROPROZESSOREN 2.5 Pipelining Resource-Hazard Da verschiedene Instruktionen oft unterschiedliche Ressourcen zu verschiedenen Zeitpunkten benötigen, ist eine völlig getrennte Hardware zwischen verschiedenen Stufen oft nicht oder nur mit sehr hohem Aufwand zu erreichen. Daher können bei der Programmausführung Resource-Hazards entstehen. Beispiel für einen Resource-Hazard: Gegeben ist ein Mikroprozessor mit einem gemeinsamen Speicher für Daten und Instruktionen und einem Speicherzugang (Memoryport). Instruktion Zyklusnummer LOAD IF ID EX ME WB i+1 IF ID EX ME WB i+2 IF ID EX ME WB i+3 Stall IF ID EX ME WB i+4 IF ID EX ME WB Da eine gleichzeitige Verwendung des Speicherzugangs in Zyklus 4 nicht möglich ist, muss Instruktion i+3 einen Zyklus warten. In den meisten modernen Mikroprozessoren wird auch aus diesem Grund ein getrennter Daten und Instruktionscache verwendet. Das Akzeptieren von Resource-Hazards hat allerdings auch Vorteile: 1. Die Kosten sind aufgrund der geringeren Anzahl von Hardwarekomponenten geringer. 2. Die Latenzzeit ist wegen der niedrigeren Komplexität möglicherweise geringer. Daher sollte im Allgemeinen ein Kompromiss angestrebt werden, der die Häufigkeit von Resource-Hazards berücksichtigt. Hierbei sollte wiederum die allgemeine Entwurfsregel von Computerarchitekturen Anwendung finden Daten-Hazards Manchmal benötigt eine Instruktion einen Eingabewert, der erst von der vorhergehenden Instruktion erzeugt wurde. Dann ist keine (völlig) überlappende Ausführung beider Instruktionen möglich. ADD R1 R2 R3 [R1]=[R2]+[R3] SUB R4 R1 R5 [R4]=[R1]-[R5] Ausführung im normalen Pipeliningbetrieb: 57

58 2.5 Pipelining 2 MIKROPROZESSOREN Instruktion Taktzyklen ADD IF ID EX ME WB SUB IF ID EX ME WB Die Instruktion SUB liest den Inhalt von R1 im 3. Zyklus während die Instruktion ADD das Ergebnis erst im 5. Zyklus in R1 schreibt. Daher wird die Instruktion SUB den alten Wert von R1 lesen und verwenden. Allerdings gilt dies nicht immer. Kommt es zwischen ADD und SUB zu einem Pipeline Stall von mindestens 3 Zyklen, dann wird die Instruktion ADD beendet, bevor die Instruktion SUB den Wert von R1 liest. Damit ist das Verhalten des Prozessors nicht deterministisch. Der beschriebene Daten-Hazard kann mit folgenden Methoden vermieden werden: 1. Einsatz von Hardware 2. Umordnung von Instruktionen durch den Compiler 3. Pipeline Stall Da ein Pipeline Stall zu einem Leistungsverlust führt, sollten andere Wege möglichst vorgezogen werden. Die Hardwarelösung erfolgt über eine sogenannte Bypass-Schaltung. Bypass des Registerblocks Register MUX ALU MUX Kontrolllogik Dabei garantiert das Register die Phasentrennung. Die Multiplexer (MUX) bestimmen, ob sich der Prozessor im Bypass oder Normalbetrieb befindet. Sie werden von der Kontrolllogik überwacht. Die Kontrolllogik wählt den Bypass, falls 58

59 2 MIKROPROZESSOREN 2.5 Pipelining - eine Instruktion ein Register beschreiben soll, - die WB Phase noch nicht durchgeführt ist und - eine nachfolgende Instruktion dasselbe Register lesen soll. Ein System mit mehrfachen Daten-Hazards ADD R1 R2 R3 IF ID EX ME WB SUB R4 R1 R5 IF ID EX ME WB AND R6 R4 R1 IF ID EX ME WB OR R7 R1 R6 IF ID EX ME WB XOR R8 R1 R4 IF ID EX ME WB In dem Beispiel ist Bypassing für die Werte von R1, R4 und R6 notwendig. Bypassing führt schnell zu einer hohen Hardwarekomplexität. Hierbei bestimmt die Anzahl der Pipelinestufen den Aufwand für den Bypasspfad. Dreistufiges Shiftregister mit parallelem Ausgang Mehrfachmultiplexer MUX ALU MUX Kontrolllogik Eine Reduktion des Shiftregisters um eine Stufe ist möglich, wenn die WB Phase immer vor dem Register Fetch der gleichen Stufe abgeschlossen ist. Ein ähnliches Daten-Hazard Problem kann auch bei der STORE Instruktion auftreten und ist analog lösbar: ADD R1 R2 R3 SW 4 (R4) R1 59

60 2.5 Pipelining 2 MIKROPROZESSOREN Abhängig von dem zeitlichen Zusammenhang zwischen dem Schreiben und Lesen eines Registers lässt sich folgende Klassifizierung von Daten-Hazards angeben: RAW (Read after Write) Dieser Hazard tritt auf, wenn in einer Instruktion ein Register gelesen werden soll, aber das Ergebnis einer vorhergehenden Instruktion noch nicht in dieses Register geschrieben wurde. Er steht daher in einem engen Zusammenhang mit der echten Abhängigkeit, die immer die Voraussetzung für einen RAW-Hazard ist. Allerdings führt nicht jede echte Abhängigkeit auch zu einem RAW-Hazard. Weiterhin kann der RAW-Hazard nur auftreten, wenn zwischen der Read-Stufe (ID) im Pipelinediagramm und der Write-Stufe (WB) mindestens eine andere Stufe liegt. WAR (Write after Read) Dieser Hazard tritt auf, wenn in einer Instruktion ein Register mit einem Ergebnis beschrieben wird und das gleiche Register danach von einer vorhergehenden Instruktion gelesen wird. Er basiert daher auf einer Blockierabhängigkeit. In unserem einfachen Modell ist dies nicht möglich, da die Instruktionsreihenfolge linear ist und die Lese-Stufe (ID) immer vor der Schreib-Stufe (WB) erfolgt. WAW (Write after Write) Dieser Hazard tritt auf, wenn in einer Instruktion ein Register mit einem Ergebnis beschrieben wird und das gleiche Register danach von einer vorhergehenden Instruktion ebenfalls beschrieben wird. Dies entspricht einer Schreibabhängigkeit. In unserem Modell ist ein WAW-Hazard ebenfalls nicht möglich, da alle Register immer in der gleichen Pipeline-Stufe (WB) beschrieben werden. Es ist zu beachten, dass RAR (Read after Read) kein Daten-Hazard ist, da Leseoperationen immer voneinander unabhängig sind. Ein besonderes Problem kann im Zusammenhang mit einer LOAD Instruktion auftreten: LW R1 4 (R2) ADD R4 R1 R3 Im Pipelinediagramm ist zu erkennen, dass der neue R1 Wert frühestens in Zyklus 4 der CPU zur Verfügung steht, aber schon im Zyklus 3 benötigt wird. Instruktion Taktzyklen LW IF ID EX ME WB ADD IF ID EX ME WB Dieser RAW-Hazard ist nicht durch Bypassing behebbar. Daher ist mindestens ein Pipeline Stall, auch Bubble genannt, erforderlich. IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB IF ID EX ME WB 60

61 2 MIKROPROZESSOREN 2.5 Pipelining Bubble Daten-Hazards, die zu Pipeline Stalls führen, müssen vor der Veränderung des Status der CPU in der Kontrolllogik entdeckt werden. Derartige Pipeline Stalls lassen sich manchmal durch eine Umordnung der Instruktionsreihenfolge vermeiden. Umordnung zur Vermeidung eines RAW-Hazards: ADD R1 R2 R3 ADD R1 R2 R3 SUB R4 R1 R5 AND R6 R7 R8 AND R6 R7 R8 OR R9 R10 R11 OR R9 R10 R11 XOR R12 R13 R14 XOR R12 R13 R14 SUB R4 R1 R5 Hazard zwischen ADD und SUB kein Hazard Dieses Umordnen kann entweder durch den Compiler oder durch die Hardware im Prozessor erfolgen. Eine Umordnung durch den Compiler hat dabei folgende Eigenschaften: - Der Einfluss auf die Hardware ist gering. - Es gibt keinen negativen Einfluss auf die Rechnerleistung. - Ein optimierender Compiler muss verwendet werden. - Das Debugging kann schwieriger werden. Eine Umordnung durch Hardware (Dynamic Scheduling) ist dagegen wie folgt charakterisiert: - Ein großer Hardwareaufwand für den Vergleich mehrerer Instruktionen ist notwendig. - Die Hardware begrenzt die Anzahl der Kandidaten für die Umordnung. - Die Umordnung ist unabhängig vom Compiler. - Potentielle Daten-Hazards müssen nicht konservativ bearbeitet werden. - Es gibt keinen Einfluss auf das Debugging. Dynamic Scheduling wurde erstmals in der Cyber CDC 6600 als Scoreboard Verfahren eingeführt. Es wird später noch genauer erläutert. 61

62 2.5 Pipelining 2 MIKROPROZESSOREN Kontroll-Hazard Bei Veränderungen des linearen Kontrollflusses wird die Adresse einer Instruktion in der vorausgegangenen Instruktion bestimmt. Daher können diese beiden Instruktionen nicht überlappend ausgeführt werden. Diese Situation wird Kontroll-Hazard genannt. Der Kontroll- Hazard steht mit einer Kontrollabhängigkeit in Verbindung. Kontroll-Hazard Verzweigung IF ID EX ME WB Instruktion i+1 IF IF ID EX Instruktion i+2 IF ID Instruktion i+3 IF In unserem Modell führt jede Verzweigung zu einem Stall von 3 Zyklen. Diese sogenannte Verzweigungszeitstrafe (Branch Penalty) kann einen erheblichen Einfluss auf die Effizienz haben. Gegeben sei eine Architektur mit fünfstufiger Pipeline und 1 Taktperiode pro Stufe. Das verwendete Programm weist 30% Verzweigungen auf. Daher sind = 19 Zyklen zum Starten von 10 Instruktionen notwendig. Daraus ergibt sich ein CPI-Wert von 1,9 in Vergleich zum idealen CPI-Wert von 1. Bei Prozessoren wird daher eine Reduktion der Verzweigungszeitstrafe angestrebt. Hierzu gibt es mehrere Möglichkeiten, von denen 4 vorgestellt werden. 1. Veränderung der Architektur (a) Die neue Instruktionsadresse wird früher bestimmt. Dies kann zum Beispiel durch die Berechnung der Zieladresse mit einer zusätzlichen ALU in der Phase ID erfolgen und erfordert somit zusätzliche Hardware. (b) Andererseits kann auch die Entscheidung, welcher Weg einzuschlagen ist, beschleunigt werden. Eine Entscheidung in der Phase ID, zum Beispiel, würde aber zu einem langen Datenpfad führen und damit die Taktfrequenz des Prozessors begrenzen. Voraussetzung für ein derartiges Verfahren ist ein einfacher Operandenvergleich, das heißt kein Vergleich zwischen zwei Registern. Ein derartiges Verfahren haben wir in unserem einfachen Pipeline-Modell angenommen. Die meisten modernen Mikroprozessoren erlauben dagegen komplexe Vergleiche bei bedingten Sprüngen. Daher ist die angesprochene Veränderung der Hardware für diese Prozessoren nur sehr eingeschränkt verwendbar. Dagegen kann dieses Verfahren gut für unbedingte Sprünge benutzt werden. 62

63 2 MIKROPROZESSOREN 2.5 Pipelining 2. Spekulative Ausführung von Instruktionen. Bei diesem Verfahren wird angenommen, dass der Kontrollfluss einem bestimmten Weg folgt. Entsprechend werden auch die Instruktionen spekulativ ausgeführt. Es können daher zwei Situationen entstehen: Verzweigung IF ID EX ME WB Instruktion i+1 IF ID EX ME WB Instruktion i+2 IF ID EX ME WB Da es zu keinem Aussprung kommt, tritt auch keine Verzögerung auf. Verzweigung IF ID EX ME WB Instruktion i+1 IF ID EX IF ID EX Instruktion i+2 IF ID IF ID Instruktion i+3 IF IF Der Aussprung führt zu der angesprochenen Verzögerung. Diese wird allerdings durch die spekulative ausgeführten Instruktionen nicht vergrößert. Allerdings müssen die fehlerhaft begonnenen Instruktionen abgebrochen werden. Die spekulative Ausführung von Instruktionen erfordert, dass unnötig ausgeführte Instruktionsstufen keinen irreversiblen Einfluss auf die Zustände der Kontrolllogik haben dürfen. In manchen Architekturen wird davon ausgegangen, dass der Aussprung nicht durchgeführt wird, da die Berechnung der Zieladresse Zeit erfordert. Man spricht dann von einem unsymmetrischen Spekulationsverfahren. 3. Branch Delay Slot Auf jeden Sprung oder jede Verzweigung folgen eine oder mehrere Instruktionen, die unabhängig von der Verzweigung immer ausgeführt werden. Aus dem Branch Delay Slot kann durch Umordnung von Instruktionen, das heißt durch vorzeitige Ausführung der Verzweigung, Nutzen gezogen werden. AND R4 R2 R3 ADD R1 R2 R3 ADD R1 R2 R3 BEQ R1 R5 offset BEQ R1 R5 offset AND R4 R2 R3 NOP freier Verwendung des Branch Delay Slot Branch Delay Slots Die ADD Instruktion kann nicht im Branch Delay Slot ausgeführt werden, da sie das Register R1 schreibt und dieses Ergebnis von der Verzweigungsinstruktion (BEQ) unter Verwendung von Bypassing benutzt wird. Falls daher der Branch Delay Slot mit einer Instruktion vor der Verzweigung gefüllt wird, führt dies in jedem Fall zu einer Erhöhung der Geschwindigkeit. Daher 63

64 2.5 Pipelining 2 MIKROPROZESSOREN sind derartige Instruktionen anderen Instruktionen vorzuziehen. Erst wenn solche Instruktionen nicht zur Verfügung stehen, können in manchen Architekturen auch die auf eine Verzweigung folgenden Instruktionen verwendet werden. Dieses Verfahren ist dann eine durch spezielle Instruktionstypen unterstützte spekulative Ausführung von Instruktionen. Der R10000 erlaubt auch die spekulative Ausführung einer Instruktion im Branch Delay Slot AND R5 R2 R3 AND R5 R2 R3 ADD R1 R2 R3 ADD R1 R2 R3 BEQ R1 R5 LOOP BEQL R1 R5 LOOP NOP SUB R6 R2 R3.. LOOP: SUB R6 R2 R3 LOOP: MULT R7 R3 R4 MULT R7 R3 R4 Abhängigkeiten verhindern die Wahl von AND oder ADD für den Branch Delay Slot Statt BEQ wird BEQL (Branch Equal Likely) verwendet und SUB im Branch Delay Slot ausgeführt. Bei der spekulativen Ausführung wird die Instruktion rückgängig gemacht, falls die Verzweigung zu einem anderen als dem angenommenen Ergebnis geführt hat (im Beispiel Register[R1] Register[R5]). Aufgrund des Aufwands zur Berechnung der Sprungadresse gibt es den Branch Delay Slot beim R10000 auch bei unbedingten Sprüngen. 4. Verzweigungsvorhersage (Branch Prediction) Hierbei wird das wahrscheinliche Verhalten einer Verzweigung im Zusammenhang mit der spekulativen Ausführung von Instruktionen verwendet. Die Vorhersage über das Ergebnis einer Verzweigung kann entweder statisch oder dynamisch erfolgen. Die statische Vorhersage ist die einfachste verwendete Technik zur Sprungvorhersage, da sie nicht auf irgendwelchen Information über die Vergangenheit der Codeausführung beruht. Anstelle dessen wird bereits während der Programmerzeugung versucht potentiell häufig auftretende Sprünge zu erkennen und diese mit speziellen Maschinenbefehlen zu Kennzeichen. Moderne Prozessoren stellen dazu neben den normalen 64

65 2 MIKROPROZESSOREN 2.5 Pipelining Sprungbefehlen zusätzliche Sprungbefehle zur Verfügung. Statische Sprungvorhersage ADD R1 R2 R3 ADD R1 R2 R3 BLEZL R1 offset BGTZL R1 offset AND R4 R1 R10 SUB R4 R1 R6 Hohe Nutzungswahrschein- lichkeit des Branch Delay Slots durch Branch Greater Than Zero Likely Verzweigung Niedrige Nutzungswahrscheinlichkeit des Branch Delay Slots durch Branch Less than or Equal to Zero Likely Verzweigung Die dynamische Vorhersage beruht dagegen auf der Annahme, dass eine mehrfach ausgeführte Verzweigung auf denselben Ausführungspfad führen wird, wie dies in der jüngsten Vergangenheit der Fall war. Messungen haben ergeben, dass dies bei den meisten realen Programmen zu 80-90% gilt. Die Implementierung erfolgt dabei über eine Prädiktionstabelle (RAM) für die letzten k verschiedenen Verzweigungen bezogen auf die Instruktionsadresse. Für den R10000 hat k den Wert 512 während der Wert für den Alpha beträgt. Eine bestimmte Verzweigung wird dabei entweder relativ zum Cache oder über die letzten Bits der Instruktionsadresse bestimmt. Damit ist eine Fehlzuordnung nicht ausgeschlossen. Im ungünstigsten Fall führt eine derartige Fehlzuordnung allerdings höchstens zu einer falschen Prädiktion und hat damit auf die Korrektheit des Programms keinen Einfluss. Bei einer Prädiktion mit 1 Bit tritt oft folgendes Problem auf: Bei Schleifen Rücksprüngen gelten oft sehr ungleiche Verzweigungswahrscheinlichkeiten (zum 99% ja, 1% nein). Bei einer falschen Prädiktion (kein Rücksprung) wird gleichzeitig die Prädiktion geändert, was in derartigen Schleifen mit hoher Wahrscheinlichkeit zu einer weiteren falschen Vorhersage beim nächsten Durchlauf führt. Hier ist es besser, eine Vorhersage erst zu ändern, wenn sie zweimal hintereinander falsch war. Dies führt zu einer Prädiktion mit 2 Bit pro Verzweigung. Dabei kann entweder ein begrenzender 2-Bit Zähler, der je nach Prädiktionsergebnis inkrementiert oder dekrementiert wird oder das dargestellte Verfahren Anwendung finden. Die Initialisierung ist entweder zufällig oder wird durch den Compiler bestimmt. Im Allgemeinen wird mit Likely taken oder Likely not taken begonnen. 65

66 2.5 Pipelining 2 MIKROPROZESSOREN Zustandsdiagramm für 2 Bit Branch Prediction PT, AT PT, ANT PT, ANT PNT, ANT PNT, ANT Strongly taken Likely taken Likely not taken Strongly not taken PT, AT PNT, AT PNT, AT P: Prädiktion A: Aktion NT: Not taken T: Taken Trefferhäufigkeit bei 2 Bit Prädiktion auf der SUN Ultra SPARC SPECfp92 SPECint92 Spice 0,926 espresso 0,882 doduc 0,928 li 0,889 mdljdp2 0,936 epntott 0,824 wave5 0,961 compress 0,898 tomcatv 0,997 sc 0,920 ora 0,938 gcc 0,848 alvinn 0,979 mean 0,876 ear 0,936 mdljsp2 0,926 swm256 0,983 su2cor 0,898 hydro 0,959 nasa6 0,966 fpppp 0,906 mean 0,938 Die beiden hier vorgestellten Verfahren beschränken sich lokal auf eine Verzweigung. Die Trefferhäufigkeit kann noch weiter erhöht werden, wenn für eine Prädiktion auch das Verhalten bei anderen Verzweigungen mit berücksichtigt wird. Derartige Verfahren nennt man korrelierte Prädiktoren oder zweistufige Prädiktoren. Unabhängig von dem vorgeschlagenen Verfahren zur Reduktion der Verzögerungszeitstrafe sollte die Zieladresse der neuen Instruktion nach einem Sprung frühzeitig bekannt sein. Dies ist hardwaremäßig implementierbar, falls die Zieladressen statisch sind. Dann kann die (wahrscheinlich) nächste Instruktion bereits vor der Ausführung der Verzweigung geladen werden. Dies kann über einen Zieladressenspeicher für Verzweigungen, einen sogenannten 66

67 2 MIKROPROZESSOREN 2.6 Interrupts Branch Target Buffer (BTB), erreicht werden. Auf dem BTB wird ähnlich wie auf die Prädiktionstabelle zugegriffen. Der Pentium IV verfügt über einen 4KB großen Branch Target Buffer. Für Unterprogramme ist dieser Speicher allerdings nur begrenzt verwendbar, da diese von vielen Programmpositionen aus aufgerufen werden können. Daher ist die Rücksprungadresse nicht unbedingt von vorhergehenden Rücksprüngen her bekannt. Beim Alpha wird für diese Zwecke ein Hardwarestack mit 32 Elementen für Rücksprungadressen verwendet. Dies erlaubt die Handhabung von geschachtelten Unterprogrammen bis zur Tiefe 32. Der Alpha besitzt eine besonders aufwändige Sprungvorhersage, die über zwei unterschiedliche Prädiktionstabellen realisiert ist. Anhand einer sogenannten Local- History Tabelle mit 1024 Einträgen versucht der Prozessor Sprünge korrekt vorherzusagen. Dabei wird jede Verzweigung isoliert betrachtet. Darüber hinaus besitzt der Alpha eine sogenannte Global-History Tabelle mit 4096 Einträgen, über die er versucht, Muster in der Ausführung unterschiedlicher aufeinander folgender Verzweigungen zu entdecken (zum Beispiel bei geschachtelten Schleifen). Dadurch kann die Trefferquote nochmals gesteigert werden. Eine sehr ähnliche Vorhersagelogik besitzt der IBM PowerPC 970FX RISC Microprocessor. Hier gibt es insgesamt drei Tabellen: a) Local predictor: Hier wird in einem Bit das Ergebnis des letzten Sprunges gespeichert. b) Gobal predictor: Hier berücksichtigt der Prozessor den Programmfluss. Dazu protokolliert der Prozessor für die letzten elf sogenannten fetch groups 3, ob die geladenen Instruktionen sequentiell aus dem Speicher gelesen wurden oder ein Sprung vorgelegen hat. Mit jedem Tabelleneintrag wird gespeichert, ob ein Sprung vorgelegen hat oder nicht. c) Selector table: In diese Tabelle wird gespeichert, welche der beiden oben genannten Tabellen für den jweiligen Sprung eine bessere Vorhersage liefert. Sprungvorhersage beim Alpha Interrupts Im Betrieb eines Rechners kann eine Unterbrechung des normalen Kontrollflusses eines Programms (einschließlich der Sprünge und Unterprogramme) notwendig werden. Dies wird durch Interrupts erreicht. Im Folgenden sind einige Gründe für derartige Unterbrechungen angegeben. 3 Eine fetch group bezeichnet die Instruktionen, die zusammen in einem Takt geladen wurden. 67

68 2.6 Interrupts 2 MIKROPROZESSOREN Program Counter Global History Local History Table Local Predict Global Predict 12 Choice Predict x 10 bits x 3 bits x 2 bits x 2 bits 10 Local Prediction Global Prediction Final Prediction - I/O Anforderungen Ein Programm kann durch einen Tastendruck (Ctrl-C) abgebrochen werden oder der Rechner kann eine Nachricht von einem anderen Rechner erhalten. - Betriebssystemaufruf von einem Benutzerprogramm Dabei werden Instruktionen außerhalb des Anwenderprogramms ausgeführt. - Tracing Der Ablauf des Programms soll im Speicher mitprotokolliert werden. - Breakpoint Eine Programmunterbrechung wird an einer Programmposition durch die Benutzerin gefordert. Sowohl Tracing als auch Breakpoints dienen der Programmfehlererkennung (Debugging). - Arithmetischer Over (Under)-flow Das Ergebnis einer arithmetischen Operation passt nicht mehr in das Register. - Page Fault Die benötigten Daten oder Instruktionen befinden sich nicht im Hauptspeicher. - Fehlendes Alignment Die benötigten Daten sind nicht ausgerichtet (aligned), obwohl dies gefordert ist. - Verletzung der Speicherzugriffsrechte Ein Benutzerprogramm versucht auf einen geschützten Speicherbereich zuzugreifen. - Verwendung einer nicht definierten Instruktion Bei der Programmierung im Maschinencode wurde ein nicht vorgesehener Opcode verwendet. 68

69 2 MIKROPROZESSOREN 2.6 Interrupts - Fehlverhalten in Hardwareteilen Während des Programmablaufs wird die Hardwarekonfiguration verändert, zum Beispiel durch Entfernen einer Komponente des Rechners. - Stromversorgung Die Stromversorgung ist zusammengebrochen. Durch Batteriepufferung ist nur ein definiertes Abschalten möglich. Bei verschiedenen Architekturen werden auch andere Namen für Interrupts verwendet: - Exceptions - Faults - Aborts - Traps Diese haben allerdings teilweise eine unterschiedliche Bedeutung. Interrupts lassen sich auf mehrere Weisen klassifizieren: Synchron Asynchron Ein synchroner Interrupt erfolgt relativ zur Instruktion immer zur gleichen Zeit. Dagegen ist der Zeitpunkt eines asynchronen Interrupts relativ zur Instruktion beliebig. Anforderung durch den Benutzer erzwungener Interrupt Viele durch den Benutzer angeforderten Interrupts sind keine Interrupts im eigentlichen Sinn, da sie vorhersagbar sind. Da jedoch die gleichen Bearbeitungsmechanismen wie bei anderen Interrupts zur Anwendung kommen, werden sie zu den Interrupts hinzugezählt. Maskierbar durch den Benutzer Nicht maskierbar Das Benutzerprogramm kann den Rechner veranlassen, auf einen maskierbaren Interrupt nicht zu reagieren. Innerhalb einer Instruktion Zwischen zwei Instruktionen Der Interrupt bewirkt entweder eine sofortige Unterbrechung der aktuellen Instruktion, oder die aktuelle Instruktion kann vor der Interruptbearbeitung noch abgeschlossen werden. Programmfortführung Programmabbruch Nach der Bearbeitung des Interrupts kann das Programm entweder von der unterbrochenen Position weiter fortgeführt werden oder es muss abgebrochen werden. 69

70 2.6 Interrupts 2 MIKROPROZESSOREN Die Implementierung von Interrupts erfolgt in der Kontrolllogik einer CPU. Klassifizierung der angegebenen Interruptbedingungen Benutzer- zwischen zwei Programm- Synchron anforderung maskierbar Instruktionen fortführung I/O Anforderung X X Betriebssystemaufruf X X X X Tracing X X X X X Breakpoint X X X X X Over (Under)-flow X X X Page Fault X X Fehlendes Alignment X X Verletzung der Speicherzugriffsrechte X Undefinierte Instruktion X Hardwarefehler Leistungsverlust Behandlung von Interrupts Nach der Auslösung eines Interrupts wird der Programmcounter (PC) auf eine zuvor definierte Programmadresse, den Interruptvektor gesetzt. Dabei ist es von der jeweiligen Architektur abhängig, ob jedem Interrupt ein dedizierter Interruptvektor zugeteilt wird oder mehrere Interrupts sich einen Interruptvektor teilen. Interruptvektoren werden typischerweise in Form einer Interrupttabelle IVT gespeichert, die sich an einer speziellen Position im Speicher befindet. X86-Prozessoren besitzen beispielsweise ein spezielles Register indem die Adresse und die Anzahl der Einträge der IVT im Programmspeicher vermerkt werden. Bei Mikrocontrollern hingegen kann auf die IVT i.d.r. über eine feste Speicheradresse zugegriffen werden. Die Einträge der IVT beinhalten im Allgemeinen nur einen Sprungbefehl zur eigentlichen Interrupt-Service-Routine (ISR). In der ISR wird der Programmcode zur Behandlung des Interrupts ausgeführt. Dabei ist der Inhalt der ISR abhängig vom jeweiligen Betriebssystem oder kann, beispielsweise bei Mikrocontrollern, vom Entwickler selbst definiert werden. Der typische Ablauf einer ISR ist dabei wie folgt: 1. Deaktivierung weiterer Interrupts 2. Sichern des Prozessorzustands 3. Abarbeiten des Interrupts 4. Wiederherstellen des Prozessorzustands 5. Zulassen weiterer Interrupts und Rücksprung in das unterbrochene Progamm 70

71 2 MIKROPROZESSOREN 2.6 Interrupts Da während der Abarbeitung der ISR weitere Interrupts unterdrückt werden, werden diese nicht automatisch durch die zugehörige ISR abgearbeitet. Aus diesem Grund ist es notwendig die Routine möglichst kurz zu halten, um die Kontrolle an das unterbrochene Programm schnellstmöglich zurückzugeben Komplikationen beim Pipelining Bei Prozessoren mit Pipelining führt die Implementierung von Interrupts zu besonderen Schwierigkeiten. Hierbei bereiten Interrupts, die innerhalb von Instruktionen bearbeitet werden müssen und eine Fortführung des Programms nach dem Interrupt gestatten, die meisten Probleme. Ein Beispiel für einen derartigen Interrupt ist der Page Fault. Die Interruptimplementierung hat dabei folgende Aufgaben: 1. Unterbrechung der Programmausführung 2. Verhinderung der Statusänderung 3. Wiederaufnahme des Programms von der richtigen Adresse aus Dies kann auf einfache Weise wie folgt implementiert werden: 1. Als nächste Instruktion, das heißt in der nächsten IF Phase, wird eine Trap Instruktion geladen. 2. Der Schreibzugriff auf den Registerblock wird verhindert, wobei ein laufender Speicherzugriff im Allgemeinen nicht unterbrochen werden kann. 3. Der gegenwärtige Inhalt des PC wird für einen Neustart gespeichert. Ein Problem tritt auf, wenn ein Interrupt durch eine Instruktion im Branch Delay Slot hervorgerufen wird. Die Verzweigung ist dann bereits durchgeführt und wird nicht wiederholt. Außerdem ist die Sprungadresse bekannt. Andererseits wurde die Instruktion im Branch Delay Slot unterbrochen und muss wiederholt werden. Daher ist nun eine Speicherung der Adresse der Instruktion im Branch Delay Slot und der Sprungadresse notwendig, da beide Adressen nicht aufeinander folgen. Interrupt in Branch Delay Slot i BEQ R1 R2 k i+1 ADD FP3 FP4 FP5 Es sei Register[R1] = Register[R2] und in der Instruktion ADD trete ein arithmetischer Interrupt auf. Damit muss Instruktion i+1 wiederholt werden, gefolgt von Instruktion i+1+k. Viele Architekturen geben an, dass sie Precise Interrupts implementieren. Dies bedeutet, dass genau alle Instruktionen, die vor der den Interrupt verursachenden Instruktion gestartet wurden, auch vor der Interruptbehandlung vollendet werden. Deswegen befinden 71

72 2.6 Interrupts 2 MIKROPROZESSOREN sich im Allgemeinen gleichzeitig zu vollendende und abzubrechende Instruktionen in der Pipeline. Die Implementierung von Precise Interrupts erhöht daher in jedem Fall die Komplexität der Kontrolllogik und damit den Hardwareaufwand. Sie wird besonders durch die Möglichkeit der Umordnung der Interruptreihenfolge durch Pipelining erschwert. Dieses Problem kann auftreten, wenn aufeinanderfolgende Instruktionen unabhängige Interrupts bewirken. Umkehrung der Interruptreihenfolge ADD IF ID EX ME WB OR IF ID EX ME WB Die Instruktion ADD erzeugt einen arithmetischen Interrupt in der Phase EX, während die Instruktion OR einen Page Fault in der Phase IF bewirkt. Damit tritt zunächst der Interrupt von OR auf, während ADD weiter läuft. Erst einen Zyklus später tritt der Interrupt von ADD auf, während die Interruptbearbeitung des Page Faults bereits läuft. Damit ist die Bearbeitungsreihenfolge der Interrupts falsch. Als eine Lösungsmöglichkeit bietet sich an, die Interrupts erst vor Beginn von Phase WB zu bearbeiten. Dies bedingt, dass keine unwiderruflichen Statusänderungen vor der Phase WB durchgeführt werden. Das Schreiben von Daten in den Speicher in Phase ME ist in dem hier verwendeten Modell kein Problem, da nur 1 Zyklus Unterschied zwischen ME und WB besteht. 72

73 2 MIKROPROZESSOREN 2.7 Mikrocontroller Allerdings weist diese Methode eine geringe Effizienz auf. Windows IRQ In PCs haben angeschlossene Peripherie-Geräte die Möglichkeit, über dedizierte Leitungen Interrupt Requests (IRQs) an den Prozessor zu leiten. Bei modernen PCs mit einem I/O APIC (Input/Output Advanced Programmable Interrupt Controller) stehen dafür 24 Leitungen zur Verfügung. Die nachstehende Tabelle zeigt ein Beispiel für die Belegung der Interrupt Request Lines einer Pentium 4 CPU mit WindowsXP als Betriebssysten. BUS IRQ Device (ISA) 0 System timer (ISA) 1 Standard 101/102-Key or Microsoft Natural PS/2 Keyboard (ISA) 3 Communications Port (COM2) (ISA) 4 Communications Port (COM1) (ISA) 6 Standard floppy disk controller (ISA) 8 System CMOS/real time clock (ISA) 9 Microsoft ACPI-Compliant System (ISA) 12 PS/2 Compatible Mouse (ISA) 13 Numeric data processor (ISA) 14 Primary IDE Channel (ISA) 15 Secondary IDE Channel (PCI) 5 Intel(R) 82801EB SMBus Controller - 24D3 (PCI) 16 Intel(R) 82801EB Universal Host Controller - 24D2 (PCI) 16 Intel(R) 82801EB Universal Host Controller - 24DE (PCI) 16 Intel(R) 82865G Graphic Controller (PCI) 17 SoundMAX Integrated Digital Audio (PCI) 18 Intel(R) 82801EB Universal Host Controller - 24D7 (PCI) 18 Intel(R) PRO/1000 CT Network Connection (PCI) 19 Intel(R) 82801EB Universal Host Controller - 24D4 (PCI) 23 Standard Enhanced PCI to USB Host Controller 2.7 Mikrocontroller Im Gegensatz zum Mikroprozessor, der externe Komponenten wie I/O-Schnittstellen, RAM und Bus-Controller benötigt, vereint ein Mikrocontroller (µc ) alle notwendigen Komponenten in einem Chip. Zusätzlich sind Mikrocontroller mit verschiedenen Schnittstellen wie beispielsweise SPI oder UART ausgestattet, welche die Anbindung externer Komponenten erlauben. Heutzutage werden Mikrocontroller in den verschiedensten Bereichen eingesetzt. Einige ausgewählte Anwendungsbereiche finden sich beispielsweise im Haushalt ˆ zur Steuerung der Kaffeemaschine, ˆ der Waschmaschine, ˆ oder des Telefons. 73

74 2.7 Mikrocontroller 2 MIKROPROZESSOREN Aber auch in der KFZ Technik ˆ beim Motormanagement, ˆ für ABS und ESP, ˆ sowie zur Steuerung der Klimaanlage werden µc eingesetzt. Neben den genannten Einsatzgebieten werden Mikrocontroller auch in der Robotik u. A. dazu verwendet zeitkritische Aufgaben, wie die Positionsausregelung von Servomotoren, auszulagern. Der am IRF eingesetzte humanoide Roboter NAO verwendet insgesamt 21 Mikrocontroller zur Kontrolle der Servomotoren, sowie einen weiteren, welcher alleinig zur Berechnung der Orientierung des Roboters im Raum benutzt wird. Abbildung 2 zeigt den Roboter NAO. Abbildung 2: Aufbau des humanoiden NAO-Roboters (Quelle:Aldebaran). 74

75 2 MIKROPROZESSOREN 2.7 Mikrocontroller Komponenten Da die Einsatzgebiete von µc sehr unterschiedlich sind, und die Anforderungen mit dem Anwendungsgebiet stark variieren, existieren Mikrocontroller in den verschiedensten Ausführungen, die sich in der Regel nur in ihrer Komponentenausstattung unterscheiden. Im Idealfall wird der µc immer so gewählt, dass möglichst alle Funktionalität im Chip integriert ist. Um z. B. die Befehle eines Bedienfeldes an einen CAN-Bus weiterzugeben, würde vorzugsweise ein µc eingesetzt, der sowohl einen Controller für das Bedienfeld- als auch für den CAN-Bus integriert. Im weiteren soll ein kurzer Überblick der in gängigen µc integrierten Komponenten gegeben werden. Prozessorkern Im Gegensatz zum Mikroprozessor fällt dieser beim µc in der Regel einfacher aus, da beim Einsatz von µc häufig Kosten eine entscheidende Rolle spielen. Es sind zwei unterschiedliche Ansätze bei der µc -Entwicklung zu beobachten. Zum einen werden eigens für den µc entwickelte Prozessorarchitekturen eingesetzt, zum anderen werden ältere Mikroprozessorkerne mit geringfügigen Modifikationen verwendet. Letzteres schafft Kompatibilität und senkt die Entwicklungskosten. Prozessorkerne gibt es aufgrund der verschiedenen Herstellungsanzätze und stark variierenden Anforderungen von einfachen 8-Bit-Versionen über 16-Bit-Allround-µC bis hin zu leistungsfähigen 32-Bit-Architekturen. Speicher Der in einem µc integrierte Speicher ist aufgeteilt in einen flüchtigen Schreiblesespeicher und einen nichtflüchtigen Festwertspeicher. Größe und Typ der Speicher unterscheiden oft Untertypen desselben µc. Der PIC18F2320 der Firma Microchip verfügt z. B. über 8KB Festwertspeicher und 512 Byte Schreiblesespeicher, während der PIC18F2331 bei gleicher CPU über 768 Byte Schreiblesespeicher verfügt. Heutzutage wird in Mikrocontroller Flash-Speicher als Schreiblesespeicher und ein EPROM als Festwertspeicher verwendet. Im Allgemeinen wird in µc auf komplexe Speicherhierarchien, wie zum Beispiel einen Cache verzichtet). Ein-/Ausgabeports Ein- und Ausgabekanäle (E/A-Ports) bieten dem Mikrocontroller die Möglichkeit mit der Außenwelt zu interagieren. Im allgemeinen Fall werden diese IO-Ports demnach dazu genutzt, um den µc mit Aktuatoren und Sensoren zu verbinden. Außerdem bieten sie die Möglichkeit diverse zusätzliche Bausteine mit dem µc zu nutzen. Diese könnten beispielsweise dedizierte Sende-/Empfangseinheiten für verschiedene Bussysteme, wie etwa der CAN-, LIN-, I2C-, SPI- oder auch Ethernet- Bus,sein. Um diese E/A-Ports vom µc aus ansprechen zu können existieren verschiedene Möglichkeiten. Beim Memory-Mapped-I/O werden die E/A-Register zur Steuerung der E/A-Ports im Hauptspeicher-Adressraum abgebildet, was dazu führt, dass der Zugriff auf die E/A-Ports mit den üblichen Speicherzugriffsroutinen erfolgen kann. Eine andere Variante stellt das Port-Mapped-I/O Verfahren dar. Bei dieser Methode wird der Zugriff auf die E/A-Ports über speziell dafür vorgesehene CPU-Instruktionen ermög- 75

76 2.8 Verwendung mehrerer Ausführungseinheiten 2 MIKROPROZESSOREN licht. In heutigen Mikrocontrollern findet wird in der Regel das Memory-Mapped-I/O angewendet. A/D-Wandler Analog/Digital-Wandler (A/D-Wandler) ermöglichen es dem µc elektrische Analogsignale, also beispielsweise von einem Temperatursensor gemessene, zur Temperatur proportionale, Spannung zu digitalisieren. Diese können dann vom µc weiter verarbeitet werden. Wesentliche Merkmale dieser Wandler sind Auflösung und Wandlungszeit. Die Auflösung wird in Bit angegeben, wobei ein 10-Bit-Wandler die Eingangsspannung in eine 10 Bit breite Zahl umsetzt. Die Wandlungszeit kann je nach eingesetzter Technik und Güte im Mikro- bis Millisekundenbereich liegen. Zähler und Zeitgeber Mikroconroller kommen häufig im Echtzeitbereich zum Einsatz. Hier sind Zähler und Zeitgeber wichtige Komponenten. Während einfache Aufgaben, wie das Messen von Zeiten, nur einen Zähler benötigen, werden für komplexere Aufgaben, wie Frequenz-, Drehzahl-, oder Periodenmessungen, mehrere dieser Einheiten benötigt. Zähler werden normalerweise mit Breiten von 16, 24 oder 32 Bit realisiert. Sie können auf- oder abwärts zählen. Ein Zähler reagiertäuf einen externen Eingang, an dem das Zählereignis durch einen Spannungswechsel ausgelöst werden kann. Durch die Zuführung eines Takters an diesem Eingang, wird der Zähler zu einem Zeitgeber. Der Takt kann extern generiert oder vom Prozessor zugeführt werden (Prozessortakt). Zähler können darauf programmiert werden, bei Erreichen eines bestimmten Zählerstandes ein Ereignis auszulösen, wodurch periodische Ereignisse im MC realisiert werden können. 2.8 Verwendung mehrerer Ausführungseinheiten Für einige Instruktionen dauert die Execute Phase erheblich länger als ein Taktzyklus. Bei einer normalen Pipeline kann dies zu einer geringen Effizienz führen, da die zusätzlichen Stufen oft nicht verwendet werden. Der Versuch, dieses Problem über eine Beschleunigung der Hardware zu lösen, führt schnell an seine Grenzen, da kürzere Latenzzeiten in Bezug auf Taktzyklen nur durch eine geringere Taktfrequenz oder durch hohen Schaltungsaufwand realisierbar sind. Die zunehmende Miniaturisierung in der Schaltungstechnik erlaubt dagegen die Implementierung zusätzlicher Ausführungseinheiten (Functional Units) auf einer integrierten Schaltung. In diesem Modell wird eine Instruktion in den Phasen ID an die entsprechende Ausführungseinheit weitergereicht. Dabei wird die EX Phase für die Gleitkommaaddition, die Multiplikation und die Division iterativ durchgeführt. Damit kann das Problem über die parallele Verarbeitung von zeitlich aufwändigen Instruktionen mit schnellen Instruktionen gelöst werden. Voraussetzung ist dabei eine begrenzte Häufigkeit von Gleitkommaperationen oder Integermultiplikationen und divisionen und eine geringe Beeinflussung der Pipeline (Daten-Hazards) durch diese Instruktionen. Durch iterative Abarbeitung in einigen Ausführungseinheiten kann der zusätzliche Hardwareaufwand in der Implementierung 76

77 2 MIKROPROZESSOREN 2.8 Verwendung mehrerer Ausführungseinheiten Eigenschaft Atmel ATmega128(L) PIC18F97J60 Prozessor 8-bit RISC 8-bit RISC (16 Bit Instr, 8 Bit Daten) Instruktionen Register SFR Taktfrequenz 0-16(8) MHz 0-40 MHz FlashRAM 128 KByte 128 KByte EEPROM 4 KByte RAM 4 KByte 3808 Byte Debugging JTAG - Peripherie 8 Bit Timer/Counter Mehrere Timer/Counter 8 Bit PWM-Kanäle Ethernet Treiber AD-Konverter 10 Bit A/D Converter Serielle Schnittstellen 39 I/O Pins Watchdog Timer Extended Watchdog Timer SPI Interface Interner Oszillator Interner Oszillator Viele Schlafmodi Versorgungsspannung 4.5(2.7) 5.5 V V Tabelle 2: Vergleich zweier gängiger Mikrocontroller Normale ALU FP Add IF ID ME WB Mult Div 77

78 2.8 Verwendung mehrerer Ausführungseinheiten 2 MIKROPROZESSOREN relativ gering gehalten werden. Allerdings kann dies zu Resource-Hazards führen, wenn zum Beispiel zwei Divisionen in kurzem zeitlichem Abstand auftreten. Die unterschiedliche Instruktionsdauer führt außerdem zu zusätzlichen Problemen: 1. Zugriffsproblem auf Register in Phase WB Instruktion Operation i HI,LO R1 R2 (32 bit) i+5 R6 R4 + R5 Im Zyklus t i +9 würden zwei Instruktionen gleichzeitig auf den Registerblock zugreifen. 2. WAW Hazards werden möglich Instruktion Operation i HI,LO = R1 : R2 (32 bit) i+10 HI,LO = R4 R5 (32 bit) Während die Division den Inhalt der Register HI und LO in Zyklus t i + 40 verändert, schreibt die Multiplikation die beiden Register im Zyklus t i Damit verwenden spätere Instruktionen den falschen Wert, das heißt, es liegt ein Write After Write Hazard (WAW) vor. Bei der Verwendung von Integer und FP Einheiten können die Schwierigkeiten zum Teil durch einen getrennten Satz von Integer und FP Registern behoben werden. Dabei benutzen Integerinstruktionen nur Integerregister und FP Instruktionen nur FP Register. Die einzige Ausnahme bilden spezielle Move (Kopier) Instruktionen. Daher ist die Wahrscheinlichkeit von Resource-Hazards und auch der Aufwand für die Hazarderkennung reduziert. Im Allgemeinen werden folgende Ansätze zur Lösung der erwähnten Probleme verfolgt: 1. Behandlung von Zugriffskonflikten durch eine priorisierte Warteschlange der Instruktionen. Dabei werden alle Instruktionen außer der Instruktion mit der höchsten Priorität angehalten (Stall). Die Prioritätsvergabe erfolgt meist statisch, das heißt Instruktionen mit längerer Latenzzeit erhalten eine höhere Priorität. Dies erlaubt eine einfache Implementierung. 78

79 2 MIKROPROZESSOREN 2.9 Dynamisches Scheduling 2. Behandlung von WAW Daten-Hazards: Nach Erkennen des Hazards wird entweder die zweite Instruktion verzögert oder der Registerzugriff der ersten Instruktion (hier: Multiplikation) verhindert. 2.9 Dynamisches Scheduling Wie bereits erwähnt, können Daten-Hazards oft durch eine veränderte Instruktionsreihenfolge beseitigt werden. Die Veränderungen der Instruktionsreihenfolge durch die Hardware des Prozessors heißt dynamisches Scheduling oder out of order execution. Nutzung der Veränderung der Instruktionsreihenfolge i Register[R3] = Register[R2]/Register[R1] Instruktion mit langer Latenzzeit i+1 Register[R5] = Register[R4]+Register[R3] Echte Abhängigkeit zu Instruktion i i+2 Register[R7] = Register[R7]-Register[R6] Keine Abhängigkeit von Instruktionen i und i+ Bei Erhaltung der ursprünglichen Ausführungsreihenfolge ist keine Nutzung der Integer-ALU während der Latenzzeit der Division möglich. Da es aber keine Überlappung zwischen den verwendeten Registern der Addition und Division auf der einen sowie denen der Subtraktion auf der anderen Seite gibt, ist ein Vorziehen der Subtraktion möglich. Voraussetzung für die Durchführung von dynamischem Scheduling ist die Existenz eines Instruktionspuffers, der die Kandidateninstruktionen zum Vorziehen zur Verfügung stellt. Ein solcher Instruktionspuffer erhält in der Phase IF Instruktionen in der ursprünglichen Reihenfolge. Damit wird die ursprünglich einheitliche Pipeline in zwei Teile aufgegliedert, die durch den Instruktionspuffer getrennt werden. Die Instruktionsreihenfolge in beiden Teilen kann unterschiedlich sein. Zusätzlich wird die Phase ID in zwei Teile aufgespalten: Modifizierte Phase ID: Die Instruktion wird dekodiert und die Existenz von Resource- Hazards überprüft. Falls Resource-Hazards bestehen, wird die Ausführung der Instruktion unterbrochen. Neue Phase RF (Register Fetch): Die benötigten Register der Instruktion werden gelesen, sobald keine Daten-Hazards (mehr) bestehen. Durch dynamisches Scheduling können allerdings WAR Hazards entstehen. WAR-Hazard Register[R3] = Register[R2]/Register[R1] Register[R5] = Register[R4]+Register[R3] Register[R4] = Register[R7]-Register[R6] benötigt den Wert von R4 schreibt einen neuen Wert in R4 79

80 2.9 Dynamisches Scheduling 2 MIKROPROZESSOREN Dieses Problem kann durch Speichern der Additionsinstruktion zusammen mit den Operanden gelöst werden. Beim dynamischen Scheduling muss die Ausführung der Instruktion mit Hardware überwacht werden. Dabei treten folgende Aufgaben auf: 1. Auflösung der Daten-Hazards 2. Überwachung der funktionellen Einheiten 3. Speicherung der Instruktionen Viele Dynamic Schedulingmethoden basieren auf dem Scoreboard-Verfahren, welches für die CDC 6600 eingeführt wurde. Die CDC 6600 war eine Load-Store Architektur mit 16 verschiedenen funktionellen Einheiten (4 Gleitkommaeinheiten, 7 Integereinheiten, 5 Speicherzugriffseinheiten). Im Scoreboard werden die Datenabhängigkeiten für jede Instruktion nachgehalten. Erst wenn die Operanden einer Instruktion zur Verfügung stehen, wird diese Instruktion vom Scoreboard freigegeben. Ebenso wird auch das Beschreiben der Zielregister überwacht. Im Weiteren werden die Aufgaben des Scoreboards in den einzelnen Phasen erläutert: IF: Solange die Instruktionswarteschlange nicht gefüllt ist, werden neue Instruktionen aus dem Speicher geladen. Das Scoreboard hat daher nur einen indirekten Einfluss auf die Phase IF. ID: Falls eine benötigte funktionelle Einheit zur Verfügung steht und keine andere aktive Instruktion das gleiche Zielregister hat, wird die Instruktion an die betreffende Einheit weitergeleitet. Ansonsten wird die Phase ID gestoppt, bis der Resource-Hazard oder der WAW Hazard behoben ist. RF: Falls alle Operanden einer Instruktion verfügbar sind, werden diese gelesen und die Einheit beginnt mit der Instruktionsausführung. Dabei ist ein Operand verfügbar, wenn keine vorher weitergeleitete Instruktion den Operanden als Zielregister hat. Damit werden RAW Hazards dynamisch beseitigt. EX: Das Scoreboard wird informiert, sobald die Einheit die Ausführung der Instruktion abgeschlossen hat. WB: Falls kein WAR Hazard vorliegt, wird das Ergebnisregister beschrieben. Andernfalls kommt es zum Stall für die betroffene funktionelle Einheit. Ein WAR Hazard besteht, falls - eine vorausgehende Instruktion die Phase RF noch nicht beendet hat und 80

81 2 MIKROPROZESSOREN 2.9 Dynamisches Scheduling - ein Operand dieser Instruktion dem Ergebnisregister der zu beendenden Instruktion entspricht. (Hennessy, Patterson) Zielarchitektur: 1 Integereinheit (auch für Load/Store) 1 FP-Multiplizierer 1 FP-Addierer 1 FP-Dividierer Programm LOAD F3, 10(R1) LOAD F1, 8(R2) MULT F0, F1, F2 SUB F4, F3, F1 DIV F5, F0, F6 ADD F6, F4, F1 Es entsteht folgender Status der Instruktionen, wenn die zweite LOAD Instruktion in Phase EX ist: Instruktion Phase Einheit LOAD abgeschlossen LOAD EX Int MULT RF FP-Mult SUB RF FP-Add DIV RF FP-Div ADD ID Für die funktionellen Einheiten gibt es mehrere Statustags: Busy : 0 falls die Einheit frei ist F i : Zielregister F j, F k : Quellenregister Q j, Q k : Abhängigkeit der Quellenregister Zu dem vorstehend aufgeführten Zeitpunkt ergibt sich für die funktionellen Einheiten folgender Zustand: Einheit Busy Op F i F j F k Q j Q k Int LOAD F1 R2 FP-Mult MULT F0 F1 F2 Int FP-Add SUB F4 F3 F1 Int FP-Div DIV F5 F0 F6 FP-Mult Alle funktionellen Einheiten sind belegt. Im Weiteren wird angenommen, dass Multiplikation und Division wesentlich länger dauern als Integeroperationen und Addition. 81

82 2.9 Dynamisches Scheduling 2 MIKROPROZESSOREN Kurz bevor die Multiplikation ihr Ergebnis in ein Register einträgt, tritt folgende Situation auf: Instruktion Phase Einheit LOAD abgeschlossen LOAD abgeschlossen MULT WB FP-Mult SUB abgeschlossen DIV RF FP-Div ADD WB FP-Add Einheit Busy Op F i F j F k Q j Q k Int FP-Mult MULT F0 F1 F2 FP-Add ADD F6 F4 F1 FP-Div DIV F5 F0 F6 FP-Mult Sobald die Instruktion DIV ihre Quellenregister gelesen hat, ist der WAR Hazard der Instruktion ADD aufgehoben und die Instruktion ADD kann das Ergebnisregister beschreiben. Bei der Implementierung des ursprünglichen Scoreboard- Algorithmus in der CDC 6600 traten folgende Zusatzkosten auf: 1. Hardware für das Scoreboard: Das Scoreboard benötigt ungefähr soviel Hardware wie eine funktionelle Einheit. 2. Parallele Busse zu den funktionellen Einheiten. In modernen superskalaren Multiprozessoren sind zum parallelen Starten mehrerer Instruktionen bereits mehrere Busse notwendig. Damit entfallen diese Zusatzkosten. Die Effizienz des Scoreboard-Verfahrens wird durch folgende Faktoren beeinflusst: 1. Im Code vorhandene Parallelität. Durch die unterstützende Verwendung optimierender Compiler kann die vorhandene Parallelität in Suchfenstern des Prozessors wesentlich erhöht werden. Dies gilt ebenfalls bei Verfügbarkeit von Instruktionen aus anderen Grundblöcken. 2. Die Größe des Suchfensters. Ein größeres Suchfenster erfordert auf der einen Seite größere Warteschlangen im Prozessor, stellt aber gleichzeitig auch dem Scoreboard mehr Instruktionen zur Verfügung. 3. Die Anzahl der funktionellen Einheiten. Ein Mangel an funktionellen Einheiten führt zu einem Stall aufgrund eines Strukturhazards. 4. Die Existenz von WAR oder WAW Hazards. Diese führen im Scoreboard-Verfahren zu Stalls, die im Fall von WAW Hazards alle funktionellen Einheiten betreffen. 82

83 2 MIKROPROZESSOREN 2.9 Dynamisches Scheduling Eine von Tomasulo vorgeschlagene Erweiterung des Scoreboard-Verfahrens beseitigt den limitierenden Einfluss von WAR und WAW Hazards durch Register Renaming Superskalare Prozessoren Fast alle modernen Hochleistungsprozessoren sind als sogenannte superskalare Prozessoren aufgebaut. Hierunter versteht man Prozessoren, die gleichzeitig mehrere Instruktionen laden können. IF ID EX ME WB Zeit Zeitdiagramm eines superskalaren Rechners vom Grad 3: 3 Instruktionen werden parallel gelesen. Superskalarität einzelner Prozessoren R Instruktionen / Taktzyklus SUN Ultra SPARC III 4 Instruktionen / Taktzyklus Alpha Instruktionen / Taktzyklus Zur Abarbeitung dieser Instruktionen werden mehrere funktionale Einheiten benötigt. Anzahl der Ausführungseinheiten bei verschiedenen Prozessoren R Einheiten SUN Ultra SPARC III 6 Einheiten Alpha Einheiten Am Beispiel des R10000 werden nachstehend einige Eigenschaften eines superskalaren Mikroprozessors erläutert. 1. Register Renaming Beim R10000 besteht ein Unterschied zwischen den logischen Registern und den physikalischen Registern. Die größere Anzahl von physikalischen Registern erlaubt die 83

84 2.9 Dynamisches Scheduling 2 MIKROPROZESSOREN Adr 64 Bit Load oder Store Instruktions speicher Adr 4 32 Bit Instr. Switch (TranslationLook aside Buffer) TLB Verzweigungseinheit Instruktionsdekodierung Registerzuweisung Adressen Warteschlange Integer Warteschlange FP Warteschlange 64 Integer Register Adressbestimmung ALU 1 ALU 2 Load/Store Einheit 2 nicht identische Integereinheiten 2 Gleitkommaeinheiten 4 Instruktionen 2 Instruktionen 64 FP Register Addierer Iterative Verarbeitung: Integer Multiplikation/Division über ALU 2 FP Division über FP Multiplizierer FP Wurzelziehen Multiplizierer Dividierer Wurzelzieher Abbildung 3: Beispiel für einen superskalaren Mikroprozessor: MIPS R

85 2 MIKROPROZESSOREN 2.9 Dynamisches Scheduling Vermeidung von WAR und WAW Hazards und unterstützt die spekulative Ausführung von Instruktionen und Precise Interrupts. In der Dekodierungsphase werden echte Abhängigkeiten (RAW Hazards) erkannt und logische Register physikalischen Registern zugewiesen. Im Weiteren werden nur die physikalischen Register verwendet. Die Zuweisung erfolgt dabei über so genannte Zuordnungstabellen (Mapping Tables). Der Programmierer und der Compiler kennen dagegen nur die logischen Register. Die physikalischen Register sind von außen nicht sichtbar. Daher benötigt der Mikroprozessor eine Tabelle zur Ermittlung der benutzten und der verfügbaren physikalischen Register. Diese Tabelle heißt Busy-Bit Table. Falls nach der Dekodierung einer Instruktion kein physikalisches Register mehr zur Verfügung steht, dann liegt ein Resource-Hazard vor. Dies führt zu einem Stall dieser Instruktion. 2. Warteschlangen Warteschlangen dienen der Zwischenspeicherung von Instruktionen, die bereits dekodiert sind, aber noch nicht ausgeführt wurden. Der R10000 besitzt 3 getrennte Warteschlangen, die unabhängig voneinander verwaltet werden. a) Integer-Warteschlange Hier werden Instruktionen zwischengespeichert, die von ALU1 oder ALU2 ausgeführt werden. Wie auch bei den anderen Warteschlangen können 16 Instruktionen aufgenommen werden. In jedem Zyklus können bis zu 4 neue Instruktionen hinzukommen. b) FP-Warteschlange Hier werden Instruktionen für den FP Addierer und den FP Multiplizierer zwischengespeichert. Bei der FP Multiply-Add Instruktion wird das Ergebnis der Multiplikation direkt an den Addierer weitergeleitet. c) Adressen-Warteschlange Hier werden LOAD/STORE Instruktionen zwischengespeichert. Die Adressen- Warteschlange ist als FIFO (First-In-First-Out Speicher) organisiert. Dies unterscheidet diese Warteschlange von den beiden anderen. Die Instruktionen bleiben in der Warteschlange bis sie erfolgreich abgeschlossen sind. 3. Speicherzugriff Wie auch andere moderne Prozessoren besitzt der R Möglichkeiten des Speicherzugriffs: a) Lesezugriff auf den Instruktionscache (Phase IF) b) Lesezugriff auf den Datencache (Load, Phase ME) c) Schreibzugriff auf den Datencache (Store, Phase ME) 85

86 2.9 Dynamisches Scheduling 2 MIKROPROZESSOREN 4. Registerblöcke Der R10000 besitzt 2 Registerblöcke mit jeweils mehreren Ports. a) Integer Registerblock 7 Leseports 3 Schreibports b) FP Registerblock 5 Leseports 3 Schreibports Ein gleichzeitiger Lesezugriff über mehrere Ports ist möglich. Dagegen ist ein gleichzeitiger Schreibzugriff auf ein physikalisches Register aufgrund von Register Renaming ausgeschlossen. 5. Abarbeitung von Instruktionen. Die Abarbeitung einer Instruktion lässt sich in 5 Phasen unterteilen. a) Instruction Fetch Lesen der Instruktionen vom Instruktionsspeicher (Cache) in ursprünglicher Anordnung (in-order). b) Instruction Decode Durchführung von Register Renaming und erste Daten-Hazard Überprüfung in ursprünglicher Anordnung (in-order). Aktivierung der Instruktion. In diesem Schritt erfolgt die Übergabe der Instruktionen an die passende Warteschlange. c) Instruction Issue Weiterleiten der Instruktion an eine funktionale Einheit zur Ausführung. Hier kann von der ursprünglichen Reihenfolge abgewichen werden (out-of-order). d) Instruction Completion Abschluss der Durchführung der Instruktion und Speicherung des Ergebnisses in einem physikalischen Register (out-of-order). Allerdings kann die Instruktion bis zu diesem Zeitpunkt noch rückgängig gemacht werden. e) Instruction Graduation Übernahme des temporären Ergebnisses einer Instruktion als endgültiges Ergebnis. Deaktivierung der Instruktion. Damit entsteht ein neuer Prozessorstatus. Eine Instruktion kann nur graduiert werden, wenn alle vorhergehenden Instruktionen vorher graduiert wurden oder gleichzeitig graduiert werden (in-order). Vor der Graduierung einer Instruktion können alle Effekte der Instruktion rückgängig gemacht werden (außer bei STORE Instruktionen). Nach der Graduierung einer Instruktion werden alle alten Registerwerte aufgegeben. Dies geschieht durch einen Freieintrag in der Busy-Bit Tabelle. 6. Non-blocking LOAD und STORE Instruktionen 86

87 2 MIKROPROZESSOREN 2.9 Dynamisches Scheduling Bei einem Cache-Miss arbeitet der Prozessor mit unabhängigen Instruktionen weiter. Bis zu 4 Cache-Miss können gleichzeitig abgearbeitet werden. Diese Eigenschaft wird unter dem Thema Speicherhierarchie noch näher beschrieben. 7. Spekulative Ausführung von Instruktionen mit Verzweigungsvorhersage. Instruktionen können sowohl auf statische Weise (Branch Likely Instruktionen) als auch dynamisch (über Register Renaming) spekulativ ausgeführt werden. 8. Verzweigungen Nur eine Verzweigung kann pro Zyklus ausgeführt werden. Alle Vergleiche werden von ALU1 ausgeführt. Die gegenwärtige Zuweisung von logischen und physikalischen Registern wird in der sogenannten Shadow Map Table gespeichert. Damit ist eine Wiederherstellung des alten Zustandes bei falscher Vorhersage möglich. Die Zieladresse wird an den Instruktionsspeicher weitergegeben. Durch Unterstützung der Prädiktion mittels eines Branch Target Buffers muss kein Unterschied zwischen sequentieller Fortführung (Branch Not Taken) und Aussprung (Branch Taken) gemacht werden, das heißt, der R10000 hat eine symmetrische Verzweigungsbearbeitung. Mehrere Verzweigungen können in aufeinander folgenden Zyklen bearbeitet werden, wobei im Branch Delay Slot keine Verzweigung stehen darf. Programmablauf 1 DSLL r3, r2, 2 2 LW r4, 0 8(r3) 3 ADDI r5, r2, SUB r3, r1, r5 5 XORI r2, r1, 0 FF 6 BEQ r4, r2, label Verzweigung; Vorhersage: Branch-taken 7 NOP Branch Delay Slot 8 MULT r3, r2 9 label: 10 AND r3, r1, r2 11 LB r4, 0(r3) Der Branch Delay Slot wurde in dem vorliegenden Beispiel nicht verwendet und ist daher durch eine NOP Instruktion besetzt. Zeitdiagramm 87

88 2.9 Dynamisches Scheduling 2 MIKROPROZESSOREN Pipelinediagramm des R Pipeline Stufen Stufe 1 Fetch Stufe 2 Decode Stufe 3 Issue Stufe 4 Stufe 5 Execute Execute Stufe 6 Stufe 7 Execute Store FP Add Pipeline (FP Warteschlange) FP Multiply Pipeline (FP Warteschlange) Issue Issue RF RF FAdd 1 FMpy 1 FAdd 2 FMpy 2 FAdd 3 FMpy 3 Result Result Floating Point Warteschlange und Register 5 Ausführungs pipelines Integer ALU Pipeline (Integer Warteschlange) Issue RF ALU1 Result Integer ALU Pipeline (Integer Warteschlange) Issue RF ALU2 Result Integer Register Operanden LOAD/STORE Pipeline (Adresse Warteschlange) Issue RF Addr. Calc Daten cache Result Instruction Fetch Pipeline Warte schlangen Lesen der Register aus den Registerblöcken TLB 2 way Interleaved Cache Translation Lookaside Buffer Instruktions cache Decode Verzweigungseinheit Verzweigungsadresse 4 Instruktion / Taktzyklus Funktionale Einheiten 88

89 2 MIKROPROZESSOREN 2.10 Multi- und Manycore Architekturen Adresse Zyklen DSLL dec issue ALU 1 write 2 LW dec wait issue Adresse DCache write 3 ADDI dec issue ALU 2 write 4 SUB dec wait issue ALU 1 write 5 XORI dec issue ALU 2 write 6 BEQ dec wait wait issue ALU 1 (nowrite) 7 NOP dec ready issue ALU 1 (nowrite) 10 AND dec issue ALU 2 write 11 LB dec wait issue Adresse DCache write Zeitdiagramm Annahme: Die Verzweigung wurde falsch vorhergesagt. Adresse Zyklen BEQ dec wait wait issue ALU 1 nowrite 7 NOP dec ready issue ALU 1 (nowrite) 10 AND dec issue ALU 2 write 11 LB dec wait issue Adress 8 MULT reverse dec issue ALU 2 ALU Multi- und Manycore Architekturen Lange Zeit war die Erhöhung der Taktfrequenz die meistgenutzte Maßnahme, um die Leistung von Prozessoren zu steigern und die Ausführungszeit der damit genutzten Programme zu verringern. Außerdem wurde die Taktfrequenz als Marketinginstrument genutzt, mit dem sich Hersteller von der Konkurrenz abheben wollten. Das ist besonders deutlich an der Superpipelined-Netburst-Architektur des Pentium4-Prozessors von Intel zu sehen, der für möglichst hohe Taktfrequenzen konzipiert wurde. Das führte aber dazu, dass der Prozessor bei gleicher Taktfrequenz anderen Entwürfen mit deutlich weniger Pipelinestufen unterlegen war. Problematisch ist, dass mit höheren Taktfrequenzen der Leistungsverbrauch einer CPU überproportional steigt, so dass Prozessoren ab einem gewissen Grad nicht mehr wirtschaftlich betrieben werden können, da der Aufwand zur Kühlung immer größer wird. So ist die Energiedichte neuester Pentium4-Modelle deutlich höher als der entsprechende Wert einer Herdplatte. Zusätzlich gelangen heutige Prozessoren bezüglich ihrer Taktfrequenz immer näher an physikalische Grenzen. Bei einem Prozessor mit 3 GHz Taktfrequenz dauert ein Taktzyklus nur noch 0,33 Nanosekunden. In dieser kurzen Zeit kann Licht im Vakuum nur 10 Zentimeter zurücklegen. Elektromagnetische Wellen breiten sich mit 6cm/ns in Leitungen sogar noch etwas langsamer aus, weshalb z. B. in der Pentium4-Pipeline spezielle Stufen als Wartezyklen eingefügt wurden, so dass die internen Signale genug Zeit haben, um von der einen Seite des Chips zur anderen zu gelangen. 89

90 2.10 Multi- und Manycore Architekturen 2 MIKROPROZESSOREN Daher beschreiten Prozessorhersteller in letzter Zeit andere Wege, um die Leistungsfähigkeit ihrer Chips zu erhöhen. Dazu werden für Desktopsysteme und Notebooks Techniken eingesetzt, die zuerst nur im Serverbereich Anwendung fanden. Ziel ist es, die Gesamtperformance eines Prozessors durch die Bereitstellung von mehr Parallelität zu vergrößern, statt einen Prozessor nur schneller zu takten. Im Serverumfeld wurde die Leistung schon lange durch die parallele Nutzung von mehreren Prozessoren vergrößert. Diese Technik wird Symmetric Multi-Processing (SMP) genannt (siehe die Vorlesung Parallele Rechnersysteme), führt aber zu höheren Kosten, da entsprechende Mainboards für zwei oder mehrere Prozessoren ausgelegt sein müssen und dementsprechend komplexer sind. IBM hat im Jahr 2000 als erster Hersteller mit der Power4- Architektur Multicoreprozessoren hergestellt. Dabei handelt es sich um Prozessoren, die intern aus mehreren vollständigen Prozessorkernen (Cores) bestehen. Einen anderen Ansatz hat Intel mit dem Pentium 4 und der Hyper-Threading-Technologie gewählt. Diese Prozessoren enthalten logisch zwei Prozessoren, die sich aber alle Recheneinheiten teilen. Mit der Core-Architektur hat Intel ein neues Prozessordesign vorgestellt, das zwei physikalische Kerne enthält. Ein weiteres Beispiel für diese Technik ist der CELL-Prozessor, der in der Playstation 3 eingesetzt wird. Hierbei kommen auch mehrere Kerne pro Prozessor zum Einsatz, aber im Gegensatz zu Multicoreprozessoren sind diese Kerne nicht alle identisch. Der Trend zu mehr Parallelität erfordert aber nicht nur Hardwareänderungen, sondern auch Anpassungen der Software, denn der Großteil der verfügbaren Software (Stand 2006) kann die bereitgestellte Parallelität nicht nutzen, da er nicht für die Ausführung in mehreren Threads vorbereitet ist und diese Art der Programmierung oft einen vollkommen neuen Softwareentwurf erfordert. Allerdings werden auf den meisten Computern mehrere Programme im Multitasking ausgeführt, so dass hier mehrere Prozessoren auch im Zusammenhang mit nicht parallelisierter Software durchaus vorteilhaft sein können. Da der Trend aber zu Prozessoren mit immer mehr Kernen geht, muss das Softwaredesign entsprechend angepasst werden, um die bereitgestellte Leistung effizient zu nutzen. Hierbei profitiert natürlich in erster Linie Software, die sich gut parallelisieren läßt, wie Bildverarbeitungsprogramme Hyper-Threading Im Jahr 2002 führte Intel die Hyper-Threading-Technik (HT) bei ihren Pentium4-Prozessoren ein, um den 64-Bit-Prozessoren von AMD etwas entgegensetzen zu können. Bei Hyper- Threading handelt es sich um ein Verfahren, das allgemein unter Simultaneous Multithreading (SMT) bekannt ist. Bei SMT arbeiten mehrere logische Prozessoren in einem Chip, bei Intels Hyper-Threading sind es derer zwei. Beide rechnen weitgehend unabhängig voneinander, wodurch der Durchsatz erhöht werden kann. Beim Hyper-Threading werden aber nicht zwei eigenständige Prozessorkerne auf einem Chip vereint, sondern die Erweiterung umfasst nur einen zusätzlichen Registersatz, getrenne Reorder - und Store-Buffer und einen eigenen Interrupt-Controller (APIC). Sowohl die Anzahl der Rechenwerke als auch Zahl und Größe der Caches bleiben gleich und werden von den beiden logischen Prozessoren gemeinsam genuzt. Folglich 90

91 2 MIKROPROZESSOREN 2.10 Multi- und Manycore Architekturen impliziert HT kein echtes Zwei-Prozessor-System, sondern nur ein virtuelles aus Sicht von Software und Betriebssystem. Der Vorteil dieser Art der Erweiterung ist, dass nur ein Prozent an zusätzlichen Transistoren und fünf Prozent zusätzlicher Chipfläche benötigt werden. Demgegenüber steht ein Performancevorteil von bis zu 25 Prozent. Um sich die Funktionsweise von Hyperthreading zu verdeutlichen, muss man berücksichtigen, dass jede µop (x86-instruktion werden beim Pentium 4 in einfache, so genannte µop umgewandelt) beim Pentium 4 eine mindestens 20-stufige Pipeline durchläuft. Jede Pipeline-Stufe erledigt dabei nur einen Bruchteil der Arbeit, beispielsweise das Holen des µop-codes aus dem Trace Cache (Fetch) oder das Verteilen der Operation auf die verfügbaren Rechenwerke (Scheduling). Es gibt sogar zwei Stufen, die nur als Wartestufen vorgesehen sind, um in dieser Zeit die Daten von der einen Chipseite auf die andere zu transportieren. Die Länge der Pipeline führt dazu, dass oft Stalls notwendig sind. Mit Hyper-Threading kann man solche Lücken durch Arbeit für einen zweiten, unabhängigen Programmteil (Thread) belegen. Dadurch führt der Prozessor den ersten Thread zwar nicht schneller aus, es steigt also nicht die absolute Performance, aber der Durchsatz erhöht sich, indem mehr Arbeit pro Zeiteinheit ausgeführt werden kann. Nähere Einzelheiten über Hyper-Threading und Multi-Threading sind Inhalt der Vorlesungen Parallele Rechnersysteme und Distributed Systems Intels Core-Mikroarchitektur Da Intels Netburst-Architektur aufgrund der hohen Taktfrequenz und der damit verbundenen hohen Verlustleistung mit Hinblick auf eine weitere Erhöhung der Performance eine Sackgasse war, wurde sie zu Gunsten der neuen Core-Architektur fallen gelassen, die ein weitaus besseres Energie/Performance- Verhältnis aufweist. Auch wenn Intel damit eine komplett neue Mikroarchitektur eingeführt hat, so ist die Abstammung von Pentium Pro oder dem Pentium M unverkennbar, da die grundlegenden Abläufe in der Pipeline weiterhin ähnlich sind. Sie besitzt zwei Kerne, einen getrennten L1-Daten- und Instruktionscache (32k, 8fach-assioziativ) und einen 4MB großen L2-Cache(16fach-assioziativ), den sich die beiden Kerne teilen müssen (siehe Abbildung 4). Der Abarbeitung in der Pipeline hat folgenden Ablauf: 1. Laden der x86-befehle in den Prefetch Streaming Buffer (32 Byte mit 16 Byte pro Takt) 2. Übersetzen der x86-befehle durch vier Dekoder in µops und Speichern im µops- Buffer 3. Bestimmen der benötigten Register und Mapping von logischen auf physikalische Register 4. Befehlsumordung im Reorder-Buffer(ROB) 91

92 2.10 Multi- und Manycore Architekturen 2 MIKROPROZESSOREN 5. Bis zu drei unabhängige Befehle pro Takt werden der Reservation Station übergeben, die die Jobs über fünf Ports auf die Einheiten verteilt (3fach-skalares Design) 6. Bearbeitung der OPs in drei ALUs, einer FPU, Load/Store- oder Sprungeinheit sowie zwei MMX- und SSE-Einheiten. 7. Die Ergebnise werden zurück zum ROB geleitet und graduiert (Schreiben der logischen Register). Abbildung 4: Aufbau der Core-Pipeline (Quelle: c t) 92

93 2 MIKROPROZESSOREN 2.10 Multi- und Manycore Architekturen Der Cell-Prozessor Der Cell Prozessor von IBM, Sony und Toshiba ist ein Design, das einen 64-Bit-Power- Prozessorkern mit weiteren spezialisierten Prozessorkernen, die Attached Processing Units (APU) genannt werden, kombiniert (siehe Abbildung 5). Der Power-PC-Prozessor hat dabei primär Kontrollaufgaben und ist für die Ausführung des Betriebssystems zuständig. Die APUs, auch Streaming Units genannt, sind für bestimmte mathematische Aufgaben optimiert, die insbesondere bei Spielen und Multimediaanwendungen verwendet werden. Mit der Playstation 3 ist dann auch eine Spielkonsole der erste Rechner mit einem Prozessor dieser Technologie. Abbildung 5: Aufbau des Cell-Prozessors (Quelle: c t) Der Power-Prozessor besitzt zwei 32-KByte-L1-Caches, 512 KB L2 Cache, eine FPU und VMX-Erweiterungen für Gleitkomma-Aufgaben in einfacher Genauigkeit und kann zwei Programm-Threads gleichzeitig bearbeiten. Mit den acht APUs können somit zehn Threads parallel ausgeführt werden. Jede der acht APUs besitzt 128 Register und 256 KB lokalen Speicher, um Konflikte, die bei einem gemeinsamen Speicherzugriff entstehen, zu verringern. Damit stellt jeder Chip mehr als 2,5 MB internen Speicher zur Verfügung. Intern sind alle Prozessoren über einen schnellen Bus, der 96 Byte/Zyklus übertragen kann, verbunden. Aufgrund des im Vergleich zum Power-Prozessor einfacheren Entwurfs können die APUs deutlich höhere Taktfrequenzen erreichen. Der Speicher- und I/O-Zugriff basiert auf einem Rambus Design. Die APUs verzichten auf eine Cache-Hierarchie und kommunizieren über eine bidirektionale Verbindung via DMA-Flow-Controller direkt mit ihren lokalen Speichern. Der Name Cell leitet sich vom Programmiermodell ab, für das der Chip konzipiert wurde. Ein Cell entspricht wie bei objektorientierten Entwürfen einem geschlossenes Softwaregebilde aus Befehlslogik und den zu verarbeitenden Daten. Somit wird deutlich, dass der Prozessor seine Leistung nur mit spezieller, an das Design angepasster Software ausreizen kann. 93

94 2.10 Multi- und Manycore Architekturen 2 MIKROPROZESSOREN Die Nvidia CUDA Architektur Durch die steigende Anforderung im Bereich der Echtzeit 3D Visualisierung, haben sich Grafikkarten (GPUs) zu hoch parallelen, mehrfädigen, Vielkern-Prozessoren entwickelt. Die zur Verfügung gestellte Rechenleistung moderner GPUs übersteigt heutzutage die Leistung konventioneller CPUs um ein vielfaches und macht GPUs somit auch für andere Aufgaben außerhalb ihrer Domäne interessant (vgl. Abbildung 6). Abbildung 6: Vergleich GFLOP/s zwischen konventionellen CPUs und GPUs (Quelle: Die große Diskrepanz zwischen den GPUs und den CPUs resultiert daher, dass GPUs auf rechenintensive, hoch parallele Rechenaufgaben, wie es bei der 3D Visualisierung der Fall ist, spezialisiert sind und somit mehr Transistoren für die reine Datenverarbeitung anstelle von Logik für Daten-Caching oder auch Flusskontrolle vorgesehen sind. Dementsprechend sind GPUs die richtige Wahl, wenn es sich um Programme handelt, die ein und dieselbe Berechnung auf verschiedene Datenelemente anwenden. Aus diesem Grund ist unter Anderem eine weniger aufwendige Flusskontrolle vonnöten. CUDA - Compute Unified Device Architecture - nennt sich eine Architektur der Firma Nvidia, welche als Weiterentwicklung herkömmlicher GPUs zu sehen ist, die es erlaubt rechenintensive Aufgaben zu beschleunigen. Die CUDA-Architektur beruht auf mehreren mehrfädigen Streaming-Multiprozessoren (SMs). Die SMs bestehen ihrerseits aus skalaren Prozessoren (SPs), Einheiten für spezielle Funktionen, mehrfädigen Instruktionseinheiten und on-chip Shared-Memory. Die Architektur ist so ausgelegt, dass sie hunderte von Threads mit verschiedenen Programmen verwalten und ausführen kann. Diese Technik wird von Nvidia als SIMT - Single Instruction Multiple Threads - bezeichnet. Jeder SM ordnet einen Thread einem seiner SPs zu, der mit einem dedizierten PC und Registersatz ausgestattet ist. Dabei werden Threads in sog. Warps zu jeweils 32 Threads zusammen- 94

95 2 MIKROPROZESSOREN 2.11 Zusammenfassung und Ausblick gefasst, die dann von einem SM gescheduled werden. Eine schematische Darstellung der beschriebenen Architektur ist in Abbildung 7 zu sehen. Derzeit befindet sich die dritte Generation der CUDA-Architektur unter dem Codenamen Fermi in Entwicklung. Die folgende Tabelle zeigt eine Übersicht der aktuellen CUDA- Architekturen: GPU G80 GT200 Fermi Technology: Transistors 681 million 1.4 billion 3.0 billion CUDA Cores Warp schedulers (per SM) Special Function Units (SFUs) / SM Floating Point: Double Precision None 30 FMA ops / clock 256 FMA ops /clock Single Precision 128 MAD ops/clock 240 MAD ops /clock 512 FMA ops /clock Memory: Shared Memory (per SM) 16 KB 16 KB 48 KB or 16 KB L1 Cache (per SM) None None 16 KB or 48 KB L2 Cache (per SM) None None 768 KB Year Zusammenfassung und Ausblick Die meisten modernen Hochleistungsprozessoren verwenden folgende Methoden der Parallelverarbeitung zur Leistungssteigerung: 1. Überlappung von Instruktionen (Pipelining). 2. Gleichzeitige Ausführung mehrerer Instruktionen (Superskalar). 3. Verwendung mehrerer Ausführungseinheiten. Zur Vermeidung der beim Pipelining auftretenden Hazards werden mehrere Ansätze verwendet: 1. Resource-Hazards können durch zusätzliche Hardwarekomponenten vermieden werden. Damit entstehen Entwurfsentscheidungen, die die Hardwarekosten und den typischen Leistungsgewinn beeinflussen. 2. RAW-Hazards lassen sich teilweise durch Bypassing vermeiden. Weitergehender Erfolg wird meist durch Umordnung der Instruktionen erreicht. Dies kann entweder durch den Compiler oder im Prozessor (Dynamic Scheduling) erfolgen. WAW- und WAR-Hazards können durch Register Renaming vermieden werden. 3. Die Zeitstrafe bei Verzweigungen lässt sich über mehrere Methoden beeinflussen. Die wichtigsten unter ihnen sind Verzweigungsvorhersage (Prädiktion), Branch Target Buffer, Branch Delay Slot und die spekulative Ausführung von Instruktionen. 95

96 2.11 Zusammenfassung und Ausblick 2 MIKROPROZESSOREN Abbildung 7: Die CUDA-Architektur (Quelle: 96

Die Mikroprogrammebene eines Rechners

Die 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.

Mehr

Binärdarstellung von Fliesskommazahlen

Binärdarstellung von Fliesskommazahlen Binärdarstellung von Fliesskommazahlen 1. IEEE 754 Gleitkommazahl im Single-Format So sind in Gleitkommazahlen im IEEE 754-Standard aufgebaut: 31 30 24 23 0 S E E E E E E E E M M M M M M M M M M M M M

Mehr

Computerarithmetik ( )

Computerarithmetik ( ) Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur

Mehr

Zeichen bei Zahlen entschlüsseln

Zeichen bei Zahlen entschlüsseln Zeichen bei Zahlen entschlüsseln In diesem Kapitel... Verwendung des Zahlenstrahls Absolut richtige Bestimmung von absoluten Werten Operationen bei Zahlen mit Vorzeichen: Addieren, Subtrahieren, Multiplizieren

Mehr

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren Lineargleichungssysteme: Additions-/ Subtraktionsverfahren W. Kippels 22. Februar 2014 Inhaltsverzeichnis 1 Einleitung 2 2 Lineargleichungssysteme zweiten Grades 2 3 Lineargleichungssysteme höheren als

Mehr

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem

Fachbericht zum Thema: Anforderungen an ein Datenbanksystem Fachbericht zum Thema: Anforderungen an ein Datenbanksystem von André Franken 1 Inhaltsverzeichnis 1 Inhaltsverzeichnis 1 2 Einführung 2 2.1 Gründe für den Einsatz von DB-Systemen 2 2.2 Definition: Datenbank

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Kap 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.).

Mehr

Grundlagen der Rechnerarchitektur

Grundlagen der Rechnerarchitektur Grundlagen der Rechnerarchitektur Einführung Unsere erste Amtshandlung: Wir schrauben einen Rechner auf Grundlagen der Rechnerarchitektur Einführung 2 Vorlesungsinhalte Binäre Arithmetik MIPS Assembler

Mehr

Binäre Gleitkommazahlen

Binäre Gleitkommazahlen Binäre Gleitkommazahlen Was ist die wissenschaftliche, normalisierte Darstellung der binären Gleitkommazahl zur dezimalen Gleitkommazahl 0,625? Grundlagen der Rechnerarchitektur Logik und Arithmetik 72

Mehr

Technische Informatik 2 Adressierungsarten

Technische 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

Mehr

Daten, Informationen, Kodierung. Binärkodierung

Daten, Informationen, Kodierung. Binärkodierung Binärkodierung Besondere Bedeutung der Binärkodierung in der Informatik Abbildung auf Alphabet mit zwei Zeichen, in der Regel B = {0, 1} Entspricht den zwei möglichen Schaltzuständen in der Elektronik:

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Mag. Christian Gürtler Programmierung Grundlagen der Informatik 2011 Inhaltsverzeichnis I. Allgemeines 3 1. Zahlensysteme 4 1.1. ganze Zahlen...................................... 4 1.1.1. Umrechnungen.................................

Mehr

Computer-Architektur Ein Überblick

Computer-Architektur Ein Überblick Computer-Architektur Ein Überblick Johann Blieberger Institut für Rechnergestützte Automation Computer-Architektur Ein Überblick p.1/27 Computer-Aufbau: Motherboard Computer-Architektur Ein Überblick p.2/27

Mehr

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger Grundlegendes Oracle9i PostgreSQL Prevayler Memory mywms bietet umfangreiche Konfigurationsmöglichkeiten um die Daten dauerhaft zu speichern.

Mehr

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung.

Die Gleichung A x = a hat für A 0 die eindeutig bestimmte Lösung. Für A=0 und a 0 existiert keine Lösung. Lineare Gleichungen mit einer Unbekannten Die Grundform der linearen Gleichung mit einer Unbekannten x lautet A x = a Dabei sind A, a reelle Zahlen. Die Gleichung lösen heißt, alle reellen Zahlen anzugeben,

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

OPERATIONEN AUF EINER DATENBANK

OPERATIONEN AUF EINER DATENBANK Einführung 1 OPERATIONEN AUF EINER DATENBANK Ein Benutzer stellt eine Anfrage: Die Benutzer einer Datenbank können meist sowohl interaktiv als auch über Anwendungen Anfragen an eine Datenbank stellen:

Mehr

2 Darstellung von Zahlen und Zeichen

2 Darstellung von Zahlen und Zeichen 2.1 Analoge und digitale Darstellung von Werten 79 2 Darstellung von Zahlen und Zeichen Computer- bzw. Prozessorsysteme führen Transformationen durch, die Eingaben X auf Ausgaben Y abbilden, d.h. Y = f

Mehr

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern

1 Einleitung. Lernziele. Symbolleiste für den Schnellzugriff anpassen. Notizenseiten drucken. eine Präsentation abwärtskompatibel speichern 1 Einleitung Lernziele Symbolleiste für den Schnellzugriff anpassen Notizenseiten drucken eine Präsentation abwärtskompatibel speichern eine Präsentation auf CD oder USB-Stick speichern Lerndauer 4 Minuten

Mehr

Datensicherung. Beschreibung der Datensicherung

Datensicherung. Beschreibung der Datensicherung Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten

Mehr

Lösungsvorschlag zur 4. Übung

Lö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

Mehr

Zahlensysteme: Oktal- und Hexadezimalsystem

Zahlensysteme: Oktal- und Hexadezimalsystem 20 Brückenkurs Die gebräuchlichste Bitfolge umfasst 8 Bits, sie deckt also 2 8 =256 Möglichkeiten ab, und wird ein Byte genannt. Zwei Bytes, also 16 Bits, bilden ein Wort, und 4 Bytes, also 32 Bits, formen

Mehr

Lizenzierung von System Center 2012

Lizenzierung von System Center 2012 Lizenzierung von System Center 2012 Mit den Microsoft System Center-Produkten lassen sich Endgeräte wie Server, Clients und mobile Geräte mit unterschiedlichen Betriebssystemen verwalten. Verwalten im

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008 Konzeption und Implementierung einer automatisierten Testumgebung, 10. Dezember 2008 1 Gliederung Einleitung Softwaretests Beispiel Konzeption Zusammenfassung 2 Einleitung Komplexität von Softwaresystemen

Mehr

2. Negative Dualzahlen darstellen

2. Negative Dualzahlen darstellen 2.1 Subtraktion von Dualzahlen 2.1.1 Direkte Subtraktion (Tafelrechnung) siehe ARCOR T0IF Nachteil dieser Methode: Diese Form der Subtraktion kann nur sehr schwer von einer Elektronik (CPU) durchgeführt

Mehr

Lizenzierung von SharePoint Server 2013

Lizenzierung von SharePoint Server 2013 Lizenzierung von SharePoint Server 2013 Das Lizenzmodell von SharePoint Server 2013 besteht aus zwei Komponenten: Serverlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung der Zugriffe

Mehr

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,

Mehr

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation Übungsaufgaben Anmerkung Allen Beispielen soll noch hinzugefügt sein, dass wertvolle Hinweise, also die Tipps und Tricks die der schnellen maschinellen Multiplikation zu Grunde liegen, neben dem toff zur

Mehr

Mikrocontroller Grundlagen. Markus Koch April 2011

Mikrocontroller Grundlagen. Markus Koch April 2011 Mikrocontroller Grundlagen Markus Koch April 2011 Übersicht Was ist ein Mikrocontroller Aufbau (CPU/RAM/ROM/Takt/Peripherie) Unterschied zum Mikroprozessor Unterschiede der Controllerarten Unterschiede

Mehr

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper

Betriebssysteme. Dipl.-Ing.(FH) Volker Schepper Speicherverwaltung Real Mode Nach jedem starten eines PC befindet sich jeder x86 (8086, 80386, Pentium, AMD) CPU im sogenannten Real Mode. Datenregister (16Bit) Adressregister (20Bit) Dadurch lassen sich

Mehr

SDD System Design Document

SDD System Design Document SDD Software Konstruktion WS01/02 Gruppe 4 1. Einleitung Das vorliegende Dokument richtet sich vor allem an die Entwickler, aber auch an den Kunden, der das enstehende System verwenden wird. Es soll einen

Mehr

Lizenzierung von Windows Server 2012

Lizenzierung von Windows Server 2012 Lizenzierung von Windows Server 2012 Das Lizenzmodell von Windows Server 2012 Datacenter und Standard besteht aus zwei Komponenten: Prozessorlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung

Mehr

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Roboter programmieren mit NXC für Lego Mindstorms NXT 1. Auflage Roboter programmieren mit NXC für Lego Mindstorms NXT schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv Verlag

Mehr

Englische Division. ... und allgemeine Hinweise

Englische Division. ... und allgemeine Hinweise Das folgende Verfahren ist rechnerisch identisch mit dem Normalverfahren; es unterscheidet sich nur in der Schreibweise des Rechenschemas Alle Tipps und Anmerkungen, die über die Besonderheiten dieser

Mehr

1 Mathematische Grundlagen

1 Mathematische Grundlagen Mathematische Grundlagen - 1-1 Mathematische Grundlagen Der Begriff der Menge ist einer der grundlegenden Begriffe in der Mathematik. Mengen dienen dazu, Dinge oder Objekte zu einer Einheit zusammenzufassen.

Mehr

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht Kap.2 Befehlsschnittstelle Prozessoren, externe Sicht 2 Befehlsschnittstelle 2.1 elementare Datentypen, Operationen 2.2 logische Speicherorganisation 2.3 Maschinenbefehlssatz 2.4 Klassifikation von Befehlssätzen

Mehr

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb CashPro basiert auf Accesstechnologie 2003 und ist auch unter den aktuellen Accessversionen 2007 bis 2013 einsetzbar und Mehrbenutzerfähig.

Mehr

Einführung in. Logische Schaltungen

Einführung in. Logische Schaltungen Einführung in Logische Schaltungen 1/7 Inhaltsverzeichnis 1. Einführung 1. Was sind logische Schaltungen 2. Grundlegende Elemente 3. Weitere Elemente 4. Beispiel einer logischen Schaltung 2. Notation von

Mehr

3 Rechnen und Schaltnetze

3 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

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Lineare Gleichungssysteme 1 Zwei Gleichungen mit zwei Unbekannten Es kommt häufig vor, dass man nicht mit einer Variablen alleine auskommt, um ein Problem zu lösen. Das folgende Beispiel soll dies verdeutlichen

Mehr

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

OECD Programme for International Student Assessment PISA 2000. Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland OECD Programme for International Student Assessment Deutschland PISA 2000 Lösungen der Beispielaufgaben aus dem Mathematiktest Beispielaufgaben PISA-Hauptstudie 2000 Seite 3 UNIT ÄPFEL Beispielaufgaben

Mehr

Lizenzierung von SharePoint Server 2013

Lizenzierung von SharePoint Server 2013 Lizenzierung von SharePoint Server 2013 Das Lizenzmodell von SharePoint Server 2013 besteht aus zwei Komponenten: Serverlizenzen zur Lizenzierung der Serversoftware und CALs zur Lizenzierung der Zugriffe

Mehr

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang sysplus.ch outlook - mail-grundlagen Seite 1/8 Outlook Mail-Grundlagen Posteingang Es gibt verschiedene Möglichkeiten, um zum Posteingang zu gelangen. Man kann links im Outlook-Fenster auf die Schaltfläche

Mehr

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik

Kapitel 1. Zahlendarstellung. Prof. Dr. Dirk W. Hoffmann. Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik Kapitel 1 Zahlendarstellung Prof. Dr. Dirk W. Hoffmann Hochschule Karlsruhe w University of Applied Sciences w Fakultät für Informatik Zahlensystemkonvertierung Motivation Jede nichtnegative Zahl z lässt

Mehr

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10

Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754. Berechnung von Gleitkommazahlen aus Dezimalzahlen. HSLU T&A Informatik HS10 Informationssysteme Gleitkommazahlen nach dem IEEE-Standard 754 Berechnung von Gleitkommazahlen aus Dezimalzahlen Die wissenschaftliche Darstellung einer Zahl ist wie folgt definiert: n = f * 10 e. f ist

Mehr

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005

Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 Buddy - Algorithmus Handbuch für Endnutzer Stand 02.08.2005 1. Vorwort 1 2. Systemvoraussetzungen 2 3. Programmarten 2 4. Sicherheit der Endnutzer 2 5. Handhabung 3 5.1 allgemeine Programmübersicht 3 5.2

Mehr

Fehler und Probleme bei Auswahl und Installation eines Dokumentenmanagement Systems

Fehler und Probleme bei Auswahl und Installation eines Dokumentenmanagement Systems Fehler und Probleme bei Auswahl und Installation eines Dokumentenmanagement Systems Name: Bruno Handler Funktion: Marketing/Vertrieb Organisation: AXAVIA Software GmbH Liebe Leserinnen und liebe Leser,

Mehr

Die allerwichtigsten Raid Systeme

Die allerwichtigsten Raid Systeme Die allerwichtigsten Raid Systeme Michael Dienert 4. Mai 2009 Vorbemerkung Dieser Artikel gibt eine knappe Übersicht über die wichtigsten RAID Systeme. Inhaltsverzeichnis 1 Die Abkürzung RAID 2 1.1 Fehlerraten

Mehr

Mikrocomputertechnik. Adressierungsarten

Mikrocomputertechnik. Adressierungsarten Adressierungsarten Ein Mikroprozessor bietet meist eine Reihe von Möglichkeiten, die Operanden für eine Rechenoperation zu bestimmen. Diese Möglichkeiten bezeichnet man als Adressierungsarten. unmittelbare

Mehr

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Zählen und Zahlbereiche Übungsblatt 1 1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage: Für alle m, n N gilt m + n = n + m. in den Satz umschreiben:

Mehr

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird.

Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird. Zahlensysteme Definition: Ein polyadisches Zahlensystem mit der Basis B ist ein Zahlensystem, in dem eine Zahl x nach Potenzen von B zerlegt wird. In der Informatik spricht man auch von Stellenwertsystem,

Mehr

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift. Briefe Schreiben - Arbeiten mit Word-Steuerformaten Ab der Version 5.1 stellt die BüroWARE über die Word-Steuerformate eine einfache Methode dar, Briefe sowie Serienbriefe mit Hilfe der Korrespondenzverwaltung

Mehr

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs. 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs 08.07.11 Microcontroller Kurs/Johannes Fuchs 1 Was ist ein Microcontroller Wikipedia: A microcontroller (sometimes abbreviated µc, uc or MCU) is a small computer on a single integrated

Mehr

Ihr Weg in die Suchmaschinen

Ihr Weg in die Suchmaschinen Ihr Weg in die Suchmaschinen Suchmaschinenoptimierung Durch Suchmaschinenoptimierung kann man eine höhere Platzierung von Homepages in den Ergebnislisten von Suchmaschinen erreichen und somit mehr Besucher

Mehr

Einführung in PHP. (mit Aufgaben)

Einführung in PHP. (mit Aufgaben) Einführung in PHP (mit Aufgaben) Dynamische Inhalte mit PHP? 2 Aus der Wikipedia (verkürzt): PHP wird auf etwa 244 Millionen Websites eingesetzt (Stand: Januar 2013) und wird auf etwa 80 % aller Websites

Mehr

3.14 Die Programmieroberfläche Programmierung

3.14 Die Programmieroberfläche Programmierung 121 3.14 Die Programmieroberfläche Programmierung Besonderheiten Die Oberflächen der einzelnen Quellen (3S, KW-Software, Siemens-TIA-Portal, logi.cad 3, PAS4000) sind in sich unterschiedlich. Aber auch

Mehr

Installation der SAS Foundation Software auf Windows

Installation der SAS Foundation Software auf Windows Installation der SAS Foundation Software auf Windows Der installierende Benutzer unter Windows muss Mitglied der lokalen Gruppe Administratoren / Administrators sein und damit das Recht besitzen, Software

Mehr

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/13

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/13 UNIVERSITÄT LEIPZIG Enterprise Computing Einführung in das Betriebssystem z/os Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/13 Verarbeitungsgrundlagen Teil 2 Virtual Storage el0100 copyright

Mehr

VIDA ADMIN KURZANLEITUNG

VIDA ADMIN KURZANLEITUNG INHALT 1 VIDA ADMIN... 3 1.1 Checkliste... 3 1.2 Benutzer hinzufügen... 3 1.3 VIDA All-in-one registrieren... 4 1.4 Abonnement aktivieren und Benutzer und Computer an ein Abonnement knüpfen... 5 1.5 Benutzername

Mehr

Erstellen einer PostScript-Datei unter Windows XP

Erstellen einer PostScript-Datei unter Windows XP Erstellen einer PostScript-Datei unter Windows XP Sie möchten uns Ihre Druckvorlage als PostScript-Datei einreichen. Um Fehler in der Herstellung von vorneherein auszuschließen, möchten wir Sie bitten,

Mehr

Handbuch B4000+ Preset Manager

Handbuch B4000+ Preset Manager Handbuch B4000+ Preset Manager B4000+ authentic organ modeller Version 0.6 FERROFISH advanced audio applications Einleitung Mit der Software B4000+ Preset Manager können Sie Ihre in der B4000+ erstellten

Mehr

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes. Binäre Bäume Definition: Ein binärer Baum T besteht aus einer Menge von Knoten, die durch eine Vater-Kind-Beziehung wie folgt strukturiert ist: 1. Es gibt genau einen hervorgehobenen Knoten r T, die Wurzel

Mehr

2. Word-Dokumente verwalten

2. Word-Dokumente verwalten 2. Word-Dokumente verwalten In dieser Lektion lernen Sie... Word-Dokumente speichern und öffnen Neue Dokumente erstellen Dateiformate Was Sie für diese Lektion wissen sollten: Die Arbeitsumgebung von Word

Mehr

Einführung in die Informatik I

Einführung in die Informatik I Einführung in die Informatik I Das Rechnen in Zahlensystemen zur Basis b=2, 8, 10 und 16 Prof. Dr. Nikolaus Wulff Zahlensysteme Neben dem üblichen dezimalen Zahlensystem zur Basis 10 sind in der Informatik

Mehr

Kurzeinführung LABTALK

Kurzeinführung LABTALK Kurzeinführung LABTALK Mit der Interpreter-Sprache LabTalk, die von ORIGIN zur Verfügung gestellt wird, können bequem Datenmanipulationen sowie Zugriffe direkt auf das Programm (Veränderungen der Oberfläche,

Mehr

GFAhnen Datensicherung und Datenaustausch

GFAhnen Datensicherung und Datenaustausch GFAhnen Datensicherung und Datenaustausch In dieser Anleitung wird das Daten Sicheren, das Daten Wiederherstellen und der Datenaustausch zwischen 2 Rechner beschrieben. Eine regelmäßige Datensicherung

Mehr

Grundbegriffe der Informatik

Grundbegriffe der Informatik Grundbegriffe der Informatik Einheit 15: Reguläre Ausdrücke und rechtslineare Grammatiken Thomas Worsch Universität Karlsruhe, Fakultät für Informatik Wintersemester 2008/2009 1/25 Was kann man mit endlichen

Mehr

Zentrale Installation

Zentrale Installation Einführung STEP 7 wird durch ein Setup-Programm installiert. Eingabeaufforderungen auf dem Bildschirm führen Sie Schritt für Schritt durch den gesamten Installationsvorgang. Mit der Record-Funktion steht

Mehr

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen? BITte ein BIT Vom Bit zum Binärsystem A Bit Of Magic 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen? 3. Gegeben ist der Bitstrom: 10010110 Was repräsentiert

Mehr

5 Speicherverwaltung. bs-5.1 1

5 Speicherverwaltung. bs-5.1 1 5 Speicherverwaltung bs-5.1 1 Pufferspeicher (cache) realer Speicher Primärspeicher/Arbeitsspeicher (memory) Sekundärspeicher/Hintergrundspeicher (backing store) (Tertiärspeicher/Archivspeicher) versus

Mehr

1. Übung - Einführung/Rechnerarchitektur

1. Übung - Einführung/Rechnerarchitektur 1. Übung - Einführung/Rechnerarchitektur Informatik I für Verkehrsingenieure Aufgaben inkl. Beispiellösungen 1. Aufgabe: Was ist Hard- bzw. Software? a Computermaus b Betriebssystem c Drucker d Internetbrowser

Mehr

Eigene Dokumente, Fotos, Bilder etc. sichern

Eigene Dokumente, Fotos, Bilder etc. sichern Eigene Dokumente, Fotos, Bilder etc. sichern Solange alles am PC rund läuft, macht man sich keine Gedanken darüber, dass bei einem Computer auch mal ein technischer Defekt auftreten könnte. Aber Grundsätzliches

Mehr

Grundlagen der Informatik (BSc) Übung Nr. 5

Grundlagen der Informatik (BSc) Übung Nr. 5 Übung Nr. 5: Zahlensysteme und ihre Anwendung Bitte kreuzen Sie in der folgenden Auflistung alle Zahlensysteme an, zu welchen jeder Ausdruck als Zahl gehören kann! (Verwenden Sie 'x für Wahl, ' ' für Ausschluß

Mehr

Windows 8 Lizenzierung in Szenarien

Windows 8 Lizenzierung in Szenarien Windows 8 Lizenzierung in Szenarien Windows Desktop-Betriebssysteme kommen in unterschiedlichen Szenarien im Unternehmen zum Einsatz. Die Mitarbeiter arbeiten an Unternehmensgeräten oder bringen eigene

Mehr

Binär Codierte Dezimalzahlen (BCD-Code)

Binär Codierte Dezimalzahlen (BCD-Code) http://www.reiner-tolksdorf.de/tab/bcd_code.html Hier geht es zur Startseite der Homepage Binär Codierte Dezimalzahlen (BCD-) zum 8-4-2-1- zum Aiken- zum Exeß-3- zum Gray- zum 2-4-2-1- 57 zum 2-4-2-1-

Mehr

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:

Name: 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

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Theoretische Informatik SS 04 Übung 1

Theoretische Informatik SS 04 Übung 1 Theoretische Informatik SS 04 Übung 1 Aufgabe 1 Es gibt verschiedene Möglichkeiten, eine natürliche Zahl n zu codieren. In der unären Codierung hat man nur ein Alphabet mit einem Zeichen - sagen wir die

Mehr

Lineare Gleichungssysteme

Lineare Gleichungssysteme Brückenkurs Mathematik TU Dresden 2015 Lineare Gleichungssysteme Schwerpunkte: Modellbildung geometrische Interpretation Lösungsmethoden Prof. Dr. F. Schuricht TU Dresden, Fachbereich Mathematik auf der

Mehr

Mean Time Between Failures (MTBF)

Mean Time Between Failures (MTBF) Mean Time Between Failures (MTBF) Hintergrundinformation zur MTBF Was steht hier? Die Mean Time Between Failure (MTBF) ist ein statistischer Mittelwert für den störungsfreien Betrieb eines elektronischen

Mehr

Einführung in die Algebra

Einführung in die Algebra Prof. Dr. H. Brenner Osnabrück SS 2009 Einführung in die Algebra Vorlesung 13 Einheiten Definition 13.1. Ein Element u in einem Ring R heißt Einheit, wenn es ein Element v R gibt mit uv = vu = 1. DasElementv

Mehr

A1.7: Entropie natürlicher Texte

A1.7: Entropie natürlicher Texte A1.7: Entropie natürlicher Texte Anfang der 1950er Jahre hat Claude E. Shannon die Entropie H der englischen Sprache mit einem bit pro Zeichen abgeschätzt. Kurz darauf kam Karl Küpfmüller bei einer empirischen

Mehr

Zahlendarstellungen und Rechnerarithmetik*

Zahlendarstellungen und Rechnerarithmetik* Zahlendarstellungen und Rechnerarithmetik* 1. Darstellung positiver ganzer Zahlen 2. Darstellung negativer ganzer Zahlen 3. Brüche und Festkommazahlen 4. binäre Addition 5. binäre Subtraktion *Die Folien

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

Wissenswertes über binäre Felder

Wissenswertes über binäre Felder Wissenswertes über binäre Felder Inhaltsverzeichnis Genauigkeit des PC-Taschenrechners 2 Genauigkeit des PC-Taschenrechners ab Windows 7 2 Ausgangspunkt 3 Binäres Feld ohne Vorzeichen-Definition 3 Binäres

Mehr

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige

Mehr

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse 11 13. 501322 Lösung 10 Punkte 50. Mathematik-Olympiade. Stufe (Regionalrunde) Klasse 3 Lösungen c 00 Aufgabenausschuss des Mathematik-Olympiaden e.v. www.mathematik-olympiaden.de. Alle Rechte vorbehalten. 503 Lösung 0 Punkte Es seien

Mehr

Ausgewählte Kapitel eingebetteter Systeme

Ausgewählte Kapitel eingebetteter Systeme Ausgewählte Kapitel eingebetteter Systeme Verfahren zur Bestimmung der WCET Andreas Kaiser Friedrich-Alexander University Erlangen-Nuremberg Übersicht Wieso WCET Berechnung? Methoden zur Bestimmung der

Mehr

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Vermeiden Sie es sich bei einer deutlich erfahreneren Person dranzuhängen, Sie sind persönlich verantwortlich für Ihren Lernerfolg. 1 2 3 4 Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg. Gerade beim Einstig in der Programmierung muss kontinuierlich

Mehr

Windows Small Business Server (SBS) 2008

Windows Small Business Server (SBS) 2008 September 2008 Windows Small Business Server (SBS) 2008 Produktgruppe: Server Windows Small Business Server (SBS) 2008 Lizenzmodell: Microsoft Server Betriebssysteme Serverlizenz Zugriffslizenz () pro

Mehr

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware Datenübernahme von HKO 5.9 zur Advolux Kanzleisoftware Die Datenübernahme (DÜ) von HKO 5.9 zu Advolux Kanzleisoftware ist aufgrund der von Update zu Update veränderten Datenbank (DB)-Strukturen in HKO

Mehr

Daten verarbeiten. Binärzahlen

Daten verarbeiten. Binärzahlen Daten verarbeiten Binärzahlen In Digitalrechnern werden (fast) ausschließlich nur Binärzahlen eingesetzt. Das Binärzahlensystem ist das Stellenwertsystem mit der geringsten Anzahl von Ziffern. Es kennt

Mehr

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden. In einer Website haben Seiten oft das gleiche Layout. Speziell beim Einsatz von Tabellen, in denen die Navigation auf der linken oder rechten Seite, oben oder unten eingesetzt wird. Diese Anteile der Website

Mehr

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0) Peter Koos 03. Dezember 2015 0 Inhaltsverzeichnis 1 Voraussetzung... 3 2 Hintergrundinformationen... 3 2.1 Installationsarten...

Mehr

Grundlagen der Rechnerarchitektur. Einführung

Grundlagen der Rechnerarchitektur. Einführung Grundlagen der Rechnerarchitektur Einführung Unsere erste Amtshandlung: Wir schrauben einen Rechner auf Grundlagen der Rechnerarchitektur Einführung 2 Vorlesungsinhalte Binäre Arithmetik MIPS Assembler

Mehr

Einführung in die Systemprogrammierung

Einfü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

Mehr

Berühmt berüchtigte Softwarefehler. Der Pentium Division-Bug. vorgetragen von: Sebastian Knieschewski

Berühmt berüchtigte Softwarefehler. Der Pentium Division-Bug. vorgetragen von: Sebastian Knieschewski Berühmt berüchtigte Softwarefehler Der Pentium Division-Bug vorgetragen von: Sebastian Knieschewski Inhalt Die Pentium CPU Ein Fehler im Pentium? Divisions-Algorithmus Workarounds Intels Reaktion Weitere

Mehr

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am 14.08.08 Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements von Stephanie Wilke am 14.08.08 Überblick Einleitung Was ist ITIL? Gegenüberstellung der Prozesse Neuer

Mehr