4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die...

108
Praktische Informatik 2 4. Mikroprogrammierung 4a - 1 © Wolfgang Effelsberg 4. Mikroprogrammierung 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die Integer Java Virtual Machine und der Stack 4.4 Die Mikroprogrammiersprache MAL 4.5 Optimierung der Mikroarchitektur

Transcript of 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die...

Page 1: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 1© Wolfgang Effelsberg

4. Mikroprogrammierung

4.1 Motivation

4.2 Eine einfache Mikroarchitektur

4.3 Die Integer Java Virtual Machine und der Stack

4.4 Die Mikroprogrammiersprache MAL

4.5 Optimierung der Mikroarchitektur

Page 2: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 2© Wolfgang Effelsberg

4.1 Motivation

Die Aufgabe des Mikroprogramms ist das Ausführen der Maschinenbefehle der ISA-Ebene (Instruction Set Architecture) in Hardware.

Das Mikroprogramm verwendet die Ebene der digitalen Logik (die Gatter-Schaltwerke und Schaltnetze und die Register) der digitalen Logik direkt. Es handelt sich also sozusagen um einen Hardware-Interpreter für Maschinenbefehle.

Je nach Komplexität der Maschinenbefehle kann die Mikroarchitektur eines Mikroprozessors sehr einfach oder sehr aufwändig sein

Page 3: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 3© Wolfgang Effelsberg

4.2 Eine einfache Mikroarchitektur

Als Beispiel entwickeln wir eine Mikroarchitektur, die JVM-Befehle in Hardware ausführen kann. Dabei beschränken wir uns auf Integer-Operati-onen. Wir nennen sie IJVM (Integer Java Virtual Machine).

Betriebssystemmaschine

ISA (Instruktionssatz-Architektur)

Mikroarchitektur

Assembler

Digitale Logik (Gatter, Register)

Stufe 4

Stufe 3

Stufe 2

Stufe 1

Stufe 0

Page 4: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 4© Wolfgang Effelsberg

Das Prinzip der IJVM

In einer Endlosschleife:

• Hole den nächsten IJVM–Befehl.

• Führe den IJVM–Befehl durch ein kleines Mikroprogramm aus

Ein Mikroprogramm besteht aus Mikroinstruktionen. Eine Mikroinstruktion ist eine Folge von Bits. Die Bits beschreiben den Zustand von „Schaltern“ auf der Ebene der digitalen Logik:

• ein (1)

• aus (0)

Eine Mikroinstruktion wird in einem Maschinenzyklus ausgeführt.

Page 5: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 5© Wolfgang Effelsberg

Der Datenpfad der IJVM (1)

1. Register (alle 32 Bits breit, bis auf MBR):

• Speicherzugriff:

MDR: Memory Data Register

MAR: Memory Address Register

PC: Program Counter

MBR (8 Bit): Memory Buffer Register

• SP: Stack Pointer

• LV: Local Variables

• CPP: Constant Pool Pointer

• TOS: Top Of Stack

• OPC: Offset Program Counter

• H: Help register

Page 6: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 6© Wolfgang Effelsberg

Datenpfad der IJVM (2)

2. Zwei Busse:

• Bus B: Inhalt eines Registers auf den B-Eingang der ALU legen

• Bus C: Ergebnis einer ALU-Operation aufdie Eingänge (fast) aller Register legen

3. ALU (Arithmetic and Logic Unit, Rechen-werk):

• sechs Eingangssignale zum Steuern der ALU-Operation

• Das Ergebnis geht an den Shifter

• und zwei Signale N und Z als Aus-gänge

4. Shifter:

• modifiziert das Ergebnis durch Shifting

• Steuerung mit zwei Signalen

Page 7: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 7© Wolfgang Effelsberg

Zugriff auf die Register

• Auslesen („Register auf den Bus B legen“):

• Kontrollsignal anlegen

• Besonderheiten:MAR wird für den Speicherzugriff verwen-det und kann nicht auf B gelegt werdenMBR behandeln wir später (zusätzliches Kontrollsignal)H wird automatisch auf den A-Eingang der ALU gelegt

• Speichern („Register vom C-Bus laden“)

• Kontrollsignal anlegen

• Besonderheiten:MDR kann aus dem Speicher oder von C aus geladen werdenMBR wird immer aus dem Speicher geladen

Page 8: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 8© Wolfgang Effelsberg

Die Arithmetic Logic Unit (ALU)

Wir verwenden die folgende (stark vereinfachte) ALU:

hier: Logik für ein Bit. Die ALU entsteht durchVerketten von 32dieser Schaltungen!

Page 9: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 9© Wolfgang Effelsberg

Steuerung der ALU

Increment = Carry in Bit 0 auf 1 setzen!

0

0

1

Page 10: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 10© Wolfgang Effelsberg

Shifter

Ermöglicht eine Manipulation der ALU Ausgabe:

• Zwei Signale

• SLL8 (Shift Left Logical 8) ‏

verschiebe alle Bits um 8 Stellen nach links

fülle untere 8 Bits mit 0 auf

• SRA (Shift Right Arithmetic 1)

verschiebe alle Bits um 1 Stelle nach rechts

verändere das höchstwertige Bit nicht

Page 11: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 11© Wolfgang Effelsberg

Zeitlicher Ablauf einer Mikroinstruktion (ein Zyklus)

Wie kann man innerhalb einer Mikroinstruktion dasselbe Register lesen und schreiben?

Page 12: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 12© Wolfgang Effelsberg

Speicherzugriff auf Daten (1)

• per MAR/MDR

• Immer ein Wort gleichzeitig (= 4 Byte)

• MAR enthält die Adresse

• MDR enthält den Inhalt

• Beispiel:

MAR = 2

dann enthält MDR die Bytes 8-11

• Realisierung des MAR in Hardware:

Page 13: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 13© Wolfgang Effelsberg

Speicherzugriff auf Daten (2)

• Speichern:• lade MAR mit der Speicher-Adresse

(erster Zyklus)• lade MDR mit dem Inhalt, signalisiere, dass

gespeichert werden soll (zweiter Zyklus)• Die Daten sind am Ende des dritten Zyklus

im Speicher, MDR darf im dritten Zyklus wieder verwendet werden!

• Lesen:• lade MAR mit der Speicher-Adresse,

signalisiere, dass geladen werden soll (1. Zyklus)‏

