394
7 Optimierung
aller Energieoptimierungen. Diese wurden in Kapitel 5 vorgestellt. Unter Verwendung solcher Modelle wurden die folgenden Compileroptimierungen eingesetzt, um
den Energieverbrauch zu senken:
• Energiegewahres Scheduling: Die Reihenfolge von einzelnen Befehlen kann
geändert werden, solange sich die Bedeutung des Programms dadurch nicht ändert. Die Reihenfolge kann so geändert werden, dass die Anzahl an Bitwechseln
auf dem Befehlsbus minimiert wird. Diese Optimierung kann auf der Ausgabe
eines Compilers durchgeführt werden und erfordert daher keine Änderung am
Compiler selbst.
• Energiegewahre Befehlsauswahl: Üblicherweise kann ein Abschnitt eines
Quellcodes durch eine Menge an unterschiedlichen Maschinenbefehlsfolgen implementiert werden. Standard-Compiler verwenden die Anzahl an Instruktionen
oder Prozessorzyklen als Kriterium (Kostenfunktion) zur Auswahl einer guten
Sequenz. Dieses Kriterium kann durch die von dieser Sequenz benötigten Energie ersetzt werden. Steinke et al. haben herausgefunden, dass energiegewahre
Befehlsauswahl den Energieverbrauch um einige Prozent senken kann [509].
• Ersetzen der Kostenfunktion ist auch bei anderen Standard-Compileroptimierungen möglich, wie z.B. register pipelining, loop invariant code motion usw.
Auch hier liegen die möglichen Verbesserungen in Bereich einiger weniger Prozent.
• Ausnutzen der Speicherhierarchie: Wie bereits auf Seite 184 gezeigt, haben
kleinere Speicher kürzere Zugriffszeiten und verbrauchen weniger Energie pro
Zugriff. Durch Ausnutzung von Speicherhierarchien kann daher eine nennenswerte Menge an Energie eingespart werden. Die durch Verwendung von Speicherhierarchien erzielbaren Energieeinsparungen zählten zu den lohnendsten Optimierungen, die Steinke [512, 510] analysiert hat. Es ist daher vorteilhaft, beispielsweise
kleine Scratchpad-Speicher (SPM) zusätzlich zu großen Hintergrundspeichern
einzusetzen. Alle Zugriffe auf den jeweiligen Speicherbereich werden dadurch
weniger Energie benötigen und schneller sein als ein entsprechender Zugriff auf
den größeren Speicher. Dabei sollte der Compiler die Zuordnung von Variablen
und Befehlen in den SPM übernehmen. Dieser Ansatz erfordert aber, dass häufig
verwendete Variablen und Codefolgen identifiziert und in diesen Adressbereich
abgebildet werden.
7.3.3 Speicherarchitektur-gewahre Übersetzung
Übersetzungstechniken für Scratchpads
Die Vorteile der Verwendung von SPMs wurden bereits deutlich dargelegt [35].
Daher stellt die Ausnutzung von SPMs einen herausragenden Fall der Ausnutzung
von Speicherhierarchien dar. Compiler sind üblicherweise dazu in der Lage, Speicherobjekte auf bestimmte Adressbereiche im Speicher abzubilden. Dafür muss der
Quellcode üblicherweise annotiert werden.
Précédent

- 412/485

Suivant