55
1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von-Neumann- Prinzips Verbindungseinricht Steuer- werk Rechen- werk Ein-/Aus- gabesystem Haupt- speicher Prozessor

1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

Embed Size (px)

Citation preview

Page 1: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

1

2.3 Einfache Prozessoren und Prozessorkerne

Grundkonzept des von-Neumann-Prinzips

Verbindungseinrichtung

Steuer- werk

Rechen- werk

Ein-/Aus- gabesystem

Haupt- speicher

Prozessor

Page 2: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

2

von-Neumann-Prinzip

Der Rechner ist zentral gesteuert und aus Funktionseinheiten aufgebaut. (Zentraleinheit, Speicher, Ein-/Ausgabeeinheit, Verbindungseinrichtung)

Der Rechner ist nicht speziell auf ein zu bearbeitendes Problem zugeschnitten. Zur Lösung eines Problems wird ein eigenes Programm im Speicher ablegt.("programmgesteuerter Universalrechner")

Programme und Daten (und Ergebnisse) liegen im selben Speicher.Der Speicher besteht aus Plätzen fester Wortlänge, die über eine bestimmte Adresse einzeln angesprochen werden können.

Page 3: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

3

Funktionseinheiten der von-Neumann-Architektur

Prozessor, Zentraleinheit (CPU: "central processing unit")• übernimmt die Ablaufsteuerung und Ausführung der Befehle

Steuerwerk ("control unit")• interpretiert die Maschinenbefehle• erzeugt Steuerkommandos für andere Komponenten

Rechenwerk (ALU: "arithmetic logical unit")• führt alle Befehle aus, bis auf Ein-/Ausgabe- und Speicherbefehle

Ein-/Ausgabesystem• Schnittstelle des Rechners nach außen• Ein- und Ausgabe von Programmen und Daten

Speicher• Ablage der Daten und Programme in Form von Bitfolgen

Verbindungseinrichtung

Page 4: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

4

Charakteristika des Operationsprinzips

Zu jedem Zeitpunkt führt die CPU nur einen einzigen Befehl aus, und dieser kann (höchstens) einen Datenwert bearbeiten (SISD).

Code und Daten stehen ohne Unterscheidung im selben Speicher. Es existieren keine speichertechnischen Maßnahmen, um sie vor ungerechtfertigtem Zugriff zu schützen.

Der Speicher ist unstrukturiert und wird linear adressiert. Die Interpretation eines Speicherinhalts hängt nur vom aktuellen Kontext des laufenden Programms ab.

Zwei-Phasen-Konzept der Befehlsverarbeitung:• In der Interpretations-Phase wird aufgrund der durch den Befehlszähler angezeigten

Adresse der Inhalt einer Speicherzelle geholt und als Befehl interpretiert.• In der Ausführungs-Phase wird aufgrund der im Befehl enthaltenen Adresse der Inhalt

einer weiteren Speicherzelle geholt und als Datenwert verarbeitet.

Der Befehlsablauf folgt einer sequentiellen Befehlsfolge und ist streng seriell.

Page 5: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

5

Vor- und Nachteile der von-Neumann-Architektur

Vorteile

Prinzip des minimalen Hardwareaufwandes Prinzip des minimalen Speicheraufwandes

Page 6: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

6

Nachteile der von-Neumann-Architektur

Die Verbindungseinrichtung (Hauptspeicher CPU) stellt einen Engpass dar: „von-Neumann-Flaschenhals“

Die Programmierung muss den sequentiellen Verkehr durch den von-Neumann-Flaschenhals planen Auswirkungen auf höhere Programmiersprachen

("intellektueller Flaschenhals") geringe Strukturierung der Daten Maschinenbefehl bestimmt Operandentyp

semantische LückeMaschinendaten-

strukturen undMaschinenoperationen

Datenstrukturen undOperationen einer

höheren Programmiersprache Compiler

Page 7: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

7

Harvard-Architektur