• Ergebnis liegt ab Ende 2. Zyklus im MDR, ursprünglicher Inhalt des MDR kann im 2. Zyklus noch verwendet werden

• im 2. Zyklus darf nicht vom C Bus ins MDR geschrieben werden

Page 14: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 14© Wolfgang Effelsberg

Speicherzugriff auf Maschinenbefehle (ISA-Instruktionen)

• per PC/MBR

• byteweise

• MBR wird zur Ansteuerung des Mikropro-gramms für diesen Maschinenbefehl (diese ISA-Instruktion) verwendet (später dazu mehr)

• Speichern gibt es nicht!

• Lesen analog zum Lesen von Daten

• nur ein Byte

• FETCH-Signal zum Ansteuern

• Bei allen Speicherzugriffen:

• Annahme, dass die Daten zu 100% im Cache gefunden werden, da sonst mehr als ein Zyklus für den Speicherzugriff gebraucht würde

Page 15: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 15© Wolfgang Effelsberg

Mikroinstruktion

Eine Mikroinstruktion besteht aus 36 Bits:

• 8 Bits (ALU) für die Steuerung der ALU

• 9 Bits (C) für das Schreiben in die Register

• 3 Bits (MEM) für den Speicherzugriff

• 4 Bits (B) für das Legen der Register auf den B-Bus

• 9 Bits (Addr), um die nächste Mikroinstruktion zu adressieren

• 3 Bits (JAM) für bedingte Sprünge

Page 16: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 16© Wolfgang Effelsberg

Kontrollpfad

• Control storefür das Mikroprogramm (512 Plätze für Instruktionen)

• Micro Instruction Register (MIR): enthält die aktuelle Mikroinstruktion

• Micro Program Counter (MPC):zeigt auf die nächste auszufüh-rende Mikroinstruktion

• 4-to-16 Decoder:Bildet das 4-Bit-Signal für den B-Bus auf die Enable-Signale für die einzelnen Register ab

Page 17: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 17© Wolfgang Effelsberg

Ablauf eines Zyklus (1)

Lade neue Mikroinstruktion:

• gemäß MPC

• aus dem control store in das MIR

Page 18: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 18© Wolfgang Effelsberg

Ablauf eines Zyklus (2)

Stabilisieren der ALU-Eingänge:

• 4-Bit B-Teil des MIR wird dekodiert

• Das entsprechende Register wird auf den B-Bus gelegt

• B-Bus stabilisiert sich und liegt am B-Eingang der ALU an

• H-Register liegt am A Eingang der Alu an

Page 19: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 19© Wolfgang Effelsberg

Ablauf eines Zyklus (3)

Berechnung:

• die ALU rechnet

• der Shifter modifiziert das Ergebnis

Page 20: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 20© Wolfgang Effelsberg

Ablauf eines Zyklus (4)

Stabilisieren des C-Buses:

• die Ausgabe des Shifters auf dem C-Bus stabilisiert sich

Page 21: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 21© Wolfgang Effelsberg

Ablauf eines Zyklus (5)

Speichern in Registern:

• Laden der Register vom C-Bus

• Das geschieht sehr schnell, als Reaktion auf steigende Flanke des Taktgebers

Page 22: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 22© Wolfgang Effelsberg

Ablauf eines Zyklus (6)

Berechnen des neuen MPC:

• Generell steht die Adresse der nächsten Mikroinstruktion im Addr-Feld der aktuellen Mikro-instruktion.

• Ausnahmen:• verzweigen (JAMN, JAMZ)• springen (JMPC)‏

Page 23: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 23© Wolfgang Effelsberg

Bedingte Sprünge

• Bei bedingten Sprüngen ist typischerweise das oberste Bit von NEXT_ADDR auf 0 ge-setzt (NEXT_ADDR[8] = 0).

• Wenn das JAMN(Jump on Negative)-Bit gesetzt ist, wird zu NEXT_ADDRESS[8] der ALU-Ausgang N „hinzugeodert“:

• MPC[8] = NEXT_ADDRESS[8] OR N

• Analog dazu wird JAMZ (Jump on Zero) gehandhabt.

• Insgesamt gilt: MPC[8] = (JAMZ AND Z) OR (JAMN AND N) OR NEXT_ADDRESS[8]

• Das N-Bit ist gesetzt, wenn das Ergebnis der letzten ALU-Operation eine 1 im höchst-wertigen Bit hatte.

• Das Z-Bit ist gesetzt, wenn dasErgebnis der letzten ALU-Ope-ration 0 war.

Page 24: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 24© Wolfgang Effelsberg

Beispiel für JAMZ

Page 25: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 25© Wolfgang Effelsberg

JMPC (Jump on PC)

Verwendung:

• für direkte Sprünge

• zu einer Mikroinstruktion im control store

• die Adresse, an die gesprungen wird, wird aus dem MBR gelesen und mit NEXT_ADDR verodert.

Idee:

• Ins MBR wird immer der aktuelle Maschinen-befehl geladen.

• Dieser wird als Index in den control store verwendet.

• An der Stelle, auf die der Index zeigt, steht die erste Mikroinstruktion zur Ausführung des Maschinenbefehls.

Page 26: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 26© Wolfgang Effelsberg

4.3 Die Integer Java Virtual Machine und der Stack

Wir entwickeln jetzt ein Mikroprogramm, das die Integer Java Virtual Machine (IJVM) implementiert.

Dazu wird auch eine Stack-Verwaltung in Hardware benötigt.

Page 27: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 27© Wolfgang Effelsberg

Der Stack

Der Stack ist ein Bereich im Hauptspeicher. Er wächst von unten nach oben. Man kann

• ein 32-Bit Wort oben auf den Stack legen,

• ein 32-Bit Wort von oben vom Stack herunternehmen.

• Das Register SP (Stack Pointer) zeigt auf das oberste Wort des Stacks.

• Beispiel: SP = 2:

• verweist auf das zweite Wort im Hauptspeicher.

• Dieses Wort enthält die Bytes 8, 9, 10 und 11.

Das Register TOS (Top of Stack) soll immer den Wert des obersten Wortes auf dem Stack enthalten:

• Dies macht den Speicherzugriff effizienter. Aber:

• Es muss im Mikroprogramm explizit verwaltet werden.

Operand 2Operand 1

...

SP

TOS = Operand 2

Page 28: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 28© Wolfgang Effelsberg

Der Program Counter (PC)‏

