Quels langages de programmation utilisent le moins d’électricité ?

Avr 9, 2021
admin

Les données sur la consommation d’énergie peuvent-elles nous renseigner sur la qualité de nos langages de programmation ?

L’année dernière, une équipe de six chercheurs portugais de trois universités différentes a décidé d’étudier cette question, publiant finalement un article intitulé « Energy Efficiency Across Programming Languages ». Ils ont exécuté les solutions de 10 problèmes de programmation écrits dans 27 langages différents, tout en surveillant attentivement la quantité d’électricité utilisée par chacun d’entre eux – ainsi que sa vitesse et son utilisation de la mémoire.

résultats - Énergie, temps et utilisation de la mémoire (capture d'écran du document de recherche)

Spécifiquement, ils ont utilisé 10 problèmes du Computer Language Benchmarks Game, un projet de logiciel libre pour comparer les performances qui comprend un ensemble standard de problèmes algorithmiques simples, ainsi qu’un cadre pour exécuter des tests. (Il était auparavant connu sous le nom de « The Great Computer Language Shootout ».) « Cela nous a permis d’obtenir un ensemble comparable, représentatif et étendu de programmes… ainsi que les options de compilation/exécution, et les versions de compilateurs. »

Il était important d’exécuter une variété de tests de référence parce que, finalement, leurs résultats variaient en fonction du test effectué. Par exemple, dans l’ensemble, le langage C s’est avéré être le plus rapide et aussi le plus économe en énergie. Mais dans le test de référence qui consistait à scanner une base de données d’ADN à la recherche d’une séquence génétique particulière, Rust s’est avéré le plus économe en énergie – tandis que le C est arrivé en troisième position.

Pour autant, même dans ce même test, le « meilleur » langage dépend de votre critère. Pour ce test, C s’est également avéré être seulement le deuxième langage le plus rapide (encore une fois, se plaçant derrière Rust). Mais Rust perdait neuf places si les résultats étaient classés en fonction de l’utilisation de la mémoire. Et alors que Fortran était le deuxième langage le plus efficace sur le plan énergétique pour ce test, il a également perdu six positions complètes lorsque les résultats étaient plutôt triés par temps d’exécution.

Un langage plus rapide n’est pas toujours le plus efficace sur le plan énergétique.

Les chercheurs notent qu’ils ont « strictement suivi » les directives du projet CLBG concernant les versions de compilateurs et les meilleurs drapeaux d’optimisation. La consommation d’énergie a été mesurée à l’aide d’un outil d’Intel – l’outil Running Average Power Limit – avec chaque programme exécuté non pas une seule fois, mais 10 fois, « pour réduire l’impact des démarrages à froid et des effets de cache, et pour pouvoir analyser la cohérence des mesures et éviter les valeurs aberrantes. » (Pour cette raison, ils rapportent que « les résultats mesurés sont assez cohérents »). Pour plus de cohérence, tous les tests ont été effectués sur un ordinateur de bureau exécutant Linux Ubuntu Server 16.10 (noyau version 4.8.0-22-générique), avec 16 Go de RAM et un processeur Haswell Intel Core i5-4460 de 3,20 GHz.

Dans leur article, les chercheurs appellent quelques résultats intéressants.

« Lisp, en moyenne, consomme 2.27x plus d’énergie (131,34J) que C, tout en prenant 2,44x plus de temps pour s’exécuter (4926,99ms), et 1,92x plus de mémoire (126,64Mb) nécessaire par rapport à Pascal. »

Ils ont également comparé les résultats des langages compilés par rapport aux langages interprétés (avec une catégorie distincte pour les langages qui s’exécutent sur des machines virtuelles). Et le document comprend également une comparaison distincte des différents paradigmes de programmation – y compris la programmation fonctionnelle et impérative, plus la programmation orientée objet et le script.

Is Faster Greener?

Le document a jeté un regard sévère sur l’hypothèse commune selon laquelle un programme plus rapide utilisera toujours moins d’énergie, soulignant que ce n’est pas aussi simple que la loi de la physique qui dit E(nergie) = T(ime) x P(ower). Cela s’explique en partie par le fait que l’énergie n’est pas dépensée à un rythme constant, notent les chercheurs, ce qui pourrait avoir une incidence sur les travaux d’autres chercheurs qui cherchent à savoir si la durée d’exécution d’un programme a une incidence sur sa consommation d’énergie. (« Les conclusions concernant cette question divergent parfois… ») Dans l’un de leurs tests de référence, un programme Chapel prenait 55 % moins de temps à exécuter qu’un programme équivalent écrit en Pascal – et pourtant ce programme Pascal consommait 10 % d’énergie en moins.

Alors que l’on continue à croire que la consommation d’énergie diminue lorsque les programmes s’exécutent plus rapidement, les chercheurs affirment sans équivoque qu' »un langage plus rapide n’est pas toujours le plus économe en énergie ».

Il peut être difficile de répondre à cette question, car la consommation d’énergie est affectée par de nombreux facteurs (notamment la qualité du compilateur et les bibliothèques utilisées). Mais finalement, les chercheurs ont même été en mesure de ventiler la consommation d’énergie selon qu’elle était consommée par le CPU ou la DRAM – concluant que la majorité de l’énergie (environ 88 pour cent) était consommée par le CPU, en moyenne, que le programme de référence soit compilé, interprété ou exécuté sur une machine virtuelle.

Intéressant, les langages interprétés ont montré une variation légèrement plus élevée, le CPU consommant parfois jusqu’à 92.Après avoir étudié leurs résultats, les chercheurs ont également conclu que la relation entre l’utilisation de pointe de la DRAM et la consommation d’énergie « est presque inexistante ».

La recherche fournit quelques informations supplémentaires sur la question éternelle : plus vite, c’est plus vert ? Oui, il est vrai que « les cinq langages les plus efficaces sur le plan énergétique conservent leur rang lorsqu’ils sont triés par temps d’exécution et avec de très faibles différences dans les valeurs d’énergie et de temps. »

En fait, pour neuf problèmes de référence sur dix, le meilleur score (à la fois pour la vitesse et l’efficacité énergétique) provenait de l’un des trois langages globalement les plus rapides et les plus efficaces sur le plan énergétique – ce qui n’a pas surpris les chercheurs. « Il est de notoriété publique que ces trois premiers langages (C, C++ et Rust) sont connus pour être fortement optimisés et efficaces pour les performances d’exécution, comme le montrent également nos données. »

Mais vous ne voyez pas le même ordre lorsque vous classez les 24 autres langages par leur temps d’exécution que lorsque vous les classez pour leur efficacité énergétique. « Seuls quatre langages conservent le même classement en termes d’énergie et de temps d’exécution (OCaml, Haskel, Racket et Python), tandis que les autres sont complètement mélangés. »

Et même sur des tests de référence individuels, il y a des cas où les langages à performance rapide ne sont pas les plus efficaces sur le plan énergétique.

Les avantages des langages compilés

Il y avait d’autres résultats intéressants. Les langages compilés « ont tendance à être » les plus économes en énergie et les plus rapides – et leur article peut même quantifier cette différence avec un chiffre. « En moyenne, les langages compilés ont consommé 120J pour exécuter les solutions, alors que pour une machine virtuelle et des langages interprétés, cette valeur était respectivement de 576J et 2365J. »

Les chercheurs ont également appliqué la même précision lorsqu’ils ont comparé les temps d’exécution, concluant qu’en moyenne, « les langages compilés ont pris 5103ms, les langages de machine virtuelle ont pris 20623ms, et les langages interprétés ont pris 87614ms. »

Sur les cinq premiers langages dans les deux catégories, quatre étaient compilés. (L’exception ? Java.)

.

Énergie consommée Run-temps
C 57J 2019 ms
Rust 59J 2103 ms
C++ 77J 3155 ms
Ada 98J 3740 ms
Java 114J 3821 ms

Les cinq langages les plus lents étaient tous interprétés : Lua, Python, Perl, Ruby et Typescript. Et les cinq langages qui consommaient le plus d’énergie étaient également interprétés : Perl, Python, Ruby, JRuby et Lua.

Mais dans le même temps, lors de la manipulation de chaînes de caractères avec une expression régulière, trois des cinq langages les plus économes en énergie s’avèrent être des langages interprétés (TypeScript, JavaScript et PHP), « bien qu’ils aient tendance à ne pas être très économes en énergie dans d’autres scénarios. »

Les langages compilés ont également occupé les cinq premières places pour la moindre quantité d’espace mémoire utilisée.

.

Langage Espace mémoire nécessaire
Pascal 66Mb
Go 69Mb
C 77Mb
Fortran 82Mb
C++ 88Mb

« En moyenne, les langages compilés nécessitaient 125 Mo, les langages de machine virtuelle 285 Mo et les langages interprétés 426 Mo », rapportent les chercheurs. Les langages interprétés occupent quatre des cinq dernières places, ce qui signifie qu’ils consomment le plus d’espace mémoire : JRuby, Dart, Lua et Perl. (Bien qu’Erlang ne soit pas un langage interprété, il apparaîtrait également dans les cinq dernières places, entre Dart et Lua).

« Si on les classe selon leur paradigme de programmation, les langages impératifs ont besoin de 116Mb, l’orienté objet de 249Mb, le fonctionnel de 251Mb, et enfin le scripting de 421Mb. »

En fait, en comparant les différents paradigmes, la programmation impérative est souvent arrivée en tête. Ses programmes de référence ont également utilisé beaucoup moins d’énergie en moyenne – et se sont exécutés beaucoup plus rapidement – que les programmes de référence des paradigmes orienté objet, fonctionnel et scripting.

Énergie consommée Temps d’exécution
Impératif 125J 5585ms
Objet-Orienté 879J 32965ms
Fonctionnel 1367J 42740ms
Scripts 2320J 88322 ms

Mais il y a beaucoup de facteurs à considérer. « Il est clair que différents paradigmes de programmation et même des langages au sein d’un même paradigme ont un impact complètement différent sur la consommation d’énergie, le temps et la mémoire », écrivent les chercheurs. Pourtant, la question de savoir lequel de ces facteurs est le plus important dépend de votre scénario. (Les tâches d’arrière-plan, par exemple, n’ont pas toujours besoin du temps d’exécution le plus rapide…)

Et certaines applications nécessitent la prise en compte de deux facteurs – par exemple, la consommation d’énergie et le temps d’exécution. Dans ce cas, « C est la meilleure solution, car il est dominant dans les deux objectifs uniques », écrivent les chercheurs. Si vous essayez de gagner du temps tout en utilisant moins de mémoire, C, Pascal et Go « sont équivalents » – et il en va de même si vous surveillez les trois variables (temps, consommation d’énergie et utilisation de la mémoire). Mais si vous essayez simplement d’économiser de l’énergie tout en utilisant moins de mémoire, vos meilleurs choix sont C ou Pascal.

Meilleurs langages pour des scénarios spécifiques (capture d'écran du document de recherche)
À la fin du document, les chercheurs ajoutent que pour une étude plus approfondie, ils aimeraient examiner si l’utilisation totale de la mémoire au fil du temps présente une meilleure corrélation avec l’énergie consommée.

Ils partagent leurs données en ligne, suggérant que cela facilite la tâche des futurs chercheurs pour comparer, par exemple, les langages .NET ou les langages JVM. Pour les développeurs travaillant avec des applications mobiles, des systèmes de l’Internet des objets ou d’autres applications tirant parti d’une alimentation limitée, la consommation d’énergie est une préoccupation majeure.

Mais en fin de compte, l’étude peut également laisser les programmeurs avec la chose qu’ils détestent le plus : l’ambiguïté. Les chercheurs rapportent que si vous cherchez un langage de programmation unique et le meilleur, « cette question n’a pas de réponse concrète et ultime.

« Bien que le langage le plus économe en énergie dans chaque benchmark soit presque toujours le plus rapide, le fait est qu’il n’y a pas de langage qui soit systématiquement meilleur que les autres », concluent les chercheurs. « La situation sur laquelle un langage va être utilisé est un aspect essentiel pour déterminer si ce langage est l’option la plus économe en énergie. »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.