Variante des von-Neumann-Rechner Für Code und Daten gibt es getrennte Speicher und getrennte Zugriffwege

zum Prozessorkern. Engpass durch die zentrale Verbindungseinrichtung beim von-Neumann-

Rechner wird vermieden oder zumindestens erweitert. heute insbesondere bei digitalen Signalprozessoren (DSPs) Bei fast allen heutigen Mikroprozessoren ist der auf dem Prozessor-Chip

befindlichen Primär-Cache-Speicher als Harvard-Cache-Architektur organisiert.

• Code- und Daten-Cache-Speicher sind getrennt und mit eigenen Speicherverwaltungseinheiten und Zugriffspfaden versehen.

Ansonsten wird das Operationsprinzip der von-Neumann-Architektur beibehalten.

Page 8: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

2.3.2 Grundlegender Aufbau eines Mikroprozessors

Register

ALU

Busschnittstelle

Steuerwerk

Steuer- signale

Steuersignale

Daten

Daten

Daten

Befehle

zum Daten-/Adreßbus

Daten (opt.)(opt.)

externe Steuersignale

Page 9: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

9

Überlappende Befehlsausführung

Befehl n:

Bereitstellung

u. Decodierung

Befehl n:

Ausführung

Befehl n:

Bereitstellung

u. Decodierung

Befehl n:

Ausführung

Befehl n+1:

Bereitstellung

u. Decodierung

Page 10: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

10

2.3.4 Grundlegende Pipeline-Stufen

Pipelining — „Fließband-Bearbeitung“

„ Pipelines beschleunigen die Ausführungsgeschwindigkeit eines Rechners in gleicher Weise wie Henry Ford die Autoproduktion mit der Einführung des Fließbandes revolutionierte.“

(Peter Wayner 1992)

Befehlspipeline eines Rechners: Die Befehlsbearbeitung wird in n funktionelle Einheiten gegliedert. Ausführung geschieht überlappt.

Page 11: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

11

Pipelining

Unter dem Begriff Pipelining versteht man die Zerlegung einer Maschinenoperation in mehrere Phasen, die dann von hintereinander geschalteten Verarbeitungseinheiten taktsynchron bearbeitet werden, wobei jede Verarbeitungseinheit genau eine spezielle Teiloperation ausführt.

Die Gesamtheit dieser Verarbeitungseinheiten nennt man eine Pipeline.

Bei einer Befehlspipeline (Instruction Pipeline) wird die Ausführung eines Maschinenbefehls in verschiedene Phasen unterteilt, aufeinanderfolgende Maschinenbefehle werden jeweils um einen Taktzyklus versetzt ausgeführt.

Page 12: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

12

Pipelining

Jede Stufe der Pipeline heißt Pipeline-Stufe oder Pipeline-Segment.

Pipeline-Stufen werden durch getaktete Pipeline-Register (auch latches genannt) getrennt.

Ein Pipeline-Maschinentakt ist die Zeit, die benötigt wird, um einen Befehl eine Stufe weiter durch die Pipeline zu schieben.

Idealerweise wird ein Befehl in einer k-stufigen Pipeline in k Takten von k Stufen ausgeführt.

Wird in jedem Takt ein neuer Befehl geladen, dann werden zu jedem Zeitpunkt unter idealen Bedingungen k Befehle gleichzeitig behandelt und jeder Befehl benötigt k Takte, bis zum Verlassen der Pipeline.

Page 13: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

13

Pipeline-Stufen und Pipeline-Register

Takt

Eingabe Ausgabe

Registe

r

S1

Registe

r

S2 Sk

Registe

r

Registe

r

Page 14: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

14

Pipelining

Man definiert die Latenz als die Zeit, die ein Befehl benötigt, um alle k Pipeline-Stufen zu durchlaufen.

Der Durchsatz einer Pipeline wird definiert als die Anzahl der Befehle, die eine Pipeline pro Takt verlassen können. Dieser Wert spiegelt die Rechenleistung einer Pipeline wider.

Page 15: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

15