• Der PC ist ein besonderes Register.

• Der PC addressiert Bytes (nicht Worte).

• Er verweist auf die aktuelle Stelle im zu interpretierenden IJVM-Programm.

• Bei der Ausführung wird das nächste Byte des IJVM-Programms geholt:

• PC um eins erhöhen

• Fetch-Signal anlegen

• einen Zyklus warten

• dann steht des nächste Byte in MBR.

0x60

0x64

...

PC

...

Page 29: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 29© Wolfgang Effelsberg

Zur Orientierung

• Wir bauen eine JVM die Java-Bytecode ausführen (interpretieren) kann

mit signifikanten Einschränkungen, daher IJVM

• Java-Programm compilieren Java Bytecode

• Üblicherweise ist die JVM ein „gewöhnliches“ Programm.

• Wir wollen aber jetzt die JVM hardwarenah als Mikroprogramm realisieren.

• In unserem Fall: Java Bytecode = Maschinenbefehl (ISA Instruktion) (entspricht Assembler)

• Lernziel: Analog zur Interpretation von Java-Bytecode erfolgt auch die Interpretation von Assembler-Instruktionen.

Page 30: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 30© Wolfgang Effelsberg

Beispiel für einen Integer-Befehl: iadd

Die Funktionsweise des Befehls iaddVorher:

Nachher:

Operand 2

Operand 1

...

SP

0x60

0x64

...

PC

...

TOS = Operand 2

0x60

0x64

...

PC

...Summe

...

SP

TOS = Summe

Page 31: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 31© Wolfgang Effelsberg

Mikroprogramm für iadd

0x100: 0x101 000 00110101 000000100 001 0001 PC=PC+1;fetch;goto 0x1010x101: 0x102 000 00000000 000000000 000 0000 goto 0x102 (warten!)‏0x102: 0x000 100 00000000 000000000 000 0000 goto MBR

0x060: 0x061 000 00110110 000001001 010 0100 MAR=SP=SP-1;rd;goto 0x0610x061: 0x062 000 00010100 100000000 000 0111 H=TOS;goto 0x0620x062: 0x100 000 00111100 001000010 100 0000 MDR=TOS=MDR+H;wr;goto 0x100

Page 32: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 32© Wolfgang Effelsberg

Stackbehandlung

Der Stack dient zur Speicherung von

• Operanden und Ergebnis

• lokalen Variablen einer Methode/Funktion.

Frage: Warum haben lokale Variablen nicht einfach eine feste Speicheradresse?

Antwort: weil eine Methode rekursiv aufgerufen werden kann.

Das Register LV enthält immer die Adresse des Wortes, bei dem die lokalen Variablen für die aktuelle Methode beginnen.

Page 33: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 33© Wolfgang Effelsberg

IJVM-Speichermodell

• Current Local Variable Frame und Current Operand Stack sind bekannt.

• Der Constant Pool enthält unter anderem Konstanten und Information zu Methoden.

• Die Method Area enthält das eigentliche IJVM Programm in Form von IJVM-Instruk-tionen.

Page 34: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 34© Wolfgang Effelsberg

IJVM-Instruktionssatz (ISA-Instruktionen)‏

Page 35: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 35© Wolfgang Effelsberg

IJVM -Instruktionen: invokevirtual und ireturn

invokevirtual und ireturn:

• erlauben den Aufruf von Methoden

• hier vereinfacht dargestellt:

• man darf nur Funktionen für ein Objekt aufrufen.

• keine Objektorientierung mehr

Prinzipieller Ablauf:

• speichere Adresse des Objektes auf dem Stack, für das die Methode aufgerufen wird (überflüssig, da Vereinfachung)‏

• speichere Parameter des Funktionsaufrufes auf dem Stack

• rufe invokevirtual auf

• invokevirtual hat einen 2 Byte langen Parameter

• Dieser beschreibt einen Eintrag im Constant Pool.

• Der Eintrag enthält die Adresse. an der die IJVM Instruktionen für die Methode liegen.

Page 36: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 36© Wolfgang Effelsberg

Auffinden der Methode

disp2disp1invokevirtualdisp

Adresse

aufgerufeneMethode

Page 37: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 37© Wolfgang Effelsberg

Zusätzliche Daten

An der Stelle, die durch die Adresse im CPP beschrieben wird, steht folgendes:

• zwei Bytes, die die Anzahl der übergebenen Parameter enthalten

• zwei Bytes, die den Speicherplatz für lokalen Variablen für diese Funktion enthalten

• als 5. Byte die erste Instruktion der aufgerufenen Funktion.

Page 38: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 38© Wolfgang Effelsberg

Stack bei invokevirtual

Page 39: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 39© Wolfgang Effelsberg

Stack bei ireturn

Page 40: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 40© Wolfgang Effelsberg

Compilieren: Java nach IJVM

i i

Page 41: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 41© Wolfgang Effelsberg

4.4 Die Mikroprogrammiersprache MAL

Prinzipiell:• Inhalt des control stores aufschreiben

• 512 Mikroinstruktionen, je 36 Bit

Problem:• sehr unübersichtlich und fehleranfällig

• man muss sich genau überlegen, an welche Stelle welche Mikroinstruktion geschrieben wird:

• 0x99 erste Instruktion von IFEQU• 0x9B erste Instruktion von IFLT• -> kein lineares Ablegen von Instruktionen• Außerdem: die Zweige von bedingten Anweisungen unterscheiden sich nur im 9.

Bit, müssen also genau 256 Speicherpätze auseinander liegen

Lösung: • Einführen einer symbolischen Micro Assembly Language

• textuelle Beschreibung von Mikroinstruktionen, wird compiliert, Adressen werden dabei automatisch vergeben.

Page 42: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 42© Wolfgang Effelsberg

MAL (1)

• Jede Zeile entspricht einer Mikroinstruktion.

• ALU-Operationen und Registerzugriff:

• Beispiel: SP = MDR = SP+1

• Illegal: MDR = SP+MDR

• Illegal: H = H-MDR

• Speicheroperationen:

• rd und wr zum Schreiben von MDR

• fetch zum Lesen in MBR

• Illegal:

erste Instruktion: MAR=SP;rd

zweite Instruktion: MDR=H

Page 43: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 43© Wolfgang Effelsberg

MAL (2)

• Direkte Bestimmung des nachfolgenden Befehls:

• entweder explizit mit goto <Marke>

