代写 C MIPS compiler graph Rechnerarchitektur (RA)

Rechnerarchitektur (RA)
5. Pipelining Prof. Dr. Christian Plessl
RA.5 2018 v1.0.0
1

5. Pipelining
5.1 Pipelining-Prinzip
5.2 MIPSPipeline:DatenpfadundKontroller 5.3 Konflikte(Hazards)
RA.5 2018 v1.0.0
Inhaltsverzeichnis
2

5.1 Pipelining – Prinzip
• Beispiel “Waschsalon”
Anna, Bernhard, Corinna und Daniel gehen in
den Waschsalon. Jeder will seine Wäsche waschen, trocknen und dann zusammenlegen.
Ein Waschgang dauert 30 Minuten. (Es gibt nur eine Waschmaschine.)
Der Trockner benötigt 40 Minuten. (Es gibt nur einen Trockner.)
Das Zusammenlegen dauert 20 Minuten. (Es gibt nur einen Tisch.)
ABCD
RA.5 2018 v1.0.0
3

19 20 21 22 23 Mitternacht Zeit
30 40 20 30 40 20 30 40 20 30 40 20
A
B
C
D
Pipelining – Prinzip

Sequentielle Abarbeitung
18
Die Abarbeitung der gesamte Wäsche dauert 6 Stunden.
RA.5 2018 v1.0.0
4

18
19 20 21 22 23 Mitternacht Zeit
30 40 40 40 40 20
A
B
C
D
Pipelining – Prinzip
• Pipelining (“Fliessbandverarbeitung”)
Die Abarbeitung der gesamte Wäsche dauert 3.5 Stunden.
RA.5 2018 v1.0.0
5

• Angewandt auf die Instruktionsabarbeitung
ohne Pipelining
Instruktion I1
Instruktion I2
Instruktion I3
Pipelining – Prinzip
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
mit Pipelining
I1 I2
I3 I4
I5
IF
ID
EX
ID
IF
MEM
EX
ID
IF
WB
IF
MEM
EX
ID
IF
WB
MEM
EX
ID
WB
MEM
EX
WB
MEM
WB
RA.5 2018 v1.0.0
6

Vergleich: Einzyklen, Mehrzyklen, Pipelining
T1 T2
lw
sw
Einzyklen- implementierung
T1 T2 T3 T4 T5 T6 T7 T8 T9
lw
WB
sw
IF
ID
EX
MEM
IF
ID
EX
MEM
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
Mehrzyklen- implementierung
Pipelining- implementierung
lw
sw
In einer Pipelining-Implementierung sind alle Instruktionszyklen gleich lang (wie bei Einzyklen), aber in Schritte unterteilt (wie bei Mehrzyklen).
RA.5 2018 v1.0.0
7


Pipelining – Eigenschaften
Pipelining erhöht den Instruktions-Durchsatz, verringert aber nicht die Ausführungszeit einer einzelnen Instruktion.
– Da Prozessoren bei der Programmausführung typischerweise Milliarden von Instruktionen abarbeiten, ist der Instruktionsdurchsatz die entscheidende Grösse.
Speedup durch Pipelining
– gegenüber einer Implementierung ohne Pipelining, in der alle Instruktionen k

Stufen benötigen
k Pipelinestufen
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
IF
EX
MEM
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
n Instruktionen
Speedup= n×k
k + n -1
RA.5 2018 v1.0.0
8

Beispiel
Welchen Speedup bringt Pipelining mit 5 Stufen, wenn
a) 10 Instruktionen,
b) 1000 Instruktionen,
c) 1000000 Instruktionen auszuführen sind?
a) Speedup = (10·5)/(5+10-1) = 3,57
b) Speedup = (1000·5)/(5+1000-1) = 4,98
c) Speedup = (1000000·5)/(5+1000000-1) = 4,999988
limæ n×k ö=k – Asymptotischer Speedup: ç ÷
Pipelining Speedup
n®¥ è k + n -1ø RA.5 2018 v1.0.0
9

