IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Pourquoi l'utilisation du langage de programmation Python serait en train de « détruire la planète »,
D'après Mohammed Ayar

Le , par Bruno

52PARTAGES

12  5 
Dans une étude intitulée : Efficacité énergétique dans les différents langages de programmation et publiée en 2019, six chercheurs de trois universités ont révélé que Perl, Python et Ruby sont les langages de programmations les plus voraces en énergie. Python a des résultats médiocres en termes de puissance et de temps d'exécution, et est même moins performant que Lua et Perl en termes de puissance. Pourquoi le problème c'est Python et pas Perl ou LUA ? Parce que c'est le plus utilisé.

Alors que les uns se plaignent d’une possible destruction de notre planète du fait des différentes technologies en place aujourd’hui, les autres pensent au contraire que la technologie peut résoudre les problèmes environnementaux. Dans une étude intitulée : Efficacité énergétique dans les différents langages de programmation et publiée en 2019, six chercheurs de trois universités portugaises ont révélé que Perl, Python et Ruby sont les langages de programmations les plus voraces en énergie. Pour comparer correctement l'efficacité énergétique entre différents langages, il faut obtenir des implémentations comparables de solutions à un ensemble représentatif de problèmes. Et c’est ce qui avait été fait par les chercheurs des universités portugaises.


« Malgré les inconvénients de Python, j'ai toujours été convaincu que la proposition de valeur de Python - lisibilité, maintenabilité, communauté - peut difficilement être surpassée. Cependant, au fur et à mesure que je m'enfonce dans le terrier du lapin, de nouveaux inconvénients cachés ont commencé à faire surface. Des inconvénients sur lesquels je ne pouvais plus fermer les yeux. L'un de ces inconvénients est la durabilité », écrit Mohammed Ayar.

Avec l'adoption croissante des appareils sans fil, il est plus que jamais temps de coder en tenant compte de la consommation d'énergie. Les téléphones mobiles, les ordinateurs, les tablettes et les gadgets technologiques sont alimentés en électricité et consomment de l'énergie. Intégrées à ces appareils, les applications déterminent la consommation d'énergie, et les logiciels qui consomment moins d'énergie sont dits « économes en énergie ». Lorsqu’un téléphone surchauffe, c'est parce que vous utilisez une certaine application. La chaleur excessive, à son tour, vide votre batterie, ce qui vous oblige à charger votre téléphone. Plus vous chargez votre téléphone, plus il consomme d'énergie. De même, moins vous chargez votre téléphone, mieux c'est - pour votre batterie et pour l'environnement.

Il y a une question qui démange tout programmeur soucieux de l'énergie. Cette question est la suivante : un programme plus rapide est-il, de par sa conception, économe en énergie ? Les réponses à cette question sont assez diverses. Certains disent qu'un programme plus rapide a tendance à être économe en énergie parce qu'il se ferme plus tôt. D'autres adoptent une approche mathématique et suggèrent que ce n'est pas toujours le cas :

E (Energy) = P (Power) x T(Time)

La comparaison des performances des logiciels est une tâche suffisamment complexe. Les logiciels peuvent être développés à l'aide de différents langages de programmation et de différents frameworks. De même, différents algorithmes peuvent produire le même logiciel. Les langages de programmation ont historiquement été la métrique par défaut dans l'espace énergétique. Mais là encore, il est possible de rendre un langage de programmation plus efficace qu'un autre en optimisant le compilateur/interprète, en améliorant les frameworks/librairies.

La consommation d'énergie aurait été difficile à calculer s’il nexistait pas des techniques établies (par exemple, le RAPL d'Intel, Running Average Power Limit Energy Reporting, Qualcomm TrepN...) qui produisent des mesures de consommation d'énergie assez précises. Cependant, il y a un avertissement. RAPL n'est supporté que par les chipsets d'Intel. Par conséquent, si vous n'utilisez pas un processeur Intel et que vous souhaitez effectuer ces tests sur votre machine locale, il est possible d’explorer d'autres interfaces de rapport de consommation d'énergie (par exemple, le Trepn Power Profiler de Qualcomm).

