Wie man Software so schreibt, dass sie wenig Strom verbraucht

Hallo zusammen,

Strom ist teuer. Sowohl für die Umwelt (zumindest der fossile Anteil) als auch für das Portemonaye.
Software verbraucht Strom. Und wenn man schaut wie viel das weltweit ist, kann einem schwindelig werden ( 6 Terawattstunden Strom pro Jahr, ca. 3% der Treibhausgase).
Wenn die selbst programmierte Software oft eingesetzt werden soll, lohnt es sich auf die Details im Code zu achten.

grafik.png
(Bild: Mail Gilfanov / Unsplash)

Ich möchte mehr über dieses Thema erfahren und fange dabei wie so oft wie folgt an:

"Hallo ChatGPT,
Ich suche nach einer Möglichkeit Strom zu sparen. Ich bin ein Programmierer und möchte meine Software so schreiben, dass sie möglichst wenige Ressourcen verbraucht. Ich habe gehört, dass der Stromverbrauch abhängig ist von den eingesetzten Frameworks und Software Versionen. Bitte gib mir ein paar Tipps, wie man möglichst stromsparend programmiert."

Die KI hat mir geantwortet. Ich fasse es aber mal mit eigenen Worten zusammen:

Die richtige Programmiersprache

Je näher die Software an der Hardware ist, desto sparsammer ist sie. Also z.B. C, C++ und Rust verbrauchen weniger Strom als z.B. Javascript mit einem Framework wie React ob drauf.

Folgende Grafik zeigt den Ressourcenverbrauch einer Benchmarksoftware im Vergleich zu der Programmiersprache "C":

grafik.png
Eigene Darstellung der normalisieren Resultate (mit “C” wurden die niedrigsten Verbrauchswerte gemessen (der Wert für C ist 1), alle anderen Resultate beziehen sich darauf und benötigen n-mal mehr als C) aus der oben genannten Veröffentlichung. Bitte beachtet die logarithmische Auftragung (Implementierungen mit Java benötigen im Mittel doppelt soviel Engergie wie solche, die in C geschrieben wurden. Lösungen mit Python oder Perl etwa 80 mal mehr.). Lizenz: CC-BY SA 4.0

Quelle

Zu Erwähnen sei in dieser Abbildung, dass nicht alle Einsatzfälle in jeder Sprache abgebildet werden können und dass es Spezialisten gibt, die bestimmte Fälle deutlich effizienter lösen als z.B. in C.

Siehe auch: https://www.dev-insider.de/programmieren-fuer-die-umwelt-a-783169/

Intelligent Programmieren

Man kann die Berechnung von Pi/2 so durchführen:

for i in range(1000000):
    result = pi/2 * ... 

Oder so:

pi_2 = pi * 0.5

for i in range(1000000):
    result = pi_2 * ... 

Im ersten Fall wird eine Millionen mal Pi durch zwei geteilt.
Im zweiten Fall nur ein mal.

Der folgende Artikel, aus dem das Beispiel stammt, ist wirklich lesenswert: https://scienceblogs.de/rupture-de-catenaire/2021/05/03/die-energie-effizienz-von-programmiersprachen/

Weitere Codebeispiele sind hier

Wo kann man beim Programmieren Strom sparen?

Ich habe mal versucht alle Tipps, die ich bei der Recherche gefunden habe, hier aufzulisten:

  • Wähle eine energiesparende, bzw. für die Aufgabe sinnvolle Programmiersprache (siehe oben). (Man kann Software (mit KI) auch in andere Sprachen übersetzen.)
  • Erstelle nur Funktionen die nötig sind und lasse alles Überflüssige weg.
  • Lade nur die nötigsten Bibliotheken. Versuche mit den schon vorhandenen Bibliotheken auszukommen (reduziert auch die Komplexität und Angreifbarkeit).
  • Vermeide Frameworks.
  • Micro-Frameworks oder solche mit modularer Architektur können oft so konfiguriert werden, dass sie nur die wirklich benötigten Funktionen laden.
  • Hintergrundprozesse nur dann laufen lassen, wenn sie gebraucht werden.
  • Cache die Ergebnisse, anstelle sie neu zu berechnen.
  • Stromverbrauch der Software messen. Verwende Tools zur Profilierung, um stromintensive Codeabschnitte zu identifizieren und zu optimieren, wie etwa die Open-Source-Tools Kepler und CloudCarbonFootprint.
  • Zerlege den Code in möglichst kleine Software-Projekte, die man jeweils einzeln messen kann.
  • Nutze die Möglichkeiten der Parallelverarbeitung und Multithreading, um die Hardware effizient zu nutzen.
  • Reduziere die Netzwerklast (z.B. durch Datenkompression).
  • Vermeide Polling und wähle stattdessen ereignisgesteuerte oder interrupt-basierte Ansätze.
  • Gehe sparsam mit Speicher um (Deklariere Variablen nicht zu großzügig. Dort wo nur ein Bit gebraucht wird, muss kein Byte deklariert werden).
  • Stelle Inhalte frontendbezogen dar. (Videos in der entsprechenden Auflösung darstellen).

Energieeffiziente Server

Der Code muss ja dann irgendwo laufen. Hier kann der Betreiber der Software seinen Einfluss ausüben:

  • Energieeffiziente Hardware nutzen (lieber ARM statt x64 CPUs).
  • Software lieber in einer Cloud als auf einer dedizierten Hardware laufen lassen (nutzt die Ressourcen effizienter).
  • In der Cloud wähle skalierbare Services anstelle von überdimensionierten Pods.
  • Schalte unnötige Pods aus. Z.B. müssen Developer- und Test-Server Nachts nicht laufen.

Energiesparendes Konsumieren von Software:

Und natürlich hat der Konsument auch Möglichkeiten, die noch nicht mal weh tun müssen:

  • Nicht gelesene Newsletter abbestellen (Spam reduzieren).
  • Cookies ablehnen (Damit weniger Daten erzeugen).
  • Hardware möglichst lange benutzen bevor neue gekauft wird.
  • Nicht jedes Video oder Bild weiterleiten.
  • ...

Fazit

Die Möglichkeiten der Einsparung sind enorm, aber auch komplex. Man kann nicht pauschal sagen: "Tue dies und du sparst X%", denn jede Situation ist anders.
Dennoch kann und sollte man ein Bewusstsein entwickeln, dass es auch hier Ressourcenkosten und -grenzen gibt, auch wenn man diese (wie so oft) nicht direkt sieht. Irgendjemand muss dafür bezahlen.

Ich hoffe diese (nicht vollständige) Liste hilft uns dabei.

Gruß,
Achim Mertens

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center