Befehlsausführung(n = Anzahl Befehlsausführungen, k = Anzahl der Pipeline-Stufen)

hypothetischen Prozessors ohne Pipeline: n*k Takte Pipeline-Prozessor mit einer k-stufigen Pipeline: k+n-1

Takte (unter der Annahme idealer Bedingungen mit einer Latenz von k Takten und einem Durchsatz von 1)

Daraus ergibt sich eine Beschleunigung (speedup) von

S = n*k / (k + n - 1) = k / (k/n + 1 - 1/n).

Ist die Anzahl der in die Pipeline gegebenen Befehle unendlich, so ist die Beschleunigung gleich der Anzahl Pipeline-Stufen k

Page 16: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

16

2.4 Phasen der Befehlsausführung einer fünfstufigen Befehlspipeline

Befehl bereitstellen, Befehl decodieren, Operanden (in den Pipeline-Registern) vor der ALU bereitstellen, Operation auf der ALU ausführen und das Resultat zurückschreiben

Page 17: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

Grundlegendes Befehlspipelining

ID -- Instruction Decode/Register Fetch

EX -- Execute/Address Calculation IF

MEM -- Memory Access

ID

WB -- Write Back

EX MEM WB

IF -- Instruction Fetch

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

IF ID EX MEM WB

5-Deep

Current CPU Cycle

Master Clock Cycle

Page 18: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

18

Phasen der Befehlsausführung einer fünfstufigen Befehlspipeline

Befehlsbereitstellungsphase (Instruction Fetch): Der Befehl, der durch den Befehlszähler adressiert ist, wird aus dem Hauptspeicher oder dem Cache-Speicher in einen Befehlspuffer geladen. Der Befehlszähler wird weitergeschaltet.

Decodier- und Operandenbereitstellungsphase (Decode/Operand fetch): Aus dem Operationscode des Maschinenbefehls werden prozessorinterne Steuersignale erzeugt (1. Takthälfte). Die Operanden werden aus Registern bereitgestellt (2. Takthälfte).

Ausführungsphase (ALU Operation): Die Operation wird auf den Operanden ausgeführt. Bei Lade-/Speicherbefehlen wird die effektive Adresse berechnet.

Speicherzugriffsphase (memory access): Der Speicherzugriff wird durchgeführt.

Resultatspeicherphase (Write Back): Das Ergebnis wird in ein Register geschrieben (1. Takthälfte).

Page 19: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

24

Diskussion

Die Zykluszeit der Pipeline wird vom kritischen Pfad diktiert: der langsamsten Pipeline-Stufe.

Alle Stufen nutzen verschiedene Ressourcen. Im Idealfall wird in jedem Takt ein Befehl in die

Pipeline eingefüttert. (CPI=1).

Page 20: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

25

2.4.3 Pipeline-Konflikte - drei Arten von Pipeline-Konflikten

Pipeline-Konflikt: die Unterbrechung des taktsynchronen Durchlaufs der Befehle durch die einzelnen Stufen einer Befehls-Pipeline.

Datenkonflikte: ein Operand ist in der Pipeline (noch) nicht verfügbar.

• Datenkonflikte werden durch Datenabhängigkeiten im Befehlsstrom erzeugt

Struktur- oder Ressourcenkonflikte treten auf, wenn zwei Pipeline-Stufen dieselbe Ressource benötigen, auf diese aber nur einmal zugegriffen werden kann.

Steuerflusskonflikte treten bei Programmsteuerbefehlen auf, • wenn in der Befehlsbereitstellungsphase die Zieladresse des als nächstes

auszuführenden Befehls noch nicht berechnet ist bzw. • Wenn im Falle eines bedingten Sprunges noch nicht klar ist, ob überhaupt

gesprungen wird.

Page 21: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

26

2.4.4 Datenkonflikte und deren Lösungsmöglichkeiten

Man betrachte zwei aufeinander folgende Befehle Inst1 und Inst2