Cela dit, pour embellir RAPL en Python, nous pouvons utiliser la bibliothèque pyRAPL. Java dispose de JRAPL et C de RAPL. Le script Python ressemble à quelque chose comme ceci :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
import pyRAPL

pyRAPL.setup() 

@pyRAPL.measure
def doSomething():
# Instructions to be evaluated.

doSomething()

Temps

Afin de mesurer le temps, Mohammed Ayar utilise un script simple qui permet de mesurer le temps d'exécution d'un programme. Il existe différents moyens d'y parvenir, voici un script simple qui le fait à partir de références :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
from time import time...
while (i < N):
   start = time()
   ...
   # insert program here
   ...
   end = time()
   ...# Calculate average taken time
...

Selon Mohammed Ayar, il est difficile d'obtenir directement la puissance car son unité (W) est plutôt un quantificateur théorique. Par conséquent, en suivant l'école de pensée qui stipule que l'énergie dissipée (J) = Temps (S) x Puissance (W), il est possible de calculer facilement la puissance consommée par chaque langage de programmation.

La dernière pièce du puzzle consiste à choisir un programme mis en œuvre de manière similaire dans différents langages de programmation. L'idée est que choisir un programme optimisé dans un langage et algorithmiquement déficient dans d'autres rendrait la comparaison biaisée, tuant la robustesse de l'expérience. Pour éviter ce problème, Mohammed Ayar emprunte les problèmes de référence proposés dans The Computer Language Benchmark Game (CLBG).

CLBG est une initiative open source pour aider à mesurer les performances de différents langages de programmation. Il propose un ensemble de problèmes informatisés optimisés pour différents langages de programmation afin de garantir une comparaison précise des performances. Tous les éléments réunis, le calcul de l'énergie (E), du temps (ms) et de la puissance (W) conduit aux chiffres suivants :


Comme nous pouvons le constater, Python se trouve malheureusement en bas du classement. Il a des résultats médiocres en termes de puissance et de temps d'exécution. En fait, Python est même moins performant que Lua et Perl en termes de puissance. Il se trouve qu'ils sont nettement plus lents. D'où leur forte consommation d'énergie. En réduisant les langages de programmation aux langages interprétés, nous intégrons les chiffres ci-dessus dans un graphique pour les rendre plus expressifs.


À la lecture de cette figure, nous remarquons que Python est le troisième langage le plus mauvais en termes de consommation d'énergie du CPU, précédé par Lua et Perl. En revanche, le C domine les langages de programmation en termes de consommation d'énergie, ce qui en fait un pari intéressant pour les logiciels verts.
Les deuxième et troisième places reviennent respectivement au C++ et à Rust, ce qui confirme l'engouement massif pour Rust dans la communauté logicielle. La principale mesure sur laquelle Mohammed Ayar c’est appuyé dans cette analyse pour représenter la durabilité est la consommation d'énergie (E).

L'énergie est une forme de chaleur qui se manifeste lorsqu'un courant électrique traverse une résistance. « Ayant une formation d'ingénieur en électricité, je trouve que l'énergie (E) en joules est le meilleur candidat pour représenter la durabilité, car c'est un sous-produit des déchets solides », écrit Mohammed Ayar.

Cela dit, on aurait pu mettre « Perl détruit la planète » ou « Lua détruit la planète » en titre, car leur consommation d'énergie est plus élevée que celle de Python. Cependant, aucun des deux n'est utilisé autant que Python. Python est très utilisé dans l'industrie, en particulier dans l'intelligence artificielle et l'apprentissage automatique. En fait, les géants de la technologie, dont Google et Meta, font pression pour l'utilisation de Python.

