130 likes | 227 Views
Energiebewusste Compilierung für digitale Signalprozessoren. Projekt Prozessorarchitekturen und Compilertechniken zur verlustarmen digitalen Signalverarbeitung. Markus Lorenz Peter Marwedel Universität Dortmund Lehrstuhl Informatik XII. Teilziel Entwicklung energiebewusster
E N D
Energiebewusste Compilierung fürdigitale Signalprozessoren Projekt Prozessorarchitekturen und Compilertechniken zur verlustarmen digitalen Signalverarbeitung Markus Lorenz Peter Marwedel Universität Dortmund Lehrstuhl Informatik XII
Teilziel Entwicklung energiebewusster Compilertechniken Teilziel Entwicklung energiebewusster Prozessorarchitekturen Projektübersicht HW-Ausnutzung Verbesserungsvorschläge DORTMUND: Schwerpunkt Compiler- techniken DRESDEN: Schwerpunkt Prozessor- architektur HW/SW-Exploration Energie-Kostenmodell Modell der Leistungsaufnahme Realisierbarkeit DSP-Compiler- Know-How DSP-HW- Know-How Gesamtziel Energiereduzierung prozessorbasierter DSP-Systeme
M3-DSP Plattform: M3-DSP • skalierbare Anzahl • irregulärer Datenpfade • SIMD/SISD • Verarbeitung • spezielle Speicher- • schnittstelle • AGU • HW-Schleifen • 4-stufige Pipeline • mehrere Ansätze für Optimierungen
Compiler: Anforderungsanalyse Ziel: Entwicklung eines (energie-) optimierenden Compilers • Handhabung der irregulären Prozessorarchitektur • Gruppenspeicher • Verbindungsnetzwerk • Datenpfad (SISD/SIMD-Verarbeitung) • modulare Integration von (Energie-) Optimierungen • effektive Ausnutzung der Hardware-Ressourcen • Minimierung der Switchingaktivitäten • Verwendung generischer Konzepte ( HW/SW-Exploration) Bedarf an • geeigneter Compilerinfrastruktur • neuen Optimierungstechniken • phasengekoppelter Codegenerator ( letzter Workshop) • Schleifen-Optimierungen ( heute)
IR Standard- Optimierungen • Codegenerierung • Adresscode-Generierung • Schleifen-Optimierungen • Vektorisierung • HW-Schleifen (ZOL) Energie- Daten Compilierungsablauf prozessorunabhängig prozessorabhängig Lance2 Frontend IR to GeLIR GeLIR to Asm C-Src GeLIR Asm GeLIR to Sim Sim • GeLIR (Generic Low-Level Intermediate Representation) • Darstellung prozessorspezifischer Informationen • Austauschformat zwischen Optimierungsphasen • Darstellung alternativer Maschinenprogramme
GeLIR vor Vektorisierung Frontend i = 0; // {SIMD_LDI, LDI} LOOP: t1 = A[i]; // {SIMD_Load} t2 = t1; // {SIMD_DT, DT} x = t2 + 2; // {SIMD_Add, Add} B[i] = x; // {SIMD_Store} i = i + 1; // {SIMD_Add, Add} t3 = i < 64; // {Compare} if(t3) goto LOOP;// {JNE} • Generierung von 3-Adresscode und Zerlegung von Schleifen • Einfügen potentieller Datentransfers • Erzeugung alternativer Maschinenprogramme Vektorisierung: Beispiel (1) for(i = 0; i < 64; i++) { x = A[i]; x = x + 2; B[i] = x; } C-Code
GeLIR nach Vektorisierung Vektorisierung i = 0; // {LDI} LOOP: t1 = A[i]; // {SIMD_Load} t2 = t1; // {SIMD_DT} x = t2 + 2; // {SIMD_Add} B[i] = x; // {SIMD_Store} i = i + 16; // {Add} t3 = i < 64; // {Compare} if(t3) goto LOOP;// {JNE} • Reduzierung der Anzahl Schleifendurchläufe von 64 auf 4 • Vermeidung des Overheads zur Gruppenhandhabung im SISD-Modus Vektorisierung: Beispiel (2) GeLIR-Code vor Vektorisierung i = 0; // {SIMD_LDI, LDI} LOOP: t1 = A[i]; // {SIMD_Load} t2 = t1; // {SIMD_DT, DT} x = t2 + 2; // {SIMD_Add, Add} B[i] = x; // {SIMD_Store} i = i + 1; // {SIMD_Add, Add} t3 = i < 64; // {Compare} if(t3) goto LOOP;// {JNE}
HW-Loop GeLIR mit HW-Schleifen i = 0; // {LDI} zloop(4); LOOP: t1 = A[i]; // {SIMD_Load} t2 = t1; // {SIMD_DT} x = t2 + 2; // {SIMD_Add} B[i] = x; // {SIMD_Store} i = i + 16; // {Add} zgoto LOOP; • Testen der Abbruchbedingung erfolgt durch Hardware • gute Ergänzung zur Vektorisierung HW-Schleifen: Beispiel GeLIR-Code nach Vektorisierung i = 0; // {LDI} LOOP: t1 = A[i]; // {SIMD_Load} t2 = t1; // {SIMD_DT} x = t2 + 2; // {SIMD_Add} B[i] = x; // {SIMD_Store} i = i + 16; // {Add} t3 = i < 64; // {Compare} if(t3) goto LOOP;// {JNE}
Experimentelle Ergebnisse (1) rel. #Speicherzugriffe in % 96% 95% 46% -13% 10%
Experimentelle Ergebnisse (2) rel. Zyklenzahl in % 96% 95% 51% 11% 30%
Experimentelle Ergebnisse (3) rel. Energieverbrauch in % 94% 94% 49% 8% 17%
Experimentelle Ergebnisse (4) rel. Energieverbrauch in % 24% 24% 17% 19%
Zusammenfassung Projektziel: Energiereduzierung prozessorbasierter DSP-Systeme durch simultane HW- und SW-Entwicklung • irreguläre Architekturen erfordern neue Compilertechniken • Integration von Energiekostenmodell in Compiler und Simulator • phasengekoppelter energiebewusster Codegenerator (letzter WS) • Heute: Schleifen-Optimierungen: Vektorisierung und HW-Schleifen • aufwändige Analysen erforderlich • Prozentuale Verbesserungen im Durchschnitt: Vektor: Speicherzugriffe: 47%, Zyklenzahl: 57%, Energie: 52% HW-Schleifen: Energie: 21% • Integration der Optimierungen in allgemeine Compiler-Umgebung Einsatz der Techniken für andere Architekturen möglich Ausblick: • Verbesserung der Vektorisierung • HW/SW-Exploration in Kooperation mit TU Dresden