Es besteht eine echte Datenabhängigkeit (true dependence) t von Inst1 zu Inst2, wenn Inst1 seine Ausgabe in ein Register Reg (oder in den Speicher) schreibt, das von Inst2 als Eingabe gelesen wird.

Es besteht eine Gegenabhängigkeit (antidependence) a von Inst1 zu Inst2, falls Inst1 Daten von einem Register Reg (oder einer Speicherstelle) liest, das anschließend von Inst2 überschrieben wird.

Es besteht eine Ausgabeabhängigkeit (output dependence) o von Inst2 zu Inst1, wenn beide in das gleiche Register Reg (oder eine Speicherstelle) schreiben und Inst2 sein Ergebnis nach Inst1 schreibt.

Gegenabhängigkeiten und Ausgabeabhängigkeiten werden häufig auch fal sche Datenabhängigkeiten oder entsprechend dem englischen Begriff Name Dependency Namensabhängigkeiten genannt.

Page 22: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

Abhängigkeitsgraph

S1:ADD R1,R2,2 ; R1 = R2+2S2:ADD R4,R1,R3; R4 = R1+R3S3:MULT R3,R5,3 ; R3 = R5*3S4:MULT R3,R6,3 ; R3 = R6*3

S1

S2

S3

S4

True Dependence

Anti Dependence

Output Dependence

t

a

o

a

Page 23: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

28

Datenkonflikte

Datenabhängigkeiten zwischen zwei Befehlen können Datenkonflikte verursachen, wenn die beiden Befehle so nahe beieinander sind, dass ihre Überlappung innerhalb der Pipeline ihre Zugriffsreihenfolge auf ein Register oder einen Speicherplatz im Hauptspeicher verändern würde.

drei Arten von Datenkonflikten : Ein Lese-nach-Schreibe-Konflikt (Read After Write, RAW) wird durch eine

echte Datenab hän gigkeit verursacht Ein Schreibe-nach-Lese-Konflikt (Write After Read, WAR) wird durch eine

Gegenab hän gigkeit verursacht Ein Schreibe-nach-Schreibe-Konflikt (Write After Write, WAW) wird durch

eine Aus gabe abhängigkeit verursacht

Page 24: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

29

IF ID EX MEM

load Reg1,A

load Reg2,B

add Reg2,Reg1,Reg2

mul Reg1,Reg2,Reg1

IF ID EX MEM

IF ID EX MEM

IF ID EX MEM WB

WB

WB

WB

timecycle time

Datenkonflikte in einer Befehls-Pipeline

Page 25: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

30

WAR and WAW: can they happen in our pipeline?

WAR and WAW can’t happen in DLX 5 stage pipeline because:• All instructions take 5 stages, • Register reads are always in stage 2, and • Register writes are always in stage 5.

WAR and WAW may happen in more complicated pipes.

Page 26: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

31

add Reg2,Reg1,Reg2

mul Reg1,Reg2,Reg1

IF ID EX MEM

IF ID EX MEM WB

WB

timecycle time

Reg2 old Reg2 new

wrong register read!

Pipeline conflict due to a data hazard

Page 27: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

32

Lösungen für Datenkonflikte

Software-Lösungen (Compiler scheduling)• no-op Befehle einfügen• Befehlsanordnung (instruction scheduling oder pipeline scheduling):

Befehlsumordnungen, um no-ops zu entfernen

Hardware-Lösungen: Konflikt muss per HW entdeckt werden!! • Leerlauf der Pipeline: Die einfachste Art, mit solchen Datenkonflikten

umzugehen ist es, Inst2 in der Pipeline für zwei Takte anzuhalten. Auch als Pipeline-Sperrung (interlocking) oder Pipeline-Leerlauf (stalling) bezeichnet.

• Forwarding: Wenn ein Datenkonflikt erkannt wird, so sorgt eine Hardware-Schaltung dafür, dass der betreffende Operand nicht aus dem Universalregister, sondern direkt aus dem ALU-Ausgaberegister der vorherigen Operation in das ALU-Eingaberegister übertragen wird.

