5 Weiterführende Rechnerarchitekturen 5.1 Globale Rechnerklassifikation 5.2 Lokale Prozessor-Klassifikation Befehlssatz Architekturen Stack-Architektur Akkumulator- Architektur Allgemeinzweck-Register-Architekturen Klassifikation nach Umfang und Komplexität der Befehle CISC RISC 5.3 Parallelrechner-Architekturen (Klassifizierung nach Flynn) SISD: Single Instruction Single Data SIMD: Single Instruction Multiple Data MISD: Multiple Instruction Single Data MIMD: Multiple Instruction Multiple Data Ausführungsbeispiele 5.4 Architektur virtueller Maschinen 5.5 Ausblick Folie 193 5.1 Globale Rechnerklassifikation Personal Computer, Mikrorechner: Weitgehende Standardisierung BS: DOS, WINDOWS, OS/2, MAC-OS CISC / RISC - Prozessoren Workstation: Hauptanwendung: Techischwissenschaftlicher Bereich BS: UNIX-Derivate, LINUX RISC-Prozessoren Minicomputer (historisch): Mehrplatzfähig, Prozessrechner, Bürocomputer (Abteilungsrechner) Server: Dateiserver / Rechenserver E/A-orientierte Maschinen Mehrprozessorsysteme Massenspeicher meist redundant Verteilte Server Serverfarmen Großrechner (Mainframe): Einsatz in Rechenzentren Mehrprozessortechnik E/A-Kanäle mit eigenem Prozessor Batch-, Terminal- und Datenbanksysteme Superrechner Vektor- und/oder Parallelrechner, Ein oder mehre Prozessoren, z.b. Cray (SGI) T3D mit bis zu 512 Prozessoren Enge oder lose Prozessorkopplung Rechenintensive Anwendungen in Luftfahrttechnik, Automobilbau, Energiegewinnung, Meteorologie, Forschung Folie 194
5.2 Lokale Prozessor-Klassifikation Hinsichtlich der Art des Befehlssatzes können folgende Architekturen ( Befehlssatz-Architekturen ) unterschieden werden: Stack-Architektur Akkumulator-Architektur Allgemeinzweck-Register-Architekturen (General Purpose Register Architectures GPR) in den Ausprägungen: Register-Register-Maschinen Anwendung: RISC (auch Load-Store-Architektur genannt) Register-Speicher-Maschinen Anwendung: CISC Speicher-Speicher-Maschinen Bei realen Mikroprozessoren wird oft versucht, in eine vorherrschende Befehlssatz-Architektur die Vorteile anderer Befehlssatz Architekturen zu integrieren (Mischformen). Folie 195 Stack- und Akkumulator-Architektur Stack - Architektur CPU hat LIFO-Speicher (Stack), auf den man mit PUSH und POP zugreifen kann Es kann meist nur auf die oberste Speicherstelle des Stacks zugegriffen werden Sehr einfach, effiziente Codeumsetzung bei geklammerten mathematischen Ausdrücken möglich PUSH Op_A ; Op_A von Speicher Stack PUSH Op_B ; Op_B von Speicher Stack ADD ; Addiere obere Werte im Stack POP Op_C ; Op_C (= Op_A + Op_B) von StackSp. implizite Adressierung von A und B bei ADD Akkumulator - Architektur Ausgezeichnetes Register: Akku LOAD und STORE wirken nur auf Akku. Er ist als expliziter Operand an jeder Operation beteiligt. Jede Operation braucht nur eine Adresse Sehr kompaktes Befehlsformat LDA Op_A ; Op_A von Speicher Akku ADD Op_B ; Akku = Akku + Op_B STA Op_C ; Op_C (= Op_A + Op_B) AkkuSp. a a b ALU Ergebnis Speicher Speicher Stack Akku b ALU Ergebnis Folie 196
General Purpose Registers (GPR) - Architektur Register-Register-Architektur - RISC (auch Load-Store-Architektur) alle Operationen greifen nur auf Register zu, nur LOAD und STORE greifen auf Speicher zu 32 512 Register verfügbar einfaches Befehlsformat fester Länge alle Instruktionen brauchen in etwa gleich lange LOAD R1, Op_A ;lade Op_A aus Speicher in R1 LOAD R2, Op_B ;lade Op_B aus Speicher in R2 ADD R3, R1, R2 ;addiere R1 und R2, Ergbn.R3 STORE Op_C, R3 ;speicher R3Op_C (=Op_A + Op_B) Speicher Register a b ALU Ergebnis Register-Speicher-Architektur - CISC (Mischung von Akkumulator- und Load-Store-Architektur) Operationen greifen auf Register und/oder Speicher zu Befehlsformat variabler Länge mächtige Befehle stark unterschiedliche Zeiten für Instruktionsausführung MOV AX, Op_A ; Op_A von Speicher Register AX ADD AX, Op_B ; AX = AX + Op_B MOV Op_C, AX ; Op_C = AX (= Op_A + Op_B) Speicher Register a b ALU Ergebnis Folie 197 Anwendung der Prozessor-Klassen Art des Prozessors / Befehlssatzes CISC Complex Instruction Set Computer Mikroprozessoren Mikrocontroller Transputer DSP Digitale Signalprozessoren RISC Reduced Instruction Set Computer Mikroprozessoren Mikrocontroller Spezialprozessoren Numerische Co-Prozessoren Grafikcontroller / GPU I/O-Prozessoren Vorherrschende Architektur Princeton (Von Neumann) MIMD Harvard Princeton (Von Neumann) Stack-Architekturen / SIMD Princeton / Harvard / SIMD Meist wie Mikrocontroller Folie 198
Argumente für RISC An der Berkeley University wurden Anfang der 80er Jahre in einer höheren Programmiersprache geschriebene Programme untersucht. Dabei, und in weiteren Untersuchungen, stellte man u.a. folgendes fest: 20% des gesamten Befehlsvorrates waren für 60% des Mikrocodes des Steuerwerks verantwortlich, beanspruchten aber nur 0,2% der CPU-Zeit. Maschinenbefehle mit Speicherzugriff (Load, Store, Call, Return, usw.) beanspruchen den Großteil der CPU-Zeit. Einfachere Befehle wie Load, Store, Compare, Add, Sub werden häufiger angewendet als komplexere (anwendungsabhängig!). Komplexe Befehle benötigen eine aufwändigere Decodierung durch das Steuerwerk (i.d.r. mittels Mikroprogramm realisiert), werden also langsamer abgearbeitet. Festverdrahtete Steuerwerke arbeiten schneller als mikroprogrammierte Steuerwerke. Voraussetzung: Kleine Befehlssätze und regelmäßige Befehlsformate. Eingesetzte Compiler verwendeten selten die komplexen Befehle, sondern nur Subsets der umfangreichen Befehlssätze (dadurch werden die Compiler einfacher). Der Einsatz von optimierenden Compilern drängt die Programmierung in Maschinensprache zurück. Folie 199 Vergleich von CISC und RISC CISC Complex Instruction Set Computer Komplexe Instruktionen, Ausführung in mehreren Taktzyklen Jede Instruktion kann auf den Speicher zugreifen Kein oder wenig Pipelining Instruktionen werden von Mikroprogramm interpretiert Instruktionsformat variabler Länge Kompakter Code Viele Instruktionen und Adressierungsarten Die Komplexität liegt im Mikroprogramm Einfacher Registersatz RISC Reduced Instruction Set Computer Einfache Instruktionen, Ausführung in einem Taktzyklus. Nur Lade- und Speicherbefehle greifen auf den Speicher zu Intensives Pipelining Instruktionen werden durch festverdrahtete Hardware ausgeführt Instruktionen alle mit fester Länge Code weniger kompakt Wenige Instruktionen und Adressierungsarten Die Komplexität liegt im Compiler Umfangreiche Registersätze Nach A. S. Tanenbaum Zitat von Antoine de Saint-Exupery: Perfektion ist nicht erreicht, wenn nichts mehr hinzugefügt werden kann, sondern wenn nichts mehr übrig ist, was man weglassen kann. Folie 200
RISC Beispiel: POWER-PC (Apple/MacIntosh) PowerPC 603 Mikroprozessoren: z.b. von IBM als PPC603 Serie und von Motorola als MPC603 - Serie User Programmiermodell (Auszug): 64 Bit 32 oder 64 Bit (je nach Prozessorausf.) Bild: PowerPC ec603e (G2) von Motorola Weitere Beispiele für RISC-Prozessoren: Intel i860, SPARC, Alpha, MIPS R4000 (IBM, Motorola) Quelle: Motorola / 1998 Folie 201 Zusammenfassung der Eigenschaften von RISC Bis zu zweifache Leistung wie CISC bei gleicher Technologie ( Daumenregel, manchmal werden auch höhere Werte genannt). Die Realisierung des Steuerwerks kann durch festverdrahtete Logik erfolgen, da die Befehle einfach sind. Zur Minimierung von Speicherzugriffen werden viele CPU-interne Register vorgesehen. Es werden einfache, schnell zu verarbeitende Maschinenbefehle geschaffen, welche sich besonders gut für Pipelining eignen. Kennzeichen sind: Feste Befehlslänge und feste Bearbeitungszeit. Häufig vorkommende Anweisungen von Hochsprachenprogrammen werden möglichst effektiv auf einfache Maschinenbefehle abgebildet. Compiler für RISC-Prozessoren müssen neben der Umsetzung von Hochsprachen in Maschinenbefehle auch für die korrekte Beschickung und effiziente Ausnutzung der Befehlspipeline und der Register sorgen. Die Komplexität der Mikroprogramme von CISC-Prozessoren wird bei RISC-Prozessoren auf die Maschinenprogrammebene gehoben. Stand der Technik: Pentium (PC) CISC mit RISC-Ansätzen PowerPC (MacIntosh) RISC mit CISC-Erweiterungen Folie 202
5.3 Parallelrechnerarchitekturen M.J. Flynn (1966) betrachtet die Anzahl der gleichzeitig zu verarbeitenden Daten und gleichzeitig ausführbaren Instruktionen (also die Art des Befehlsund Datenstroms) und unterscheidet bei Rechnern genau vier Grundtypen: Single-Instruction, Single Data (SISD): Es gibt nur einen sequentiell abgearbeiteten Befehlsstrom und einen entsprechenden sequentiellen Datenstrom. Single-Instruction, Multiple Data (SIMD): Ein einziger sequentiell abgearbeiteter Befehlsstrom steuert einen mehrfachen parallelen Datenstrom. Multiple-Instruction, Single Date (MISD): Hier würden mehrere Steuerwerke einen einzigen Datenstrom steuern. Multiple-Instruction Multiple Data (MIMD): Hier geschieht die Abarbeitung sowohl befehls- als auch datenparallel. Befehlsstrom Datenstrom Single Data Mulitiple Data Single Multiple Instruction Instruction SISD SIMD MISD MIMD Literaturhinweise: Flynn, M.J.: Computer Architecture. Jones and Bartlet, 1995 Flynn, M.J.: Some Computer Organizations and their Effectiveness. IEEE Transactions on Computers 21, 1972, pp 948-960 Folie 203 SISD-Rechner Leitwerk Speicher Befehlsstrom Datenstrom Informationsfluss beim SISD-Rechner Zu den SISD-Rechnern zählen alle Einzelrechner, die eigenständig zur Lösung ihrer Aufgaben eingesetzt werden, also CISC- und RISC- Rechner die meisten Mikroprozessoren (Intel-Serie bis mindestens 80486) fast alle Mainframe-Computer Fast alle Minicomputer der 80er Jahre. Pipeline-Prozessoren werden allgemein dazugezählt. Bei einem "echten" SISD-Rechner werden auch die I/O-Vorgänge vom Prozessor selbst erledigt oder allenfalls durch intelligente Controller unterstützt. Folie 204
1 1 2 2 Leitwerk 3 Programmspeicher Datenstrom 3 n-1 n-1 Hauptspeicher SIMD-Rechner Befehlsstrom n n Es gibt nur einen Befehlsstrom, der mehrere parallele Datenströme steuert. Es existiert nur ein Leitwerk zur Befehlsentschlüsselung. Es werden parallel mehrere e benutzt. Das Verteilen der Befehlsinformation an die einzelnen Einheiten nennt man Instruction Broadcasting". Jede Verarbeitungseinheit verfügt über einen eigenen bidirektionalen Zugriffspfad zum Hauptspeicher. Damit liegt eine Erweiterung der von Neumann Struktur vor. Beispiele für SIMD-Rechner sind: Vektorrechner, wenn der Vektorrechner parallele e mit parallelem Speicherzugriff besitzt. Werden die einzelnen Komponenten des Vektors dagegen nur nacheinander auf die Stufen einer einzigen Pipeline projiziert, so ist die Maschine ein SISD-Rechner. VLIW-Prozessoren (very long instruction word processor). Ein einziger Befehl kann typischerweise 5 bis 10 Operatoren haben, die über parallel laufende Funktionseinheiten miteinander verbunden werden. Anwendung: Spezialprozessoren zur Komprimierung und Dekomprimierung von Bilddaten eingesetzt. MMX-Einheit von Intel-Prozessoren Folie 205 Finite-Elemente-Simulation auf einem Vektorrechner (Cray) Simulation von Blechumform-Prozessen: Erster Vektorrechner: Cray 1 Folie 206
Beispiel VLIW-Architektur Compiler wertet vorhandene Datenfluss-Informationen zur optimalen Ausnutzung der internen parallelen Einheiten aus. Statische Ansteuerung der Einheiten durch fest reservierte Teile des Instruktionswortes Compiler muss gesamte Parallelisierung vornehmen! Sehr langer Befehlscode, meist 128 oder 256 Bit (bis zu 1024 Bit). Große Speicherbandbreite und umfangreiche Registerbänke erforderlich. Very Long Instruction Word: Unterbefehl 1 Unterbefehl 2 ADD SUB VLIW Verarbeitungsstufen: VLIW holen Unterbefehl n MUL VLIW dekodieren Register lesen Register lesen Register lesen Operation ausführen () Register Schreiben Operation ausführen () Register Schreiben Operation ausführen () Register Schreiben Folie 207 MISD-Rechner Leitwerk 1 Leitwerk 2 Leitwerk 3 Leitwerk n - 1 Leitwerk n Befehlsstrom 1 2 3 n-1 n Datenstrom 1 2 3 Hauptspeicher n-1 n Programmspeicher Mehrere e bearbeiten einen Datenstrom ( Fließbandprinzip ) Struktur erinnert an Pipelining: Die Gesamtaufgabe wird in aufeinanderfolgende Teilschritte zerlegt. Daher werden die Pipelineprozessoren oft als MISD-Systeme bezeichnet (falls man sie nicht SISD zurechnet). Softwaretechnisch umgesetzt ist eine solche Betriebsweise auf Betriebssystemebene beispielsweise in UNIX-Systemen, wenn mittels des "pipe"- Befehls ständig ein Rechenprozess einen anderen mit Daten versorgt. Folie 208
Filtern von Videodaten Beispiel MISD-Pipelinerechner Zum Filtern von Videodaten wird der Gesamtfilter in aufeinanderfolgende Teilfilter zerlegt Jeder Teilfilter wird von einem Pipelineprozessor verarbeitet höchste Verarbeitungsleistungen bei akzeptablem Hardwareaufwand. Kamera Analog/Digital Wandlung Prozessor 1 Prozessor 2 Prozessor 3 Gefilterte Videodaten Folie 209 MIMD-Rechner Leitwerk 1 Leitwerk 2 Leitwerk 3 Leitwerk n - 1 Leitwerk n Befehlsstrom 1 2 3 werk n-1 Rechen- Datenstrom n 1 2 Parallele Bearbeitung von Befehlen und Daten Ein Leitwerk und das von ihm gesteuerte fasst man unter dem Begriff "Prozessor" zusammen Anwendung: Ein moderner PC hat mit Video-Karten, Sound-Karten etc. ein erhebliches Maß an Parallelarbeit implementiert. Der Hauptprozessor selbst hat (ab Pentium bzw. AMD K5) ein erhebliches Maß an Parallelverarbeitung. PCs und Server mit mehr als einer CPU sind Stand der Technik. Mehrprozessorsysteme, Parallelrechnersysteme, Supercomputer. 3 Hauptspeicher n-1 n Programmspeicher Folie 210
Beispiel MIMD: Parallelrechnersysteme Beispiel: Top 500 des Supercomputing (Jahr 2000) Nr. 1: IBM ASCI White SP Power 3. 375 MHz, 8.192 Prozessoren, 4.938 Gflops, Lawrence Livermore Nat. Lab. Verteilter Adressraum Nach Karl, W.: Uni Karlsruhe-Informatik Folie 211 Beispiel MIMD: Sega Spielekonsole Der 68000 Prozessor (16-Bit Prozessor mit 32-Bit Registern, Fa. Motorola) führt das Hauptprogramm aus Dabei nutzt er den Z80-Prozessor (8-Bit Prozessor, Fa. Zilog) für nebenläufige Aufgaben Der 68000-Prozessor lädt Programme in den Z80-Prozessor, welche dann unabhängig vom 68000-Prozessor ausgeführt werden. 68000 Prozessor Z80 Prozessor Hauptspeicher Interface für Spielekassetten Systembus Programmierbarer Sound-Generator Sound-Synthese Baustein Digital/Analog Umsetzer für Audio und Video Interface für Bedienkonsole Folie 212
5.4 Architektur virtueller Maschinen Interpreter Abstrakte Maschinen Eigenschaften der JVM JVM Implementierungen Java Umgebungen Architektur der JVM Interne Architektur Wesentliche Bestandteile Speichermodell Befehlssatz Arithmetik, Floating Point Sprünge und Schleifen Methodenaufrufe Folie 213 Compiler und Interpreter Compiler Hohe Ausführungsgeschwindigkeit des erzeugten Programms. Quellcode ist vor Manipulationen geschützt, da er zur Programmausführung nicht benötigt wird. (Besserer Urheberschutz) Fehlersuche schwieriger, da die symbolischen Bezüge zum Quelltext bei der Compilation verloren gehen. Zusätzliche Arbeitsschritte Compilation, Link, Load erforderlich (erschwert die Programmentwicklung). Verwendung vorgefertigter Teillösungen aus Programmbibliotheken leicht möglich (Modulare Programmierung). Interpreter Niedrige Ausführungsgeschwindigkeit, da der Quelltext immer wieder neu interpretiert wird. Programme können nur im Quelltext weitergegeben werden (Sicherheitsmängel, fehlender Urheberschutz) Debugging einfach (Einzelschrittausführung, Ansehen von Variablenständen während der Ausführung, Tracing etc.) Programmentwicklung einfach, da in Entwicklung befindliche Programme unmittelbar ausgeführt werden können. Verwendung vorgefertigter Teillösungen aus Programmbibliotheken nur bedingt bzw. gar nicht möglich. Folie 214
Interpreter in virtuellen Maschinen Verzahnung von Übersetzung und Ausführung des Programms Übersetzung in Interpreter-Code Interpreter interpretiert zur Laufzeit den Interpreter-Code Prozessor + Interpreter = abstrakte oder virtuelle Maschine Vorteile: Portablilität ( Übertragbarkeit) Fehlersuche und -diagnostik Speicherplatzersparnis Nachteile: geringere Effizienz (aber: dynamische Übersetzung, JIT) Interpreter sind dann sinnvoll, wenn aufwendiges Laufzeitsystem vorliegt. Compiler erzeugen Programme. Interpreter führen Programme aus. Folie 215 Abstrakte Maschinen Abstrakte Maschinen interpretieren einen abstrakten Befehlssatz. Beispiele für abstrakte Befehlssätze zur Realisierung von (UCSD-) Pascal, PROLOG, LISP, FORTH, Smalltalk und Java. Programme werden in Befehle der abstrakten Befehlssätze übersetzt, nicht direkt in Maschinenbefehle realer Maschinen. Z.B. PASCAL Abstrakte Maschine Reale Maschine Übersetzung Interpretation, Übersetzung oder Realisierung in Hardware Lediglich der Interpreter der abstrakten Befehlssätze muss für verschiedene Maschinen jeweils neu erzeugt werden. Nachteil: niedrigere Ausführungsgeschwindigkeit. Folie 216
Eigenschaften der JVM Die JVM ist eine Kellermaschine / Stackmaschine Operationscodes in einem Byte kodiert ( Bytecode) Typische Befehle: lade integer auf den Stack, addiere die obersten Stackelemente, starte nebenläufige Ausführung, synchronisiere nebenläufige Ausführung, Befehle zur Realisierung der Objektorientierung Byte-Code ist sehr kompakt (ca. 1/3 des Speicherbedarfs von RISC-Code). Besonders interessant für eingebettete Systeme interessant, bei denen Programme zusammen mit den Prozessor auf einem Chip gespeichert werden müssen. Anwendungen, bei denen Programme über das Internet geladen werden. Folie 217 JVM Implementierungen Java Java Java Java JVM Byte Code Byte Code Java JVM Byte Code Byte Code Just-In-Time Compiler Java JVM Byte Code Byte Code Direkte Ausführung Interpreter Binärer Maschinencode für CPU x Betriebssystem Irgendeine CPU Betriebssystem CPU x Betriebssystem Z.B. picojava (Fa. Sun) Folie 218
Prozessor für Network Computer Pico Java (Fa. Sun) Internet Chip für Netzwerk-Anwendungen (PDAs, Pagers etc.) Zellular-Telefon und Telekommunikations-Prozessoren Traditionelle "embedded" Anwendungen Anforderungen an Produkte für "embedded"-märkte Robuste Programme Graceful Recovery vs. Crash Komplexe Programme durch Teams entwickelt OO-Sprachen und -Entwicklungsumgebungen Wiederbenutzung von Codes von einer Produktgeneration zur nächsten Portabler Code Geringe Systemkosten (Prozessor, ROM, DRAM etc.) Hohe Rechenleistung Geringe Leistungsaufnahme, d.h. geringe Erwärmung der CPU Folie 219 JAVA - Umgebungen Folie 220
Interne Architektur der JVM Folie 221 Wesentliche Bestandteile der JVM method area Einmal vorhanden je virtueller Maschine, wird gemeinsam von allen Threads benutzt; enthält klassenspezifische Daten (Typinformation). heap Einmal vorhanden je virtueller Maschine, wird gemeinsam von allen Threads benutzt; enthält die dynamisch erzeugten Objekte. Java VM stacks Threadspezifisch. Enthält Zustand von nicht-nativen Methodenaufrufen, deren lokale Variablen, Übergabeparameter, den möglichen Rückgabewert sowie Methoden-interne Berechnungsergebnisse. pc registers Threadspezifisch; enthält für jeden Zeitpunkt der Ausführung einer nicht-nativen Methode die Adresse der derzeit ausgeführten Instruktion. Während der Abarbeitung nativer Methoden ist der Wert auf undefined gesetzt. Konkrete Größe des virtuellen pc-registers hängt von der Adresslänge der realen Plattform ab. native method stack Implementierungsspezifischer Speicherbereich zur Behandlung von nativen Methodenaufrufen. runtime constant pool Klassen- oder Schnittstellenspezifisch. Enthält verschiedene Konstanten, die zur Übersetzungszeit feststehen und in der constant_pool Tabelle der class-datei abgelegt sind. Die Funktion dieses Bereichs ähnelt dem einer konventionellen Symboltabelle. Folie 222
JVM Instruktionssatz und Datentypen Java Instruktions-Satz gut 200 OpCodes (jeweils 8 Bits) 25 Variationen 3 reservierte OpCodes 0, 1, 2, 3,... Operanden keine Register-Spezifikationen elementare und komplexe Instruktionen lokale Variable relativ zu Basiszeiger sehr kompakter Code ( ~ 1.8 Bytes) Datentypen byte short integer long float double char object returnaddress Folie 223 Speichermodell der JVM Folie 224
Struktur des Befehlssatzes Folie 225 Arithmetik mit der JVM Folie 226
JVM Laufzeitumgebung: Floating Point (IEEE 754) Folie 227 Sprünge und Schleifen Folie 228
Methodenaufrufe Folie 229 5.5 Ausblick Rechnerarchitekturen Vermehrte Bedeutung von Multimediaoperationen: Verarbeitung von Datenströmen. Zusätzliche Instruktionen und/oder spezielle Recheneinheiten. Mediaprozessoren (Signalprozessoren, Videoprozessoren). VLIW-Prozessoren: Explizite Parallelität in den Instruktionen. Einfachere Hardware, komplexere Compiler. Vor allem für regelmäßige Programme (Multimediaverarbeitung) geeignet. Mehrprozessorsysteme Simultanes Multithreading (Hyperthreading) Zwei, vier oder noch mehr virtuelle CPU-Kerne auf einem Chip Multi-Core-Designs Zwei, vier oder noch mehr komplette Prozessoren auf einem Chip Folie 230