5.2 MIPS Pipeline: Datenpfad und Kontroller
• Der Datenpfad der Einzyklenimplementierung wird in 5 Pipelinestufen partitioniert (siehe nächste Seite).
– In jedem Taktschritt bearbeitet jede Pipelinestufe eine Instruktion; die Stufe WB die jeweils älteste, die Stufe IF die jeweils jüngste Instruktion.
– Zurückgeführte Signale (von rechts nach links) können potentiell zu Konflikten (Hazards) führen. Es gibt zwei solche Signale:
§ WB → ID:
§ EX/MEM → IF:
Die Instruktion in der WB-Phase schreibt das Zielregister. Ein Data Hazard tritt auf, wenn die Instruktionen in den ID, EX und MEM-Phasen den neuen Registerwert schon vorher brauchen.
In der EX oder MEM-Phase wird entschieden, ob ein Sprung durchgeführt wird oder nicht. Ein Control Hazard tritt auf, weil inzwischen weitere Instruktionen geholt werden sollen, ohne dass die Adresse bekannt ist.
• Einführung von Pipelineregistern (siehe übernächste Seite)
– Zur Trennung der Pipelinestufen müssen Register eingefügt werden
(Vergleich mit Mehrzyklenimplementierung: Was geschieht in welchem Taktschritt?).
RA.5 2018 v1.0.0
10

Pipelining des Datenpfads
• Partitionierung des Datenpfades in 5 Stufen: IF | ID | EX | MEM | WB
RA.5 2018 v1.0.0
11

Pipelining des Datenpfads
• Einführung von Pipelineregistern: IF/ID, ID/EX, EX/MEM, MEM/WB
RA.5 2018 v1.0.0
12

• Phase IF
Beispiel: Abarbeitung der lw Instruktion
sequentielle Elemente: rechte Hälfte hervorgehoben → gelesen linke Hälfte hervorgehoben → geschrieben
beide Hälften hervorgehoben → gelesen+geschrieben
RA.5 2018 v1.0.0
13

Beispiel: Abarbeitung der lw Instruktion
• Phase ID
RA.5 2018 v1.0.0
14

Beispiel: Abarbeitung der lw Instruktion
• Phase EX
RA.5 2018 v1.0.0
15

Beispiel: Abarbeitung der lw Instruktion
• Phase MEM
RA.5 2018 v1.0.0
16

• Phase WB
Beispiel: Abarbeitung der lw Instruktion
! Ooops …
RA.5 2018 v1.0.0
17

• Korrigierte Version des Datenpfads
– Die Adresse des Zielregisters liegt in der ID-Stufe vor und wird erst in der WB-Stufe verwendet → die Adresse in die Pipelineregister aufnehmen und durch die Stufen EX und MEM “durchschleifen”
Pipelining des Datenpfads
RA.5 2018 v1.0.0
18

Pipelining der Steuersignale
• Auch die Steuersignale müssen in einer Pipeline organisiert werden.
– Die Steuersignale werden in der ID-Stufe generiert und manche erst in späteren Stufen benötigt → die Steuersignale in die Pipelineregister aufnehmen
RA.5 2018 v1.0.0
19

• Alle modernen Prozessoren verwenden Pipelining.
• Wie kann eine ISA Pipelining unterstützen?
– alle Instruktionen gleich lang
– wenige Befehlsformate, möglichst einheitliche Codierungen
– wenige, einfache Adressierungsarten
– Speicheroperationen nur in load/store Instruktionen
– Operanden an Wortgrenzen ausgerichtet (alignment restriction)
RISC !
Pipelining
• Performancesteigerung durch Pipelining mit k Stufen
– gegenüber Einzyklenimplementierung: kürzerer Takt
§ die einzelnen Stufen sind i.a. nicht ausbalanciert (nicht alle gleich lang) § die zusätzlichen Pipelineregister haben Verzögerungszeiten
– gegenüber Mehrzyklenimplementierung: kleinerer CPI
§ im besten Fall steigert Pipelining die Performance um den Faktor k
§ nur asymptotisch, dh. wenn die Pipeline mit einer sehr grossen Anzahl von Instruktionen “optimal” läuft
RA.5 2018 v1.0.0
20

