Komponenten und Architekturen Skript Vorlesung und Übung (Bilder und Übungsmaterialien der Professur nicht enthalten) Inhaltsverzeichnis 1. 2. 3. Einführung .......................................................................................................................... 4 1.1 Begriffsbildung ............................................................................................................ 4 1.2 Aufgaben und Ziele von Rechnerarchitekturen ........................................................... 6 1.3 Leitlinien und Phasen des Rechnerentwurfs ................................................................ 6 1.4 Phasen des Rechnerentwurfs ....................................................................................... 7 1.4.1 Phase 1: Anforderungsanalyse und –definition .................................................... 8 1.4.2 Phase 2: Definition der Globalstruktur (System Level Design) ........................... 9 1.4.3 Phase 3: Definition der Befehlssatzebene (ISA Level Design) ............................ 9 1.4.4 Phase 3*: Auswahl von CPU- und Verarbeitungskomponenten ........................ 10 1.4.5 Phase 4: Definition der Mikroarchitektur (Micro Architecture Design) ............ 10 1.4.6 Phase 5: Hardware-Design ................................................................................. 11 1.4.7 Phase 6: Prototyp ................................................................................................ 11 1.4.8 Phase 7: Übergabe in die Produktion ................................................................. 12 1.4.9 Begleitende Architekturüberprüfung.................................................................. 12 Grundlagen, Architekturklassen und –merkmale von MP ............................................... 13 2.1 Allgemeines zur MP-Architektur .............................................................................. 13 2.2 Von-Neumann-Rechner, Harvard-/ Princeton-Architektur ....................................... 13 2.3 Möglichkeiten der Klassifizierung ............................................................................ 14 2.3.1 Rechnerklassifikation nach Flynn ...................................................................... 14 2.3.2 Erlanger Klassifikationssystem ECS .................................................................. 15 2.3.3 Klassifizierung nach Giloi .................................................................................. 17 2.3.4 Architekturklassen bei Prozessoren.................................................................... 17 Grundkomponenten von Prozessoren............................................................................... 19 3.1 Hardwaregrundlagen, Komponenten ......................................................................... 19 3.1.1 Schaltnetze ......................................................................................................... 19 3.1.2 Schaltwerke ........................................................................................................ 19 3.2 Leitwerke ................................................................................................................... 19 3.2.1 Allgemeines ........................................................................................................ 19 3.2.2 Mikrobefehle und Mikroprogramme .................................................................. 20 3.2.3 Mikrobefehlserzeugung ...................................................................................... 21 3.3 Varianten von Rechnerarchitekturen ......................................................................... 23 3.3.1 Befehlssatzarchitektur (ISA) vs. Mikroarchitektur ............................................ 23 3.3.2 CISC-Prozessoren und Mikroprogrammierung ................................................. 23 3.3.3 Entstehung der RISC-Technologie ..................................................................... 24 3.3.4 Phasenpipeline-Mikroarchitekturen ................................................................... 27 2 3.4 4. Rechenwerke ............................................................................................................. 30 3.4.1 Addierer .............................................................................................................. 31 3.4.2 Subtrahierer ........................................................................................................ 31 3.4.3 Multiplizierer ...................................................................................................... 32 3.4.4 Dividierer ........................................................................................................... 33 Übung ............................................................................................................................... 34 4.1 Materialien ................................................................................................................. 34 4.2 Adder ......................................................................................................................... 34 4.2.1 Halfadder (2, 2) ohne Carry In ........................................................................... 34 4.2.2 Fulladder (3, 2) mit Carry In .............................................................................. 34 4.2.3 Ripple Carry Adder ............................................................................................ 35 4.2.4 Manchester Carry Chain ..................................................................................... 35 4.2.5 Carry Skip Adder ............................................................................................... 36 4.2.6 Carry Look Ahead Adder (CLA) ....................................................................... 36 4.2.7 Carry Select Adder ............................................................................................. 37 4.2.8 Serial Adder ........................................................................................................ 37 4.3 Selbst zu entwerfende Komponente .......................................................................... 38 4.3.1 Bedingungen und Hinweise ............................................................................... 38 4.3.2 Eigene Komponente ........................................................................................... 38 4.4 Prozessoren ................................................................................................................ 40 4.4.1 Alignment ........................................................................................................... 40 4.4.2 Schaltung gegen Spikes ...................................................................................... 40 4.4.3 Dauer von Maschinenbefehle → CPI................................................................. 40 4.4.4 Pipeline Aufgabe 2 ............................................................................................. 40 4.4.5 Pipeline Aufgabe 4 ............................................................................................. 41 4.4.6 Pipeline Aufgabe 5 ............................................................................................. 41 4.4.7 Score-Boarding................................................................................................... 42 4.4.8 Tomasulo ............................................................................................................ 42 4.4.9 DLX Aufgaben aus Teil 2 .................................................................................. 43 4.5 Prüfungsinhalte .......................................................................................................... 44 3 1. 1.1 Einführung Anforderungen an Computerleistung wachsen mit enormer Geschwindigkeit Rechnerarchitekten und Chipentwerfer stehen vor der Herausforderung o immer kompaktere Computergenerationen, o mit spektakulär erscheinender Systemleistung, o zu einem vertretbaren Preis, o in zunehmend kürzeren Abstand auf den Markt zu bringen nicht nur Computer- und Chipentwickler, auch Wirtschaftsinformatiker, IT-Spezialisten, Marketing-Fachleute und Anwender müssen sich mit Rechnerarchitekturen auseinandersetzen → fachliche Beurteilung von IT-Entscheidungen wichtig: im globalen Umfeld vor allem wirtschaftliche Erfolgskriterien Prozessor-/Rechnerentwurf, immer höheres Integrationsniveau Aspekte des Rechnerentwurfs sind vielfältig: o Befehlssatzentwurf o funktionelle Organisation o Logikentwurf o Implementierung (z.B. Schaltkreisentwurf, Packaging, Spannungsversorgung, Kühlung, …) Optimierung eines Entwurfs muss über alle Ebenen erfolgen (Hardware, Software, Systementwurf → Layout → fertiges Produkt) Kenntnisse: Technologie, Compiler, OS, Logikentwurf, GT, … Begriffsbildung frühere RA-Definition umfasste nur die Sicht des Programmierers auf die konzeptionellen und funktionalen Eigenschaften des Systems interne Organisationsstruktur und Informationsfluss blieben unberücksichtigt Architekturbeschreibung eines Rechners sollte insbesondere die Möglichkeit seiner Programmierschnittstelle ausdrücken o Maschinenbefehlssatz o Registerstruktur o Adressierungsmodi o Behandlung von Interrupts durch den Programmierer wird heute als Befehlssatzarchitektur (ISA, Instruction Set Architecture) bezeichnet Moderne RA-Definition umfasst heute o Analyse, o Bewertung, o Entwurf, o und Synthese von Rechnern und Komponenten fächerübergreifend, dazu folgende Aspekte berücksichtigen: o strukturelle o organisatorische o implementierungstechnische diese Aspekte sind zu untersuchen auf o globaler Systemebene o Maschinenbefehlssatzebene o Mikroarchitekturebene 4 Rückkopplungen, Wechselwirkungen → Informatik, Ingenieurund Naturwissenschaften, Mathematik (siehe Bild K+A-1_F 1) Vorteile dieser Betrachtungsweise: o Begriffsmodell ist nach Teilbereichen und Beschreibungsebenen strukturiert o lässt sich auf existierende oder zu entwickelnde RA (Rechnerarchitekturen) abbilden o lässt leicht Teilprobleme benennen, die beim Vergleich oder Untersuchung vorliegender Rechner oder beim Entwurf neuer zu lösen sind o Modell erlaubt, erforderliches Spezialwissen, benötigte Analyse- und Entwurfstechniken und verfügbare Tools den zu bearbeitenden Teilaufgaben zuzuordnen RA hat folgende Teilbereiche abzudecken o Struktur: Eigenschaften, wie z.B. Zahl der Prozessoren in einem System oder Aufbau der Speicherhierarchie o Organisation: Steuerung und Vor- bzw. Nachteile logischer Organisationsformen z.B. für Caches o Implementierungstechnik: Möglichkeiten und Probleme der konkreten Realisierung bestimmter Struktur- und Organisationsformen und erzielbarer Leistung „Rechnerarchitekt“ hat Entscheidungen innerhalb von drei Beschreibungsebenen zu treffen: o Systemebene (System Level Architecture), Entscheidungen beziehen sich auf die Konfiguration von Prozessoren, Speicher, Verbindungs- und E/A-Systeme o Befehlssatzebene (ISA-Level), Entscheidungen betreffen hier Befehlssatz eines Computers (Zielrichtung?) (CISC, RISC, VLIW), sind für Software des Systems sichtbar, beeinflussen vor allem Zusammenarbeit des Systems mit OS und Compilern o Mikroarchitekturebene (Microarchitecture Level), Entscheidungen beziehen sich auf Prozessorimplementierung, nur teilweise für Systemsoftware sichtbar, dienen der Optimierung der Leistungseigenschaften und technologischen Aspekte des Systems (siehe Bild K+A-1_F 2) Nutzen des Begriffsmodells: o Gliederung nach Ebenen und Teilbereichen erlaubt schnellen Übergang von sehr speziellen Architekturkriterien zu abstrakteren und globalen Fragestellungen o Überschneidungen mit anderen Fachdisziplinen und Teilbereichen der RA auf unterschiedlichen Abstraktionsebenen erkennbar und je nach Anforderung auswertbar o Begriffsmodell verkörpert gleichermaßen Gerüst und äußeren Rahmen für systematische Auseinandersetzung mit analytischen und synthetischen Fragen der RA o für Behandlung detaillierter Aufgabenstellungen bei Analyse und Entwurf von Rechnersystemen, außerdem Methoden und Verfahren zur Klassifikation, Beschreibung, Modellierung von Rechnern und deren internen Verarbeitungsabläufen erforderlich o RA und beteiligte Fachrichtungen ergänzen sich o Ist RA zukunftsfähig? Neue Anforderungen wegen immer größeren Datenmengen (Multimedia, Internet) 5 1.2 1.3 Aufgaben und Ziele von Rechnerarchitekturen Rechnerarchitektur als praxisnahe Forschungsdisziplin, folgende Schwerpunktaufgaben: o Analyse der Architekturen existierender Computersysteme und Rechnerbausteine wie Prozessoren, Speicher, Logikbausteine, Verbindungsstrukturen, E/ASubsysteme, Peripherieansteuerung o Klassifikation von Rechnerarchitekturen o Beobachtung der Evolution von Rechnerfamilien und Architekturklassen o rechtzeitiges Erkennen erfolgversprechender neuartiger Ansätze, Verarbeitungsprinzipien und Überprüfung auf Umsetzbarkeit o Entwurf und Synthese leistungsfähiger, universeller und/oder spezialisierter Rechnersysteme aus neuen oder vorhandenen Standard- oder Spezialbausteinen; dabei Anwendung leistungsfähiger Entwurfsmethoden und CAD o Umsetzung von Leistungsanforderungen, die heute weitgehend von der Software und den Anwendungsbereichen vorgegeben werden, in geeignete Strukturen und Organisationsformen für Rechner und Komponenten (SoC) wichtige Ziele von Rechnerarchitekturen und –entwicklungen: o weitere Leistungssteigerung durch Architekturverbesserung o Erfüllung anerkannter Qualitätskriterien für Entwurf und Realisierung o Steigerung der Benutzerfreundlichkeit, z.B. Hardware-Komponenten für die MMK (Mensch-Maschine-Kommunikation: Benutzeroberfläche, Sprache, Animation, Video, VR, …) o Entwurf evolutionsfähiger Architekturkonzepte, die über einen längeren Zeitraum zu konkurrenzfähigen Implementierungen führen können → Reduzierung der durchschnittlichen Entwicklungskosten o Förderung sinnvoller und zukunftssicherer Industriestandards (nicht zu Lasten der Entwurfsziele und –qualität) o Streben nach ausgewogenen, in allen HW- und SW-Komponenten aufeinander abgestimmten Systemen o Nutzung von Synergie-Effekten mit Anwendungsgebieten im Sinne des Begriffsmodells, noch bessere Gesamtlösung o intensiveres Zusammenwirken mit Anwendern und Systemanalytikern o Berücksichtigung neuer Ergebnisse und Philosophien aus dem Softwarebereich Leitlinien und Phasen des Rechnerentwurfs Rechnerentwurf erfolgt entsprechend den Beschreibungshierarchien einer hierarchischen Vorgehensweise, 2 Wege: o Top-Down, Entwurf der Globalstruktur → Entwurf der Befehlssatz- und Mikroarchitekturebene → Festlegung der Logikebene und der Technologie o Bottom-Up, verfügbare Schaltkreistechnologie bzw. erhältliche Baustein-Basis der Architektur → Entwurfsziel ist die Gesamtstruktur in der Praxis gemischte Strategien statt rein sequentiellen Ablauf auch mehrere Phasen parallel bearbeiten Rechnerentwurf ist ein flexibel organisierter Prozess o Teilaufgaben untergliedern o Änderungen in der Reihenfolge o Anpassung an konkrete Entwurfsumgebungen o Reaktion auf technologische Anforderungen 6 1.4 o Beobachtung von Marketingvorgaben allgemeine Gestaltungsrichtlinien für Rechnerentwurf o Ausgewogenheit: Systemkomponenten in Leistung und Kosten aufeinander abstimmen o Verständlichkeit: überschaubare Funktionalität des Systems, Nachvollziehbarkeit des Systemverhaltens, steigende Komplexität erfordert umfangreiche intelligente und ergonomische Unterstützungs- und Hilfswerkzeuge o Konfigurierungsflexibilität, Offenheit, Skalierbarkeit: Anpassung des Systems in Funktion und Leistung an die Wünsche der Nutzer und Anforderungen der Softwareumgebung o Berücksichtigung von Industriestandards und Kompatibilität: sinnvolle Standards nutzen bereits im Systementwurf (Zielleistung und Funktionalität des Systems nicht beeinträchtigen) o Rapid Prototyping: schnelle Verfügbarkeit von Zwischenergebnissen (Simulationen, Modelle) → Evaluierung → Grundlage für weiteres Vorgehen o Systemdenken und Kooperation beim Rechnerentwurf notwendig, Anforderungen aus vielen Bereichen (Hard-, Software, Kosten, Technologie, Stromverbrauch, …) aktuelle technologische Trends: o Bedeutungsrückgang von traditionellen Großrechnern mit herstellerspezifischen OS o Konzentration auf Arbeits(platz)rechner, Server, tragbare Systeme, herstellerübergreifende OS, Standardisierung (GUI, HW (Busse), OS, …) o Behauptung von Superrechnern (Vektor-, Multiprozessorarchitektur) o starke Zunahme paralleler Strukturen o Vernetzung, Kommunikationsfähigkeit, Parallelisierung von Anwendungssytemen o intelligente Kommunikation zwischen Mensch und Maschine o neue Entwicklungen im industriellen Bereich (Robotik) o Architektur-Philosophie für CPU: CISC ↔ RISC o Steigerung Integrationsdichte o Komplexe Architekturen auf einem Chip Phasen des Rechnerentwurfs wichtige Trends, die sich auf die Rechnerarchitektur und damit auch auf die Phasen des Entwurfs auswirken Internet-Anwendungen: o nahezu gigantische Informations- und Datenmengen (hunderte Terabyte pro Tag, 2002 insgesamt 5 Exabyte) o neben Schrott auch seriöse Anwendungen z.B. öffentliche/ kommunale Dienstleistungen, Suchmaschinen, Hot Spots → Probleme mit der Bandbreite und Prozessorleistung o Zahl der vernetzten Rechner steigt ständig o gewisse Homogenisierung → Lösungen des Internets auch im Intranet Net-PC: nach anfänglicher Euphorie jetzt wenig relevant, weil Rechenleistung/ Speicherplatz geometrisch klein, low-power, billig (auch das Geräuschargument (Platten, Lüfter) spielt geringe Rolle) Internet Appliances: z.B. Smart Cards mit MC und Flash, MP3-Player, UMTS, Datenraten bis 2MBit/s → SoC 7 1.4.1 Internet-Server: Leistungsfähigkeit → hochparallel, zuverlässig, Prämisse ist RAS (reliability, availability, serviceability) zum RASUM ( …, usability, manageability) Software-Schnittstellen (Einheit von HW und SW): multimediafähig, GUI, objektorientierte Programmiersprachen Video/3D-Graphik: schnellste Graphikverarbeitung → sehr rechenintensiv, innovative HW/SW-Lösung Phase 1: Anforderungsanalyse und –definition Hier wird der Entwurfsrahmen abgesteckt, besonders zu klären: wer stellt Entwurfsanforderung? o das technologische Marketing: Markt, Standards, Trend-, Konkurrenzanalyse o die Entwicklungsabteilung: Berücksichtigung bereits laufender, geplanter, notwendiger interner Komponenten-/ Systementwicklungen o der Kunde: Speziallösungen, -anforderungen, Software-Anregungen, spezifische SW-Kompetenz, Anwendungs-Know-how o die Produktionstechnologie: vorhandene, erwartete VLSI-Produktionsprozesse, Baugruppen, Packaging-/ Gehäusung-, Kühltechnologie, Stromversorgung wie ist das zu entwickelnde System einzuordnen? o Untersuchung möglicher Einteilungskriterien (Preis, Leistung, Technologie) o Entwurf eines kompletten Rechnersystems oder einzelner Komponenten o Verwendung vorhandener und/ oder neu zu entwickelnder HW-SW-Module o Einsatzgebiet (z.B. Universal-, Spezialrechner, vorhandene/ neue (OS-)SW, Anwendungs-SW, Transaktionsverarbeitung) welche Leistungsanforderungen soll das Zielsystem erfüllen? o Vergleich von Entwicklungs-, Marketing-, Kundenvorstellungen o Abschätzung der zum Zielzeitpunkt erforderlichen Leistung (dabei ca. ½ bis 3 Jahre Entwicklungshorizont, je nach Architekturphilosophie, Projektumfang, Innovationsgrad) o Funktionalitätsanforderungen o Aufgabenspezifische Anforderungen an HW und SW o Real-time-Anforderungen o E/A und Kommunikation bei Vielzahl von Schnittstellen (Platten und andere Laufwerke, drahtlose/ -gebundene Interfaces wie WLAN und USB) o Zuverlässigkeit, Fehlertoleranz (MTBF, MTTR, MTBSC), Umgebungsanforderungen Kosten, Ressourcen, Planung o Projektumfang in Personenjahren, Anteil der Eigen- und Fremdentwicklungen o Projektleitung, -organisation, beteiligte Partner/ Einrichtungen/ Behörden o Abschätzen der Entwicklungskosten (HW, SW, Firmware, Forschung, Produktion, Prozesstechnologien, Ressourcen) o globale Festlegung der Entwurfsressourcen (Rechner, SW, Tools, …) Ergebnisse der ersten Phase fließen in verbindliche Spezifikationen ein. Angestrebt wird ein Optimum zwischen Entwicklungskosten, Leistungszielen, Zeitplan. 8 1.4.2 1.4.3 Phase 2: Definition der Globalstruktur (System Level Design) Festlegung der globalen Struktur des Systems Umsetzung der aus Phase 1 übernommenen Anforderungsspezifikationen in technologisch, kostentechnisch und zeitlich machbare Konzepte → Festlegung welche Systembestandteile als Reuse- bzw. Neu-/ Eigenentwicklungsteile benötigt werden → Systementwurf Globalentwurf bildet Grundlage für erste Abschätzung hinsichtlich der Erfüllung der Anforderungen, eventuell Modifikation der Spezifikation oder des Globalentwurfs möglichst (idealer Weise) gleichzeitig dazu Definition/ Erstellung/ Beschaffung der endgültig benötigten Simulations- und Entwicklungswerkzeuge soweit bereits möglich Definition globaler Systemschnittstellen zwischen den Komponenten (untereinander) und zur (OS-) Systemsoftware Phase 3: Definition der Befehlssatzebene (ISA Level Design) falls lediglich Auswahl und keine Entwicklung von CPUs bzw. sonstigen Komponenten (z.B. Coprozessor), Phase 3* Definition der Philosophie des Befehlssatzes o RISC, CISC, Kombination von beiden, alternatives Design o Einfluss von Leistungsvorgaben auf den Befehlssatz → Zyklen pro Befehl o Speichermodell (Load/ Store, Register-Stack-Orientierung, Speicheroperanden, Anzahl der Operandenadressen je Befehl, Mischung von Speicher- und Registeroperanden in Befehlen usw.) o Festlegung, welche Aufgaben durch Maschinenbefehle unterstützt werden, welche Aufgaben vom Leitwerk, welche vom Compiler zu übernehmen sind o Festlegung, wie offen die HW für den Programmierer sein soll, Klärung welche Befehle nötig sind, damit er z.B. im Compiler auf die HW zugreifen kann (Manipulation von MMU, Cache-, Pipelinesteuerung, Beeinflussung interner Parallelität, Verändern der Befehlsreihenfolge) o Unterstützung von Techniken zur Leistungssteigerung durch den Befehlssatz: Parallelität (Synchronisation, Kommunikation, Datenzugriff), Vektorverarbeitung, Programmiersprachen, OS-Unterstützung o Festlegung der Registersätze des Prozessors o Definition von modifizierbaren CPU-Statusinformationen o Festlegung möglicher HW- und SW-Unterbrechungstypen Definition des Befehlssatzes o Festlegung des Befehlssatzformates (OPCODE, Länge, Bitgruppen variabel oder fest) und der direkt unterstützten Datenformate o Definition der Beschreibungssprache für den Befehlssatz: bei Mikroprogrammierung Nutzung der Mikroprogrammsprache zur algorithmischen und logischen Beschreibung des Befehlsverhaltens bei HW-Realisierung des Befehlssatzes geeignete Sprache zur algorithmischen und logischen Verhaltensbeschreibung der Befehle, gegebenenfalls kompletten Interpreter angeben (auch später nutzbar, z.B. HW-Synthese, Phase 5) o Festlegung von Befehlsgruppen o Definition der einzelnen Maschinenbefehle: Format, Beschreibung o Simulation des Befehlsabarbeitungszyklus durch geeignete Modelle 9 1.4.4 1.4.5 Phase 3*: Auswahl von CPU- und Verarbeitungskomponenten wird i.a. (Europa) oft anstelle Phase 3 absolviert Auswahl der CPU und anderer für die Verarbeitung benötigten Komponenten (Coprozessoren, Graphik, E/A-Controller) und Subsysteme für die Auswahl Anwendung technologischer und kostenorientierter Kriterien, Beachtung von Architekturleitlinien und technologischen Rahmenbedingungen sowie die unter Phase 3 und 4 genannten Punkten große Sorgfalt und architektonisches Know-how Phase 4: Definition der Mikroarchitektur (Micro Architecture Design) Hier Festlegung, wie die durch die technologischen Rahmenbedingungen und allgemeinen Architekturrichtlinien aus Phase 2 und 3 vorgegebenen Entwurfsziele in eine Mikroarchitektur umgesetzt werden können (Phase entfällt bei 3*). Zwischen Phase 3 und 4 Überlappungen und Wechselwirkungen möglich. Umsetzung der Architekturphilosophie und Detail-Spezifikation der CPU-Umsetzung: Definition der Ausführungssteuerung im Leitwerk (Control Unit), z.B. HW, Mikrocode, gemischte Lösungen, Delegation von Steuerungsaufgaben an den Compiler Aufbau der Phasenpipeline zur Befehlsabarbeitung o Welche Stufen vorgesehen? o Zwischen den Stufen Register für Zwischenergebnisse vorsehen? o Ausgewogenheit der Phasen hinsichtlich ihrer Komplexität (gleichlange Ausführungsdauer) o Welche Befehle überspringen eine/ mehrere Stufen? o Wie Auslastung der Pipeline bei Sprungbefehlen Steigerung der Abarbeitungs- und Ausführungsgeschwindigkeit, z.B.: o Festlegen der Taktzykluszeit o Ausführung der meisten Befehle in einem oder mehreren Taktzyklen (je nach Architekturphilosophie), entsprechend Abstimmung des Taktzyklus, eventuell entfernen komplexer Befehle, um Zykluszeit einhalten zu können → Speicherschnittstelle schnell genug? o Superskalares Rechenwerk (Parallelität der Befehlsverarbeitung und –ausführung, statisches und dynamisches Scheduling) erforderlich/ wünschenswert? → wenn ja, wie erfolgt dann das Holen, Dekodieren, Auswählen und Verteilen der Befehle auf die Funktionseinheiten (FE) [statisches Scheduling: starten mehrerer Befehle (issue) in einer logischen Reihenfolge und Ausführung (in-order execution)] [dynamisches Scheduling: Auswahl aus einem Pool bereits decodierter Befehle, starten und ausführen out-of-order] o Erhöhung der Pipeline internen Taktung möglich? → Konsequenzen o CPU als Multiprozessorbaustein verwendbar? Auswirkungen auf Mikroarchitektur Mechanismen zur Ausführungssteuerung und Befehlsauswahl (z.B. ScoreboardTechniken, Ressourcen-Verfügbarkeit, Datenabhängigkeitsund Kontrollflusstechniken, usw.) [Scoreboard verwaltet über mehrere zentral im Leitwerk realisierte HW-Tabellen den Bearbeitungsstand bereits decodierter Befehle. (Zustände jedes Befehls: Start (issue), Operanden gelesen, Operation ausgeführt, Ergebnis geschrieben) Das Scoreboard prüft dabei die Verfügbarkeit geeigneter FE, ob die benötigten Operanden bereitstehen, von welcher FE sie kommen, ob Ergebnisregister frei sind, wer diese blockiert …] 10 1.4.6 Art und Weise der Implementierung von Rechenwerken und FE → Standardbausteine verwendbar? Einsatz arithmetischer Pipelines für bestimmte Befehle? Welches Speicherdesign unterstützt den bisher vorliegenden Entwurf am besten? o ein oder mehrere interne und/ oder externe Caches? o Arbeitsspeicher-Entwurf Verbindungsstruktur für das CPU-Speicher-Subsystem (z.B. Art, Anzahl und Struktur der lokalen Busse auf dem CPU-Chip und zwischen Chips) Festlegung der für die Prozessorentwicklung genutzten VLSI-Technologie, z.B.: o Strukturbreiten, Schaltzeiten, Gatterlaufzeiten, elektrisches Verhalten, usw. o Bestimmung der maximal möglichen Anzahl von Gattern pro Chip Partitionierung der Mikroarchitektur, mögliche Aspekte dabei: o optimale Nutzung von Chipfläche/ Gatteranzahl o Einteilung in Funktionsgruppen (FG) wie Leitwerk, Rechenwerk mit FE, Mikroprogrammwerk, Registersätze, MMU, Cache(s), Coprozessoren o Single-Chip-Prozessor oder Chipset, Kostenabschätzungen für unterschiedliche Partitionierung und verwendete Prozesstechnologie o Welche FG können mit auf CPU-Chip angeordnet werden? Dabei verschiedene Kombinationen/ Kompromisse möglich? o Abschätzung Gatteranzahl/ Modul inklusive Verbindungshardware o Welche Busse und Signalverbindungen werden zwischen FG benötigt? o Wahl eines Maximums (bzgl. Leistung) aus der Menge der Partitionierungslösungen. Welche führt zur größten Funktionalität bzw. Flexibilität? Setzen von Prioritäten, Entscheidung für (möglichst) optimale Lösung Phase 5: Hardware-Design Umsetzung der bisher getroffenen Entwurfsentscheidungen in HW, bis hin zum Board: endgültige Festlegung des neu zu entwickelnden Chips HW-Struktur des Gesamtsystems HW/SW-Schnittstellen und Protokolle zwischen den Bausteinen (HW/SW-Codedesign) Realisierungstechnologie o Wahl der Prozesstechnologie (z.B. CMOS) o Plattform: StaZ (Standardzelle), GA (Gate Array), Structured ASIC, FPGA EDA-Tools wählen VLSI-Entwurf Wahl der geeigneten AVT, Kühlung für Chips und Board o Standardtechniken z.B. SMD o Hochleistungsbaugruppen, Multi-Chip-Module o Kühlung z.B. Luft/ Gase, Wasser Board-Entwurf mit entsprechenden CAD Tools o Layout, Backplanes o Board Simulation 1.4.7 Phase 6: Prototyp nach Abschluss des Entwurfs folgt Realisierung eines Prototyps → Emulator enthält Implementierungen von (allen) Schaltkreisteilen z.B. in einem/ mehreren FPGAs kann auch begleitend zum Entwurf einzelner Schaltungsteile erfolgen 11 1.4.8 1.4.9 ausführliche Simulation, Ziel: möglichst viele Fehler in diesem Stadium finden und beheben → Iteration Prototyp-Fertigung weitere Verifikation, Evaluierung, gegebenenfalls Iteration bis zurück zum Entwurf Phase 7: Übergabe in die Produktion Beginn der Fertigung begleitende Unterstützung durch Entwicklungsabteilung letzte Möglichkeit, vor der Auslieferung Fehler zu erkennen Begleitende Architekturüberprüfung in allen Phasen ständige Überprüfung von Entwurfsentscheidungen, eventuell Änderungen/ Korrekturen so früh wie möglich → je später desto teurer/ aufwendiger möglichst vermeiden von Nebeneffekten durch Änderungen → Prüfen jeder Entwurfsprozess ist ein rückgekoppelter Vorgang 12 2. Grundlagen, Architekturklassen und – merkmale von MP 2.1 Allgemeines zur MP-Architektur 2.2 Begriff MP-Architektur wird für die übergreifende, d.h. von den Einzelheiten abstrahierende Darstellung des inneren Aufbaus von MP verwendet Operationsprinzip und Programmiermodell des Prozessors lassen sich als blockartiger Aufbau darstellen Programmiermodell besitzt in der Regel für jeden MP eine eigenständige Ausprägung Architekturmerkmale → Klassifizierung Architekturklassen von MP resultieren aus historischen und technologischen Gründen Von-Neumann-Rechner, Architektur Harvard-/ Princeton- siehe Bild K+A-2_F 2 und 3 Rechner besteht aus den Grundbestandteilen: o CPU mit Steuer-(Leit-)werk (Control Unit, CU) und Rechenwerk (Arithmetik Logic Unit, ALU) o Speicher o Ein-/ Ausgabe-Einheit o Bussystem Struktur des Rechners unabhängig vom zu bearbeitenden Problem → für jedes neues Problem ein neues Programm, deshalb auch Bezeichnung „Programmgesteuerter Universalrechner“ (Stored Program Machine) Programm und Daten standen im selben Speicher o Speicherplätze besitzen feste Wortlänge, einzeln über Adresse ansprechbar o nur Programmkontext entscheidet, ob Inhalt Programm oder Daten ist im Laufe der Entwicklung 2 Varianten für Struktur des Speichers o Princeton-Architektur gemeinsamer Hauptspeicher für Daten und Programm → kommt VonNeumann-Konzept am nächsten Vereinfachung im Aufbau, aber geringere Kommunikationsleistung o Harvard-Architektur getrennter Speicher für Daten und Programm paralleler Zugriff auf Daten und Programm möglich separate Busse häufig bei DSPs unabhängig von Speicherstruktur, aber gleiches Operationsprinzip die Struktur der CPU korrespondiert direkt mit der sequentiellen Abarbeitung von Instruktionen in 2 Phasen (Operationsprinzip des Von-Neumann-Rechners), siehe Bild K+A-2_F 4 o Phase 1: Befehl wird aus Speicher in Steuerwerk geladen, Zählwerk in der CPU (Programm-, Befehlszähler) wird mit dem Programmfluss weitergezählt 13 o 2.3 2.3.1 Phase 2: Bearbeitung des Befehls benötigte Daten in Rechenwerk laden und entsprechend Opcode verarbeiten, dann Resultat gespeichert danach Laden des nächsten Befehls Möglichkeiten der Klassifizierung Von-Neumann-Rechner gekennzeichnet durch: o ein Leitwerk (LW) für Steuerung o ein Rechenwerk (RW) für die Ausführung der Operationen o ein Speicherwerk (Hauptspeicher, HS) für Ablage von Programm und Daten o ein E/A-Werk für Ansteuerung von Peripherie o gemeinsamer Bus für die Übertragung von Daten und Befehlen Befehlsabarbeitungszyklus in 2 nichtüberlappte Teilphasen unterteilt → Beschränkung der Rechenleistung durch „Flaschenhals“ durch Verfeinerung, evolutionäre Veränderungen oder durch radikale Abkehr vom VonNeumann-Prinzip beträchtliche Fortschritte Rechnerklassifikation nach Flynn einfacher Ansatz: Rechner werden auf Basis von Befehls- und Datenströmen beschrieben Befehlsstrom: Maschinenbefehle werden vom HS ins LW und von dort als entschlüsselte Steuerinformationen an das Rechenwerk weitergeleitet Datenstrom: Daten, die als Operanden für arithmetische und logische Operationen oder als deren Ergebnis zwischen HS und RW übertragen werden Klassifikation: einfaches/ mehrfaches Auftreten von Daten- und Befehlsströmen nur 4 Kategorien zur Eingruppierung von Rechnern (siehe Bild K+A-2_F 5) SISD (Single Instruction Single Data), siehe Bild K+A-2_F 6 o klassischer Universalrechner o durch Ausführung des Programms erzeugt ein LW einen Befehlsstrom, dessen Befehle einzeln, nacheinander vom RW ausgeführt werden o benötigte Operanden/ Ergebnisse werden über einen bidirektionalen Datenstrom vom HS in ein RW geholt bzw. in HS zurückgeschrieben o Klassifikation erfasst nur Grobstruktur, keine weitgehende Differenzierung innerhalb SISD o nicht erkennbar, ob sich Phasen des Befehlsabarbeitungszyklus überlappen oder nicht o E/A-Aufgaben werden nicht von eigenen Prozessoren sondern von CPU bzw. intelligenten Controllern ausgeführt o z.B. PCs auf Mikroprozessorbasis, ältere Mainframes und Minicomputer, teilweise auch Vektor- und Pipelinerechner SIMD (Single Instruction Multiple Data), siehe Bild K+A-2_F 7 o besitzen ebenfalls nur ein LW o vom Leitwerk entschlüsselter Befehl kann gleichzeitig auf mehrere Operanden in mehreren RWs (VE, processing elements) angewendet werden (sogenanntes Instruction Broadcasting) o jede VE verfügt über einen eigenen bidirektionalen Datenpfad zum HS 14 o o 2.3.2 HS häufig in unabhängige Einzelmodule unterteilt SIMD-Rechner erweitern die Von-Neumann-Struktur durch Vervielfachung der Anzahl der RW o z.B. Arrayprozessoren, Vektorprozessoren MIMD (Multiple Instruction Multiple Data), siehe Bild K+A-2_F 8 o auch als Multiprozessorsysteme bezeichnet o verfügen über mehrere vollständige Prozessoren, es existieren unterschiedliche Architekturvarianten o Komponenten über vielfältige Verbindungstopologien gekoppelt o mehrere Befehls- und Datenströme aus gemeinsamen physikalischen HS oder unabhängigen Speichermodulen MISD (Multiple Instruction Single Data), siehe Bild K+A-2_F 9 o nur wenige Rechner, kaum kommerziell erfolgreich o Ausnahme: systolische Arrays, die heute zur Bearbeitung eines komplexen Datenstroms (MPEG, und ähnliche) mit mehreren gleichartigen Rechnern genutzt werden, z.B. auch als eingebettete Systeme in FPGAs Einschätzung: o Klassifikation nach Flynn liefert keine detaillierten Informationen über Rechnerstruktur o quantitative Aussagen über Rechneraufbau, Leistung und topologische Aspekte sind nicht möglich Erlanger Klassifikationssystem ECS geht erheblich weiter als Flynn Zielstellung: Steuerung der Ausdrucksmöglichkeiten bei der Beschreibung von Parallelarbeit in Rechnerstrukturen, ohne unnötige komplexe Darstellung eignet sich zur Beschreibung wichtiger quantitativer Eigenschaften von Rechnern mit Nebenläufigkeiten und Pipelining Parallelität liegt dann vor, wenn – bezogen auf ein bestimmtes Abstraktionsniveau – zu einem Zeitpunkt mehr als eine Aktion durchgeführt werden kann Serialität liegt dann vor, wenn diese Aktionen nicht gleichzeitig ausführbar sind, d.h. höchstens 1 durchgeführt werden kann in ECS werden 3 Ebenen einer Rechnerstruktur unterschieden o LW-Ebene (Prozessor-, Programmebene) o RW-Ebene (Befehlsausführungs-, ALU-Ebene) o Wortebene (Ebene der elementaren Verarbeitungsstellen) auf diesen Ebenen existieren unterschiedliche Arten von Nebenläufigkeiten und Pipelining, mit ECS quantitativ erfassbar Definition Nebenläufigkeit: o auf einer Strukturebene können zu einem Zeitpunkt mehrere in ihrer Art vergleichbare Aufgaben durchgeführt werden, da mehrere hierfür geeignete Ressourcen vorhanden sind o typische Aufgaben: z.B. Programme, Prozesse, einzelner Befehle, Threads o Parallelität wird als Nebenläufigkeit bezeichnet, wenn die Ressourcen des zu beschreibenden Rechners das gleichzeitige Ausführen vollständiger, auf diesem Niveau definierter (gleicher) Aktionen erlauben Definition Pipelining 15 o Aufgaben werden innerhalb einer Strukturebene eines Rechners in gleiche oder variabel viele nacheinander auszuführende einfache Teilschritte zerlegt, wobei für die Ausführung eines Teilschritts jeweils ein eigenes Teil-RW zuständig ist o alle Teilwerke können dabei gleichzeitig Teilschritte aus unterschiedlichen Aufgaben ausführen o nach Vorliegen des Ergebnisses eines Teilschritts gegebenenfalls weiterreichen an nächstes Teilwerk o Teilwerke können auch übersprungen werden, wenn sie für die Bearbeitung einer Aufgabe nicht benötigt werden o Endergebnis liegt vor, wenn alle benötigten TW durchlaufen wurden o wichtig: sind n Teilwerke vorhanden, so ist bei gleichlangen Teilschritten und voll ausgelasteter Pipeline eine maximale Beschleunigung der Rechengeschwindigkeit auf das n-fache möglich ECS-Tripel o zur Klassifikation eines Rechners bzw. Beschreibung einer Rechnerstruktur o jedes Tripelelement steht für den Grad der Parallelität in einer Rechnerbetrachtungsebene. 𝑡Rechner ≔ (𝑙Rechner , 𝑟Rechner , 𝑤Rechner ). Jeder Rechner besteht aus einer bestimmten Zahl l von Leitwerken, die ihrerseits eine bestimmte Zahl r von Rechenwerken mit einer Zahl w von elementaren Stellen umfassen [statt l auch k bzw. statt r auch d]. Die Zahlen l, r, w definieren dabei auch den Umfang der Nebenläufigkeit des Rechners auf der jeweiligen Betrachtungsebene. o Beispiel: 𝑡re1 = (4, 1, 32) → Rechner mit 4 Leitwerken (jeweils ein Rechenwerk mit einer Wortlänge von 32), 𝑡ILLIAC IV ≔ (1, 64, 64) → Arrayrechner mit 1 LW (64 RW und 64 Bit), 𝑡KI ≔ (1, 1, 64) → klassischer SIMD-Rechner o Erweiterung des ECS-Tripels für Pipelineorganisation können l’ spezialisierte Teilleitwerke, r’ spezialisierte Teilrechenwerke und w’ spezialisierte elementare Teilwerke zusammenarbeiten o 𝑡Rechner ≔ (𝑙Rechner ∗ 𝑙′Rechner , 𝑟Rechner ∗ 𝑟′Rechner , 𝑤Rechner ∗ 𝑤′Rechner ), der Operator * (concatenation) beschreibt dabei die echte, sich gegenseitig nicht beeinflussende Parallelität der jeweiligen HW → Verbesserung der Beschreibungsgenauigkeit Zusammenfassende Erläuterung der Tripelelemente: o l: Grad der Nebenläufigkeit auf LW-Ebene (Zahl der im System vorhandenen LW oder Prozessoren, bzw. die Zahl der echt parallel ausführbaren Programme) o l’: Grad des Makropipelinings, Betriebsart von Multiprozessorsystemen, bei denen mehrere CPUs gleichzeitig auf einem sequentiell an den Prozessoren vorbei fließenden Datenstrom verschiedene Bearbeitungsschritte ausführen o r: Anzahl der RW, die jeweils einem LW zugeordnet sind. Ein Prozessor verfügt über mindestens 1 LW und über 1 oder mehrere zugeordnete RW o r’: maximale Ausprägung einer Eigenschaft, die bei ECS als Funktionspipelining bezeichnet wird (maximal r’ sequentiell aufeinanderfolgende Befehle aus einem Programmfragment können dann gleichzeitig ausgeführt werden, wenn sie frei von Datenabhängigkeiten sind und entsprechend viele Funktionseinheiten (FE) verfügbar sind, die vom Typ her zu den ausführbereiten Befehlen passen) [heute: Nebenläufigkeit auf der Ebene von FE] → tritt bei Superskalar-Architekturen und anderen auf o w: Wortbreite des Rechners, Parallelität auf Wortebene o w’: Grad des Phasenpipelinings innerhalb der Mikroarchitektur eines Rechners oder innerhalb einer einzeln beschriebenen Teileinheit der Mikroarchitektur weitere Detaillierung: Operatoren wie +, ∨, ~ aus heutiger Sicht mit ECS 4 Arten von Nebenläufigkeit unterscheidbar: 16 2.3.3 2.3.4 o Nebenläufigkeit auf LW-Ebene, l > 1 o auf RW-Ebene, r > 1 o auf FE-Ebene, l’ > 1 o auf Wortebene, w > 1 Beispiel: 𝑡Pentium III ≔ (1, 1 ∗ 5, 32) → 1 Leitwerk (5 dekodierte Befehle pro Takt ausführbar, 32 Bit Wortbreite) Klassifizierung nach Giloi Unterscheidungskriterien: nach Operationsprinzip oder HW-Struktur nach Operationsprinzip, es wird das funktionelle Verhalten des Prozessors bestimmt, 3 Gruppen: o Von-Neumann-Prinzip (starres 2-Phasenschema, streng sequentielle Ausführung) o Operationsprinzip des impliziten Parallelismus die den Programmen gegebenen Möglichkeiten zur parallelen Ausführung werden genutzt auf verschiedenen Ebenen angelegt (z.B. Operations-, Anweisungs-, Prozessebene) o Operationsprinzip des expliziten Parallelismus Programm- und Datenstrukturen werden so angelegt, dass Parallelarbeit unmittelbar vorgezeichnet ist nach HW-Struktur, Unterscheidung von 5 Alternativen: o Einprozessorsystem (den Von-Neumann Prozessen entsprechend) o Arrays von gleichartigen Bearbeitungselementen (Prozessorteile mit echter Parallelität) o Pipelines aus verschiedenartigen Bearbeitungselementen (spezialisierte Prozessorteile, die gleichzeitig nutzbar sind, aber verschiedene Aufgaben ausführen) o homogene Multiprozessorsysteme o inhomogene Multiprozessorsysteme CCM (Customized Computing Machine), Coprozessoransatz für applikationsspezifische Prozessoren als HW-Beschleuniger Superskalare Prozessoren verarbeiten mehr als einen Befehl pro Takt d-Paradigma in Verbindung mit CCM → neuere Entwicklung zur weiteren Leistungssteigerung Architekturklassen bei Prozessoren Klassifizierung der Prozessoren nach ihrem internen Speichermodell Speichermodell in engem Zusammenhang mit Codierungsformat Aussagen, wie die für Datenoperationen benötigen Operanden vor und nach der Operation im Zugriffsbereich des Prozessors liegen 3 grundsätzliche Methoden o Stack-Architektur: Quell- und Zieloperanden werden auf dem Stack gespeichert, wo auf sie zugegriffen wird Zugriff seitens des Prozessors kann implizit erfolgen, z.B. in exakt festgelegter Reihenfolge 17 o o o o Akkumulator-Architektur Prozessor besitzt einen, gegebenenfalls wenig mehr Akkumulatoren als zentrale(s) Register in Befehlscodierung wird bereits festgelegt (implizit), welches Register als Quelle/ Ziel für Operation genutzt wird (general purpose) Register-Architektur mindestens 1 Operand wird aus einem internen Prozessorregister bezogen (muss im Befehl explizit angegeben werden) Register-Speicher-Architektur (Erweiterung der Akkumulator-Architektur) Load-Store-Architektur 18 3. Grundkomponenten von Prozessoren Hauptkomponenten der CPU bilden Leit- oder Steuerwerk (Control Unit) und Rechenwerk (ALU) 3.1 Hardwaregrundlagen, Komponenten Technische Systeme der Informationsverarbeitung werden unterteilt in Schaltnetze und Schaltwerke, siehe Bild K+A-3.1+3.2_F 1. 3.1.1 3.1.2 Schaltnetze siehe Bilder K+A-3.1+3.2_F 2 bis 4 Entwurf und Beschreibung mittels Boolescher Algebra analytische Beschreibung mit logischen Variablen und Operatoren häufig mit Wahrheitstabellen entworfen → Schaltfunktion auslesen (Terme → DNF (Disjunktive Normalform), KNF (Konjunktive)) besitzt keine Rückführungen, 𝑦 = 𝑓(𝑥) Schaltwerke siehe Bild K+A-3.1+3.2_F 5 𝑦 = 𝑓(𝑥, 𝑦′), aktueller Zustand vom vorangegangenen abhängig → Rückführung (Rückkopplung) Folgezustand hängt vom aktuellen Eingangszustand und dem momentan inneren Zustand ab, die von vorherigen Eingangsbelegungen herrühren besitzt endliche Zahl von Eingangsbelegungen und Zuständen, (endlicher, determinierter) Automat (Finite State Machine, FSM) Verhalten lässt sich in Graphenform darstellen (Knoten = Zustände, Kanten = Übergänge) Unterscheidung von 3 Typen: Mealy, Moore, Medwedjew zeitliche Abhängigkeit des Momentanzustandes von vorangegangenen bzw. des Folgezustandes vom aktuellen lässt sich auch durch Einfügen eines „Speichers“ in den Rückkopplungszweig vom Ausgang auf den Eingang darstellen Einsatz von Schaltwerken z.B. in der Zyklussteuerung der CPU 3.2 Leitwerke 3.2.1 Allgemeines übernehmen Ablaufsteuerung in RW und Operandentransport Steuerwerk, Befehlsprozessor, Control Unit unterschiedliche Typen: o Schrittleitwerk o JK-FF-LW o Matrix-LW 19 3.2.2 o Multiplexer-LW Matrix-LW dominieren bei MP legen folgendes fest: o Was ist in jedem Augenblick der Befehlsausführung zu tun? o Wo sind die vom Befehl abhängigen Aktionen auszulösen? Befehlsregister stellt Schnittstelle zwischen ALU und LW dar, indem es den Opcode bis zum Ende der Ausführung zwischenspeichert zusätzliche Informationen für das LW können die aus dem RW oder den Flags eingespeisten Statusmeldungen Zi sein Mikrobefehle und Mikroprogramme Makrobefehle sind durch das Programm vorgegeben und werden durch Compiler und Assembler letztlich in Opcode umgewandelt, stehen im Speicher, liegen im allgemeinen als Byte/ Wort/ Doppelwort/ … vor Mikrobefehle (micro instructions) entstehen aus einem einzigen Makrobefehl, stellen eigentliche Steuerbitmuster für das LW bereit, wie Makrobefehle binär codierte Worte, allerdings mit Wortbreiten zwischen 20 … 100 Bit, ein einziger Makrobefehl aktiviert meist eine ganze Mikrobefehlsfolge = Mikroprogramm Mikroprogramm: o ist die Darstellung eines HW-Algorithmus, der von den Funktionseinheiten der Prozessor-HW ausgeführt wird o besteht aus Mikrobefehlen, die jede Maschinenaktion zeitlich exakt steuern o auf der untersten HW-Ebene des Prozessors implementiert o eine FE im LW stellt die Mikrobefehle abrufbar bereit oder erzeugt sie unmittelbar o Bereitstellung über einen adressierbaren Mikrocodespeicher (ROM, EPROM) oder von PLA oder Mealy-Automat generativ übernommen mikroprogrammierte und festverdrahtete LW o mikroprogrammierte LW: Mikrobefehle werden aus Mikrocodespeicher geholt vorrangig auf CISC-Architekturen o festverdrahtete LW: in modernen RISC-Architekturen häufig, schaltungstechnisch höherer Aufwand, dafür schneller höherer HW-Aufwand wird durch reduzierten Befehlssatz (weniger Mikrobefehlsaufwand) kompensiert o Nutzung von PLAs für beide LW-Typen möglich, in dem Mikrobefehle direkt aus Oder-Feld ausgegeben werden (mikroprogrammiertes LW) bestimmte Automaten(teil)funktionen werden direkt zur Erzeugung/ Ausgabe der Mikrobefehle benutzt Formate von Mikrobefehle sehr unterschiedlich, Prozessor-LW möglichst redundanzfrei anlegen (Chipfläche) horizontale Mikrobefehlsstrukturen o einfachste Variante o nahezu alle Bitpositionen des Befehlsformats wird eine spezifische Steuerfunktion zugeordnet o dadurch Notwendigkeit eines breiten Mikrobefehlsformats (>100 Bit) und eines relativ großen Mikrobefehlsspeichers 20 Mikrobefehlsoperanden werden in codierter Form OPC0 … OPCi im Mikrobefehlsregister MBR bereitgestellt o Steuersignale S0 … Si werden an prozessorinternen Aktionspunkten (z.B. „Tore“) sowie auch auf dem externen Systembus wirksam zur Verringerung der Mikrobefehlsbreite (und damit Größe des Mikroprogrammspeichers) Codierung der den einzelnen FE zugeordneten Steuersignale in Gruppen, verkürztes Format = „quasihorizontales“ Mikrobefehlsformat nachfolgend aber Decodierung notwendig, dadurch zusätzliche Gatterlaufzeiten Extremfall: „vertikales“ Mikrobefehlsformat, die beim quasihorizontalen Format gebildeten Steuersignalgruppen wirken ihrerseits wiederum als Code für noch feinere Mikrobefehls, dadurch noch geringere Wortbreite (z.B. 40 Bit) Beispiel für die Abarbeitung eines Mikroprogramms (quasihorizontal) o Makrobefehl „ADD A, M“ steht im Befehlsregister (Register A = Akku, Speicher M, Ergebnis nach A) o Abarbeitung beginnt damit, dass Makrobefehl vollständig in CPU geholt wird („fetching“), ebenfalls mikroprogrammgesteuert o Annahme: „ADD A, M“ bereits im Befehlsregister BR verfügbar, in BR steht also Opcode von ADD, die (binär codierte) Adresse des Register A, sowie die Information, dass in Memory-Adressregister MAR die Adresse des Speicheroperanden M vorliegt o Opcode von ADD ist Einsprungadresse in Mikrobefehlsspeicher, hier steht erster Mikrobefehl → wird ins Mikrobefehlsregister MBR übernommen (verbleibt dort während gesamter Abarbeitungszeit), siehe Bild K+A-3.1+3.2_F 13 o 1. Mikrobefehl: MAR auf internen Systembus legen interner Systembus auf externen Adressbus legen Lesesignal über externen Steuerbus an Arbeitsspeicher legen o 2. Mikrobefehl: Speicherausgang über den Datenbus an internen Systembus legen interner Systembus an das Memory-Datenregister MDR legen o 3. Mikrobefehl: Akku (Register A) an ALU legen MDR an ALU legen in ALU Funktion ADD einstellen ALU-Ausgang an Akku legen (= Ergebnisregister) o 3.2.3 Mikrobefehlserzeugung 3.2.3.1 Leitwerksprinzip nach Wilkes Prinzip seit 1953 LW organisiert Verwaltung sowie Bereitstellung der Mikrobefehle läuft streng synchron zum Prozessortakt ab beschreibt LW in seiner allgemeinsten Form, kann auch als Mealy Automat aufgefasst werden Prinzip: o Eingangsworte für LW: Opcode, Parameter des Makrobefehls, aus ALU zurückgemeldete Statussignale Zi o Ausgangswerte: Steuersignale Si sowie Steuerinformationen innerhalb des LW selbst 21 o o o o o o diese letzteren werden als Zusatzinformation oder auch Adressen für die Zustandsüberführungsfunktion f erzeugt, gesamte CPU (= ALU und LW) liegt am gleichen Takt jedem „Informationspaar“ (= Opcode des aktuellen Makrobefehls und im Zustandsregister abgelegter Code im Automatenzustandes) wird genau eine Spalte am Ausgang des 1-aus-n Decoders zugewiesen und diese Spalte als aktive Leitung in die Zustandsüberführungsmatrix geschaltet jede Spalte entspricht dann auch genau einem Element aus der Produktmenge 𝑄 ⋅ 𝑋 des Automaten, wobei Q die Menge aller zugelassenen Zustandscodes und X die Menge aller binären Eingangsvektoren repräsentiert obere Matrix realisiert die Menge der Automatenfunktion f: 𝑄 ⋅ 𝑋 → 1𝑄 untere Matrix generiert die Ausgangsfunktion g: 𝑄 ⋅ 𝑋 → 𝑌 Menge Y enthalte alle vom LW generierten Mikrobefehle 3.2.3.2 Mikroprogrammierte Leitwerke Mikrobefehlsspeicher, Mikrobefehlsregister o der Kern mikroprogrammierter LW baut auf zweistufiger Logik auf, die mit PLAs oder ROMs realisiert wird o wenn Mikrobefehlsspeicher aus E(E)PROMs aufgebaut, dann „mikroprogrammierbarer Prozessor“ o Mikrocode-ROM muss wie jeder andere Speicher auch adressierbar sein, d.h. aus Opcode des Makrobefehls wird über Decoder Anfangsadresse für Mikrobefehl abgeleitet die folgenden Mikrobefehlsadressen werden erzeugt durch konstantes Inkrement im MAR oder durch zusätzlich im Mikrocode-ROM abgelegte Folgeadressen → auch im Mikroprogramm sind Verzweigungen möglich o Abbruch dieser Verzweigungszyklen durch Steuersignal Zi aus RW/ ALU Mikrobefehlsregister MBR, siehe Bild K+A-3.1+3.2_F 15 jeweils aktueller Mikrobefehl wird nach Bereitstellung in das MBR übernommen Funktionsweise: o Makrobefehl steht im Befehlsregister, durch UT1 an Adressauswahllogik PLA1 gelegt (durch „direktes Einlaufen“ des Makrobefehls in PLA1 erhält man redundanzfreien Befehlssatz, bei n-formatigen Opcode → 2n unterschiedliche Makrobefehle) o wenn jeder Makrobefehl genau eine Spalte im Oder-Feld des PLA1 aktiviert → auf dieser Spalte echte Einsprungadresse des Mikroprogramms codierbar o über MUX wird diese Adresse mit UT2 ins MAR geschrieben o wenn Startadresse des aktuellen Mikroprogramms steht, wird über Und-Feld von PLA2 die Spalte des ersten Mikrobefehls aktiv und die im Oder-Feld liegende Bitstruktur dieses Befehls am Ausgang von PLA2 verfügbar o Übernahme in MBR mit UT3 o gleichzeitig steuert S den MUX, eventuelle Folgeadresse liegt am MAR an o nächster Mikrobefehl oder Ende des Mikroprogramms 3.2.3.3 Festverdrahtete Leitwerke besitzt im Gegensatz zu mikroprogrammierbaren LW keinen Mikrocode-ROM oder ähnliches, Makrobefehle werden direkt über einen Mealy-Automaten auf die HW abgebildet („Ablaufsteuerung“), festverdrahtet („hard wire control“), nicht/ nur mit 22 großem Aufwand änder-/ anpassbar, Befehlssatz des Prozessors kann im allgemeinen nicht geändert werden, siehe Bild K+A-3.1+3.2_F 16 einfachste Realisierung: ein Automat bildet auf der untersten Prozessorebene die Makrobefehle auf die HW ab enthält Befehlsregister, -decoder Automat verarbeitet einen Makrobefehl, nachdem er vom Befehlsdecoder in einen definierten Anfangszustand versetzt, gestartet und dann so lange getaktet wird, bis Makrobefehl abgearbeitet ist, danach deaktiviert komfortable Lösung: jedem Makrobefehl wird ein eigener Automat zugeordnet o Ausgabe streng taktsynchron o mit jedem Takt wird neuer Mikrobefehl bereitgestellt o LW ist sehr schnell, eignet sich besonders zur Steuerung von Phasenpipelines 3.3 Varianten von Rechnerarchitekturen 3.3.1 Befehlssatzarchitektur (ISA) vs. Mikroarchitektur 3.3.2 ISA definiert Schnittstelle eines Rechners zur System- und Anwendungssoftware beim ISA-Entwurf: Spezifizierung der Befehlsformate und Maschinenbefehlstypen des Prozessors sowie der von der Software aus sichtbare Registersatz Entwurfsunterscheidung auf ISA-Level beeinflussen Zusammenspiel CPU-Architektur mit Compilern und OS ISA arbeitet mit Mikroarchitektur zusammen, beeinflussen sich gegenseitig Ziel: möglichst optimale Abstimmung aufeinander („Balance“) CISC-Prozessoren und Mikroprogrammierung 3.3.2.1 Allgemeines zur CISC-Philosophie CISC-Philosophie historisch durch die von IBM ausgehende Entwicklung kompatibler Computergenerationen begründet, Vorbild auch für andere wie Intel Grundlage der Softwarekompatibilität der IBM-Rechner: fest vorgegebener Standardbefehlssatz und ein Satz von Standardregistern, Speicheradressierungsschema der jeweiligen Vorläufer-Prozessoren muss von den kompatiblen Nachfolgern zumindest als „Architekturmodus“ unterstützt werden Problem: Entwicklungsfortschritte, effizientere Lösungen auf Befehlssatzebene, trotzdem muss alter Architekturballast weiter mitgeschleppt und weitervererbt werden → neue Befehle, Register, Adressierungsmodi können immer nur zusätzlich bereitgestellt werden Folge: Komplexität nimmt zu, Großteil der Entwicklungsressourcen muss für Kompatibilitätserhalt verwendet werden, Verbesserungen der Technologie müssen zum Teil der Kompatibilität geopfert werden Aufwand lohnt sich trotzdem: Software-Investitionen werden geschützt bis etwa 1980 Leistungssteigerung durch immer (neue) umfangreiche/ komplexere Maschinenbefehlssätze dafür folgende Gründe: o Geschwindigkeitsunterschied zwischen CPU und Hauptspeicher, deshalb Ziel möglichst viele miteinander zusammenhängende Aktionen in einem Maschinenbefehl codieren o kompaktere Codierung spart HS-Platz 23 o Mikroprogrammierung ermöglichte Aufwärtskompatibilität o durch spezielle Befehle Unterstützung der Compilertechnologie Gemeinsamkeiten aller CISC-Architekturen: o häufig mikroprogrammiert o Aufgaben der Compiler in Mikroprogramme umgesetzt o komplexe Software-Generationen (wie kombinierte arithmetische Befehle) in einem einzigen Befehl zusammengefasst o umfangreicher Maschinenbefehlssatz o kompakter Programmcode 3.3.2.2 Eigenschaften der CISC-Architektur 3.3.3 CISC-ISAs enthalten eigene Befehle zur Vereinfachung der Realisierung von OSKomponenten per SW, Hochsprachencompilern, Datenstrukturen, Adressierungsmodi Ziel: Steigerung der SW-Produktivität, kürzere elegante Programme, besseres Laufzeitverhalten Vervollständigung der CISC-Befehlssätze durch ergänzende Gleitkommabefehlssätze aber: zunehmende strukturelle und organisatorische Komplexität der CPU und Mikroprogrammwerke, dadurch Einschränkung des Leistungspotenzials o z.B. für ein Maschinenbefehl ca. 10 Mikrobefehle o für Ausführung eines Befehlstyp mehr als 10 Taktzyklen bei früheren Mikroprozessoren reichten 100000 Transistoren nicht für eine überzeugende Leistung aus, heute bis zu eine Milliarde Transistoren und Taktfrequenzen über 3GHz Entstehung der RISC-Technologie Zielstellung: einfachere Befehlssätze, ca. 40 bis 80 Befehlstypen und –formate einfache Hardwaresteuerung ohne Mikroprogrammierung effiziente Phasenpipelines mit gleichlangen, eintaktigen Stufen Befehle, die üblicherweise in einem Takt ausgeführt werden können Datenzugriffe durch Load/Store-Befehle größere Registersätze Optimierung des Befehlsdurchsatzes durch Compiler 3.3.3.1 Eigenschaften der RISC-Architektur keine unveränderliche feste Definition von RISC, folgende allgemeine Eigenschaften: o Ausführung nahezu aller Maschinenbefehle in einem Taktzyklus o HS-Zugriffe nur mittels Load und Store o alle anderen Operationen ausschließlich auf Registeroperanden o wenige Befehlstypen und Adressierungsarten, Konzentration auf Notwendiges o möglichst einheitliches Befehlsformat, gleichbleibende Bedeutung (inhaltlich) der Bitfelder o möglichst geringer Decodieraufwand für alle Befehle o Verzicht auf Mikrobefehlsebene o festverdrahtete HW-Steuereung des LW o Verringerung HW-Komplexität, dafür muss nun Compiler mehr übernehmen 24 Befehlsformate, Befehlssatz, Befehlsvorrat o RISC-Prozessoren verfügen nicht grundsätzlich über einen reduzierten Befehlssatz o RISC mehr im Sinne einer Reduktion der pro typischer Aufgabe benötigten Befehlszyklen o Reduced Instruction Set Cycles o RISC-Befehlsformate besitzen meist einheitliche Länge von 32 Bit, Vorteil: leichter decodierbar, einheitliches Befehlsformat o Befehlslänge 32 Bit entspricht Breite früherer Speicherzugriffsports, pro Speicherzugriff immer einen vollständigen Befehl übertragen o einheitliche Länge vereinfacht Zuordnung von „Bedeutungsträgern“ an feste Bitfelder o Veränderungen/ Modernisierung auch bei RISC o viele CPUs implementieren echte 64 Bit ISA und Mikroarchitekturen, mehrstufige Caches, größere Breite der Datenzugriffswege, häufig unabhängige Wege zu externen Cache und HS o Zusammenhang zwischen Wortbreite Prozessor und Breite der Datenwege: Weg zum HS: doppelt so breit wie Prozessorwortbreite (128 Bit bei 64 Bit CPU) Weg zum L2-Cache 4 mal so breit (256 Bit bei 64 Bit CPU) RISC-Vorteil: o RISC-Befehle unabhängig von Prozessorwortlänge nach wie vor 32 Bit lang, bei externen Zugriff auf Befehle werden immer bestimmte Vielfache der Prozessorwortlänge in die CPU geholt und dort an L1-Cache gegeben o L1-Cache so organisiert, dass immer die gleiche Anzahl 32 Bit breiter Befehle hineinpasst o z.B. holen Superskalare RISC-Prozessoren (verarbeiten ohnehin mehrere Befehle gleichzeitig) aus dem L1-Cache über einen 256 Bit breiten Zugriffsweg 8 Befehle in einem Pufferbereich o ein paralleler Decodierer (gleichzeitig 4 Befehle decodierbar) greift dann auf 4 Befehle (128 Bit breiter Block des Puffers) zu Beispiel: Alpha, 64 Bit RISC ISA o verwendet straffes, leicht zu decodierendes Befehlsformat o trotzdem „Programmierkomfort“ für kommerzielle Anwendungen o neuere Vertreter sind OOO-Superskalar-Prozessoren (out of order) o Kennzeichen der Befehlsformate, siehe Bild K+A-3.3_F 3 6 Bit breiter Opcode (Bit 31 bis 26 für alle Formate) bei Verknüpfungsoperationen durch 11 Bit breites Funktionsfeld (Bit 15 bis 5) genauer spezifiziert Befehle können zwischen 0 und 3 Registerfelder zur Spezifizierung von Operanden- und Ergebnisregistern enthalten Verknüpfungsoperationen im allgemeinen 3 Registeradressen, 3-AdressMaschine o Arten der Befehlsformate PAL Code-Format, eine Privileged Architecture Library umfasst Unterprogramme, die zu einer typischen Betriebssystemimplementierung gehören. Sie werden durch Hardware-Interrupts oder Call_PAL-Befehle aufgerufen Branch-Format wird von bedingten Sprüngen und UP-Aufrufen benutzt Memory-Format wird verwendet für 8, 16, 32, 64 Bit Load/Store Befehle zwischen Registern und Speicher 25 Operate-Format wird von allen arithmetischen, logischen, „Multimedia“Verknüpfungsoperationen und sonstigen Befehlen zur Datenmanipulation verwendet Befehlsformat o bei allen RISC-Architekturen unmittelbarer Zusammenhang zwischen Befehlsformat und –vorrat o folgende Befehlsgruppen unterscheidbar: Load/Store: Alle Speicherzugriffe über Load/Store-Operationen (verschiedene Datenformate). Load/Store-Instruktionen auch möglich für Adressen, Statusregister, mehrere Register, Gleitkommaregister. Integer-Arithmetik: Sollte generell in einem Taktzyklus ausführbar sein, deshalb manchmal nur Add, Sub, Mul im Befehlssatz. Bei neueren Architekturen auch Div. logische, Shift-, Bitmanipulationsbefehle: Verschiedenste logische Verknüpfungen, Shift-Operation, Byte-, Bit-Manipulation innerhalb eines Registerwortes. Maskierung von Registerinhalten durch Bitmasken. Verzweigungsoperationen: unbedingte Sprünge (Jump), bedingte Sprünge (Branch), UP-Aufrufe (Call), Rücksprung (Return) Gleitkommabefehle: bei allen neueren RISC-CPUs, arithmetische Operationen auf Gleitkommaregistern, Vergleichs-, Vorzeichenoperationen, Gleitkomma-Steuerbefehle Spezialbefehle: Registerorientierung und Load/ Store-Architektur o bei Load/Store-Architektur ist ausschließliches Interface zwischen internen Prozessorregistern und externen Speicher o Operationen nur zwischen Registern o RISC-Architekturen nutzen großen Teil der Chipfläche, um Registersätze mit schnellen Zugriffszeiten zu implementieren. Dadurch benötigen Operationen auf Register üblicherweise nur 1 Takt für Ausführungsphase. o Um Pipeline nicht zu blockieren, werden Registeroperanden bereits während der Befehlsdecodierungsphase aus den Registern gelesen und an das RW bzw. FE übertragen. Dort werden sie in Latches für ALU-Operation bereitgehalten. o nach der Operation wird Ergebnis zunächst in Puffer zwischengespeichert und im nächsten Takt zurückgeschrieben Unterschiede bei den CPUs hinsichtlich Anzahl und Organisationsform der Register o MIPS4000: 32 Bit Mode: 32x32 Bit Universalregister, 16x64 Bit Gleitkommaregister 64 Bit Mode: 32x64 Bit Universalregister, 16x64 Bit Gleitkommaregister o Intel i860: 32x32 Bit Integerregister, 32x32 Bit Gleitkommaregister RISC Auswirkungen auf Prozessor-Mikroarchitektur: o hohe Anforderungen an Speicherbandbreite, Grund: hohe Verarbeitungsgeschwindigkeit, nur durch mehrstufige Speicherhierarchie zu erfüllen o alle RISC-CPUs verwenden (große) Register „files“, dadurch Reduzierung der Speicherzugriffe o RISC-Architekturen reduzieren die Zahl pro Instruktion benötigten Taktzyklen auf einen Wert knapp über 1, Superskalar deutlich unter 1 o deshalb pro Taktzyklus ein oder mehrere Befehle zur CPU bringen und verarbeiten o Befehlscache mit hoher Kapazität, möglichst nur ein Taktzyklus pro Zugriff o mehrfach Datenbusse zur Steigerung der Transfergeschwindigkeit 26 3.3.4 Phasenpipeline-Mikroarchitekturen 3.3.4.1 Allgemeines zu Phasenpipelining wichtiges Kennzeichen einer Phasenpipeline: die Stufen, die zur kompletten Verarbeitung eines Befehls erforderlich sind, werden nacheinander abgearbeitet Festlegung der grundlegenden Struktur während Entwurf der Mikroarchitektur grundsätzlich 2 Varianten: o Ausstattung der Pipeline mit wenigen aber mächtigen Teilstufen o Ausstattung der Pipeline mit vielen aber einfachen Teilstufen heute: beide Ansätze, bei Hochleistungsarchitekturen eher lange „Superpipelines“ (8 bis über 20 Stufen), Grund: hohe Taktfrequenz (Gatterlaufzeiten), dadurch aber komplexes Pipelinemanagement und mehr Nebenläufigkeit Beispiel: Intel P4 (1,5 GHz Taktfrequenz), Standardpipeline 20 Stufen, Integer ALUs mit doppelter Taktfrequenz getaktet, sind aller 0,33ns mit neuen Operanden zu versorgen kurze Pipelines überwiegen bei einfachen, langsameren getakteten Mikroarchitekturen (z.B. DSP, Mikrocontroller), erledigen mehr Einzelaufgaben pro Stufe als Superpipelines, müssen jedoch bei Verzweigungen weniger neue Befehle nachladen, benötigen deshalb keine so komplexen Sprungvorhersagetechniken Pipelinekriterien: o hohe Leistungen und effizientes Pipelinedesign eng verbunden o Pipelineorganisation im Vordergrund beim Entwurf der Mikroarchitektur o zwecks Optimierung und Auslastungsrate einer Pipeline folgende Architektureigenschaften und Organisationskriterien berücksichtigen/ abstimmen: Art und Anzahl der Pipelinestufen Dauer einer Pipelinephase Befehlsformat Befehlsarten und –komplexität Registersatz und –organisation Zugriff auf Befehls- und Datencaches Implementierung von Verzweigungsbefehlen und Sprungvorhersagetechniken Implementierung von Load/ Store – Operationen Nutzung von Codeoptimierungsmöglichkeiten moderner Compiler Hardware-Steuerungsmechanismen zur Pipelinesynchronisation Lösung von Daten- und Ressourcenkonflikten Befehlsverarbeitung und Pipelinestrukturen, wichtiges Kennzeichen: Prozessoren mit Phasenpipelining überlappen „fließbandartig“ unterschiedliche Verarbeitungsphasen der sequentiell angeordneten Befehle eines Programms Phasenaufteilung: o jede Phase umfasst neben eigentliche Verarbeitungslogik auch Logik und Zwischenregister (Kommunikation mit vorheriger und folgender Phase) o bei einfachen Prozessoren Aufteilung in 4 oder 5 Phasen üblich o diese sind nicht unbedingt gleich lang, z.B. Befehlsholphase (2 Takte) Decodierphase (1 Takt) Operandenholphase (2 Takte) Ausführungsphase (variabel lang) Ergebnis-Rückschreibungsphase (2 Takte) 27 effiziente Pipelinehardware setzt gleichlange Phasen voraus (Synchronisation und Signalkommunikation zwischen exakt überlappbaren Phasen einfacher) Arbeitsweise von Pipelines: o bei ausgelasteter Pipeline arbeiten alle Stufen parallel an unterschiedlichen Befehlen o pro Taktzyklus verlässt ein Ergebnis die Pipeline sofern keine unbedingten Sprünge (Jump, Call, Return), bedingte Verzweigungen (Branch) oder durch andere Konfliktarten verursachte Verzögerungen auftreten o für Ausführung eines Befehls minimal nur ein Taktzyklus erforderlich o wichtiges Maß für Beschreibung der Leistung eines Prozessors: Cycles per Instruction, CPI o für Phasenpipelining ideal CPI = 1 o Befehlssatz gilt als ausgewogen, wenn ≥ 90% aller Befehle in einem Taktzyklus ausgeführt werden können o nicht realisierbar für Speicherzugriffe, Sprünge und die meisten Gleitkommaoperationen → mehrtaktige Ausführungsphasen o nachfolgende Befehle stauen sich dadurch in der Pipeline, besser: verursachenden komplexen Befehl an ein unabhängig weiterarbeitendes Verarbeitungswerk delegieren, welches ebenfalls als Pipeline realisiert sein kann, von der Hauptpipeline abzweigt und parallel zu dieser weiterläuft → eine Art von Nebenläufigkeit auf Befehlsebene Pipelinevarianten: o klassische fünfstufige Aufteilung (z.B. Intel 486) 1. Befehl holen (IF – instruction fetch) 2. Befehl decodieren/ Steuerinformation generieren (ID – instruction decode) 3. Registeroperanden holen und/ oder physikalische Speicheradresse ermitteln (OF – operand fetch) 4. Befehlsausführung oder Cachezugriff (Ex – Execute) 5. Ergebnis zurück schreiben (WB – write back) o Verweildauer des Befehl im Prozessor beträgt 5 Taktzyklen (wenn es ein Befehl ist, der in einem Taktzyklus ausgeführt werden kann, bzw. der Cache-Zugriff/ Load/Store erfolgreich ist) o kurze Pipelines, bei einigen RISC-Architekturen gelingt es ID und ID/OF zu kombinieren, 4 Phasen o lange Pipelines R4000, erste „Superpipeline“ siehe Bild K+A-3.3_F 7 Superskalare CPU-Implementierung ermöglichen, dass gleichzeitig mehrere Befehlsfolgen durch nebenläufige Teilpipelines der CPU laufen Pipeline-Implementierung: o zur Überlappung aller Pipelinephasen Orientierung der Länge einer Pipelinephase und damit des Prozessortaktes daran, wie viel Zeit der aufwendigste Teilschritt des Befehlszyklus minimal für seine Abarbeitung benötigt o auch kürzeren Teilschritten steht deshalb immer eine ganze Pipelinephase zur Verfügung (obwohl eigentlich nicht erforderlich) o Zwischenergebnis einer Phase wird bis zum Beginn der nächsten Phase intern Zwischengespeichert (Register) o bei einer vollausgelasteten n-stufigen Pipeline ergibt sich wegen dieser „Verschwendung“/ dieses „Verschnitts“ nicht automatisch ein n-facher Speedup gegenüber einer nicht überlappten Ausführung 28 Pipelineoptimierung: o während jedes Taktzyklus sind alle Pipelinestufen aktiv, deshalb muss Befehlszähler bereits in der Befehlsholphase des aktuellen Befehls auf Adresse des nächsten weitergeschaltet werden o interne Register vorsehen zur Wiederverwendung von Ergebnissen in nachfolgenden Pipelinestufen Speicher von ALU-Ergebnis aus Ausführungsphase ohne Rückschreiben in „sichtbares“ Register, um in nachfolgenden Befehlen verwendet zu werden da gleichzeitig mehrere Load oder Store Befehle in der Pipeline sein können, muss man dafür zwei separate Speicherregister vorsehen Architekturen mit nebenläufigen Pipelines benötigen mehrere derartige Zwischenregister o komplexe Befehle erfordern größeren Verarbeitungsaufwand, deshalb mehrere Ausführungstakte o eine eintaktige Befehlsausführungsphase ist nur erreichbar bei Verzicht auf Implementierung komplexer Maschinenbefehle oder nicht durch allgemeine Phasenpipeline leiten o häufig Realisierung durch Makros aus einfachen Befehlen Mehrfach-Load/Store-Befehle, Verzweigungen können dazu führen, dass bereits geladene Befehle ungültig werden → Pipelinefluss wird unterbrochen, es entsteht eine Auslastungslücke (pipeline bubble) Leistungssteigerung (Speedup) o mit Länge der Pipeline auch Speedup möglich, Geschwindigkeitserhöhung o fast alle neueren Prozessoren verwenden längere (tiefere) Pipelines (z.B. 8 und mehr Stufen, Intel P6: Länge variiert von 12 bis 17, Intel P4: 20 Phasen zu je einen Taktzyklus) o wichtig: beliebige Steigerung der Pipelinetiefe nicht erreichbar technische Grenzen: Gatterlaufzeiten (Kann pro Pipelinestufe überhaupt die für Teiloperationen benötigte Zahl von Gattern durchlaufen werden?), Probleme durch Clock Skew organisatorische Grenzen hervorgerufen durch Pipelinekonflikte, je länger Pipeline desto stärkere Auswirkung, 4 Arten: unbedingte Sprünge und ausgeführte bedingte Verzweigungen (control hazards) Datenkonflikte (data hazards) durch verzögerten Speicherzugriff Ressourcenkonflikte (structural hazards) Datenkonflikte in Rechenwerken oder Funktionseinheiten 3.3.4.2 Multiple Instruction Issue durch effizientes Phasenpipelining erreichen viele RISC Strukturen CPI Werte zwischen 1 und 1,5 RISC Architekturen werden wegen des Zieles (CPI = 1) als skalare Architekturen bezeichnet verschiedene Techniken möglich, um mit einem Prozessor pro Taktzyklus mehr als ein Ergebnis zu erhalten (CPI < 1), „multiple instruction issue“ Anstoß der Ausführungsphase von mehr als einem Befehl innerhalb eines Taktzyklus z.B. mit Superskalararchitekturen mehr als eine Instruktion pro Taktzyklus es müssen intern 2 (oder mehr) Befehle in echter Nebenläufigkeit zueinander verarbeitet werden, Abkehr vom Von-Neumann Paradigma 29 3.4 bisher: innerhalb eines RISC-Prozessors befinden sich mehrere Befehle quasi parallel in der Ausführung, in verschiedenen zeitlich aufeinander folgenden Phasen nun: die superskalare Ausführung des Programms bedeutet jedoch, dass Instruktionen zur gleichen Zeit abgearbeitet werden, im Extremfall sogar in invertierter zeitlicher Reihenfolge (out of order execution (ooo)), ersetzen der Befehlssequentialität durch die „Ergebnissequentialität“ wichtig ist nicht mehr, in welcher Reihenfolge etwas berechnet wird, sondern wie es berechnet wird → zusätzliche Hardware erforderlich, siehe Bild K+A-3.3_F 9 Prinzip: o Predecode-Unit erzeugt zusätzliche Informationen für die aus HS geladenen Befehle, werden im Instruction Cache gespeichert → Zweck: später benötigte Informationen möglichst schnell verfügbar haben o zwischen Instruction Cache und Instruction Buffer mehrere Datenpfade, um die benötigte Anzahl von Befehlen pro Takt in die Verarbeitung laden zu können, Anzahl muss mindestens der internen Parallelität (z.B. Anzahl der ALUs) entsprechen o während im Instruction Cache Blöcke von Instruktionen mit aufeinanderfolgenden Adressen stehen, lädt der Prozessor diese Instruktionen in logischen Zusammenhang in den Instruction Buffer o doppelte Pufferung soll möglichst viele Möglichkeiten zum Ausgleich von Fehlzugriffen (cache misses) oder Instruktionsflussänderungen bieten o Decode-, Rename-, Dispatch Unit führt in Zusammenarbeit mit den Instruction Buffer eine erste Bearbeitung von Kontrollflussänderungen durch → wie soll z.B. bei bedingten Sprüngen/ Verzweigungen Prozessor den Programmverlauf weiterverfolgen? Außerdem Kontrolle von Datenabhängigkeiten, Maßnahmen zur Behebung. o danach Übergabe der Instruktionen gemäß Zuteilungsalgorithmus an die ausführenden Einheiten o Ausführende Einheiten: ALUs für Operationen, Load/Store-Pipelines für Speicherzugriffe o Reorder-, Commit Unit verantwortlich für Ergebnissequentialität, sämtliche Ausführung von Befehlen die spekulativ durchgeführt wurden bzw. in Zusammenhang mit Datenabhängigkeiten standen, werden hier abschließend bestätigt oder verworfen VLIW-Architekturen (very long instruction word) o Variation der Superskalararchitekturen o können mehrere in einem Wort codierte Maschinenbefehle parallel zueinander ausführen o es werden Hardwarearchitekturen mit parallelen Rechenwerken/ FE benötigt o spezieller Compiler packt jeweils n unabhängige Befehle eines Programms in ein VLIW (Befehlswort z.B. 512 Bit) o jedes spezifische Feld mehrerer aufeinanderfolgender VLIWs enthält eine Operation aus einer sequentiellen Operationsfolge für eine der FEn des Prozessors Rechenwerke parallele RW: o parallele Operationen auf Bit-Formaten unterschiedlicher Breite (Byte, Word, …) o alle beteiligten Bit-Positionen werden gleichzeitig behandelt 30 3.4.1 o prinzipiell höherer Datendurchsatz pro Zeiteinheit als bei seriellen RW o Nachteil: höherer HW-Aufwand serielle RW: o jedes einzelne Operanden-Bit wird separat verarbeitet, auftretende Überträge müssen über mindestens eine Taktperiode zwischengespeichert werden o getaktete Schaltungen erforderlich o Operationszeit wird größer, größere Operandenformate o Operationszeit kann bei manchen seriellen RW auch von Operandenstruktur (0-1Verteilung) abhängen o Vorteil (meist) geringerer Implementierungsaufwand Addierer 3.4.1.1 Parallele Addierer Ripple-Carry-Addierer (RCA), siehe Bild K+A-3.4_F 1 o einfachster parallel arbeitender Addierer für 2 n-Bit breite Operanden A und B mit den Bitkomponenten an-1 … a0 und bn-1 … b0 o nach Anlegen der Operanden A und B wird Summe erst dann gültig, wenn der durch alle Adder laufende Übertrag bei der werthöchsten Bitstelle angekommen ist o vollständige Summe erst nach 𝑡 = (2𝑛 + 1) ∙ 𝜏 verfügbar, τ = Gatterlaufzeit Carry-Look-Ahead-Addierer (CLA), siehe Bild K+A-3.4_F 2 o Vorausberechnung des Übertrags ci in geringerer und von n nahezu unabhängiger Zeit o gilt auch für die Stellensummen si o Übertrag kann separat – aber in jeder Bitstelle einheitlich – nach einer Zeit von t = 3τ bereitgestellt werden o Schaltungsaufwand kann erheblich größer werden als bei RCA (bei gleicher Bitstellenzahl) o Berechnung der Stellensummen ebenfalls einheitlich, in jeder Bitstelle t = 6τ o für größere Bitstellen sehr hoher Implementierungsaufwand, Kompromiss: kaskadierter CLA-Addierer, siehe Bild K+A-3.4_F 3 3.4.1.2 Serielle Addierer 3.4.2 siehe Bild K+A-3.4_F 4 Schaltwerke als 1 Bit-Addierer serielle Addierer sind getaktete Schaltwerke, die mit jedem Takt genau 1 Bit der beteiligten n-stelligen Operanden verarbeiten Abarbeitung beginnt beim niederwertigsten Bit Addierer benötigt 2 n-stellige voreinstellbare Schieberegister, einen Volladder sowie einen 1-Bit-Zwischenspeicher für Carry Summe und Übertrag stehen nach n+2 Takten zur Verfügung (Register A, ZS) Steueraufwand größer als bei paralleler Addition insgesamt erforderliche Schaltungsaufwand bei größeren n erheblich geringer Subtrahierer siehe Bild K+A-3.4_F 5 31 3.4.3 Paralleladdierer kann auch Subtraktion der Operanden A und B realisieren, wenn bei 𝐷 = 𝐴 − 𝐵 der Subtrahend B als vorzeichenbehaftete negative Dualzahl interpretiert und dann addiert wird 𝐴 + (−𝐵) einführen von Steuerinformation AS in Addierschaltung, 0/1-Belegung von AS bestimmt ausführende Operation vorzeichenbehaftete Zahlen werden unterschiedlich codiert o Einerkomplement: bitweises Invertieren o Zweierkomplement: zunächst Einerkomplement bilden dann +1 addieren, Assembler benutzen allgemein das Zweierkomplement Multiplizierer 3.4.3.1 Parallele Multiplizierer siehe Bild K+A-3.4_F 6 und fortführend duale Multiplikation, ähnliche Rechenregeln wie duale Addition, Stellenmultiplikation über Und-Verknüpfung zusätzlicher HW-Aufwand für Zeilenverschiebungen und nachfolgend erforderliche Spaltenaddition Produkt P bei n-stelligem „Multiplikanden“ B und „Multiplikator“ A immer 2n Stellen groß konkreter Multiplizierer erfordert 𝑛 ∙ 𝑛 Und-Glieder sowie (𝑛 − 1) ∙ 𝑛 Volladdierer („parallel“ = Verknüpfung aller Bitstellen beginnt gleichzeitig), arbeitet relativ schnell keine internen Steuersignale größere Operandenbreiten (16x16 Bit ca. 4200 Gatter, 32x32 Bit ca. 253000 Gatter) benötigen mehr Chipfläche, Energie 3.4.3.2 Matrixmultiplikation Kompromiss zwischen Flächen-/ Gatterbedarf und Rechenzeit enthält ROM-Tabelle, deren Zeilen und Spalten direkt von den Operanden über Decoder angesteuert werden, entsprechendes Feld enthält Produkt Matrixinhalte sind Tetraden 0x0 … 0xF, symmetrisch zu Hauptdiagonalen (von unten links nach oben rechts), siehe Bild K+A-3.4_F 8 erweiterbar für 2 Byte Operanden, 32000 Produkte zu je 16 Bit mit bestimmten Multiplikationsverfahren wird nur konstante Taktzahl für Produktbildung benötigt arbeitet nebenläufig mit Operandenteilen auf Produktmatrix, Taktzahl von Operandenstruktur unabhängig, für Pipelines in RISC-Prozessoren geeignet 3.4.3.3 Serielle Multiplizierer siehe Bild K+A-3.4_F 9 verarbeiten jedes Bit einzeln Vorteil: HW Aufwand geringer Nachteil: komplizierte Taktsteuerung 32 3.4.3.4 Multiplikation mit CISC-Architekturen 3.4.4 Steuerung der inneren Abläufe durch Mikrobefehlsspeicher → Bereitstellen Steuersignale si Multiplizieren benötigen n unterschiedlich lange Zyklen für die Ausführung, Dauer sowohl von Operandenstruktur als auch von n abhängig, Multiplikationszeit wächst mit Anzahl der Einsen im Multiplikator „Strukturabhängigkeit“, nur für CISCArchitekturen geeignet Dividierer aus algebraischer Sicht Umkehroperation zur Multiplikation (2 n-stellige Operanden, 2n Produkt) bei paralleler Division muss Dividend 2n-stellig und Divisor n stellig sein berechnet Quotient und Rest, Rest ≥ 0 aber kleiner als Divisor Rückführung auf Operationen Subtraktion und Verschiebung 33 4. Übung 4.1 Materialien http://www-user.tu-chemnitz.de/~erma/dienst/lehre/ John L. Hennessy; David A. Patterson: Computer Architecture. Rechnerarchitektur) Morgan Kaufmann; Peter Ashenden: The Designer's Guide to VHDL 4.2 Adder 4.2.1 Halfadder (2, 2) ohne Carry In (deutsch: 2 Eingänge: a, b 2 Ausgänge: s, cout (Carry Out) Mathematische Funktionen: 𝑠 = (𝑎 + 𝑏) mod 2 𝑐out = ⌊(𝑎 + 𝑏)/2⌋ ←Zeichen für Abrunden Logische Funktionen: 𝑠 = 𝑎 ≁ 𝑏 = 𝑎̅𝑏 + 𝑎𝑏̅ (zwei Und-Verknüpfungen verbunden über Oder-Verknüpfung) 𝑐out = 𝑎𝑏 (Und-Verknüpfung) a =1 s & cout b 4.2.2 Fulladder (3, 2) mit Carry In 3 Eingänge: a, b, cin 2 Ausgänge: s, cout (Carry Out) Mathematische Funktionen: 𝑠 = (𝑎 + 𝑏 + 𝑐in ) mod 2 𝑐out = ⌊(𝑎 + 𝑏 + 𝑐in )/2⌋ Logische Funktionen: ̅ ̅̅̅ 𝑠 = 𝑎 ≁ 𝑏 ≁ 𝑐in = 𝑎̅𝑏̅𝑐in + 𝑎̅𝑏𝑐̅̅̅ in + 𝑎𝑏𝑐 in + 𝑎𝑏𝑐in 34 cin 0 0 0 1 0 1 0 1 0 0 cout 1 1 1 1 0 1 0 1 a b 𝑐out = 𝑎𝑏 + 𝑏𝑐in + 𝑎𝑐in = 𝑎𝑏 + 𝑐in (𝑎 + 𝑏) = Halfadder a b generate HA HA propagate s a ~ b ~ cin 4.2.3 Ripple Carry Adder bi-1 ai-1 ci-1 b 1 a1 FA b 0 a0 0 FA si-1 c2 FA s1 c1 s0 Manchester Carry Chain p schaltet wenn p=0 g cout HA p p p transmission gate cin p schaltet wenn p=1 Wenn p=1 ist cout nur noch von cin abhängig 𝑐out = 𝑎𝑏 ⏟ + 𝑐in (𝑎 ⏟ ≁ 𝑏) = 𝑔 + 𝑐in 𝑝 𝑔 cout cin a ~ b cin a b ab cin a ~ b generate a ~ b 4.2.4 ≥1 ab propagate ci (𝑎 𝑎𝑏 ⏟ + 𝑐in ⋅ ⏟ ≁ 𝑏) carry generate carry propagate 𝑝 35 4.2.5 Carry Skip Adder 𝑝=𝑎≁𝑏 𝑔 = 𝑎𝑏 𝑠 = 𝑐in ≁ 𝑝 𝑐out = 𝑔 + 𝑝𝑐in Annahme: 𝑝 = 1 → 𝑔 = 0 (wenn 𝑝 = 1 ist g immer gleich 0) cin FA a0 b0 =1 FA a1 b1 ≥1 FA a2 cout b2 =1 =1 & & Längster Pfad (wenn alle 𝑎𝑖 = 1, 𝑏𝑖 = 0, 𝑐in = 1) wird verkürzt, andere Fälle nicht unbedingt. 4.2.6 Carry Look Ahead Adder (CLA) Berechnet letztes Carry schneller. Zwischen-Carrys aber weiterhin nötig für Summe. 𝑝 =𝑎+𝑏 𝑔 = 𝑎𝑏 𝑠 = 𝑐in ≁ 𝑝 ≁ 𝑔 𝑐out = 𝑔 + 𝑝𝑐in Beispiel für 4 Bit: 𝑐1 = 𝑐2 = 𝑐3 = 𝑐out = 𝑔0 + 𝑝0 𝑐0 𝑔1 + 𝑝1 (𝑔0 + 𝑝0 𝑐0 ) 𝑔2 + 𝑝2 (𝑔1 + 𝑝1 (𝑔0 + 𝑝0 𝑐0 )) 𝑔3 + 𝑝3 (𝑔2 + 𝑝2 (𝑔1 + 𝑝1 (𝑔0 + 𝑝0 𝑐0 ))) = 𝑎3 𝑏3 + (𝑎3 + 𝑏3 ) (𝑎2 𝑏2 + (𝑎2 + 𝑏2 )(𝑎1 𝑏1 + (𝑎1 + 𝑏1 )(𝑎0 𝑏0 + (𝑎0 + 𝑏0 )𝑐0 ))) → cout ist nicht mehr abhängig von Zwischen-Carrys 36 g0 p0 g1 p1 g2 p2 c1 c0 g3 p3 c2 s0 c3 s1 a0 b 0 s2 a1 b 1 a2 b 2 cout s3 a3 b 3 𝑐out = 𝑎3 𝑏3 + 𝑎3 𝑎2 𝑏2 + 𝑏3 𝑎2 𝑏2 + ⋯ + 𝑏3 𝑏2 𝑏1 𝑏0 𝑐0 positiv: zweistufige Logik negativ: viele Eingänge (hoher fan in) macht es groß und langsam, komplexe Verdrahtung (Routing Problem) Baumstrukturen verwenden, Regularität 4.2.7 Carry Select Adder Z.B. aus einem 8 Bit Adder zwei 4 Bit Adder machen. Da vordere 4 Bit vom Carry Out der hinteren 4 Bit abhängen, werden die vorderen 4 Bit für beide Fälle des Carrys (0, 1) berechnet und über MUX am Ende entschieden, welches Ergebnis als korrektes genommen wird. b7…b4 a7…a4 c4=1 b7…b4 a7…a4 c4=0 4 Bit Adder 4 Bit Adder b3…b0 a3…a0 cout, s7…s4 cout, s7…s4 MUX 4 Bit Adder c4 cout, s7…s4 4.2.8 c0 s3…s0 Serial Adder D a b FA cin Clk D Clk & Q sum Q cout damit nicht Carry von alter Addition übernommen wird Bitstellen von a und b gelangen über Schieberegister rein, Bitstellen von sum über Schieberegister raus. Erstes cin vor a und b in FA reinschieben. 37 4.3 Selbst zu entwerfende Komponente 4.3.1 Bedingungen und Hinweise logische oder arithmetische Schaltung zwei 8 Bit breite Eingangswerte oder einen 16 Bit breiten erlaubt sind nur Grundgatter vom Typ UND, ODER, NAND, NOR und NOT mit höchstens 2 Eingängen VHDL Modell und Testbench entwerfen alle Gatter besitzen Laufzeit von 5ns in Entwurfssimulation für Simulation nach Implementierung müssen Ein- und Ausgangsregister angehängt werden, entfernen der 5ns pro Gatter und simulieren der echten Verzögerungszeiten dem Lehrer das Modell demonstrieren (Powerpoint-)Präsentation vor Lehrer und anderen Studenten längsten Pfad erklären zum Entwerfen können z.B. Praktikumsrechner benutzt oder auf privaten Rechner das Xilinx Web Pack installiert werden Umgebungsdateien holen über: gtar xvfz /home/4all/tmp/vje/component_template.tgz Quelldateien in dc.script in Anführungsstrichen eintragen, durch Komma getrennt im Makefile eventuell Componentennamen ändern dc_shell –f dc.script ¦ tee synthesis.log 4.3.2 Eigene Komponente 8-Bit-BCD-Adder gewählt, berechnet aus zwei 8-Bit-BCD Zahlen + Carry In eine 8 Bit BCD Summe mit Carry Out berechnet nur mit BCD Zahlen an den Eingängen korrekte Ergebnisse Zerlegung der Addition auf zwei 4-Bit-BCD-Adder für Erläuterung zum längsten Pfad siehe Präsentationen Aus Eingangswerten werden zunächst über normale Full Adder eine Zwischensumme Z und ein Zwischen-Carry CO berechnet. Gleichungen für Full Adder: CI 0 0 1 1 1 0 0 1 0 0 Z 0 1 1 1 1 0 0 1 a b CI 0 0 0 1 0 1 0 1 0 0 CO 1 1 1 1 0 1 0 1 a b 𝑍 = 𝑎 ≁ 𝑏 ≁ 𝐶𝐼 = (𝑎̅𝑏 ∨ 𝑎𝑏̅) ≁ 𝐶𝐼 = 𝑎̅𝑏𝐶̅𝐼 ∨ 𝑎𝑏̅𝐶̅𝐼 ∨ 𝑎𝑏𝐶𝐼 ∨ 𝑎̅𝑏̅𝐶𝐼 𝐶𝑂 = 𝑎𝑏 ∨ 𝑎𝐶𝐼 ∨ 𝑏𝐶𝐼 Zwischen-Carry wird an nachfolgenden Full Adder weiter gereicht. Aus Zwischensummen und Zwischen-Carry des vierten Full Adders (CO3) werden die BCD-Summe s und das Carry Out des 4-Bit-BCD-Adders berechnet. Gleichungen für Summe und Carry Out: 38 Z3 0 0 1 1 Z2 0 1 1 0 Z3 0 0 1 1 Z2 0 1 1 0 Z3 0 0 1 1 Z2 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 1 0 1 0 1 s0 0 0 Z1 0 Z0 1 CO3 Z3 Z2 0 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1 s2 1 0 Z1 0 Z0 1 CO3 Z3 Z2 0 0 0 1 1 1 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 1 0 0 0 1 0 0 1 0 1 0 1 1 0 1 1 1 0 1 0 1 s1 1 0 Z1 0 Z0 1 CO3 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 1 1 1 1 1 1 1 0 1 s3 0 0 Z1 0 Z0 1 CO3 cout 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 0 Z1 0 Z0 1 CO3 𝑠0 = 𝑍0 ̅̅̅1 𝐶𝑂3 ∨ 𝑍3 𝑍2 ̅̅̅ 𝑠1 = ̅̅̅ 𝑍3 𝑍1 ̅̅̅̅̅ 𝐶𝑂3 ∨ 𝑍 𝑍1 ̅̅̅ ̅̅̅ 𝑠2 = 𝑍1 𝐶𝑂3 ∨ 𝑍3 𝑍2 ∨ 𝑍2 𝑍1 𝑠3 = 𝑍1 𝐶𝑂3 ∨ 𝑍3 ̅̅̅ 𝑍2 ̅̅̅ 𝑍1 𝑐out = 𝐶𝑂3 ∨ 𝑍3 𝑍2 ∨ 𝑍3 𝑍1 Beide 4-Bit-BCD-Adder werden über Carry Out des ersten Adders zu einem 8-Bit-BCDAdder verknüpft. Tipp: Für Suche nach längstem Pfad nicht nur Eingangsbelegung betrachten, sondern Wechsel von einer bestimmten Eingangsbelegung zu einer anderen bestimmten → bei 9900 möglichen Eingangsbelegungspaarungen (für a und b Zahlen von 0 bis 99, ohne doppelte Paarungen, mit Carry In) ergeben sich 9900 ⋅ 9900 = 98010000 mögliche Wechsel. 39 4.4 Prozessoren 4.4.1 Alignment 0 8 16 24 Byte 1 Byte 2 Byte 3 Byte 4 Wort nicht möglich, da Beginn immer bei Vielfachen der Länge kein Wort Wort Speicherzugriffe müssen ausgerichtet sein. 4.4.2 Schaltung gegen Spikes Din & Clk & 1 Clk 4.4.3 gegen Spikes, die durch Verzögerungen des Negators entstehen ≥1 Z & Dauer von Maschinenbefehle → CPI 𝑛 𝐶𝑃𝐼 = ∑ Takte für Befehl i ⋅ Häufigkeit des Befehls i 𝑖=0 Summe der Häufigkeiten aller Befehle ergibt 1. Befehl Takte Häufigkeit Takte ∙ Häufigkeit Laden 8 0,21 1,68 Speichern 7 0,12 0,84 ALU 6 0,37 2,22 Vergleiche 7 0,06 0,42 Sprünge 4 0,02 0,08 UP-Sprünge 6 0 0 ausgeführt 5 0,12 0,6 Verzweigungen nicht ausgeführt 4 0,11 0,44 6,28 4.4.4 Pipeline Aufgabe 2 Pipeline mit 10 Stufen. 9 Stufen benötigen 50ns, eine benötigt 70ns. Pro Stufe zusätzliche Verzögerung von 10ns. Alternative Pipeline mit 9 Stufen. 8 Stufen benötigen 55ns, eine 40 benötigt 65ns (keine zusätzliche Verzögerung hier?). Vergleiche Befehlsdurchsatz für sequentielle Abarbeitung und berechne Beschleunigung für beide Varianten. Serielle Abarbeitung eines Befehls nach dem anderen (ohne Pipeline): erste Pipeline: 9 ⋅ 50𝑛𝑠 + 70𝑛𝑠 = 520𝑛𝑠 pro Befehl zweite Pipeline: 8 ⋅ 55𝑛𝑠 + 65𝑛𝑠 = 505𝑛𝑠 pro Befehl Abarbeitung in Pipeline (alle Stufen müssen sich nach langsamster Stufe richten): erste Pipeline: 10 ⋅ (70 + 10)𝑛𝑠 = 800𝑛𝑠 → pro Stufe 80ns zweite Pipeline: 9 ∙ 65𝑛𝑠 = 585𝑛𝑠 → pro Stufe 65ns Abarbeitung ohne Pipeline Zeit pro Pipelinestufe 520𝑛𝑠 erste Pipeline: 80𝑛𝑠 = 6,5 Beschleunigung = zweite Pipeline: 505𝑛𝑠 65𝑛𝑠 = 7,77 Zweite Pipelinevariante ist schneller und besitzt zudem weniger Stufen (weniger Hazards). 4.4.5 Pipeline Aufgabe 4 Pipeline der Tiefe 4 mit folgenden Hazards zwischen Befehl i und seinen Nachfolgern: Befehl Hazard-Häufigkeit Anzahl der Wartezyklen i+1 (ohne i+2) 20% 2 i+2 5% 1 Wie groß ist Leistungserhöhung des Pipelinings mit und ohne Hazards? CPI ohne Verzögerungen = 1 𝐶𝑃𝐼 = 1 + 0,2 ∙ 2 + 0,05 ∙ 1 = 1,45 Beschleunigung ohne Verzögerung = 4 Beschleunigung mit Verzögerung 4.4.6 Beschleunigung ohne Verzögerung CPI Dauer ohne Pipeline 4 = = = 2,76 Dauer mit Pipeline 1,45 = Pipeline Aufgabe 5 Verzweigungshäufigkeit: bedingte Verzweigungen = 20% (davon werden 60% ausgeführt) Sprünge und Unterprogrammaufrufe = 5% Pipeline der Tiefe 4. Unbedingte Verzweigungen am Ende des zweiten Zyklus entschieden, bedingte Verzweigungen am Ende des dritten Zyklus entschieden. Erste Pipelinestufe immer ausgeführt. Wie viel schneller ohne Verzweige-Hazards? 𝐶𝑃𝐼 = 1 + 0,05 ∙ 1 ⏟ Sprünge 1 Wartezyklus + 0,2 ∙ 0,4 ∙ 1 ⏟ + bedingte Verzweigungen nicht ausgeführt → 1 Wartezyklus 41 0,2 ∙ 0,6 ∙ 2 ⏟ bedingte Verzweigungen ausgeführt → 2 Wartezyklen = 1,37 Ohne Verzweigungen wäre Abarbeitung 1,37-mal schneller. 4.4.7 Score-Boarding Befehlsstatus Befehl Übergabe Opcode lesen Ausführung beendet Ergebnis schnreiben ld f2,32(r0) x x x x ld f4,40(r0) x x x - (x) multd f6,f4,f2 x - (x) subd f8,f2,f2 x x divd f4,f2,f8 - (x) (-) addd f10,f6,f4 - 1. Befehl 2: Ausführung beendet 2. Befehl 2 (in Klammern): Ergebnis schreiben Status FE FE Busy Op Fres Fj Fk Qj Qk Rj Rk INT x Load F4 r0 Mul1 x Multd F6 F4 F2 Integer (-) 1 (-) Mul2 Add x Subd F8 F2 F2 Div - (x) - (Divd) (F4) (F2) (F8) (-) (Add) (-) (1) Ergebnisstatus F0 F2 F4 F6 F8 F10 FE - Integer Mul1 Add - 4.4.8 Tomasulo Res-Tabelle Name Busy Op Vj Vk Qj Qk Add1 x Sub [Load1] [Load1] Add2 x Add Mult1 Mult2 Add3 Mult1 x Mult - ([Load2]) [Load1] [Load2] (-) Mult2 x Div [Load1] Add1 Erklärung: [Load1] = Wert kommt von erster Ladeeinheit Registerstatus F0 F2 F4 F6 F8 F10 Qi - Mult2 Mult1 Add1 Add2 Busy x x x x bzgl. (Qi, F4): Mult2 → Scoreboard: Int(WAW-Hazard) 42 4.4.9 DLX Aufgaben aus Teil 2 zu 2a) Basic Pipeline: 1515 Zyklen Scorboarding mit 2 Integer Units: 2425 Zyklen → Scorboarding nutzt nur bei genügend Hardware, kein Forwarding Scoreboarding mit 5 Integer Units: 1526 Zyklen Scoreboarding mit 8 Integer Units: 1364 Zyklen Tomasulo mit 2 Integer Units: 1718 Zyklen → Tomasulo langsamer trotz Forwarding, da hier Forwarding ein Takt mehr benötigt als bei Basic Pipeline (Ergebnis steht im selben Taktschritt zur Verfügung) Tomasulo mit 5 und 8 Integer Units und 2 FP: 1011 zu 2b) Vorteile Scoreboard: Außer-Reihe-Ausführung des Codes, Pipeline bleibt länger. addf f0, f3, f4 subf f6, f5, f0 addf f10, f8, f9 → Außer-Reihe-Ausführung Vorteile Pipeline: Forwarding addf f0, f3, f4 subf f6, f5, f0 → Ergebnis von f0 steht gleich zur Verfügung zu 2c) Bei viel paralleler Hardware lohnt sich Scoreboarding. Mehraufwand: Steuerung, WAW/WAR-Erkennung, Queues. zu 3b) Vorteile Tomasulo: Außer-Reihe-Ausführung, siehe Quellcode von vorhin. Dynamisches Register-Renaming das Hazards erspart (WAW). multd f6, f2, f2 addd f2, f0, f6 addd f8, f0, f6 Beide addd Befehle durch dynamisches Register-Renaming hazardfrei. Vorteile Pipeline: Schnelleres Forwarding. Tomasulo stoppt bei voller Reservation Station. zu 3e) Bei zu wenigen Reservation Stations wird es eng, lieber ein paar mehr. 43 zu 3f) Steuerung, Reservation Stations, Common Data Bus (CDB) zu 4) Vorteil Tomasulo: Forwarding, dynamisches Register-Renaming ein Befehl pro CDB → da nur ein CDB vorhanden kann auch nur ein Befehl pro Taktschritt fertig werden → ein zweiter Befehl müsste warten zu 5) Register umbenennen zu 6) formales Aufrollen streiche Sprünge und Vergleiche Anpassung Indizes/Adressoffsets Codeumwandlung zur Optimierung/Stall Vermeidung → 8,67 pro Iteration (3 Iterationen → 3-mal Aufrollen) 4.5 Prüfungsinhalte Vorlesung 5-stufiges Pipelining, DLX, Hazards, Forwarding, Scoreboarding, Tomasulo (Overhead, Common Data Bus, Reservation Station), Unterschiede zwischen Verfahren 44