Post on 06-Apr-2016
Parallelität auf InstruktionsebeneÜbersetzung von künstlichen SprachenPräsentation: Christoph Heitmann03.06.2009
2
MotivationModerne Rechnerarchitekturen nutzen die parallele Befehlsausführung für eine beschleunigte/effiziente Programmausführung
VLIW
• Very Long Instruction Word• Mehrere Befehle zu einem
VLIW-Befehl zusammengefasst
• Statische Planung
Super-skalar
• Mehrere parallelarbeitende Funktionseinheiten
• Dynamische Planung
Parallelität auf Instruktionsebene
3
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
4
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
5
Phasenstruktur eines CompilersDie Optimierung für Befehlsparallelität erfolgt auf Basis eines Zwischencodes und für eine spezifische Architektur
Grundlagen
Frontend
Lexikalische Analyse
Syntaktische Analyse
Semantische Analyse
Zwischencode-Generierung
Optimierung
Optimierung für Parallelität auf
Instruktionsebeneu.a.
Backend
Zielcode-Generierung
6
Darstellungsformen (1)Das Programmbeispiel berechnet den größten gemeinsamen Teiler zweier Zahlen nach Euklid
Grundlagen
// Gegeben: Zwei Ganzzahlen a > 0, b > 0, // Variable z für Zwischenberechnungen 1 while (b > 0) | Block A 2 { 3 if (a < b) | Block B 4 { 5 z = a; | Block C 6 a = b; | Block C 7 b = z; | Block C 8 } 9 z = a - b; | Block D 10 a = b; | Block D 11 b = z; | Block D 12 }
// Gegeben: Zwei Ganzzahlen a > 0, b > 0 // r0 = Speicherdresse von a, // r1 = Speicherdresse von b, r2 = 0 I1 S: LD r3, r0 I2 LD r4, r1 I3 CJMP r3 < r4, T
|--- Ende Grundblock A ---| I4 SUB r5, r3 – r4 I6 ST r0, r4 I7 ST r1, r5 I8 CJMP r4 > r2, S
|--- Ende Grundblock B ---| |--- Ende von Programmteil S ---| I9 T: LD r5, r0 I10 ST r0, r4 I11 ST r1, r5 I12 CJMP S |--- Ende Grundblock C ---| |--- Ende von Programmteil T ---|
Ursprungsprogramm (C#): Code für abstrakte Maschine:
Generiere Zwischencode
Abstrakte Maschine
RISC-ähnliche Architektur Lade- und Speicherbefehl (LD bzw. ST) Addition und Subtraktion (ADD bzw. SUB) Bedingter Sprungbefehl (CJMP) 1x Rechenwerk (ALU) 1x Speicherkommunikationseinheit (MEM)
7
Darstellungsformen (2)Im Programm befindliche Steuerungs- und Datenabhängigkeiten lassen sich mit Hilfe von Graphen veranschaulichen
Grundlagen
Kontrollflussgraph (und Verfeinerung)
T B
A
B C
F
F
T T
F
F
Datenabhängigkeitsgraph
1
1
1
SUB r 5 , r 3 – r 4
ST r 0 , r 4
ST r 1 , r 5
CJMP S
1 1
1
B ALU MEM
SUB r5, r3 – r4
ST r0, r4
ST r1, r5
CJMP r4 > r2, S
echte Datenabängigkeiten Ressourcenreservierungstabelle Kantenbeschriftung mit Verzögerungszeiten
Steuerungsabhängigkeiten Beschreibt Programmfluss mit Bedingungsprüfungen Programmverzweigungen mit wahr (T) und unwahr (F)
8
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
9
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
10
Planung eines Grundblockes (1)Die lokale Codeplanung ergibt einen Ablaufplan für einen Grundblock, und stellt somit den ersten Schritt einer Optimierung
dar
Takt Maschinencode ALU MEM 1 SUB r5, r3 – r4 ST r0, r4 2 - ST r1, r5 3 CJMP r4 > r2, S -
Datenabhängigkeitsgraph: Optimiertes Maschinenprogramm:
Listenplanung
Grundsatz der Listenplanung
„… berechnet der Algorithmus den frühesten Zeitpunkt, zu dem ein Knoten ausgeführt werden kann, gemäß seinen Datenabhängigkeiten zu den vorher verplanten Knoten.“Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
1
1
1
SUB r 5 , r 3 – r 4
ST r 0 , r 4
ST r 1 , r 5
CJMP S
1 1
1
B ALU MEM
11
Planung eines Grundblockes (2)Nicht alle Grundblöcke bieten die Möglichkeit einer parallelen Befehlsausführung
Ablaufpläne optimierter Grundblöcke Auswertung
Grundblock A: Keine parallele Ausführung Grundblock B: Benötigt 3 statt 4 Takte Grundblock C: Keine parallele Ausführung
FazitDie Listenplanung im Rahmen der lokalen Ablaufplanung erfasst nur ein geringes Parallelitätspotential.
Takt Maschinencode ALU MEM 1 - LD r3, r0 2 - LD r4, r1 3 - - 4 CJMP r3 < r4, T -
Takt Maschinencode ALU MEM
1 SUB r5, r3 – r4 ST r0, r4 2 - ST r1, r5 3 CJMP r4 > r2, S -
Takt Maschinencode ALU MEM
1 - LD r5, r0 2 - - 3 - ST r0, r4 4 - ST r1, r5 5 CJMP r3 < r4, T -
12
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
13
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
14
Planung mehrerer Grundblöcke / Bereiche (1)Im Rahmen der Bereichsplanung erfolgt eine Herausarbeitung von Parallelität über Grundblockgrenzen hinaus
Dominanzbeziehungen und Parallelitätskonzepte Bereichsplanung
berücksichtigt Dominanzbeziehungen einfache Codeverschiebung (aufwärts) spekulative Ausführung erfolgt an Hand eines azyklischen Graphen
Ein Bereich ist eine Menge von Grundblöcken und im Programmablauf nur durch einen Eingangspunkt erreichbar. (Definition in Anlehnung an David Bernstein, Michael Rodeh)
Dominanzbeziehungen zwischen Grundblöcken
• Dominanz
• Postdominanz
Konzepte
• einfache Codeverschiebung• aufwärts• abwärts
• Spekulative Ausführung
• Duplikation
• Kontrolläquivalenz
15
Planung mehrerer Grundblöcke / Bereiche (2)Die Bereichsplanung erfolgt von innen nach außen und ermöglicht die parallele Ausführung von Befehlen verschiedener
Grundblöcke
Global geplanter Ablaufplan
Zeile Block Maschinencode ALU MEM 1 A S: - LD r3, r0 2 A - LD r4, r1 3 A - - 4 A CJMP r3 < r4, T LD r5, r0 5 A - - 6 B SUB r5, r3 – r4 ST r0, r4 7 B CJMP r4 > r2, S ST r1, r5 8 C T: - ST r0, r4 9 C CJMP r3 < r4, T ST r1, r5
Auswertung
ursprünglich: 11 Zeilen / max. 17 Takte jetzt: 9 Zeilen / max. 9 Takte
Der Grad der parallelen Ausführung lässt sich mit Hilfe der Bereichsplanung steigern. Jedoch ist das Parallelitäts-potential auf Grund der azyklischen Optimierung von Schleifen begrenzt.
16
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
17
Agenda
Grundlagen
Lokale Codeplanung
Globale Codeplanung Softwarepipelining
18
SchleifentypenZu beachtende Abhängigkeiten zwischen einzelnen Iterationen einer Schleife existieren in sogenannten Do-Across-Schleifen
Do-Schleife
z.B. Operationen auf Vektoren einzelne Schleifendurchläufe unabhängig einfacher Fall
// Gegeben: Array a mit Ganzzahlen, // Indexvariable i mit 0 initialisiert // Anzahl Elemente n des Arrays a, Konstante c 1 while (i < n) 1 { 3 a[i] = a[i] + c; 4 i++; 5 }
Do-Across-Schleife
// Gegeben: Array a mit Ganzzahlen, // Indexvariable i mit 0 initialisiert // Anzahl Elemente n des Arrays a, // Variable prod mit 1 initialisiert 1 while (i < n) 2 { 3 prod = prod * a[i]; 4 i++; 5 }
z.B. Berechnungen mit Zwischenprodukten Abhängigkeiten zwischen den Iterationen komplex
19
Abwickeln von SchleifenBestehen keine Datenabhängigkeiten zwischen den Durchläufen, kann die Schleife theoretisch vollständig abgewickelt
werden
Viermal abgewickelte Do-Schleife
sehr hohes Parallelitätspotential drastischer Codezuwachs Kompromiss notwendig
I1 LD++ // Iteration 1 I2 ADD , LD++ // Iterationen 1 + 2 I3 ST++ , ADD // Iterationen 1 + 2 I4 ST++ // Iteration 2 I5 LD++ // Iteration 3 I6 ADD , LD++ // Iterationen 3 + 4 I7 ST++ , ADD // Iterationen 3 + 4 I8 ST++ // Iteration 4 |----------- Ende der Abwicklung ------------| I9 S: LD++ // Iterationen 5 bis n I10 ADD I11 ST++ , CJMP-- S
LösungSoftwarepipeling: Ermöglicht die geforderte Ausführungs-beschleunigung mit einem geringen Zuwachs bzgl. des Codeumfangs.
20
Umsetzung der Do-Schleife in einer SoftwarepipelineEine Pipeline bietet i.d.R. schon für wenige Iterationen einen hohen, mit der Durchlaufzahl wachsenden Geschwindigkeitsvorteil.
Bestandteile
Prolog
• „Füllen“ der Pipeline
• einmalig ausgeführt Stationärer Zustand („Kernel“)
• Mini-Schleife
• maximale Parallelität
• n-fach ausgeführt Epilog
• „Leeren“ der Pipeline
• einmalig ausgeführt
Softwarepipeline
Best. Maschinencode ALU MEM JMP 1 (P) LD++ 2 ADD LD++ 3 (SZ) S: - ADD LD++ 4 ST++ - ADD CJMP-- S 5 (E) ST++ - 6 ST++
SZ bearbeitet n – 2 Iterationen SZ benötigt 2 (statt 3) Takte je Iteration Schleife muss mindestens 3x durchlaufen werden Konfliktprüfung: Modulare Ressourcenreservierungstabelle
21
Umsetzung der Do-Across-Schleife (1)Die Umsetzung einer Do-Across-Schleife findet auf Basis eines zyklischen Abhängigkeitsgraphen statt.
Graphenerweiterung Planungsverfahren
Planung eines zyklischen Graphen Minimierung des Einleitungsintervalls ist nur NP-lösbar Vereinfachung durch Anwendung einer Heuristik
• Ober- und Untergrenze des Einleitungsintervalls
• liefert Ergebnisse nahe am Optimum Sukzessive Planung von SCCs (Strong Connected Components) Berechnung der längsten einfachen Pfade
• Zyklen haben keine Auswirkung
• garantiert Einhaltung aller Abhängigkeiten Rückverfolgung (engl. „Backtracking“)
SCC 1
SCC 2
A
B
C
0 , 1
D
0 , 1 0 , 1
1 , 1
0 , 1
0 , 1
1
LD ++
LD
MULT
ST , CJMP -- S 0 , 1
ALU MEM JMP
0 , 1 0 , 1
0 , 1 0 , 1
1 , 1
22
Umsetzung der Do-Across-Schleife (2)Im Beispiel ergibt sich ein Einleitungsintervall s von 3 Takten
Verfahrensanwendung Softwarepipeline
s N Intervall Start-
zeitpunkt
Modulare Ressourcen-reservierung 3 A ሾ0,∞ሿ 0 ALU MEM JMP ‼
3 B ሾ1,∞ሿ 1 3 C ሾ2,2ሿ 2
3 D ሾ3,3ሿ 3
s N Intervall Startzeit-
punkt
Modulare Ressourcen-reservierung 3 A ሾ0,∞ሿ 0 ALU MEM JMP
3 B ሾ1,∞ሿ 2 3 C ሾ3,3ሿ 3
3 D ሾ4,4ሿ 4
Rück-verfolgung
Zeile Pipeline Maschinencode ALU MEM JMP 1 Prolog LD++ 2 - 3 SZ S: LD 4 MULT LD++ 5 ST - CJMP-- S 6 Epilog LD 7 MULT 8 ST
23
Umsetzung der Do-Across-Schleife (3)Eine geringe Codeverlängerung ist in Betracht des Geschwindigkeitszuwachses zu vernachlässigen
Auswertung
Codeverlängerung
• 8 Zeilen / Takte
• ursprünglich 5 Takte Gesamtausführungszeit
• Pipeline: 5 + 3n Takte
• ursprüngliche Schleife: 4 Takte
• Vorteil schon ab 6 Durchläufen Planung schon im 2. Versuch erfolgreich
FazitSoftwarepipeling: Ermöglicht die geforderte Ausführungs-beschleunigung mit einem geringen Zuwachs bzgl. des Codeumfangs.
24
Hierarchische ReduktionDurch die hierarchische Reduktion wird das Konzept des Softwarepipelinings universeller anwendbar
Bisher
Schleifen mit nur einem Grundblock keine Verzweigungen innerhalb der Schleife umgebender Code nicht betrachtet
Konzept der hierarchischen Reduktion
ähnlich der Bereichsplanung (globale Codeplanung) Behandlung von Kontrollstrukturen
„if-then-else“-Konstrukte Zurückführen auf elementares Objekt Objekt wird wie Grundblock behandelt
reduzierte Objekte können überlappt werden Glassbox statt Blackbox (Bereichsplanung) Abhängigkeiten als Maximum beider Äste keine Ressourcenüberbeanspruchung
Überlappung: Prolog/Epilog und andere Instruktionen Objekte erhalten Ressourcenverbrauch des SZ SZ darf nicht überlappt werden
25
Zusammenfassung
für ein (Grundblock-)Element geringes Parallelitätspotential einfach zu planen Grundlage für globale Planung
26
Zusammenfassung
für ein (Grundblock-)Element geringes Parallelitätspotential einfach zu planen Grundlage für globale Planung
Bereichsplanung mittleres Parallelitätspotential Dominanzbeziehungen
27
Zusammenfassung
für ein (Grundblock-)Element geringes Parallelitätspotential einfach zu planen Grundlage für globale Planung
Bereichsplanung mittleres Parallelitätspotential Dominanzbeziehungen
Schleifen Kompromiss
• Codelänge
• Geschwindigkeit hohes Parallelitätspotential
Vielen Dank für die Aufmerksamkeit!