Multiple‐Issue
Motivation
Bi h I i L l P ll li (ILP) d h Pi li i
• Bisher: Instruction‐Level‐Parallelism (ILP) durch Pipelining
– ILP kann durch Pipeline‐Stufe erhöht werden
– Pipelines mit mehr Stufen sind anfälliger gegenüber Data‐ und Control‐
Hazards
– Also: Pipeline‐Stufen nur bis zu gewisser Tiefe sinnvoll – Außerdem: Grenzen aufgrund der Leistungsaufnahme
– CPI bleibt gleich oder steigt sogar (wegen Hazards), Clock‐Rate steigt
• Hier eine weitere Methode um ILP zu steigern: Multiple‐Issue
– Replikation von internen CPU‐Strukturen, sodass mehrere Instruktionen proReplikation von internen CPU Strukturen, sodass mehrere Instruktionen pro Pipeline‐Stufe möglich sind
– CPI sinkt und Clock‐Rate bleibt gleich (oder sinkt sogar wegen erhöhter Komplexität)
– Beispiel: CPI eines 4‐Wege‐Multiple‐Issue‐Mikroprozessor hat eine ideale CPI von? 0.25!
– CPI liegt aber in der Regel höher, wie wir gleich sehen werden
• Wir unterscheiden zwischen:
– Static‐Multiple‐Issue: Entscheidungen werden zur Compile‐Zeit gefällt – Dynamic‐Multiple‐Issue: Entscheidungen werden zur Laufzeit gefälltDynamic Multiple Issue: Entscheidungen werden zur Laufzeit gefällt
(auch Superskalare CPU bezeichnet)
Multiple‐Issue
l l
Static‐Multiple‐Issue
Generelle Idee
• Eine große Instruktion pro Clock‐Cycle
• Große Instruktion besteht aus mehreren Große Instruktion besteht aus mehreren gleichzeitig stattfindenden Operationen
• Aber nicht jede Kombination von Operationen möglich g
• Beispiel:
ALU O ti d S i h ti l i h iti – ALU‐Operation und Speicheroperation gleichzeitig
möglich
– Aber zwei ALU‐Operation auf einmal nicht möglich
• Terminologie: VLIW (Very Long Instruction Word) g ( y g )
Beispiel am MIPS‐Datenpfad
ALU für arithmetische Operationen
Extra ALU für gleichzeitige Adresskalkulation
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Statische Two‐Issue Pipeline im Betrieb
Was ist der CPI‐Wert?
Was ist nun die Aufgabe des Compilers?
Loop: lw $t0, 0($s1) # $t0=Array-Element addu $t0 $t0 $s2 # addiere Wert
Compiler erzeugt Assembler‐Code:
addu $t0, $t0, $s2 # addiere Wert
sw $t0, 0($s1) # Speichere Element addi $s1, $s1, -4 # nächstes Element $ , $ , # bne $s1, $zero, Loop # solange $s1 != 0 und ordnet Instruktionen so an, dass keine Pipeline‐Stalls entstehen , p
Was ist der CPI‐Wert?
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Verbesserung: Loop‐Unrolling
Code wie vorher (der Einfachheit sei Loop‐Index Vielfaches von 4):
Loop: lw $t0, 0($s1) # $t0=Array-Element addu $t0, $t0, $s2 # addiere Wert
Code wie vorher (der Einfachheit sei Loop Index Vielfaches von 4):
sw $t0, 0($s1) # Speichere Element addi $s1, $s1, -4 # nächstes Element bne $s1 $zero Loop # solange $s1 ! 0 bne $s1, $zero, Loop # solange $s1 != 0 Loop‐Body vier mal kopiert und Register‐Renaming
Was ist der CPI‐Wert?
Multiple‐Issue
l l
Dynamic‐Multiple‐Issue
Generelle‐Idee
• CPU entscheidet, ob und wie viele aufeinander folgende Instruktionen parallel gestartet werden können
• Compiler erzeugt nur eine Folge von Compiler erzeugt nur eine Folge von Instruktionen; kein VLIW
• Instruktions Scheduling des Compilers nicht mehr
• Instruktions‐Scheduling des Compilers nicht mehr erforderlich aber trotzdem aus Performance‐
Gründen sinnvoll Gründen sinnvoll
• Verbesserung der Superskalarität durch
d i h i li h d li
dynamisches Pipeline‐Scheduling:
Instruktionsreihenfolge darf geändert werden, um
Stalls zu vermeiden
Dynamic‐Pipeline‐Scheduling Motivation
lw $t0, 20($s2) # zunächst $t0 laden
addu $t1, $t0, $t2 # addu durch lw verzögert addu $t1, $t0, $t2 # addu durch lw verzögert sub $s4, $s4, $t3 # sub könnte schon starten slti $t5, $s4, 20 # und genau so auch slti
Warum nicht sub (und ggf slti) vor addu vorziehen?
Warum nicht sub (und ggf. slti) vor addu vorziehen?
Dynamic‐Pipeline‐Scheduling generell
Wiedervorlage: Daten einiger ausgewählter Prozessoren
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Zusammenfassung und Literatur
Zusammenfassung
S hl h P f Si l C l A
• Schlechte Performance von Single‐Cylce‐Ansatz
• Instruktionsabarbeitung besteht aus mehreren Zyklen
• Moderne Prozessoren nutzen dies für – Pipelining
– Multiple‐Issue
• Allgemein als Instruction‐Level‐Parallelism bezeichnet
• Für High‐Level‐Programmierer ist die Parallelität nicht sichtbar – Sichtbar auf Assmbler‐Ebene
– Sichtbar auch Compiler‐Ebene
• Haupt‐Probleme die die Parallelität einschränken – Daten‐Abhängigkeiten
– Control‐Abhängigkeiten
• Methoden um Data‐ und Control‐Hazards zu reduzieren – Scheduling
– Spekulation
• Sichtbare Grenze der Power‐Wall ist erreicht
• Trend zu Multicores mit einfacheren Pipelines
• Konsequenz: Parallelität nicht mehr von der Hardware gekapselt
Quiz
Pipelining erhöht den Durchsatz aber reduziert nicht die Instruktions‐Latenz.
Pipelining erhöht den Durchsatz aber reduziert nicht die Instruktions Latenz.
[ ] Nein, Durchsatz und Latenz sinken [ ] Nein, Durchsatz und Latenz steigen [ ] Ja, das ist richtig
Welchen Einfluss hat Superskalarität auf den CPI‐Wert?
[ ] Der CPI‐Wert bleibt immer unverändert, [ ] Der CPI‐Wert steigt an.
[ ] Der CPI‐Wert kann unter 1 fallen.
Eine Pipeline mit k Stufen erreicht asymptotisch immer eine Performance‐Ratio von k.
[ ] Jawohl. [ ] Nein, die Ratio kann darunter liegen.
[ ] N i di R i k h höh li
Mittels Pipelining kann man die Taktrate eines Rechners erhöhen.
[ ] Nein, die Ratio kann sogar noch höher liegen.
Welchen Einfluss hat Pipelining auf den CPI‐Wert?
[ ] Stimmt! [ ] Nein, das ist völliger Quatsch.
Welchen Einfluss hat Pipelining auf den CPI Wert?