Zum Beispiel: goto Main1

Jede MAL-Zeile hat eine Marke.

• oder implizit, dann weglassen von goto

• Beispiel:iadd1 MAR=SP=SP-1;rdiadd2 H=TOSiadd3 MDR=TOS=MDR+H;wr;goto Main1

Page 44: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 44© Wolfgang Effelsberg

MAL (3)

• Verzweigung aufgrund der Z- und N-Flags der ALU

• Beispiel: if(Z) goto L1; else goto L2

• Überprüfen von Registerinhalten auf Z/N:

• Beispiel: Z = TOS

TOS wird auf B gelegt

ALU erzeugt B als Ausgabe

kein Register wird geschrieben

Page 45: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 45© Wolfgang Effelsberg

MAL (4)

• Springen durch JMPC:

• goto (MBR or value)‏

• Oder, falls value=0, goto (MBR)‏

• In der Mikroinstruktion steht value in NEXT_ADDRESS.

Page 46: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 46© Wolfgang Effelsberg

Der Interpreter

Auszug:

Es folgen einige Beispiele.

Page 47: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 47© Wolfgang Effelsberg

Main

Voraussetzung:

• PC zeigt auf die als nächstes auszuführende IJVM-Instruktion.

• Diese ist bereits ins MBR geladen.

Ausführen:

• PC um 1 erhöhen

• Fetch-Signal anlegen (am Ende des nächsten Zyklus steht die nächste IJVM-Instruktion im MBR)‏

• zur Mikroinstruktion springen, mit der die Ausführung der aktuellen IJVM-Instruktion beginnt

Page 48: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 48© Wolfgang Effelsberg

iadd

Voraussetzung:

• TOS beinhaltet oberstes Wort auf Stack (= Operand 2)

Ausführen:

• SP um 1 dekrementieren (zeigt jetzt auf Operand 1)‏

• Read-Signal anlegen

• Operand 2 in H laden

• summieren, Ergebnis schreiben:

• auf die aktuelle Position im Stack

• in TOS

• nach Main1 springen

Page 49: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 49© Wolfgang Effelsberg

pop und iload<varnum>

Achtung ! Der Befehl iload <varnum> besteht aus 2 Bytes:

• 0x15 für iload

• <varnum> beschreibt den Offset der zu ladenden Variablen (relativ zu LV)‏

Page 50: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 50© Wolfgang Effelsberg

wide und wide_iload (1)

Was machen wir, wenn eine lokale Variable mehr als 256 Wörter von LV entfernt ist?

wide als IJVM-Instruktion davor schreiben:

Wide soll auch für andere Operationen (z.B. istore) funktionieren.

Page 51: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 51© Wolfgang Effelsberg

wide und wide_iload (2)

Page 52: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 52© Wolfgang Effelsberg

goto <offset>

• Sprünge erfolgen relativ zum aktuellen PC.

• OPC dient zum Speichern des PC.

• Das erste Byte des Offset wird vorzeichenbehaftet auf den B-Bus gelegt (mit sign extension):

• Das oberste Bit des Inhalts von MBR wird in allen 24 Bits wiederholt, die ergänzt werden, um zu einem 32-Bit-Wort zu kommen.

• Das zweite Byte wird ohne Berücksichtigung des Vorzeichens auf den B-Bus gelegt (ohne sign extension):

• Die obersten 24 Bits sind auf 0 gesetzt.

• Daher sind Sprünge in beide Richtungen möglich.

Page 53: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 53© Wolfgang Effelsberg

Beispiel für Sign Extension

Problem:

• Gegeben sei eine ganze Zahl, kodiert in 8 Bit.

• Wie konvertiert man diese in die gleiche Zahl bei Darstellung mit 32 Bit?

• Beispiel: -6 = 11111010

• naive Lösung: 00000000000000000000000011111010

• (=128+64+32+16+8+2)

Lösung: Sign extension:

• wiederhole das oberste Bit in allen Stellen die man hinzufügt:

• 11111111111111111111111111111010 (=-6)

Nur ,wenn die umzuwandelnde Zahl im 2er Komplement dargestellt ist:

• bei natürlichen Zahlen (>0) einfach Nullen davor schreiben.

Page 54: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 54© Wolfgang Effelsberg

Bedingter Sprung: if_icmpeq1 <offset>

Bedeutung:• hole die obersten beiden Worte vom Stack• wenn gleich, dann springe um Offset

Page 55: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 55© Wolfgang Effelsberg

invokevirtual <disp>

Page 56: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4a - 56© Wolfgang Effelsberg

ireturn

Page 57: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 1© Wolfgang Effelsberg

4.5 Optimierung der Mikroarchitektur

Die Leistung/Geschwindigkeit der Mikroarchitektur kann auf verschiedene Weise erhöht werden:

• durch Reduktion der Zyklen (Anzahl an Mikroinstruktionen), die eine ISA-Instruktion (ein Maschinenbefehl) benötigt.

• durch Reduktion der Länge eines Zyklus durch Einsatz schnellerer Hardware (hier nicht weiter betrachtet).

• durch die überlappende Ausführung von Instruktionen.

Dies erfordert meist einen Kompromiss zwischen Kosten und Nutzen

Beispiel: Decoder vs. direkte Angabe der Signale für die Steuerung des B–Busses:

• weniger ROM für das Mikroprogramm vs. weniger Latenzzeit für das Anlegen der Signale.

Page 58: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 2© Wolfgang Effelsberg

Reduktion der Zyklen pro ISA-Instruktion

Ziel:

• Minimieren der Anzahl der Mikroinstruktionen pro ISA-Instruktion (Maschinenbefehl)

Grund:

• Eine Reduktion der Anzahl der Mikroinstruktionen pro ISA-Instruktion kann die Leistung der Mikroarchitektur dramatisch erhöhen:

• Wenn man die durchschnittliche Anzahl von 5 auf 4 reduziert, dann wird der Prozessor um 20% schneller.

Mechanismen:

• Interpreter-Schleife optimieren

• Architektur mit drei Bussen

• Einführen einer „Instruction Fetch Unit“

Page 59: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 3© Wolfgang Effelsberg

Interpreter-Schleife Optimieren (1)

Main1 muss nach jeder ISA-Instruktion ausgeführt werden:

Daher kann man Main1 in die Ausführung jeder ISA-Instruktion integrieren:

Page 60: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 4© Wolfgang Effelsberg