Toutefois, Mohammed Ayar note que Python n'est pas un langage de programmation écologique en soi. Son empreinte énergétique est en moyenne 40 fois supérieure à celle du C, du C++ et du Rust. Le C et le C++ seraient naturellement difficiles à utiliser pour certains. Lors d’une conférence d’AWS tenue l’année dernière, Shane Miller, présidente de la Fondation Rust, et Carl Lerche, chef de projet de Tokio, ont plaidé en faveur de l'utilisation de Rust pour minimiser l'impact environnemental, tout en précisant que sa courbe d'apprentissage abrupte rendait la tâche difficile.

Rust est un langage de programmation compilé multiparadigme, conçu par Graydon Hore alors employé chez Mozilla Research, avec la contribution du créateur de JavaScript Brendan Eich. Utilisé par plusieurs grandes entreprises et par de nombreux développeurs dans le monde, Rust est devenu le langage de base pour certaines des fonctionnalités fondamentales du navigateur Firefox et de son moteur Gecko, ainsi que pour le moteur Servo de Mozilla.

Rust fait partie des langages de programmation les plus efficaces. La source citée pour cela est l’article susmentionné, de 2017, qui a mesuré les performances, l'utilisation de la mémoire et l'efficacité énergétique de 27 langages de programmation, et a placé C comme le plus efficace, mais Rust juste derrière avec seulement trois pour cent de plus d'utilisation d'énergie. Java utilise près du double d'énergie, C# plus de trois fois, et Python plus de 75 fois, selon l'étude.

Source : Mohammed Ayar's blog

Et vous ?

Pensez-vous que l'analyse de Mohammed Ayar est pertinente ou pas, et pourquoi ?

Selon vous, un programme plus rapide est-il, de par sa conception, économe en énergie ?

Rust deviendra-t-il le principal concurrent du langage C et du C++ dans le domaine des "langages de programmation plus écologiques" ?

Voir aussi :

Rust peut-il sauver la planète ? Un composant JavaScript a été réécrit en Rust et aurait une amélioration de 50 % de la latence, une réduction de 75 % de l'utilisation du CPU et 95 % de la mémoire

Programmation : une étude révèle les langages les plus voraces en énergie, Perl, Python et Ruby en tête, C, Rust et C++, les langages les plus verts

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 06/10/2022 à 18:43
Comme expliqué, par d'autres, Python est censé être un langage de script qui n'est pas fait pour être utilisé directement pour de la performance brute. S'il est utilisé judicieusement dans son domaine, ça n'est pas un problème.

Malheureusement c'est devenu un langage généraliste très utilisé dans la data science et l'IA et souvent par des non-informaticiens pas toujours très au courant des problématiques de performance. Du coup c'est une vraie problématique sur laquelle il faut informer, d'autant que de nos jour où avec le Cloud c'est assez tentant de simplement augmenter la puissance de calcul pour compenser un manque de performances.
14  2 
Avatar de Jeff_67
Membre chevronné https://www.developpez.com
Le 06/10/2022 à 18:24
Python reste bien plus performant énergétiquement parlant qu'un fichier Excel bourré de macros et de formules circulaires, puisque c'est a cette catégorie d'utilisateurs que ce langage s'adresse.

Ajouté à cela, la plupart des bibliothèques du langage sont des bindings vers des briques codées en C/C++.
13  2 
Avatar de smarties
Membre émérite https://www.developpez.com
Le 06/10/2022 à 19:28
Avant d'accuser Python, il faudrait agir en amont :
- garder le plus longtemps ses ressources informatique et ne pas renouveler tant que ça ne tombe pas en panne (et on peut généralement réparer)
- mutualiser les ressources, tous les serveurs ne demandent pas 100% de puissance ou de RAM tout le temps !

Python est certes pas très rapide mais il est adossé à plusieurs bibliothèques natives aussi ! Donc quand le programme Python ne fait pas de calcul, il ne doit pas avoir une forte emprunte énergétique.
Dans le milieu scientifique, quelle est l'emprunte de Matlab et de Scilab ?
7  0 
Avatar de disedorgue
Expert éminent sénior https://www.developpez.com
Le 07/10/2022 à 21:24
J'aime, java est bien classé et perl est dernier de la classe...