• Forwarding with interlocking: Forwarding löst nicht alle möglichen Datenkonflikte auf.

Page 28: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

33

add Reg2,Reg1,Reg2

mul Reg1,Reg2,Reg1

IF ID EX MEM

IF ID EX MEM WB

WB

time

Register Reg2

bubbles

Data hazard: Hardware solution by interlocking

Page 29: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

34

add Reg2,Reg1,Reg2

mul Reg1,Reg2,Reg1

IF ID EX MEM

IF ID EX MEM WB

WB

time

Data hazard: Hardware solution by forwarding

Page 30: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

35

load Reg2,B

add Reg2,Reg1,Reg2

IF ID EX MEM

IF ID EX MEM

WB

WB

not possible!

timecycle time

Pipeline hazard due to data dependence unresolvable by forwarding

Page 31: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

36

load Reg2,B

add Reg2,Reg1,Reg2

IF ID EX MEM

IF ID EX MEM

WB

WB

timebubble

Unremovable pipeline bubble due to data dependence

Page 32: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

37

2.4.5 Steuerflusskonflikte und deren Lösungsmöglichkeiten

Steuerflussabhängigkeiten verursachen Steuerflusskonflikte in der DLX-Pipeline, da der Programmsteuerbefehl erst in der ID-Stufe als solcher erkannt und damit bereits ein Befehl des falschen Programmpfades in die Pipeline geladen wurde.

Zu den Programmsteuerbefehlen gehören:• die bedingten und die unbedingten Sprungbefehle, • die Unterprogrammaufruf- und -rückkehrbefehle sowie • die Unterbrechungsbefehle

Nach bedingten Sprüngen, die genommen werden, startet die befehlsfolge mit drei Takten Latenz.

Allerdings sind schon drei Befehle des falschen Pfads in der Pipeline.

Page 33: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

38

branchinstruction

branch targetinstruction

IF ID EX MEM

IF ID EX MEM WB

WB

time

PC

three bubbles

Leertakte nach einem genommenen bedingten Sprung

Page 34: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

39

Lösung: Sprungrichtung schneller eintscheiden

Sprungrichtung so schnell als möglich entscheiden und Zieladresse so schnell als möglich berechnen.

Am besten bereits in der ID-Stufe nur noch ein Takt Latenz

Page 35: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

40

Solution: Calculation of the branch direction and of the branch target address in ID stage

However, then the ALU can no more be used for calculating the branch target address a structural hazard, which can be avoided by an additional ALU for the branch target address calculation in ID stage.

And a new unremovable pipeline hazard arises: • An ALU instruction followed by an (indirect) branch on the result of the

instruction will incur a data hazard stall even when the result value is forwarded from the EX to the ID stage (similar to the data hazard from a load with a succeeding ALU operation that needs the loaded value).

The main problem with this pipeline reorganization: decode, branch target address calculation, and PC write back within a single pipeline stage a critical path in the decode stage that reduces the cycle rate of the whole pipeline.

Assuming an additional ALU and a write back of the branch target address to the PC already in the ID stage, if the branch is taken, only a one cycle delay slot arises

Page 36: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

41

Software-Lösungen

Verzögerte Sprungtechnik (delayed branch technique): Der Compiler füllt die Verzögerungszeitschlitze (delay slots).

• Ausfüllen der Verzögerungszeitschlitze mit Leerbefehlen. • Statische Befehlsanordnung: Füllen mit Befehlen, die in der logischen

Programmreihenfolge vor dem Sprung liegen

Angewandt in der ersten Generation von RISC-Prozessoren, z.B. IBM 801, MIPS, RISC I, SPARC.

In superskalaren Prozessoren, die mehr als einen Befehl holen und gleichzeitig verarbeiten können, erschwert die verzögerte Sprungtechnik die Befehlszuordnungslogik und die Implementierung präziser Unterbrechungen.

Page 37: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

42

Hardware-Lösungen

Pipeline-Leerlauf (Interlocking): einfachste, aber ineffizienteste Methode