Interpreter-Schleife Optimieren (2)

Erste Methode zur Reduktion der Mikroinstruktionen pro ISA-Instruktion:

• Interpreter-Schleife mit der Ausführung der ISA-Instruktion zusammenlegen.

Auswirkung:

• Bei manchen Befehlen wird eine Mikroinstruktion weniger pro ISA-Instruktion be-nötigt.

• Daher erhöht sich die Geschwindigkeit.

Page 61: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 5© Wolfgang Effelsberg

Bisher:

• Sehr umständlicher Umgang mit dem zweiten Operanden über das H-Register.

• Beispiel:

Interpreter-Schleife Optimieren (3)

Page 62: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 6© Wolfgang Effelsberg

Zweite Methode zur Reduktion der Mikroinstruktionen pro ISA-Instruktion:

• Einführung eines dritten Busses (A-Bus), der (fast) alle Register direkt auf die zweite Eingabe der ALU leitet.

Kosten:• zusätzlicher Bus, zusätzliche Kontrollleitungen für diesen Bus.

Auswirkung auf iload:

Interpreter-Schleife Optimieren (4)

Page 63: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 7© Wolfgang Effelsberg

Instruction Fetch Unit (1)

Die folgenden Aktionen sind in der Regel für die Ausführung einer ISA-Instruktion notwendig:

• PC um eins erhöhen

• mit dem PC die erste Mikroinstruktion holen

• die Operanden vom Stack lesen

• rechnen

• Ergebnis speichern.

Für die ersten beiden Aktionen wird die ALU benutzt, ist aber unterfordert.

Idee: diese Arbeiten durch eine separate Instruction Fetch Unit (IFU) erledigen lassen.

Page 64: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 8© Wolfgang Effelsberg

Instruction Fetch Unit (2)

Page 65: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 9© Wolfgang Effelsberg

Instruction Fetch Unit (3)

Das Schieberegister (Shift Register) beinhaltet die nächsten 0-6 Bytes des Programms.

• IMAR ist die Adresse des letzten Wortes (4 Bytes), das in das Schieberegister geladen wurde.

• Das älteste Byte wird nach MBR1 kopiert.

• Die ältesten beiden Bytes werden nach MBR2 kopiert.

• Wenn MBR1 ausgelesen wird, dann:

• Verschieben der Bytes im Schieberegister um eine Stelle nach rechts

• erneutes Laden von MBR1 und MBR2.

Page 66: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 10© Wolfgang Effelsberg

Instruction Fetch Unit (4)

• Wenn MBR2 ausgelesen wird, dann:

• Verschieben der Bytes im Schieberegister um zwei Stellen nach rechts

• erneutes Laden von MBR1 und MBR2.

• Wenn vier Bytes im Schieberegister frei sind:

• IMAR um 1 erhöhen, Wort in das Schieberegister laden

• MBR1 enthält den Opcode einer ISA-Instruktion oder einen 1-Byte-Parameter.

• MBR2 enthält 2-Byte-Parameter.

Page 67: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 11© Wolfgang Effelsberg

Behandlung des Program Counter (PC)

• Der PC wird bei Instruktionen, die keine Sprünge sind, von der der IFU weitergeschaltet. Dafür hat der PC eine eigene Schaltung zum Inkrementieren um eins oder zwei.

• Immer wenn auf MBR1/MBR2 zugegriffen wird ,sorgt die IFU dafür, dass der PC um eins oder zwei erhöht wird und der nächste Wert aus dem Speicher in MBR1/MBR2 steht.

• Bei Sprüngen:

• explizites Laden des PC durch das Mikroprogramm (wie bisher).

• Daran merkt die IFU, dass der Inhalt des Schieberegisters ungültig geworden ist.

• Der Wert des PCs wird ins IMAR übernommen, und das Schieberegister wird entsprechend neu geladen.

Page 68: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 12© Wolfgang Effelsberg

Architektur der Mic-2

Neue Ausstattung:

• A-Bus

• IFU

Kosten:

• zusätzlicher Bus

• zusätzliche IFU

Nutzen:

• weniger Mikroinstruktionen pro ISA-Instruktion

Page 69: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 13© Wolfgang Effelsberg

Vergleich für iload

Mic-1:

Mic-2:

Page 70: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 14© Wolfgang Effelsberg

Pipelining (1)

Optimierung durch überlappende (parallelisierte) Ausführung mehrerer Mikroinstruktionen

• Ausführung einer Mikroinstruktion:

• Befehl holen

• Register auf A- und B-Bus legen

• ALU und Schieberegister rechnen

• Ergebnisse vom C-Bus in die Registern speichern; Lesen/Schreiben im Memory

Im Folgenden sollen diese Schritte parallelisiert werden.

Page 71: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 15© Wolfgang Effelsberg

Pipelining (2)

Auftrag 1

1 2 3 4

Auftrag 3

1 2 3 4

Auftrag 2

1 2 3 4

Auftrag 21 2 3 4

Auftrag 11 2 3 4

Auftrag 31 2 3 4

Ausführung von drei gleichartigen Verarbeitungsaufträgen in je vier Teilverarbeitungsschritten:

• Serielle Verarbeitung:

• Pipeline-Verarbeitung:

Page 72: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 16© Wolfgang Effelsberg

Beispiel: Wäsche-Pipelining (1)

Ein Wäsche-Vorgang kann in vier Teilvorgänge unterteilt werden:

• schmutzige Wäsche in die Waschmaschine

• nasse Wäsche in den Trockner

• Falten, Bügeln, ...

• Wäsche in den Schrank

Page 73: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 17© Wolfgang Effelsberg

Aufträge

ABC

6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00

D

6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00

ABCD

Beispiel: Wäsche-Pipelining (2)

Page 74: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 18© Wolfgang Effelsberg

Definitionen

• Unter dem Begriff Pipelining versteht man:

• die Zerlegung einer Instruktion in mehrere Phasen

• die Bearbeitung der Phasen in hintereinander geschalteten Verarbeitungseinhei-ten (taktsynchron).

• Die Gesamtheit dieser Verarbeitungseinheiten nennt man eine Pipeline.

• Der Speedup (Beschleunigung) einer Pipeline ist der durchschnittliche Geschwin-digkeitsgewinn pro Instruktion, verglichen mit der sequentiellen Ausführung. Dieser ist abhängig von

• der Anzahl der Stufen

