Energieverbrauch und Verlustleistung (Protokoll) Spiegel Warum

Werbung
Energieverbrauch und Verlustleistung
Spiegel
(Protokoll)
Warum beschäftigt man sich mit Energieverbrauch?
Oft liegt eine Energiebeschränkung vor, das heißt, die Energiequelle läuft irgendwann aus (zum Beispiel
der Batteriebetrieb eines Handys). Eine sinnvolle Betriebsdauer ist eventuell vorgegeben und das Design
muss diese berücksichtigen.
Die elektrischen Eigenschaften der gewählten Komponenten können auch Leistungsbeschränkungen
hervorrufen: eine leistungsfähige Grafikkarte erfordert auch viel elektrische Leistung, die von dem
Gesamtsystem zur Verfügung gestellt werden muss.
Bei steigender Leistungsfähigkeit steigt auch bekanntlich bei elektrischen Systemen die Temperatur: Der
Entwickler muss auch sicherstellen, dass bei der Ausführung thermische Beschränkungen durch zum
Beispiel eine Kühlung eingehalten werden.
Für CPU-Entwickler ist ca im Jahr 2005 die sogenannte Power Wall erreicht worden: Eine performantere
Elektronik ließ sich nicht – und lässt sich immer noch nicht – mit herkömmlichen, billigen Methoden
kühlen. Seit 2005 stagniert der Leistungstrend der performantesten CPUs bei 150W. (Dies ist auch der
Grund, dass seitdem mehr auf Multicore-Technologie fokusiert wird als Taktraten zu erhöhen.) Bei
Handys liegt ein ähnliches Phänomen vor bei etwa 2,5W, wobei zu beachten ist, dass die thermischen
Beschränkungen für ein Handy auch von der Usability und nicht nur den Bauelementen bestimmt
werden.
Was kann man also tun, um die Verlustleistung zu begrenzen? Man unterscheidet zwischen dynamischer
und statischer Verlustleistung.
Dynamische Verlustleistung umfasst den Energieverbrauch, der durch Schaltvorgänge entsteht. Dazu
gehören beispielsweise die Lade- und Entladevorgänge parasitärer Kapazitäten. Um die Auswirkung
dieser entgegenzuwirken, kann man bei die Feature Size, und dadurch die Kapazitäten, möglichst klein
halten. Die Verlustleistung steigt nämlich gemäß 𝑃 ∝ 𝐶 ∙ 𝑉 2 ∙ 𝑓.
Zur statischen Verlustleistung gehören Leckströme in Transistoren, die durch
- Reverse Bias Dioden,
- Tunneleffekte im Gate-Oxid
- und Stromflüsse, die unter dem Schaltschwellwert des Transistors liegen,
hervorgerufen werden. Die statische Verlustleistung ist mit immer kleiner werdenden Architekturen
umso ausschlaggebender geworden.
Energie kann man auf vielen Ebenen der Entwicklung einsparen:
-
Bei der Software kann man zum Beispiel von der Hardware zur Verfügung gestellte Sleep Modi
verwenden, das Scheduling der Software verbessern und Compileroptimierungen machen.
Bei der Hardware bieten sich Spannugsinseln, dynamische Spannungs- und Frequenzanpassung,
sowie Clock- und Power Gating als Methoden der Einsparung.
Bei der Basistechnologie erweist sich die Anpassung der Feature Size sowie der
Transistorschwellwerte als sinnvolle Optimierung.
Erhöht man die Transistorschwellwerte eines Designs, werden die Verluste zwar verringert, aber die
Schaltzeiten dadurch in die Länge gezogen. Üblich ist es hierfür Multi-Threshold CMOS-Logik zu
implementieren: Die Schwellwerte entlang des kritischen Pfades werden gering gehalten, um schnelleres
Schalten zu ermöglichen, und überall dort im Design, wo Geschwindigkeit nicht kritisch ist, werden sie
höher gestellt, um Energie einzusparen. Diese Methode erfordert jedoch zusätzliche Maskierungsschritte
in der Produktion.
Eine weitere Methode nennt sich Variable Threshold Computing. Hierbei wird dem Substrat eine
steuerbare, negative Offsetspannung angelegt, über die die Schwellwerte angepasst werden können
(proportional zur Wurzel der Offsetspannung).
Ähnlich wie bei den Schwellwerten liegt bei der Versorgungsspannung ein Dilemma vor: Hält man die
Spannung gering, so sinken auch die Verluste (etwa quadratisch gemäß der bereits erwähnten Formel),
aber auch die Schaltgeschwindigkeiten. Außerdem kann man die Versorgungsspannung nicht beliebig
niedrig wählen, da die Komponenten schließlich eine bestimmte Mindestspannung benötigen um
überhaupt funktionieren zu können.
Jedoch brauchen oft unterschiedliche Bereiche eines Designs unterschiedlich viel Spannung. Man kann
das Design in sogenannte Spannungsinseln aufteilen, die unterschiedliche Versorgungsspannungen
haben können, um dort Verlustleistung niedrig zu halten, wo weniger Spannung notwendig ist. Falls
Kommunikation zwischen den Inseln erfolgen soll, muss der Pegel entsprechend angepasst werden.
Die Verlustleistung lässt sich auch über eine dynamische Spannungs- und Frequenzanpassung
verkleinern. Die Versorgungsspannung sowie Taktfrequenz können im Idle-Zustand beziehungsweise bei
geringer Auslastung des Systems heruntergeschraubt werden. Es ist aber zu bedenken, dass die
Anpassung nicht so schnell erfolgen soll wie die Änderung der Auslastung, aber auch dass diese Methode
meistens Unterstützung von der Software benötigt (Software, die den Takt als Zeitreferenz verwendet,
müsste zum Beispiel angepasst werden).
Reicht es nicht, die Spannung dynamisch und/oder über Spannungsinseln anzupassen – die statische
Verlustleistung und Verbrauch der Leitungskapazitäten sorgen nämlich für bis zu 50% des
Energieverbrauchs – bietet sich noch die Möglichkeit Komponenten gänzlich vom System zu trennen.
Mit Clock Gating kann eine Komponente vorübergehend vom Taktsignal getrennt werden. Die Leitungen
vom Clock sind meistens die längsten in einem Design, also wenn diese gekürzt werden können, sinkt
schon die Leitungskapazität beträchtlich. Außerdem verschwindet die dynamische Verlustleistung der
„abgedrehten“ Komponenten, da sich der Zustand ohne Takt bei synchronen Designs nicht ändern kann.
Die statischen Verlustleistungen bleiben jedoch erhalten, dafür ist der Zustand der Komponente
abgespeichert, falls der Takt wieder eingeschaltet wird und weiterberechnet werden soll.
Bei Power Gating werden Komponenten gänzlich von der Versorgungsspannung getrennt. Hierbei
verschwinden jegliche statischen Verlustleistungen, aber der Zustand der Komponente geht verloren.
Man kann um die Hardware leistungseffizienter zu machen auch Redundanz einbauen: Eine
aufgabenspezifische Hardware ist meistens effizienter bezüglich Energieaufnahme als der
Hauptprozessor in einem System. Beispielsweise kann das Abspielen einer Audiodatei an ein MP3-Modul
vergeben werden. Auch komplette Redundanz ist häufig, um die Verlustleistung niedrig zu halten: Die
big.LITTLE Architektur von ARM bietet zum Beispiel energieeffiziente, langsame Kerne neben weniger
effiziente, schnellere Kerne. Diese haben oft auch das gleiche Instruction Set und können somit
dynamisch je nach Anforderung ein- und ausgeschaltet werden.
Um in der Software Strom zu sparen, ist in erster Linie der Algorithmus zu betrachten: In der Regel, je
geringer die Laufzeit, desto weniger Energie wird benötigt. Auch die gewählten Operationen können
einen Einfluss auf die Leistungsaufnahme haben.
Falls die Hardware Sleep Modi besitzt, können diese von der Software aktiviert werden in Idle Phasen im
Algorithmus. Jedoch gibt es in den meisten Fällen eine Aufwachphase, wenn das System wieder aktiv
wird, also sind manche Sleep Modi in Fällen, wo häufige Aktivität erwartet wird, weniger sinnvoll.
Das Ziel für die Software ist es, die aktive Zeit zu optimieren. Oft spricht man von einem „Race to Idle“,
also dem Streben nach schneller Aktivität und langen Idle-Pausen, aber es is manchmal sinnvoller, dass
die Hardware länger aktiv ist, jedoch bei geringerem Takt wenn sich dadurch auch die Spannung
verringern lässt.
Heterogeneous Multiprocessing ist das Konzept des Zusammenarbeit unterschiedlicher Kerne (zum
Beispiel CPU und GPU). Das Auslagern bestimmter Berechnungen auf geeignete Einheiten kann große
Einsparungen bezüglich Verlustleistung mit sich bringen. Die separaten Kerne der big.LITTLE Architektur
können bei bestimmten Workloads auch parallel verwendet werden.
Manchmal lässt sich die Verlustleistung senken, indem man gewisse Compileroptimierungen macht. Je
weniger Bits umgeschalten werden, desto weniger dynamische Verlustleistung.
Herunterladen