Grünes Programmieren: C und Rust energieeffizient, Python und Perl Schlusslicht

Eine Studie hat den Energieverbrauch von Programmiersprachen untersucht und bietet Tipps für energiebewusstes Programmieren. C und Rust schneiden am besten ab.

Lesezeit: 6 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 192 Beiträge

(Bild: kram9/Shutterstock.com)

Von
  • Silke Hahn

Die elektronischen Abläufe unserer postanalogen Welt und der Betrieb ihrer Infrastruktur kosten Ressourcen. Aber nicht nur das Betreiben von Servern für die Cloud, Machine Learning oder das Streaming von Filmen gehen mit Stromverbrauch einher, wie oft als Erstes in den Sinn schießt.

Das Schreiben dieser Meldung, ihr Aufruf im Browser und das Darstellen auf einem Bildschirm kosten genauso Strom, was sich summiert. Weniger offensichtlich dürfte sein, dass auch das Programmieren an sich und die Wahl der eingesetzten Programmiersprache ein Faktor ist, der vielleicht größeren Impact auf die Ökobilanz von Anwendungen hat als allgemein bekannt.

Ein Paper portugiesischer Wissenschaftler hat bereits vor Längerem die Energieeffizienz von Programmiersprachen untersucht und festgestellt, dass der Energieverbrauch sehr unterschiedlich ausfällt. In der aktuellen Energiekrise lohnt sich ein neuerlicher Blick auf die Ergebnisse. Dem Forschungsteam zufolge sind die Geschwindigkeit (schnell oder langsam) sowie der Speicherbedarf wesentliche Faktoren für den Energieverbrauch von Programmiersprachen. Insgesamt 27 Programmiersprachen unterschiedlicher Paradigmen hatte das Forscherteam um Rui Pereira von den Universitäten Minho, Coimbra und Lissabon hinsichtlich ihrer Performance und ihres Energieverbrauchs im Detail untersucht und für Benchmarks verglichen.

Das Team maß die Ausführungszeit (Time) von Code sowie die Spitzenspeicherauslastung (Memory). Beides setzte sie in Bezug zum Energieverbrauch und untersuchte, wie Zeit und Verbrauch zusammenhängen. Schnellere Sprachen sind demzufolge nicht automatisch auch energieeffizienter. Die Ergebnisse sollen es Developern ermöglichen, energiebewusster zu programmieren. Da Entwicklungsteams oft nur über begrenzte Ressourcen verfügen, staffelten Pereira und seine Kollegen ihre Ergebnisse nach unterschiedlichen Kombinationen der von ihnen untersuchten Merkmale.

Methodisch greifen Pereira und Team auf das Software-Repository "Computer Language Benchmark Game" (CLBG) zurück. Es bietet eine Möglichkeit, die Energiebilanz von Software zu quantifizieren. Zum Zeitpunkt des Papers fasste CLBG dreizehn Benchmarkprobleme zusammen, von denen zehn für die Fragestellung von Belang waren. Die Lösungen für jedes dieser Probleme müssen einem bestimmten Algorithmus folgen und spezifische Implementierungsrichtlinien einhalten. Im Paper finden sich zwei Tabellen, die die Rechenprobleme vollständig auflisten und die verglichenen Programmiersprachen nach ihren Paradigmen sortiert aufstellen (funktional, imperativ, objektorientiert und Skriptsprachen). Bis zu 28 Programmiersprachen kann das Benchmark Game pro Vergleich berücksichtigen. Die Studie berücksichtigte 27 Sprachen, da Smalltalk ausgeschlossen wurde.

Computer Language Benchmark Game: Corpus der Programme und Programmiersprachen sortiert nach ihrem Paradigma (Abb. 1)

(Bild: Pereira et al., "Energy Efficiency across Programming Languages" (Vancouver 2017))

