La consommation en énergie d'un logiciel est définie par l'ordinateur en fonction des systèmes qui le composent. Plusieurs principes de développement peuvent être utilisés pour limiter la consommation d'un logiciel. Aujourd'hui, avec le nombre d'appareils informatiques utilisés chaque jour, du centre de données au smartphone, l'économie d’énergie est devenue plus importante qu'auparavant.

État des lieux Dans le monde, il est estimé que les appareils informatiques consomment 5,3 % de l’électricité du total itu ICTs for e-Environment site de l'International Telecommunication Union. voir page 78.. Malgré ce pourcentage peu élevé, cela correspond à une quantité importante d’énergie, et la moindre économie dans cette consommation pourrait permettre de la réduire avec un impact positif sur l'écologie et sur l'économie.

Plusieurs moyens existent pour réduire la consommation. L'une des approches est l'amélioration de la consommation d'énergie des composants. Une autre est de concevoir des logiciels afin qu'ils consomment moins. Cette approche permet de réduire la consommation sans pour autant concevoir de nouveaux appareils car l'énergie grise produite par la construction d'un ordinateur est élevé embodied energy of digital technology, sur lowtechmagazine.com.

Définition La consommation en énergie d'un appareil informatique est définie par le coût énergétique nécessaire aux composants matériels pour réaliser leur tâche. Cette activité est produite par l’exécution d'un logiciel qui est lui-même lié à l'activité d'un utilisateur. Puissance La vitesse à laquelle le travail est effectué, exprimée en watts ⇒ . Énergie L'intégrale du temps et de la puissance, exprimée en joules ⇒ .

Le coût en énergie des composants matériel est régi par le logiciel, c'est pourquoi il existe plusieurs moyens de réduire la consommation générale du matériel en travaillant le logiciel. Voici quelques-unes d'entre elles.

Axes d'améliorations

Type de collections Java

Contexte d'étude Une étude a été réalisée pour définir des profils énergétiques des classes de type Collections en Java. Cette étude montre que choisir une classe de Collections inadaptée peut augmenter la consommation énergétique de 300 % alors que choisir une classe adaptée peut réduire la consommation de 38 %.

Java est un langage largement utilisé dans le monde du logiciel grâce à sa portabilité, ce qui fait de lui un langage impactant dans le domaine de la consommation énergétique. L'étude indique que lors de l'exécution d'un programme Java, la consommation énergétique est liée aux opérations effectuées et non à l'utilisation de la mémoire. Les boucles, donc indirectement les classes de type Collections, influent fortement sur la complexité des opérations d'un programme.

Pour mesurer la consommation énergétique en joules, l'infrastructure GreenMiner a été utilisée sur un smartphone Android. Une application vide a été créée, sur laquelle des tests unitaires JUnit ont été exécutés. Ces tests analysent des cas d'utilisation de Collections particuliers sur des entrées de avec de listes différentes.

Cette étude a été effectuée sur les Librairies suivantes : Java Collections FrameworkJava Collections Framework (JCF)Apache Collections Framework, (ACC), et Trove, sur des listes, des tableaux associatifs et des ensembles.

Évaluation

Insertion en début de liste L'arbre enraciné (ACCACC) est plus consommatrice que les autres, par exemple à elle implique une consommation proche de 7 joules, alors que les autres se trouvent à peu près entre 1 et 2,5 joules.

La liste chainée (JCFJCF) a la meilleure consommation sur toutes les tailles de listes.

Les autres types de Collections ont des scores similaires jusqu'à puis montrent une légère différence sur des tailles supérieures. Voici respectivement les types de Collections de la plus grande consommation à la plus faible : tableau (JCF), TIntArrayList (TroveTrove), TIntLinkedList (Trove).

Insertion en milieu de liste La TIntLinkedList est plus consommatrice que les autres, par exemple à elle implique une consommation proche de , alors que les autres se trouvent à peu près entre .