5.3 Konflikte (Hazards)
• Auch wenn eine ISA Pipelining unterstützt, gibt es Situationen in denen die nächste Instruktion nicht im nachfolgenden Taktzyklus ausgeführt werden kann. Diese Situationen werden als Konflikte (Hazards) bezeichnet. Es gibt drei Grundtypen von Hazards:
– structural hazard (struktureller Konflikt)
§ die vorhandene Hardware kann die Instruktionskombination nicht unterstützen
– data hazard (Datenkonflikt)
§ eine Instruktion muss auf ein Ergebnis einer vorhergehenden Instruktion warten
– control hazard (Steuerkonflikt)
§ das Ergebnis einer Sprunginstruktion (Sprung oder nicht, Sprungadresse) ist
noch nicht bekannt, während die nächsten Instruktionen ausgeführt werden sollen
RA.5 2018 v1.0.0
21


Structural Hazards
Die Hardware unterstützt das Pipelining bestimmter Instruktions- kombinationen nicht.
– Beispiel: Annahme: Es gibt nur einen Speicher für Programme und Daten
IF
ID
EX
IF
MEM
EX
ID
WB
IF
ID
MEM
EX
WB
MEM
WB
IF
ID
EX
MEM
WB
Ii lw Ii+1
Ii+2 Ii+3
Auflösung von structural hazards
Konflikt: Ii und Ii+3 greifen im gleichen Taktschritt auf den Speicher zu.

– Durch geeignete Implementierung der Pipeline werden structural hazards so weit wie möglich vermieden.
§ zB. getrennte Speicher für Programme und Daten. Eine Architektur, die für Instruktions- und Datenspeicher räumlich getrennte Busse (jeweils für Adressen und Daten) besitzt, nennt man Harvard-Architektur.
§ zB. Schreiben und Lesen des Registerfiles in einem Taktzyklus
– Bei nicht vermeidbaren structural hazards müssen die nachfolgenden Instruktionen
warten (Pipeline wird angehalten, pipeline stall). RA.5 2018 v1.0.0
22

Data Hazards
• Eine Instruktion muss auf ein Ergebnis einer vorhergehenden Instruktion warten.
Beispiel:
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
3 Konflikte
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
sw

$15, 100($2)
Diese Datenabhängigkeiten sind sogenannte RAW (read-after-write) Abhängigkeiten. Bis auf die Abhängigkeit zwischen sub und sw führen alle
anderen Abhängigkeiten zu einem data hazard in der Pipeline.
RA.5 2018 v1.0.0
23

• Registerfile mit Halbtaktzugriff
– –
bisher: Registerfile kann in einem Takt gelesen und geschrieben werden, wobei der geschriebene Wert erst im nächsten Takt gelesen werden kann
jetzt: Registerfile wird im ersten Halbtakt geschrieben und im zweiten Halbtakt gelesen, dh. der neue Wert kann im gleichen Takt bereits gelesen werden
→ daurch wird der data hazard zwischen sub und add eliminiert Schreiben im ersten Halbtakt
Auflösung von Data Hazards
IF
ID
EX
MEM
W
B
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
2 Konflikte
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
RA.5 2018 v1.0.0
IF
Lesen im zweiten Halbtakt
24

• Weitere Möglichkeiten
– Pipeline anhalten (pipeline stall durch Einfügen von Leeroperationen bzw. Bubbles), bis der Konflikt verschwunden ist. Dies kann entweder vom Compiler durch Einfügen von nop (no operation) Instruktionen oder von der Prozessor-
steuerung gemacht werden. Das Anhalten der Pipeline führt immer zu einem Performanceverlust.
– Daten in der Pipeline so früh wie möglich bereitstellen (Forwarding/Bypassing). Das Ergebnis einer Instruktion steht ja bereits nach der EX-Phase zur Verfügung.
– Umordnen der Instruktionen, so dass möglichst viele data hazards vermieden werden. Das kann von einem optimierenden Compiler oder von der Prozessor- steuerung gemacht werden (fortgeschrittene Rechnerarchitektur).
RA.5 2018 v1.0.0
Auflösung von Data Hazards
25