• auftretenden Hazards (Hemmnissen).

Page 75: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 19© Wolfgang Effelsberg

Pipeline-Hazards

• Hazards durch Speicherzugriff

Nach einem Ladebefehl kann der geladene Wert nicht für den direkt darauf folgenden Befehl im nächsten Takt zur Verfügung stehen, da der Speicherzugriff zusätzlich Zeit benötigt.

• Daten-Hazards

• Falls ein Befehl das Resultat des direkten Vorgängerbefehls benötigt, muss gewartet werden.

• Beispiel:H=MDRTOS=H

• Hazards durch Speicherzugriff = spezielle Daten-Hazards.

• Kontroll-Hazards

• ergeben sich zum Beispiel durch bedingte Sprünge.

• Problem: Bis der bedingte Spring vollständig bearbeitet wurde, ist nicht klar, welche Instruktion als nächstes ausgeführt werden soll.

Page 76: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 20© Wolfgang Effelsberg

Architektur der Mic-3

Drei Flipflops für die drei Busse eingefügt.

• Jetzt dauert eine Mikroinstruktion bis zu vier Zyklen:

Instruktion holen

Register auslesen

ALU und Schieberegister rechnen

Register speichern

• Aber:

• jeder einzelne Zyklus ist kürzer

• die überlappende Bearbeitung von Mikroinstruktio-nen wird möglich

• alle Teile der Mikroarchitektur werden kontinuierlich ausgenutzt.

Page 77: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 21© Wolfgang Effelsberg

Beispiel: SWAP für Mic-3

Mic-2

Mic-3: Aufteilen in drei Schritte

• Instruktion laden (mit der IFU) wird hier nicht betrachtet (ist auch nur für swap1 relevant)

• Wir notieren die Flipflops A, B und C wie Register.

Page 78: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 22© Wolfgang Effelsberg

Pipelining: Aufteilen

• Swap1: Ergebnis des Speicherzugriffs steht erst in Zyklus 5 zur Verfügung.

• Swap3: Hier wird das Ergebnis von MDR=mem (Swap2) benötigt, die Pipeline wird ange-halten (engl. stalling), bis dies der Fall ist.

• Dies nennt man eine Lesen-nach-Schreiben-Abhängigkeit (engl. RAW dependency)

• Dies ist ein Beispiel für einen Hazard.

Page 79: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 23© Wolfgang Effelsberg

Gewinn durch Pipelining

• Ohne Pipelining:• Dauer eines Zyklus: T• Eine Instruktion benötigt einen Zyklus.• Instruktionen werden sequentiell bearbeitet.

• Mit Pipelining:• Tiefe der Pipeline (Anzahl der Arbeitsschritte): n• Optimal: Dauer eines Zyklus: Tp=T/n• Realistisch: Dauer eines Zyklus etwas länger durch zusätzliche Hardware (im

Beispiel die Flipflops A, B und C)• Eine Instruktion benötigt n Zyklen.• Optimal: in jedem Zyklus kann eine neue Instruktion gestartet werden.• Realistisch: Hazards berücksichtigen

• Gewinn (speedup): • Der Speedup einer Pipeline entspricht idealerweise deren Tiefe.• Aber: durch Hazards und durch das Einführen zusätzlicher Hardware ist die

sinnvolle Tiefe einer Pipeline beschränkt.

Page 80: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 24© Wolfgang Effelsberg

Beispiel für den optimalen Ablauf von Pipelining

Inst

rukt

ion

Zeit

Page 81: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 25© Wolfgang Effelsberg

Weitere Optimierungsmöglichkeiten

Neben den grundlegenden Möglichkeiten, die Mikroarchitektur zu verbessern, werden ständig neue Ideen entwickelt, um die Arbeit eines Prozessors zu beschleunigen.

Zwei Kategorien:• Verbesserung der Implementierung Der ISA-Instruktionssatz ändert sich nicht

(wesentlich).

• Verbesserung der Architektur Neuer oder stark veränderter Instruktionssatz erforderlich.

• In der Realität: meist eine Kombination aus beidem.

Wir betrachten:• Caching

• Branch Prediction (Vorhersage bedingter Sprünge)

• Out-of-order Execution (Ausführen von Instruktionen außer der Reihe)

Page 82: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 26© Wolfgang Effelsberg

Caching (1)

Prinzipielle Idee bereits bekannt:

• Cache:• kleiner schneller Speicher• nah am Prozessor• enthält die mit hoher Wahrscheinlichkeit als Nächstes verwendeten Daten• arbeitet idealerweise mit Prozessorgeschwindigkeit.

• Häufig wird ein Level1-Cache in einen Daten- und einen Instruktionscache unterteilt.

Werte für Intel Coreextreme Edition

- 32+32 kByte L1/Kern - 8 MByte L2 Cache

Page 83: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 27© Wolfgang Effelsberg

Caching (2)

1. Nachschauen, ob die gewünschten Daten im Cache liegen.

2. Wenn ja Cache Hit, dann Daten direkt verwenden

3. Wenn nein Cache Miss, dann :

• einen alten Eintrag aus dem Cache löschen

• die neuen Daten dorthin in den Cache laden

• die neuen Daten verwenden.

4. Durchschnittliche Zugriffszeit = c+(1-h)m

• c = Zugriffszeit auf den Cache

• h = Wahrscheinlichkeit für einen Treffer

• m = zusätzliche Zugriffszeit bei einem Cache Miss

Page 84: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 28© Wolfgang Effelsberg

Caching (3)

Gründe für Caching

• Räumliche Lokalität (Spatial Locality): wenn Daten/Instruktionen an einer bestimmten Speicherstelle benötigt werden, ist es wahrscheinlich, dass danach Daten/Instruktionen aus der unmittelbaren Nachbarschaft benötigt werden. Daher kann man Daten/Instruktionen „auf Vorrat“ in den Cache laden.

• Zeitliche Lokalität (Temporal Locality): wenn man Daten/Instruktionen an einer bestimmten Speicherstelle benötigt, dann ist es wahrscheinlich, dass man sie kurz danach wieder benötigen wird. Daher sollte man kürzlich benötigte Daten/Instruktio-nen im Cache halten.

Zeilen eines Caches (Cache Lines)

• Im Cache werden die Daten in Zeilen gespeichert.

• Üblich sind Zeilen der Länge 4-64 Byte.

Page 85: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 29© Wolfgang Effelsberg