Die Ergebnisse lassen sich in einer normalisierten Tabelle fassen, die den Bedarf an Energie, Zeit und Speicher vergleichbar aufschlüsselt. Am besten schnitten C und Rust ab (auf der CLBG-Vergleichsskala mit einem Energiewert von 1,00 beziehungsweise 1,03 notiert), dicht gefolgt von C++ (1,34). Dann folgten Ada und Java, Pascal, Chapel und Lisp (etwa doppelt so hoher Verbrauch wie C und Rust, zwischen 1,70 und 2,27). Auch Sprachen wie Ocaml, Fortran und Swift hatten vorzeigbare Werte (zweieinhalb bis dreifacher Verbrauch, gemessen an C und Rust). Haskell, C#, Go und Dart schnitten passabel ab (zwischen drei- und vierfachem Verbrauch), etwas energiehungriger waren F# und JavaScript (viermal so hoher Energieverbrauch wie C und Rust) sowie Racket (mit dem Wert 7,91 rund achtfachem Verbrauch).

Energieverbrauch von Programmiersprachen: Benchmark-Vergleich bei binary-trees, fannkuch-redux und fasta (Abb. 2)

(Bild: Pereira et al., "Energy Efficiency across Programming Languages" (Vancouver 2017))

Danach macht die Tabelle einen gehörigen Sprung, und für die weiteren untersuchten Sprachen verzwanzig- bis verachtzigfacht sich der Energiebedarf im Vergleich zur Tabellenspitze. Das Schlusslicht der Verglichenen bildet Perl (79,58), aber auch Python schneidet kaum besser ab mit einem gegenüber Rust 75mal höheren Energieverbrauch (75,88 laut Tabelle). Das ist bemerkenswert, da Python zu den beliebtesten Programmiersprachen gehört und in der Data Science und im Machine Learning als grundlegend gilt wegen seines umfassenden und etablierten Ökosystems.

Im Umfeld der Developer-Fachautoren war bereits zu vernehmen, dass einige Machine Learner ihre ML-Engines bewusst in C oder Rust schreiben, Python hat offenbar hinsichtlich seiner Performance nicht den besten Ruf. So hatte ein Fachautor die Redaktion via Twitter auf die Studie aufmerksam gemacht. In absteigender Folge schließt die Tabelle mit Ruby (69,91), Jruby (46,54), dem in der Spieleprogrammierung geläufigen Lua (45,98), Erlang (42,23). PHP, Hack und TypeScript schnitten nur mäßig besser ab (mit jeweiligen Werten von 29,30, 24,02 und 21,50 in der Vergleichstabelle).

Normalisierte Tabelle mit den Ergebnissen für Energie, Zeit und Speicher (Abb. 3).

(Bild: Pereira et al., "Energy Efficiency across Programming Languages" (Vancouver 2017))

Während im Machine Learning und in der Data Science die Suche nach effizienten Techniken auf Hard- und Softwareseite läuft, beispielsweise durch leistungsfähigere Hardware, energieeffizientere Algorithmen oder auch durch Ansätze von Sparsity für künstliche neuronale Netze, scheint es sich hier besonders zu lohnen, in die Tiefe zu bohren. Angesichts steigender Energiepreise und möglicher Strom- und Gasknappheit gewinnen die Erkenntnisse des portugiesischen Forscherteams erneut an Bedeutung und könnten die Entscheidungen von Softwareentwicklerinnen und -entwicklern beeinflussen, wenn für das nächste Projekt die Frage im Raum steht, welche Sprache man wählt.

Hier ist offenbar der Fokus eines Projekts entscheidend statt pauschaler Rankings der gesamten Energiebilanz. Pereira und Team haben einen Pareto-optimierten Satz unterschiedlicher Zielparameter erstellt, der Teams als Spickzettel nützlich sein könnte:

Je nach den Zielvorgaben gelten nach Pereira et al. unterschiedliche Programmiersprachen als besonders energieeffizient. C liegt in jedem Fall vorne, und auch Rust schneidet durchgängig sehr gut ab (Abb. 4)

(Bild: Pereira et al., "Energy Efficiency across Programming Languages" (Vancouver 2017))

Wer sich vertiefend mit dem Thema auseinandersetzen möchte, kann das Forschungspaper bei Greenlab nachlesen. Zum Weiterlesen empfiehlt sich der Fachartikel von Oliver Heinrich "Klimabewusst programmieren", erschienen bei heise Developer.

Neuere Untersuchungen der Forschungsgruppe decken sich mit der vorliegenden Studie ("Ranking Programming Languages by Energy Efficiency"). Sicherlich interessant wäre es, auch den Bereich Low Code in den Blick zu nehmen.

(sih)