Anhalten der Pipeline
• Compiler fügt Leeroperationen ein
– Der Compiler wird hardwareabhängig, da er die Pipelinestruktur kennen muss.
– Der Parameter Ic wird grösser → Performance sinkt
sub $2, $1, $3
nop
nop
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IF
ID
EX
MEM
W
B
IF
ID
IF
EX
ID
MEM
EX
WB
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
RA.5 2018 v1.0.0
26


Anhalten der Pipeline
Prozessorsteuerung fügt Leeroperationen ein
– Konflikte werden durch einen Kontroller in der ID-Stufe erkannt
– Instruktionen die bereits in der IF/ID-Stufe sind werden angehalten (pipeline stall).
Die folgenden Stufen führen dann Leeroperationen, Bubbles
, aus.
sub $2, $1, $3
and $12, $2, $5 → “nop” or $13, $6, $2 → “nop”
PC, IF/ID 2 Takte lang anhalten
ID
EX
MEM
B
IF
ID
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IF
W
Instruktion or wird zweimal geholt RA.5 2018 v1.0.0
27

• Beobachtung
– Wann liegt das Resultat einer R-Typ Instruktion frühestens vor?
→ nach der EX-Stufe im EX/MEM Pipelineregister. Einen Schritt später steht
das Resultat im MEM/WB Pipelineregister.
– Wann benötigt die folgende Instruktion dieses Resultat spätestens? → am Anfang ihrer EX-Stufe
• Forwarding (= Bypassing)
– Das Resultat einer Stufe wird an alle Stufen, die das Resultat brauchen könnten, direkt weitergeschickt → forwarding. Alternative Formulierung: sobald ein
Ergebnis vorliegt, kann es auch an den folgenden Stufen vorbei weitergeleitet werden → bypassing.
– Die einzelnen Stufen können in jedem Takt durch Eingangsmultiplexer auswählen, ob und welche der direkt geschickten Daten verwendet werden.
– Vorteil: Performancegewinn, da die Pipeline nicht angehalten werden muss
– Nachteile: 􏰜 grössere Multiplexer notwendig
􏰜 deutlich aufwendigerer Kontroller, der die Abhängigkeiten erkennen und die Multiplexer entsprechend steuern muss
Forwarding
RA.5 2018 v1.0.0
28

EX/MEM MEM/WB
Forwarding
Beispiel
IF
ID
EX
MEM
W
B
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
– –
In der EX-Phase der and Instruktion kommt ein ALU-Operand ($2) vom Pipelineregister EX/MEM.
In der EX-Phase der or Instruktion kommt der gleiche Operand ($2) vom Pipelineregister MEM/WB.
RA.5 2018 v1.0.0
29

Data Hazards

Es können nicht alle data hazards aufgelöst werden.
– Bleiben trotz Halbtaktzugriff und forwarding-Technik data hazards bestehen, muss die Pipeline angehalten werden.
Beispiel
“load-use” Konflikt → Pipeline stall
lw $2, 20($1)
and $4, $2, $5
or $8, $2, $5
PC, IF/ID 1 Takt lang anhalten
and $4, $2, $5
or $8, $2, $5
add $9, $4, $2
→ “nop” → “nop”
IF
ID
EX
MEM
B
IF
ID
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
RA.5 2018 v1.0.0
W
30

Control Hazards
• Control hazards treten bei Verzweigungen und Sprüngen auf.
– Die nächste Instruktion wird in der IF-Stufe geholt. Bisher erfolgt die Berechnung der Sprungadresse in der EX-Stufe und die Entscheidung, ob der Sprung durch- geführt wird, in der MEM-Stufe!
• Auflösung von control hazards
1. 2. 3. 4. –
Pipeline Freeze (Anhalten der Pipeline)
Branch Delay Slots (Nutzen der “Sprungverzögerung”) Static Branch Prediction (statische Sprungvorhersage) Dynamic Branch Prediction (dynamische Sprungvorhersage)
Moderne Prozessoren verwenden meist eine Kombination der Methoden 2 und 4.
RA.5 2018 v1.0.0
31