Direct-Mapped Cache (1)

Page 86: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 30© Wolfgang Effelsberg

Direct-Mapped Cache (2)

000000001000000000000000101 001 00

5

=?

Byte 1 ......... Byte 32

Page 87: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 31© Wolfgang Effelsberg

Direct-Mapped Cache (3)

Eigenschaften:

• Jede Speicheradresse kann genau an einer Stelle im Cache stehen.

• Im Beispiel bedeutet das:

• Der Cache kann 2048*32 aufeinander folgende Bytes speichern.

• Der Cache kann keine Cache-Zeilen enthalten, die genau 2048*32 Bytes ausein-ander liegen, da diese an der gleichen Stelle im Cache abgelegt werden würden.

Daraus lassen sich einfach Fälle konstruieren bei denen man bei jedem Zugriff eine Cache Miss erzeugt. Beispiel: ein 64k-Byte-weiter Sprung im Programm.

Solche Fälle sind in der Praxis jedoch selten. Sie können zum Teil auch durch einen guten Compiler vermieden werden.

Page 88: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 32© Wolfgang Effelsberg

Schreiben mit Cache (1)

Was passiert wenn Daten in den Speicher geschrieben werden?

a) Wenn der Inhalt der Adresse im Cache liegt:

• in jedem Fall: Daten in den Cache schreiben

• Alternative 1: Daten gleichzeitig in den Speicher schreiben (write through)

• Vorteil: Der Hauptspeicher hält immer die aktuellen Daten.

• Nachteil: Mehr Speicherzugriffe.

• Alternative 2: Daten nur im Cache aktualisieren (write back)

• Setzen eines Dirty-Flags, um zu markieren, dass die Daten gegenüber dem Speicher verändert wurden

• Zurückschreiben in den Speicher erst, wenn eine Cachezeile mit gesetztem Dirty-Flag aus dem Cache verdrängt wird.

• Vorteil: Weniger Speicherzugriffe.

• Nachteile: Aufwändigeres Design, problematisch bei Mehrprozessorrechnern.

Page 89: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 33© Wolfgang Effelsberg

Schreiben mit Cache (2)

b) Wenn der Inhalt der Adresse nicht im Cache liegt:

• in jedem Fall: Daten in den Hauptspeicher schreiben

• Alternative 1: Daten in den Cache laden (write allocation)

• Meist verwendet, wenn write back eingesetzt wird.

• Vorteil: Ausnutzen von räumlicher/zeitlicher Lokalität.

• Nachteil: Aufwändigeres Design.

• Alternative 2: Daten nicht in den Cache laden (no write allocation)

• Wird meist in Zusammenspiel mit write through eingesetzt, um eine möglichst einfache Cache-Architektur zu realisieren.

• Vorteil: einfaches Design

• Nachteil:. räumliche/zeitlicher Lokalität kann nicht ausgenutzt werden.

Page 90: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 34© Wolfgang Effelsberg

Branch Prediction

Bisher:

• Pipelining funktioniert nur bei linearer Ausführung von ISA-Instruktionen; bei Sprün-gen muss die Pipeline angehalten werden.

In der Realität sind aber Sprünge häufig:

• Bedingte Sprünge

• Unbedingte Sprünge

if (i == 0) CMP i,0 ; compare i to 0BNE ELSE ; branch to ELSE if not equal

k = 1; MOV #1,K ; set k to 1else …

k = 2; ELSE: MOV #2,K ; set k to2…

Page 91: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 35© Wolfgang Effelsberg

Unbedingte Sprünge

Problem:

• Der Sprung muss dekodiert werden, bevor die IFU darauf reagieren kann.

• Erst nach Schritt 2 der Pipeline ist bekannt, dass es sich um einen Sprung handelt.

• Dann ist aber bereits der Befehlnach dem Sprung von der IFU geladen worden.

Lösung:

• Delay Slot nach jedem Sprung

• wird durch den Compiler ein-gefügt

• meist NOP

• Alternativ: viel Aufwandz.B. beim Pentium

Page 92: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 36© Wolfgang Effelsberg

Bedingte Sprünge (1)

Problem

• Das Sprungziel ist erst nach der Verarbeitung des Sprungbfehls bekannt.

Daher

• Delay Slot + zusätzlich Ungewissheit über das Sprungziel

Früher

• keine neuen Befehle in die Pipeline laden, bis das Sprungziel bekannt ist, dann erst neuen Befehl laden.

• Sehr schlecht für die Leistung:

• Ca. 10-20% der ISA Instruktionen sind bedingte Sprünge.

• Pipeline-Tiefe beim P4 ist 20 Stufen.

• Dann wäre die Pipeline nahezu nie vollständig gefüllt.

Page 93: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 37© Wolfgang Effelsberg

Bedingte Sprünge (2)

Modernere Lösung

• Betrachte eines der beiden Sprungziele als wahrscheinlicher.

• Führe die Instruktionen an dieser Stelle als Nächste aus.

• Dies erfordert einen Mechanismus zur Vorhersage von Sprungzielen (branch prediction).

• Einfache Vorhersage:

Sprünge nach vorne werden nicht ausgeführt (if-Abfrage) ‏

Sprünge nach hinten werden ausgeführt (Ende einer Schleife)‏

• Vorhersage richtig einfach weiterarbeiten

• Vorhersage falsch Pipeline leeren und neue Befehle laden.

• Aufpassen, dass die Ausführung der falschen Befehle keine Auswirkung hat:

Entweder die Ergebnisse in Spezialregistern speichern und erst in die „echten“Register übernehmen ,wenn das Sprungziel bekannt ist

oder: alte Registerwerte in Spezialregistern retten

Page 94: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 38© Wolfgang Effelsberg

Dynamic Branch Prediction

Generelle Idee

Man versucht, aus der Vergangenheit zu lernen, welches das Ziel des Sprunges sein wird.

Dazu benötigt man eine Tabelle (History Table), die analog zu einem Cache aufgebaut ist.

In der Tabelle werden nicht die Inhalte einer Speicheradresse abgelegt, sondern nur Informatio-nen darüber, ob der Sprungbefehl an dieser Speicheradresse in der Vergangenheit ausgeführt wurde oder nicht.

Wenn ein Sprung ausgeführt werden soll, wird in der History Table nachgeschaut:

• Informationen zu dem Sprung in der Tabelle vorhanden:Entsprechend handeln und Tabelle aktualisieren