Alors, petite histoire réelle:
La demande au près des dev (java), hasher les mots de passe d'une BDD (environ 120 millions de compte à faire) , résultats: le rendu java mets plus de 4 jours pour faire le boulot en perf sur un env iso prod.
Petit dev en perl (car fait par un non developpeur ) pour faire le même boulot : le rendu se fait en moins de 4 heures sur le même environnement.

Pour le coup, lequel ici à une grosse empreinte carbone ?

Morale: avant d'incriminer un langage ou un autre sur son empreinte carbone, faudrait peut-être voir ce qui se passe entre la chaise et le clavier car bien souvent le problème est plutot là !!!
7  0 
Avatar de Guesset
Membre émérite https://www.developpez.com
Le 07/10/2022 à 12:28
Bonjour,

Il y a des arguments assez classiques de détournement. Cette technique, très utilisée par les hommes politiques, consiste à comparer à pire : "Quand on voit la consommation de xyz on se demande pourquoi s'intéresser à sss", "avant de s'intéresser à sss on ferait mieux de régler le cas de xyz". En général, on prend un pire cas difficile à résoudre et à la limite du domaine pour éviter les retours de manivelles par des experts. Cela présuppose un règlement purement séquentiel des difficultés et donc une hiérarchisation (instauration d'une relation d'ordre dirait un informaticien). D'une part, la hiérarchisation est impossible car nous sommes en multidimensionnel (coûts, domaines, impacts sociétaux etc.). D'autre part, même en informatique le multi-tâche existe, rien n'impose le séquentiel sinon le désir de repousser aux calendes grecques.

Il y a la relativisation, technique, proche, mais qui apparaît plus honnête : "quand on voit que l'empreinte environnementale de production, distribution et recyclage représente 90% on se dit que gagner sur le code est très marginal". Ce qui est gênant dans cette démarche d'élargissement est qu'elle reste restreinte. Supposons, c'est juste une illustration, que le code divise par 2 sa consommation, cela jouera aussi sur la durée de vie de la batterie donc sur les 90 % car, après le goût de la nouveauté (très peu écologique), c'est le coût de remplacement de la batterie qui incite le plus au renouvellement.

Il y a aussi un argument qui fait sourire à propos des langages interprétés : "Ils ne peuvent pas être si mauvais puisque leurs bibliothèques sont écrites en C ou C++". En résumé, ils sont bons là où ils ne sont pas

Nous sommes souvent attaché à un langage plus qu'aux autres pour des raisons objectives mais également subjectives (souvent historiques). C'est pourquoi, il me semble utile de maîtriser plusieurs langages et d'en connaître plus encore (les apprendre, les tester sans nécessairement faire des programmes ambitieux).

Comme je l'ai déjà écrit, oui je radote, les langages qui réussissent sont souvent des langages de formation initiale. C'est un peu dommage que les langages utilisés professionnellement n'aient pas été choisi pour leur adéquation mais pour la disponibilité des compétences économiques.

Pour ma part, j'évite les langages interprétés et intermédiaires (semi-compilés, machines virtuelles...) pour tout projet moyennement ambitieux.

Salutations
7  1 
Avatar de GLDavid
Expert confirmé https://www.developpez.com
Le 07/10/2022 à 8:01
Bonjour

Mouais, étude encore une fois qui montre que les langages scriptés ne sont pas supers en performance et donc consomment du CPU inutilement.
Mais, on le sait déjà... Alors, j'ai été programmeur Perl, je dois donc faire une excuse public d'avoir utilisé ce langage parce que j'ai trop pollué ?
Comme dit plus haut, des langages comme Perl ou Python sont de très bons compléments au Shell. Après, leurs librairies étant gigantesques, on peut piocher dedans pour faire des projets plus évolués. C'est là peut être que se trouve l'erreur car on ne regarde pas la performance.
Mais pour moi, l'étude est bidon et joue la 'hype' sur l'écologie pour dénoncer les performances des langages. Dénoncer est une chose, peut être trop fait, remédier ou optimiser en est une autre...