Pipeline Freeze
• Pipeline anhalten, bis Sprungentscheidung und –adresse vorliegen
– Die Sprunginstruktion wird in der ID-Stufe erkannt → die bereits geholte nächste Instruktion muss annulliert werden. Erst nach der MEM-Phase steht die nächste Instruktionsadresse fest.
– Bei dieser Methode gibt es bei jeder Sprunginstruktion einen pipeline stall von 3 Taktzyklen (Sprungstrafe, branch penalty).
Beispiel
beq
IF
ID
EX
MEM
WB
Ii
IF
→ “nop”
Pipeline 3 Takte lang anhalten
Ii+1
Ii+1 oder Ik
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
RA.5 2018 v1.0.0
32


Delayed Branch (Verzögerter Sprung)
Auf die Verzweigungsinstruktion folgen eine Reihe von Instruktionen (delay slots), die unabhängig vom Sprung ausgeführt werden.
– Der Compiler ordnet die Instruktionen so um, dass möglichst viele delay slots genutzt werden können. Ungenutzte delay slots werden mit nop Instruktionen gefüllt.
Beispiel
Ii beq Ii+1
Ii+2
Ii+3
Ii+4 oder Ik
delay slots
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
RA.5 2018 v1.0.0
33

Annahme: ein branch delay slot
Nutzung der Branch Delay Slots
add $s1,$s2,$s3
beq $s2,$zero,L1
nop

… L1:
beq $s2,$zero,L1
add $s1,$s2,$s3

… L1:
L1:sub $t4,$t5,$t6

add $s1,$s2,$s3
beq $s1,$zero,L1
nop

sub $t4,$t5,$t6
L1:…
add $s1,$s2,$s3
beq $s1,$zero,L1
sub $t4,$t5,$t6

add $s1,$s2,$s3
beq $s1,$zero,L1
nop

sub $t4,$t5,$t6
L1:…
add $s1,$s2,$s3
beq $s1,$zero,L1
sub $t4,$t5,$t6

L1:…
immer vorteilhaft
Vorteil, falls verzweigt wird Vorteil, falls nicht verzweigt wird
Gibt es Einschränkungen bzgl. $t4 ? RA.5 2018 v1.0.0
34

Reduktion der Stall Zyklen / Delay Slots
• Man versucht bei der Implementierung der Pipeline das Berechnen der Sprungentscheidung und der Zieladresse so weit wie möglich nach vorne zu schieben.
– Den Sprungzieladdierer kann man leicht von der EX in die ID-Stufe schieben.
– Die Sprungentscheidung wird in der ALU berechnet. Wenn einfache Vergleiche (Gleichheit, Vorzeichen) ausreichen, kann man unter Verwendung zusätzlicher Hardware die Berechnung der Entscheidung auch in die ID-Stufe schieben.
→ nur noch ein pipeline stall Zyklus bzw. ein delay slot zu füllen
RA.5 2018 v1.0.0
35


Static Branch Prediction
Prinzip: Man nimmt für alle Sprunginstruktionen an, dass nie eine Verzweigung auftritt (branch not taken). Dann gibt es zwei Möglichkeiten:
– es kommt zu einer Verzweigung (Spekulation falsch)
– es kommt nicht zu einer Verzweigung (Spekulation korrekt)
Beispiel
Ii beq
Ii+1
Ii+2
Ii+3 Ik
Spekulation war
korrekt: kein branch penalty
falsch: 3 Zyklen branch penalty (im Bild gezeigt)
IF
ID
EX
MEM
WB
IF
ID
EX
IF
ID
IF
IF
ID
EX
MEM
WB
– Man kann auch annehmen, dass eine Verzweigung immer auftritt (branch taken). Wie sieht dann der branch penalty aus?
RA.5 2018 v1.0.0
36

