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.