La TIntArrayListet le tableau (JCF) sont les moins consommatrices, et sont proches en consommation au moins jusque (entre .

Les autres se trouvent entre 5 et 10 joules.

Insertion en fin de liste L'arbre enraciné (ACC) est plus consommatrice que les autres, par exemple à elle implique une consommation proche de 7 joules, alors que les autres se trouvent à peu près entre 0 et 2 joules.

La TIntArrayList , la TIntLinkedList, le tableau, et la liste chainée sont les moins consommatrices, et sont proches en consommation au moins jusqu'à (entre 0 et 2 joules). On constate quand même que la TIntArrayList est majoritairement la plus basse en consommation.

Itération sur une liste Toutes les Collections ont des consommations énergétiques très proches, à elles se trouvent entre 8 et 10 joules.

Accès aléatoires à une liste La TIntLinkedList est plus consommatrice que les autres, par exemple à elle implique une consommation supérieure à 30 joules, alors que les autres se trouvent à peu près entre .

La TIntArrayList, le tableau (JCF) et l'arbre enraciné (ACC) sont les moins consommatrices et sont proches en consommation au moins jusque (entre ).

La liste chainée se trouve entre 10 et 15 joules.

Bilan L'article a fait une notation de la qualité de consommation d'une Collection allant de 1 pour la meilleure à 6 pour la pire, voici les résultats : InsertionItérationAccès aléatoireAu débutAu milieuA la finTableau42312TIntArrayList31121Liste chainée13423TIntLinkedList25223Arbre enraciné54533 InsertionItérationRequêteTable de hachage111TIntHashMap222HashedMap222LinkedHashMap222LinkedMap322TreeMap423 InsertionItérationRequêteHashSet211TIntHashSet111MapBackedSet411LinkedHashSet311ListOrderedSet511TreeSet612

De manière générale la TIntArrayList est la meilleure liste suivie par le tableau, La table de hachage est le meilleur tableau associatif et la HashSet est le meilleur ensemble suivi par la TIntHashSet.

Algorithmes de tri Contexte d'étude Une étude a été réalisée sur des smartphones, pour mesurer leur consommation en fonction de certains algorithmes de tri. La problématique est que les appareils embarqués fonctionnent souvent sur batteries et leur durée de vie dépend donc de l'énergie consommée par leurs composants. L'étude cible les algorithmes de tri qui ne sont pas uniquement utilisés par les utilisateurs directement, mais aussi indirectement par d'autres algorithmes, en mesurant la consommation énergétique du CPU et de la mémoire.

Le tri rapide est un algorithme de tri standard de plusieurs librairies et langages. Il y a une croyance forte sur le fait que la consommation en énergie dépend directement des performances logiciels, mais d'autres facteurs comme l'utilisation de la mémoire ou les récursions ont aussi un impact. Les expériences menées dans cette étude montrent que le tri rapide peut être le plus rapide mais pas le moins gourmand en énergie.

Algorithmes étudiés : Tri à bulle, Tri par tas, Tri par insertion, Tri fusion, Tri rapide, Tri par sélection, Tri shaker/cocktail, Tri de shell.

Évaluation Résultat de consommation en joules des algorithmes de tri selon les processeurs ATMega 16, 32 et 128 : ATMega 16ATMega 32ATMega 128Tri rapide1.762.816.29Tri rapide récursif0.291.741.34Tri par tas2.322.401.42Tri par sélection4.584.807.35Tri par insertion0.850.890.19Tri à bulle3.323.475.01Tri fusion récursifn.a.2.523.79Tri fusion1.211.261.77Tri shaker/cocktail1.241.290.12Tri de shell1.191.250.87 Résultat du temps d'exécution en milliseconde des algorithmes de tri selon les processeur ATMega 16, 32 et 128 : ATMega 16ATMega 32ATMega 128Tri rapide2520259640237534Tri rapide récursif3312032240201220Tri par tas224920224920224920Tri par sélection442040444120443720Tri par insertion816408160081640Tri à bulle321320321220321220Tri fusion récursif44920233920233920Tri fusion118400118400118400Tri shaker/cocktail117400117400117400Tri de shell115800115800115800

Bilan L'étude montre que finalement l'utilisation de la mémoire a un impact sur la consommation en énergie. Toutefois les algorithmes comme le tri par insertion sont plus efficaces que les autres.

Une autre approche que les expériences ont montré, est que les types de données utilisés avaient un impact sur la consommation, par exemple les types à virgule flottante consomment plus que les types entiers.

Patron de conception

Contexte d'étude Un patron de conception en architecture logicielle est un arrangement de rôles et d'actions établis par des modules. Ces patrons, reconnus par les concepteurs et les programmeurs, décrivent des procédés qui permettent d'organiser et de structurer un projet.

Pour permettre d'évaluer la consommation en énergie de ces différents patrons de conception, plusieurs études ont mis en place des bancs d'essais. Ceux-ci ont développé un outil composé d'un FPGA et d'un ordinateur permettant de mesurer avec précision les fluctuations d'énergie.

Évaluation Chaque morceau de code avant et après application d'un patron de conception a été exécuté plusieurs fois afin d'obtenir des données consistantes. Voici les résultats : +Utilisation en énergie des différents patrons de conceptionPatron de conceptionConsommation avant (en joules)Consommation après

(en joules)Différence en pourcentageFabrique abstraite87.78106.6921.55Monteur111.75113.081.19Fabrique118.13118.06 -0.07Prototype99.6098.68 -0.93Singleton98.7099.110.42Pont99.7899.54 -0.24Objet composite97.15102.145.14Décorateur13.92113.13712.89Poids-mouche92.8938.94 -58.08Proxy104.3366.28 -36.47Commande98.3296.53 -1.82Médiateur120.55109.02 -9.56Observateur61.6299.9562.20Stratégie115.73115.52 -0.18Visiteur104.8997.04 -7.49

Bilan Les résultats indiquent que la majorité des patrons de conception n'influent quasiment pas sur la consommation en énergie. Cependant il est intéressant de noter que les patrons de conception Poids-mouche et Proxy économisent respectivement 58 % et 36 % d'énergie.

D'un autre côté, les patrons de conception Observateur et Décorateur consomment respectivement 62 % et 712 % d'énergie en plus. Malgré cela, il est possible d'optimiser l'utilisation d'énergie de ces patrons de conception.

Le patron de conception Observateur peut être optimisé en réduisant le nombre d'appel aux méthodes et accès mémoire de l'observé. Moins d'appel permettra aux observateurs d'être notifiés moins souvent lors d'actions de l'observé.

Le patron de conception (ou décorateur) peut être plus économe en énergie en créant une sous classe de la classe décorée qui contiendra tous les attributs et méthodes de la classe décorée. Ainsi une substitution de l’instanciation de l'objet décorée avec l'objet de la sous classe économisera de l'énergie.

Protocole de sécurité

Contexte d'étude Le protocole SSL est largement utilisé pour effectuer des échanges sécurisés sur Internet. SSL offre des services basiques de chiffrement, d'authentification de sources et de protection d'intégrité des données échangées. Il est souvent utilisé comme sur-couche logicielle afin d'éviter de modifier en profondeur un protocole applicatif, comme HTTP. Ce protocole étant beaucoup utilisé, sa consommation en énergie doit être légère étant donné que tout type d'appareil l'utilise, cela inclut les appareils équipés de batteries et donc ayant une faible autonomie.