Les applications peuvent-elles affecter la consommation d'énergie de manière substantielle?

16

Y a-t-il quelque chose qui peut être fait pour une seule application à usage général pour affecter la consommation d'énergie de l'appareil sur lequel il fonctionne?

Je ne sais pas comment les optimisations des applications individuelles peuvent affecter la consommation d'énergie d'une manière générale, quelqu'un peut-il expliquer si différentes approches d'écriture d'applications affectent la consommation d'énergie du périphérique sur lequel elles s'exécutent?

Autrement dit, un seul programme, qui fait exactement la même chose de manière fonctionnelle, écrit de différentes manières, affecte-t-il radicalement la consommation d'énergie d'un appareil en général, pas sur la façon dont différents programmes non liés peuvent affecter la consommation d'énergie d'un appareil.

Juan Manuel
la source
8
Faites-le fonctionner plus efficacement.
Christopher Berman
Je ne dis pas que votre question est carrément hors sujet, mais je pense qu'un livre conviendra mieux qu'une réponse dans un site de questions / réponses. Vous devez fournir au moins un certain contexte, comme c'est le cas pour les systèmes embarqués, le développement mobile ou autre chose. Toute réponse devrait en dépendre fortement.
K.Steff
2
Parlez-vous de systèmes embarqués alimentés par batterie? En général, la clé pour minimiser la consommation d'énergie est d'identifier les moments où le système n'aura vraiment pas à faire grand-chose et de minimiser la durée pendant laquelle n'importe quelle partie du système sera active lorsqu'il n'y a vraiment rien pour cela faire. Dans la plupart des cas, il y aura une limite assez claire quant aux efforts qui en valent la peine; si un appareil utilise 1mAH / jour sur les fonctions nécessaires, une routine simple qui gaspille 10uAH / jour peut être préférable à une complexe qui ne gaspille que 1uAH / jour (car cette dernière ne ferait que 1% d'économie d'énergie).
supercat
1
Je pensais à quelque chose de général, pas à un contexte en particulier. C'était une question «juste pour la curiosité». Mais par exemple, existe-t-il une règle d'économie d'énergie sur les appareils mobiles? ou systèmes intégrés? ou sur le développement d'applications web? Peut retarder les accès au disque et la mise en réseau ou des choses comme ça.
Juan Manuel
1
Je soupçonne que vous manquez le point. Si vous modifiez une application pour utiliser la radio à moitié, vous verrez la consommation d'énergie lorsque cette application s'arrêtera. La radio d'un téléphone ne consomme pas d'énergie à un rythme constant. Sa consommation d'énergie dépend directement de ce que le logiciel lui demande de faire.
Gort the Robot

Réponses:

7

Les problèmes de consommation d'énergie sont souvent au détriment des performances, les deux doivent donc être équilibrés. Appliquez la comptabilité du coût du capital pour envisager un matériel plus efficace, et cela devient un compromis très complexe. (passez-vous simplement 100 heures pour économiser un milliwatt / heure, ou 10 $ pour une alimentation plus efficace dans les contrôleurs exécutant le logiciel). La seule fois où il est commercialement judicieux de se soucier de la consommation d'énergie (causée par un logiciel) est une batterie de serveurs de la taille de Google, des appareils alimentés par batterie et si le marketing souhaite cocher la case Tree Hugging Greenie.

C'est trop complexe pour le banaliser en disant "Rendez vos algorithmes plus efficaces" - ce n'est que la première étape. La courbe performance / puissance et notamment la "performance perçue" / courbe de puissance sont non linéaires. Cela dépend si vous avez le contrôle et à quel niveau via le système d'exploitation utilisé.

Au-delà de cela, la question aura des réponses différentes à chaque situation spécifique. Par exemple, j'ai déjà travaillé sur un système alimenté par batterie (cible 18 mois sur une pile 9 V) qui était plus efficace en termes de puissance et fonctionnait à une vitesse d'horloge maximale pendant une courte durée que de dormir, mais un autre micrologiciel fonctionnant de manière similaire valait mieux cocher sur une horloge lente. pendant une minute, puis dormez.

mattnz
la source
c'est en fait la bonne réponse, le matériel joue un rôle beaucoup plus affectif dans la consommation d'énergie que le logiciel. L'exemple d'un bloc d'alimentation plus efficace fait TOUT de l'appareil et éclipse les micro-optimisations d'applications uniques, ce qui en fait des contributions insignifiantes.
Oui, mais un programme n'utilise pas tous les composants matériels de l'appareil de la même manière. Par exemple, un programme qui n'utilise jamais le disque dur sur un PC utilise beaucoup moins d'énergie qu'un programme qui lit et écrit constamment sur le disque dur.
Gort the Robot
@StevenBurnap qui n'est pas pertinent en fonction de la HD, de la rotation et de la traction HD tout le temps. Les optimisations de puissance les plus importantes proviendront toujours du matériel (et du microcode qui s'y trouve). Le même logiciel avec un Green HD utilisera moins d'énergie, donc le matériel fait toujours plus de différence.
2
Ce n'est pas vrai. Attachez un Kill-a-watt à votre système et exécutez deux applications, la première qui ajoute simplement des nombres dans une boucle infinie et une autre qui scanne un fichier de 5 Go à plusieurs reprises. Vous verrez une différence. La consommation d'énergie variera certainement sur un ordinateur, parfois de façon spectaculaire, selon ce qu'on lui demande de faire.
Gort the Robot
Voici un exemple qui montre la consommation d'énergie d'un PC changeant uniquement en fonction du logiciel en cours d'exécution: codinghorror.com/blog/2005/08/…
Gort the Robot
2