Spekulation auf nicht genommene bedingte Sprünge: • die direkt nach dem Sprungbefehl stehenden drei Befehle in die

Pipeline werden geladen• Falls die Sprungbedingung zu „genommen“ ausgewertet wird, müssen

die drei Befehle wieder gelöscht werden und wir erhalten die üblichen drei Pipeline-Blasen.

• Falls der Sprung nicht genommen wird, so können die drei Befehle als Befehle auf dem gültigen Pfad weiterverarbeitet werden, ohne dass ein Leertakt entsteht.

• Diese Technik stellt die einfachste der sogenannten statischen Sprungvorhersagen dar.

Page 38: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

43

Branch prediction

Branch prediction foretells the outcome of conditional branch instructions.

Excellent branch handling techniques are essential for today's and for future microprocessors.

Page 39: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

44

Hardware solution (Branch Prediction)

IF stage finds a branch instruction predict branch direction (Branch Target Buffer necessary!)

The branch delay slots are speculatively filled with instruction

• of the consecutively following path• of the path at the target address

After resolving of the branch direction decide upon correctness of prediction

In case of misprediction discard wrongly fetched instructions

Page 40: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

45

Two Basic Techniques of Branch Prediction

Static Branch Prediction:

The prediction direction for an individual branch remains always the same!

Dynamic Prediction:

The prediction direction depends upon previous (the “history” of) branch executions.

Page 41: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

46

Static Branch Prediction

The prediction direction for an individual branch remains always the same!

• the machine cannot dynamically alter the branch prediction (in contrast to dynamic branch prediction which is based on previous branch executions).

So static branch prediction comprises:• machine-fixed prediction (e.g. always predict taken) and • compiler-driven prediction.

If the prediction followed the wrong instruction path, then the wrongly fetched instructions must be squashed from the pipeline.

Page 42: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

47

Static Branch Prediction - machine-fixed

wired taken/not-taken prediction: The static branch prediction can be wired into the processor by predicting that all branches will be taken (or all not taken).

direction based prediction, backward branches are predicted to be taken and forward branches are predicted to be not taken==> helps for loops

Page 43: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

48

Static Branch Prediction- compiler-based

Opcode bit in branch instruction allows the compiler to reverse the hardware prediction.

There are two approaches the compiler can use to statically predict which way a branch will go:

• it can examine the program code, • or it can use profile information (collected from

earlier runs)

Page 44: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

49

2.4.6 Sprungzieladress-Cache

Der Sprungzieladress-Cache (Branch-target Address Cache, BTAC) oder Sprungzielpuffer (Branch-target Buffer, BTB) ist ein kleiner Cache-Speicher, auf den in der IF-Stufe der Pipeline zugegriffen wird.

Er enthält Paare von Spungbefehls- und Sprungzieladressen.

Page 45: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

50

Sprungzieladress-Cache

... ... ...

B ran ch ad d ress Ta rg e t ad d ressP red ic tio n b its

Page 46: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

51

Hardware solutions: BTAC

The BTAC functions as follows: • The IF stage compares PC against the addresses of jump and

branch instructions in BTAC (Field 1). ---- Suppose a match:

• If the instruction is a jump, then the target address is used as new PC. If the instruction is a branch, a prediction is made based on information from BTAC (Field 3) as to whether the branch is to be taken or not.If predict taken, the most recent branch target address is read from BTAC (Field 2) and used to fetch the target instruction.

• Of course, a misprediction may occur. Therefore, when the branch direction is actually known in the MEM stage, the BTAC can be updated with the corrected prediction information and the branch target address.

Page 47: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

52

BTAC (continued)

To keep the size of BTAC small, only predicted taken branch addresses may be stored.

• Effective with static prediction! If the hardware alters the prediction direction due to the

history of the branch, this kind of branch prediction is a dynamic branch prediction.

• Now the branch target address (of "taken") is stored also if the prediction direction may be "not taken".

