Können Anwendungen den Stromverbrauch erheblich beeinflussen?

16

Kann eine einzige Universalanwendung den Stromverbrauch des Geräts beeinflussen, auf dem sie ausgeführt wird?

Ich bin nicht vertraut damit, wie Optimierungen an einzelnen Anwendungen den Energieverbrauch allgemein beeinflussen können. Kann jemand erklären, ob verschiedene Ansätze zum Schreiben von Anwendungen den Energieverbrauch des Geräts beeinflussen, auf dem sie ausgeführt werden?

Das heißt, kann ein einzelnes Programm, das genau dasselbe funktional ausführt, auf unterschiedliche Art und Weise geschrieben, den Energieverbrauch eines Geräts im Allgemeinen drastisch beeinflussen, und nicht darüber, wie verschiedene nicht verwandte Programme den Energieverbrauch eines Geräts beeinflussen könnten.

Juan Manuel
quelle
8
Machen Sie es effizienter.
Christopher Berman
Ich sage nicht, dass Ihre Frage nicht zum Thema gehört, aber ich denke, ein Buch ist geeigneter als eine Antwort auf einer Q & A-Site. Sie sollten zumindest einen gewissen Kontext bereitstellen, wie zum Beispiel eingebettete Systeme, mobile Entwicklung oder etwas ganz anderes. Jede Antwort sollte stark davon abhängen.
K.Steff,
2
Sprechen Sie über batteriebetriebene Embedded-Systeme? Im Allgemeinen besteht der Schlüssel zur Minimierung des Stromverbrauchs darin, Zeiten zu identifizieren, in denen das System nicht viel zu tun hat, und die Zeit zu minimieren, in der ein Teil des Systems aktiv ist, wenn nichts dafür vorhanden ist machen. In den meisten Fällen wird es eine ziemlich klare Grenze dafür geben, wie viel Aufwand sich lohnt. Wenn ein Gerät 1 mAh / Tag für die erforderlichen Funktionen benötigt, ist eine einfache Routine, die 10 uAH / Tag verschwendet, einer komplexen Routine vorzuziehen, die nur 1 uAH / Tag verschwendet (da letztere nur 1% Energie einspart).
Supercat
1
Ich habe in etwas Allgemeinem gedacht, nicht in einem bestimmten Kontext. Es war eine Frage der Neugier. Gibt es beispielsweise eine Regel für das Energiesparen auf Mobilgeräten? oder eingebettete Systeme? oder bei der Entwicklung von Webanwendungen? Möglicherweise verzögern sich Datenträgerzugriffe und Netzwerke oder ähnliches.
Juan Manuel
1
Ich vermute, Sie verpassen den Punkt. Wenn Sie eine Anwendung so ändern, dass das Radio nur halb so oft verwendet wird, wird der Stromverbrauch beim Ausführen dieser Anwendung verringert. Das Radio eines Telefons wird nicht mit einer konstanten Rate mit Strom versorgt. Der Stromverbrauch hängt direkt davon ab, was von der Software verlangt wird.
Gort the Robot

Antworten:

7

Bedenken hinsichtlich des Stromverbrauchs beeinträchtigen häufig die Leistung, daher müssen beide Faktoren ausgeglichen werden. Wenden Sie die Kapitalkostenrechnung an, um eine effizientere Hardware in Betracht zu ziehen, und dies wird zu einem sehr komplexen Kompromiss. (Nehmen Sie sich einfach 100 Stunden Zeit, um eine Milliwattstunde zu sparen, oder 10 US-Dollar für ein effizienteres Netzteil in den Wettbewerbern, auf denen die Software ausgeführt wird). Das einzige Mal, wenn es wirtschaftlich sinnvoll ist, sich über den (durch Software verursachten) Stromverbrauch Gedanken zu machen, ist eine Serverfarm in der Größe von Google, batteriebetriebene Geräte und, wenn das Marketing ein Häkchen bei der Tree Hugging Greenie-Box setzen möchte.

Es ist zu komplex, um es zu trivialisieren, indem man sagt "Machen Sie Algorithmen effektiver" - das ist nur der erste Schritt. Die Leistungskurve und insbesondere die "wahrgenommene Leistung" / Leistungskurve sind nicht linear. Es hängt davon ab, ob und auf welcher Ebene Sie die Kontrolle über das verwendete Betriebssystem haben.

Darüber hinaus hat die Frage unterschiedliche Antworten auf jede spezifische Situation. Ich habe zum Beispiel einmal an einem batteriebetriebenen System gearbeitet (Ziel: 18 Monate auf einer 9-V-Zelle), das bei maximaler Taktrate für kurze Zeit effizienter lief als im Ruhezustand, und ein anderes Mikro, das ähnliche Software ausführt, war besser, mit einer langsamen Taktrate zu ticken für eine Minute oder so dann schlafen.