@++
5  0 
Avatar de archqt
Membre chevronné https://www.developpez.com
Le 06/10/2022 à 22:26
Il faut voir que nombre de sites sont faits en langage interprétés dont python (Djano, Flask...) et là effectivement il y a de grosses pertes vu que les serveurs s'adaptent en consommant plus de VM et donc d'électricité.

Il y a quelques années une société (Orange je crois) avant transformé la gestion d'envoi des SMS en passant du php au langage C. Résultat ils avaient augmentés l'envoi par 150. Facebook a aussi fait un transpileur php vers C++.

Il y a donc un soucis sur les langages interprétés pour faire de grosses applications ou du back-end. Python pour du script c'est bien, pour du code côté serveur c'est pas le plus économique.
6  2 
Avatar de tamishrim
Futur Membre du Club https://www.developpez.com
Le 07/10/2022 à 16:20
On peut également espérer que l'adoption grandissante de Python va faire des perfs un enjeu grandissant également
De la même manière, JavaScript avait eu un boost de performance avec la bataille des navigateurs (Google avec la V8, Mozilla avec Spidermonkey...)
On peut déjà voir cette tendance: des librairies utilisent Cython, Python 3.11 a un focus particulier sur les performances etc.

https://www.infoworld.com/article/28...rformance.html
4  0 
Avatar de Guesset
Membre émérite https://www.developpez.com
Le 09/10/2022 à 16:14
Bonjour kilone,

Citation Envoyé par kilone Voir le message
...On passe beaucoup de temps devant l'ordinateur pour écrire un programme. On consomme beaucoup d'électricité. Pour une performance certes parfois accrue par rapport à python mais qui reste à mon avis anecdotique en terme de consommation d'énergie...
Je pense que ce raisonnement est erroné.

Les gains ne sont pas marginaux. Par exemple, il y a un rapport de plus de 70 entre Python et le premier de la liste. Le temps de développement sera plus rapide en Python mais pas dans le même rapport. Et ce temps est one shot alors que les gains s'expriment à chaque exécution pour chaque utilisateur.

Supposons un traitement de 7 mn en Python, il passe à 6 s en C soit un gain de 414 s/exécution. Si le surcoût de développement est de l'ordre d'un HxM soit environ 580 000 s, il faudra 1400 exécutions pour compenser le surcoût de développement. Avec seulement 1000 utilisateurs, il faudra moins de 2 exécutions par utilisateur pour absorber ce surcoût. Le reste est bonus.

Même si cette illustration peut être discutée, il est impossible de mettre dans la balance un gain de développement unique et un gain d'exécution multiplié par le nombre d'utilisateurs et le temps (nombre d'utilisations par unité de temps).

L'intérêt de ces langages n'est clairement pas là.

La sensibilité au temps développement (plus vite sur le marché), à la portabilité (cible plus large) et au coût du développeur (investissements plus faibles) sont certainement les arguments premiers. En fait, c'est le développement économique vs écologique.

Cela ne change en rien les qualités et défauts des différents langages. Il y a eu des interpréteurs de C et certains langages interprétés se sont vus dotés de compilateurs. Avec un succès très modéré hélas.

Salut
4  0 
Avatar de plegat
Expert éminent https://www.developpez.com
Le 21/10/2022 à 21:28
Citation Envoyé par PierreDeQuébec Voir le message
Sans avoir lu tout les commentaires (257 tout de même), j'ajoute que le tableau présenté comporte une grosse coquille. Le puissance étant le produit de l'énergie (ici en joule) par le temps (ici en seconde), le tableau donne pour Python 80,7 kW et pour C 0,0448 kW. Dans le cas de C, le résultat est vraisemblable, mais pour Python, c'est n'importe quoi.
Euuuh... bah non. Une puissance, c'est un travail (ou une énergie) divisé par le temps... pas multiplié... sinon ça donne n'importe quoi!
(d'ailleurs, le watt, c'est des joules par secondes... )
4  0