La meilleure chose que vous puissiez faire est d'optimiser vos algorithmes et la logique métier de votre application.

Vous pouvez également adopter un processus de compilation particulier, de nombreux codeurs oublient simplement les fonctions en ligne et l'optimisation dans une phase de compilation, la plupart du temps cela vous donne un petit avantage en termes de performances et, par conséquent, en termes d'optimisation de la consommation d'énergie.

user827992
la source
C'est la bonne réponse. L'optimisation est le seul moyen.
superM
1
Comment est-ce la bonne réponse? Il y a beaucoup plus de dissipateurs dans un système que le CPU.
James
1
@James, votre logiciel utilise uniquement le CPU? rien d'autre?
user827992
3
@ user827992: Non, c'est le point. Des choses comme la radio (GSM / 3G / Wifi) et l'écran consomment beaucoup plus d'énergie qu'un CPU. L'optimisation de vos algorithmes ne vous aidera pas ici. J'irais jusqu'à dire que dans un système où la consommation d'énergie est une préoccupation, l'optimisation de votre code est une optimisation prématurée.
James
1
@ user827992: Oui, mais ces économies sont minimes par rapport à d'autres sources de consommation de batterie. Vous pouvez optimiser à -OInfinity tout ce que vous voulez, mais si par exemple, votre code interroge un drapeau quelque part où vous êtes mort.
James
2

La bonne réponse est ...

"We should forget about small efficiencies, 
say about 97% of the time: premature 
optimization is the root of all evil"
Donald Knuth

Concentrez-vous sur la création de valeur pour vos clients. Créez une solution propre, facile à comprendre et facile à entretenir.

Ensuite, si vous avez besoin de plus de "puissance", vous pouvez profiler votre application. Avec le profilage, vous identifierez les goulots d'étranglement qui, une fois modifiés, fourniront le plus grand avantage et augmenteront "l'efficacité".

Franc Michal
la source
4
Je dirais que cela ne répond pas à la question, car vous dites: "La consommation d'énergie n'est pas votre problème; concentrez-vous sur la valeur pour les clients". Et cela ressemble beaucoup à un mantra de gestion. L'OP pourrait avoir de sérieuses justifications pour exiger une consommation d'énergie inférieure.
K.Steff
Eh bien j'ai mal compris la "consommation d'énergie". Je pense néanmoins qu'il devrait définir un niveau de consommation d'énergie qui, une fois atteint, devrait être optimisé en analysant les parties du système qui consomment trop d'énergie. Cela pourrait être effectué par une série de tests de résistance.
Michal Franc
1

S'il est vrai qu'en termes de CPU, il n'y a pas grand-chose à faire, il y a souvent des fonctionnalités de l'appareil qui consomment de l'énergie lorsqu'il est utilisé. Sur un PC, la plupart du temps, personne ne s'en soucie, mais il est certainement vrai qu'une lecture de disque entraînera (en supposant des disques non SSD) une rotation du disque dur et un déplacement de la tête, ce qui consommera un peu d'énergie. Sur un PC, cela est trivial, mais sur un appareil mobile, cela peut être un problème très réel.

Sur un téléphone, l'exemple le plus évident est celui des communications. L'envoi d'un signal sans fil prend de l'énergie. Sur un PC, connecté à une alimentation de 500 WATT, c'est sans conséquence. Sur un téléphone, ce n'est pas le cas. Une application qui interroge constamment un serveur pour de grandes quantités de données consommera considérablement plus d'énergie qu'une application qui n'utilise aucun réseau.

C'est un problème très réel, il suffit de google pour "l'application Android a vidé ma batterie". Ici une des nombreuses pages expliquant aux développeurs comment réduire la consommation d'énergie.

En général, vous souhaitez optimiser les performances en général (c'est-à-dire rendre le CPU autant que possible) et également pour l'utilisation du réseau. Communiquez le moins possible avec des messages aussi petits que possible.

Comme d'autres l'ont dit, il s'agit d'une tâche après la fin de la majeure partie de votre code, lorsque vous avez identifié un problème et profilé la consommation d'énergie.

Gort le robot
la source