• keine Informationen in der Tabelle vorhanden:einfache Vorhersage und Tabelle aktualisieren

Page 95: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 39© Wolfgang Effelsberg

Eine einfache History Table

Bei der einfachen History Table wird nur die letzte Sprungentscheidung für einen Sprungbe-fehl mitgeführt.

Problem

• Am Ende einer Schleife ist die Vorhersage falsch.

• Außerdem wird beim Neustart der Schleife die Vorhersage wieder falsch sein.

Verbesserung

• Zwei Bits für die Vorhersage bereitstellen:

• ein Bit für das „normale“ Verhalten

• ein Bit für das Verhalten beim letzen Mal (zum Beispiel beim Ende der Schleife)

Page 96: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 40© Wolfgang Effelsberg

Vorhersage mit zwei Bits

1-Bit History-Tabelle 2-Bit History-Tabelle Vorhersage mit Zieladresse

Page 97: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 41© Wolfgang Effelsberg

Endlicher Automat für die Vorhersage mit zwei Bits

Page 98: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 42© Wolfgang Effelsberg

Vorhersage der Zieladresse

Bisher:Auswahl zwischen zwei festen Alternativen.

Manchmal wird die Zieladresse eines Sprungs vom Sprungbefehl dynamisch berechnet. Dann kann man statt den Bits zur Vorhersage einfach das Ziel des berechneten Sprunges in der History-Tabelle ablegen.

Page 99: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 43© Wolfgang Effelsberg

Static Branch Prediction

Die dynamische Vorhersage von Verzweigungen benötigt spezielle Hardware. Manchmal kann aber ein Compiler bereits beim Übersetzen eines Programms erkennen, dass eine Alternative eines Sprunges viel wahrscheinlicher ist als die andere.

Beispiel Schleife: for (i=0; i<10000; i++) {...}.

Beispiel UltraSPARC II: es gibt einen zusätzlichen Satz von Sprunginstruktionen auf ISA –Ebe-ne, bei denen der Compiler in einem Bit die wahrscheinliche Richtung des Sprunges angeben kann.

Dies bezeichnet man als statische Vorhersage von Verzweigungen oder static branch pre-diction.

Page 100: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 44© Wolfgang Effelsberg

Out-of-Order Execution und Register Renaming (1)

Die meisten modernen Prozessoren sind superskalar; d.h. sie können mehr als eine Instruk-tion vollständig parallel abarbeiten (und nicht nur überlappend):

Wie stellt man jetzt fest, ob die zweite Instruktion einen Konflikt auslöst?

Beispiel:

• Instruktionen dürfen nur in der richtigen Reihenfolge gestartet werden.

• Instruktionen dürfen nur in der richtigen Reihenfolge beendet werden.

Page 101: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 45© Wolfgang Effelsberg

Mögliche Konflikte

• Eine Instruktion mit zwei Operanden und einem Ergebnis darf nicht gestartet werden, wenn von einer vorangegangenen Operation, die noch nicht beendet ist

• ein Register, in dem ein Operand steht, geschrieben wird („read-after-write“-Abhängigkeit)

• das Register, in dem das Ergebnis abgelegt wird, gelesen wird („write-after-read“-Abhängigkeit)

• das Register, in dem das Ergebnis abgelegt wird, geschrieben wird („write-after-write“-Abhängigkeit)

• Verhindern von Konflikten durch ein so genanntes Scoreboard.

• Hier nur für Register betrachtet.

• In der Realität auch für die Einheiten der Pipeline.

Out-of-Order Execution und Register Renaming (2)

Page 102: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 46© Wolfgang Effelsberg

Scoreboard-Beispiel

Page 103: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 47© Wolfgang Effelsberg

Scoreboard-Regeln

• Wenn eine Operation zugelassen wird, muss das Scoreboard entsprechend angepasst werden.

• Wenn eine Operation beendet wird, muss das Scoreboard entsprechend angepasst wer-den.

• Operation werden nur zugelassen wenn von dieser Operation nicht

• ein Register gelesen wird, welches als geschrieben markiert ist,

• ein Register geschrieben wird, welches als gelesen oder geschrieben markiert ist.

• Eine Operation wird erst beendet, wenn alle vorangegangenen Operationen beendet wurden.

• Unterstützung präziser Interrupts. Wenn diese Regel nicht eingehalten wird, ist bei einer Unterbrechung nicht klar, wie der aktuelle Status des Prozessors ist.

Page 104: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 48© Wolfgang Effelsberg

Out-of-Order Execution - Beispiel

Page 105: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 49© Wolfgang Effelsberg

Out-of-order Execution - Regeln

• Wenn eine Operation blockiert ist, werden deren Nachfolger untersucht.

• Wenn eine Operation nicht blockiert ist, wird sie ausgeführt.

• Die vorgezogene Operation darf keinen Operanden verwenden, der in der ausgelasse-nen Instruktion geschrieben wurde.

Realisierung über ein weiteres Scoreboard (hier nicht gezeigt).

Page 106: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 50© Wolfgang Effelsberg

Register Renaming

Bisher: es durfte keine Operation gestartet werden, die einen Operanden oder das Ergebnis einer vorangegangenen Operation überschreibt.

Andere Vorgehensweise:Das Ergebnis wird in einem anderen (geheimen, engl. secret) Register zwischengespeichert und:

• später zurückkopiert

• oder, falls der Inhalt nur in einer nachfolgenden Operation benötigt wird, wird der Operand der nachfolgenden Operation einfach auf das secret register umgesetzt.

Page 107: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 51© Wolfgang Effelsberg

Register Renaming - Beispiel

Page 108: 4.1 Motivation 4.2 Eine einfache Mikroarchitektur 4.3 Die ...pi4.informatik.uni-mannheim.de/pi4.data/content/courses/2009-fss/pi… · 4.3 Die Integer Java Virtual Machine und der

Praktische Informatik 2 4. Mikroprogrammierung 4b - 52© Wolfgang Effelsberg

Zusammenfassung

Wir haben eine einfache Mikroarchitektur kennen gelernt.

Wir verstehen das Prinzip der Mikroprogrammierung.

Wir verstehen, wie man eine Mikroarchitektur optimieren kann durch

•Pipelining

•Caching

•Vorhersage von Sprüngen (branch prediction)

•die Out-of-Order-Ausführung von Befehlen.