• If the branch target address is removed for branches that are not taken==> BTAC is better utilized

• however branch target address must be newly computed if the prediction direction changes to "predict taken"

Page 48: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

53

2.4.8 Strukturkonflikte und deren Lösungsmöglichkeiten

Struktur- oder Ressourcenkonflikte treten in unserer einfachen DLX-Pipeline nicht auf.

Einen Strukturkonflikt kann man demonstrieren, wenn man unsere DLX-Pipeline leicht verändert:

• Wir nehmen an, die Pipeline sei so konstruiert, dass die MEM-Stufe in der Lage ist ebenfalls auf den Registersatz zurückzuschreiben.

Page 49: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

54

load Reg2,A

mul Reg3,Reg4,Reg5

IF ID EXMEM

IF ID EX MEM WB

WB

timecycle time

Register file

WB

WB

Ein Strukturkonflikt, der durch eine veränderte Pipeline-Organisation verursacht wird

Page 50: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

55

Hardware-Lösungen zur Vermeidung von Strukturkonflikten

Arbitrierung mit Interlocking: Die Arbitrierungslogik erkennt den Strukturkonflikt und hält den im Programmfluss späteren der beiden um die Ressource konkurrierenden Befehle an.

Übertaktung: die Ressource, die den Strukturkonflikt hervorruft, schneller zu takten als die übrigen Pipeline-Stufen.

• In diesem Fall könnte die Arbitrierungslogik zweimal auf die Ressource zugreifen und die Ressourcenanforderungen in der Ausführungsreihenfolge erfüllen

Ressourcenreplizierung: Vervielfachen von Hardware-Ressourcen .

Page 51: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

56

2.4.9 Ausführung in mehreren Takten

Problem Mehrtaktbefehle

mögliche Lösungen:• Pipeline anhalten: Die einfachste Weise, mit einem solchen

Strukturkonflikt umzugehen, ist es, Inst2 in der Pipeline anzuhalten, bis Inst1 die EX-Stufe verlässt

• Ressourcen-Pipelining: EX-Stufe selbst als Pipeline implementieren- die EX-Stufe kann in jedem Takt einen neuen Befehl entgegen

nehmen (der Durchsatz ist 1). • Ressourcenreplizierung: z. B. mehrere Ausführungseinheiten

Page 52: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

57

Example of a WAW Hazard Caused by a Long-latency Operation and Out-of-order Completion

div Reg3,Reg11,Reg12

mul Reg3,Reg1,Reg2

IF ID EX ...

IF ID EX MEM WB

EX

time

Register Reg3

MEM WB

several cycleslater

Page 53: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

58

Solutions to the Problem of Multiple-cycle Operations

Interlocking: stall Inst2 in the pipeline until Inst1 leaves the EX stage pipeline bubbles, slow down

a single pipelined FU: general-purpose FU for all kind of instructions slows down execution of simple operations

multiple FUs: Inst2 may proceed to some other FU and overlap its EX stage with the EX stage of Inst1

out-of-order execution!• instructions complete out of the original program order• WAW hazard caused by output dependence may occur

delaying write back of second operation solves WAW hazard further solutions: scoreboarding, Tomasulo, reorder buffer in superscalar

Page 54: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

59

WAR possible??

WAR may occur if instruction can complete before a previous instruction reads its operand

extreme case of o-o-o execution

superscalar processors, not our simple RISC processor which” issues” and

starts execution in-order)

Page 55: 1 2.3 Einfache Prozessoren und Prozessorkerne Grundkonzept des von- Neumann-Prinzips

60

Pipelining basics: summary

Hazards limit performance• Structural hazards: need more HW resources• Data hazards: need detection and forwarding• Control hazards: early evaluation, delayed branch,

prediction Compilers may reduce cost of data and control hazards

• Compiler Scheduling• Branch delay slots• Static branch prediction

Increasing length of pipe increases impact of hazards; pipelining helps instruction bandwidth, not latency

Multi-cycle operations (floating-point) and interrupts make pipelining harder