mattnz
quelle
das ist eigentlich die richtige Antwort, Hardware eine viel spielt affektive Rolle im Energieverbrauch als Software. Das Beispiel eines effizienteren Netzteils macht ALLES aus dem Gerät und überschattet die Mikrooptimierungen einzelner Anwendungen, wodurch sie nur unwesentliche Beiträge leisten.
Ja, aber ein Programm verwendet nicht jede Hardware auf dem Gerät gleichermaßen. Beispielsweise verbraucht ein Programm, das niemals die Festplatte eines PCs verwendet, erheblich weniger Strom als ein Programm, das ständig von der Festplatte liest und darauf schreibt.
Gort the Robot
@StevenBurnap, das je nach HD irrelevant ist, etwas HD schleudern und ständig Saft ziehen. Die wichtigsten Leistungsoptimierungen werden immer von der Hardware (und dem darin enthaltenen Mikrocode) stammen. Dieselbe Software mit einer Green HD verbraucht weniger Strom, sodass die Hardware immer noch einen größeren Unterschied macht.
2
Das ist nicht wahr. Schließen Sie einen Kill-a-watt an Ihr System an und führen Sie zwei Anwendungen aus, eine, bei der nur Zahlen in einer Endlosschleife hinzugefügt werden, und eine andere, bei der eine 5-GB-Datei wiederholt gescannt wird. Sie werden einen Unterschied sehen. Der Stromverbrauch eines Computers variiert definitiv, manchmal dramatisch, je nachdem, was von ihm verlangt wird.
Gort the Robot
Hier ist ein Beispiel, das zeigt, wie sich der Stromverbrauch eines PCs ausschließlich auf der Grundlage der ausgeführten Software ändert
Gort the Robot
2

Das Beste, was Sie tun können, ist, Ihre Algorithmen und die Geschäftslogik Ihrer Anwendung zu optimieren.

Sie können auch einen bestimmten Kompilierungsprozess anwenden. Viele Programmierer vergessen lediglich die Inline-Funktionen und die Optimierung in einer Kompilierungsphase. In den meisten Fällen erhalten Sie dadurch einen kleinen Vorteil in Bezug auf die Leistung und folglich in Bezug auf die Stromverbrauchsoptimierung.

user827992
quelle
Das ist die richtige Antwort. Optimierung ist der einzige Weg.
SuperM
1
Wie ist das die richtige Antwort? In einem System gibt es weit mehr Stromsenken als in der CPU.
James
1
@James Ihre Software nutzt nur die CPU? nichts anderes?
user827992
3
@ user827992: Nein, das ist der Punkt. Dinge wie das Radio (GSM / 3G / Wifi) und der Bildschirm verbrauchen viel mehr Strom als eine CPU. Die Optimierung Ihrer Algorithmen hilft Ihnen hier nicht weiter. Ich würde sogar sagen, dass in Systemen, in denen der Stromverbrauch eine Rolle spielt, die Optimierung des Codes eine vorzeitige Optimierung darstellt.
James
1
@ user827992: Ja, aber diese Einsparungen sind im Vergleich zu anderen Quellen des Batterieverbrauchs äußerst gering. Sie können nach Belieben auf -OInfinity optimieren, aber wenn Ihr Code beispielsweise ein Flag abfragt, sind Sie an einem Ort tot.
James
2

Die richtige Antwort ist ...

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

Konzentrieren Sie sich darauf, Ihren Kunden einen Mehrwert zu bieten. Erstellen Sie eine saubere, verständliche und wartungsfreundliche Lösung.

Wenn Sie mehr Leistung benötigen, können Sie Ihre Anwendung profilieren. Mit der Profilerstellung erkennen Sie Engpässe, die bei Änderungen den größten Nutzen bringen und die "Effizienz" steigern.

Michal Franc
quelle
4
Ich würde sagen, dies beantwortet die Frage nicht, da Sie sagen: "Der Stromverbrauch ist nicht Ihr Problem. Konzentrieren Sie sich auf den Wert für die Kunden." Und es klingt sehr nach einem Management-Mantra. Das OP könnte ernsthafte Gründe dafür haben, einen geringeren Stromverbrauch zu fordern.
K.Steff,
Nun, ich habe "Stromverbrauch" falsch verstanden. Trotzdem denke ich, er sollte einen Energieverbrauch festlegen, bei dessen Erreichen die Optimierung durchgeführt werden sollte, indem Teile des Systems analysiert werden, die zu viel Energie verbrauchen. Dies könnte durch eine Reihe von Stresstests erfolgen.
Michal Franc
1

Es ist zwar richtig, dass in Bezug auf die CPU nicht viel getan werden muss, es gibt jedoch häufig Funktionen des Geräts, die bei Verwendung Strom verbrauchen. Auf einem PC kümmert sich meistens niemand darum, aber es ist definitiv richtig, dass ein Festplattenlesevorgang (vorausgesetzt, es handelt sich um Nicht-SSD-Laufwerke) dazu führt, dass sich die Festplatte dreht und der Kopf bewegt, was etwas Strom verbraucht. Auf einem PC ist dies trivial, aber auf einem mobilen Gerät kann dies ein sehr reales Problem sein.

Das offensichtlichste Beispiel für ein Telefon ist die Kommunikation. Das Senden eines Funksignals kostet Energie. Auf einem PC, der an ein 500-Watt-Netzteil angeschlossen ist, spielt dies keine Rolle. An einem Telefon geht es nicht. Eine Anwendung, die einen Server ständig nach großen Datenmengen abfragt, verbraucht erheblich mehr Strom als eine Anwendung, die überhaupt kein Netzwerk verwendet.

Dies ist ein sehr reales Problem, nur Google für "Android-Anwendung hat meinen Akku erschöpft". Auf einer von vielen Seiten erfahren Entwickler, wie sie den Stromverbrauch minimieren können.

Im Allgemeinen möchten Sie die Leistung im Allgemeinen optimieren (dh die CPU so weit wie möglich ausbauen) und auch die Netzwerknutzung optimieren. Kommunizieren Sie so wenig wie möglich mit so kleinen Nachrichten wie möglich.

Wie andere bereits gesagt haben, ist dies eine Aufgabe, nachdem der Großteil Ihres Codes vollständig ist, wenn Sie ein Problem festgestellt haben und einen profilierten Energieverbrauch festgestellt haben.

Gort den Roboter
quelle