Dynamic Branch Prediction
• Prinzip: Man merkt sich für die einzelnen Sprunginstruktionen die “Vergangenheit”, dh. ob taken oder not taken.
– Ein kleiner Speicher, der branch prediction buffer, speichert für die k zuletzt ausgeführten Sprunginstruktionen die Vergangenheit.
– Ein weiterer Speicher, der branch target buffer, speichert die zuletzt berechneten Zieladressen der Sprünge.
• Wie merkt man sich die “Vergangenheit”?

1-bit branch prediction
§ Ein Prädiktionsbit gibt an, ob der Sprung bei der letzten Ausführung der Sprunginstruktion durchgeführt wurde oder nicht.
§ Problem: Sprunginstruktionen in Schleifen haben oft eine sehr ungleiche Verteilung von taken / not taken (zB. 99 mal taken, 1 mal not taken). Die 1-bit Prädiktion liefert dann zwei aufeinander folgende falsche Vorhersagen.
2-bit branch prediction
§ Um die Prädiktion zu ändern, muss die Vorhersage zwei mal falsch sein.

RA.5 2018 v1.0.0
37

Branch Prediction
• Automatengraph für eine 2-bit Sprungprädiktion
not taken
taken
taken
taken “weak”
not taken
not taken
“strong” not taken
“strong”
taken
taken
taken
not taken taken
not “weak”
Beispiel
tatsächliches Verhalten
not taken taken
not taken taken
not taken taken
1-bit Prädiktion 2-bit Prädiktion
RA.5 2018 v1.0.0
38


Dynamic Branch Prediction
Der branch prediction buffer wird mit den n niederwertigsten Bit der Instruktionsadresse indiziert.
Beispiel
Dynamische Sprungprädiktion mit 2-bit Prädiktoren, 4 KBit branch prediction buffer → n = 11 Bit
31 100
branch prediction buffer
0
address
TT NT NT
11 LSB
11
RA.5 2018 v1.0.0
211-1
39

Fortgeschrittene Techniken

Correlating prediction
– verbindet Informationen über die Vergangenheit einzelner Sprünge (local prediction) mit Informationen über das Verhalten der zuletzt ausgeführten Sprünge (global prediction)
– Ein (m,n) Prädiktor betrachtet das Verhalten der m letzten Sprünge, um zwischen 2m n-bit Prädiktoren für den aktuellen Sprung zu wählen.
Beispiel
(4,2) Correlating prediction mit 4 KBit branch prediction buffer → 16 2-bit Prädiktoren pro Sprungadresse
31 60
branch prediction buffer
0
address
TT NT NT
7 LSB
4 bit
11
RA.5 2018 v1.0.0
211-1
40

Fortgeschrittene Techniken

Tournament prediction
– verwendet mehrere Prädiktionstechniken pro Sprunginstruktion, zB. lokale, globale oder korrelierende Prädiktion. Die Auswahl erfolgt durch einen Selektor abhängig davon, welche Prädiktionstechnik kürzlich genauer war.
– Ein tournament Prädiktor kann unterscheiden zwischen Sprüngen, deren Verhalten eher von ihrer eigenen Vergangenheit abhängt, und Sprüngen, der Verhalten eher bzw. auch von der globalen Vergangenheit abhängt.
– Es gibt viele Varianten von tournament Prädiktoren. Alle modernen high-performance CPUs benutzen solche mit branch prediction buffers von ~30 KBit Grösse.
Beispiel
SPEC2000 Benchmark auf Pentium4, bedingte Sprünge
SPEC2000 Programme
relative Häufigkeit
misprediction rate
floating-point
4,8 %
2%
integer
18,6 %
6%
RA.5 2018 v1.0.0
41

Beispiel
31
Fortgeschrittene Techniken
Tournament predictor mit 48 KBit branch prediction buffer
12 0
address
branch prediction buffer
13 LSB
13
CC
C/NC
NC NC
TT
T/NT
m=13
+
13
NT NT
TT NT NT
C
NC T/NT
T/NT
13
RA.5 2018 v1.0.0
42

• v1.0.0
– Aktualisierung für WS 2018/19
RA.5 2018 v1.0.0
Änderungen
43