Czy aplikacje mogą znacząco wpłynąć na zużycie energii?

16

Czy jest coś, co można zrobić dla jednej aplikacji ogólnego przeznaczenia, aby wpłynąć na zużycie energii przez urządzenie, na którym działa?

Nie wiem, w jaki sposób optymalizacje poszczególnych aplikacji mogą wpływać na zużycie energii w ogólny sposób. Czy ktoś może wyjaśnić, czy różne podejścia do pisania aplikacji wpływają na zużycie energii przez urządzenie, na którym działają?

To znaczy, czy pojedynczy program, który robi dokładnie to samo funkcjonalnie, napisany na różne sposoby, drastycznie wpływa na zużycie energii przez urządzenie ogólnie, a nie o tym, jak różne niepowiązane programy mogą wpływać na zużycie energii przez urządzenie.

Juan Manuel
źródło
8
Spraw, by działał wydajniej.
Christopher Berman
Nie twierdzę, że twoje pytanie jest zupełnie nie na temat, ale myślę, że książka będzie bardziej odpowiednia niż odpowiedź na stronie pytań i odpowiedzi. Powinieneś podać przynajmniej jakiś kontekst, na przykład system wbudowany, programowanie mobilne lub coś zupełnie innego. Każda odpowiedź powinna w dużym stopniu zależeć od tego.
K.Steff
2
Czy mówisz o systemach wbudowanych zasilanych bateryjnie? Ogólnie rzecz biorąc, kluczem do zminimalizowania zużycia energii jest określenie czasów, w których system naprawdę nie będzie musiał wiele robić, i zminimalizowanie czasu, przez który dowolna część systemu będzie aktywna, gdy tak naprawdę nie ma nic dla niego do zrobienia. W większości przypadków będzie dość wyraźny limit tego, ile wysiłku się opłaca; jeśli urządzenie zużyje 1mAH / dzień na niezbędne funkcje, prostsza procedura, która marnuje 10uAH / dzień, może być lepsza niż złożona, która marnuje tylko 1uAH / dzień (ponieważ ta ostatnia zaoszczędziłaby tylko 1% na energii).
supercat
1
Myślałem o czymś ogólnym, a nie o konkretnym kontekście. To było pytanie „tylko z ciekawości”. Ale na przykład, czy jest jakaś zasada oszczędzania energii na urządzeniach mobilnych? lub systemy osadzone? czy przy tworzeniu aplikacji internetowych? Może opóźniać dostęp do dysku i pracę w sieci lub coś w tym rodzaju.
Juan Manuel
1
Podejrzewam, że nie rozumiesz. Jeśli zmienisz aplikację tak, aby korzystała z radia o połowę mniej, zobaczysz zużycie energii, gdy ta aplikacja spadnie. Radio w telefonie nie pobiera mocy ze stałą prędkością. Zużycie energii zależy bezpośrednio od tego, co program ma zrobić.
Gort the Robot

Odpowiedzi:

7

Obawy dotyczące zużycia energii często mają negatywny wpływ na wydajność, dlatego należy je wyważyć. Zastosuj koszt księgowania kapitału, aby rozważyć bardziej wydajny sprzęt, a stanie się to bardzo złożonym kompromisem. (po prostu spędzasz 100 godzin, aby zaoszczędzić miliwatt / godzinę lub 10 USD za bardziej wydajny zasilacz w programach przetwarzających oprogramowanie). Jedynym sensem komercyjnym jest martwienie się o zużycie energii (spowodowane przez oprogramowanie) to farma serwerów wielkości Google, urządzenia zasilane bateryjnie, a jeśli marketing chce zaznaczyć pole Greenie Tree Hugging.

Jest zbyt skomplikowany, aby go trywializować, mówiąc „Spraw, aby algorytmy były bardziej wydajne” - to tylko pierwszy krok. Krzywa wydajności / mocy, a zwłaszcza „postrzegana wydajność” / krzywa mocy, są nieliniowe. Zależy to od tego, czy masz kontrolę i na jakim poziomie jest używany system operacyjny.

Poza tym pytanie będzie zawierało różne odpowiedzi na każdą konkretną sytuację. Na przykład kiedyś pracowałem nad systemem zasilanym bateryjnie (docelowo 18 miesięcy na ogniwie 9 V), który był bardziej energooszczędny, pracując z maksymalną szybkością zegara przez krótki czas niż spanie, jeszcze inne mikroprocesorowe podobne oprogramowanie lepiej było zaznaczyć na wolnym zegarze przez minutę, a potem śpij.

mattnz
źródło
jest to właściwie poprawna odpowiedź, sprzęt odgrywa znacznie bardziej afektywną rolę w zużyciu energii niż oprogramowanie. Przykład bardziej wydajnego zasilacza sprawia, że WSZYSTKIE urządzenia, i przyćmiewa mikrooptymalizacje pojedynczych aplikacji, czyniąc je nieznacznymi wkładami.
Tak, ale program nie wykorzystuje jednakowo każdego elementu sprzętu. Na przykład program, który nigdy nie używa dysku twardego na komputerze, zużywa znacznie mniej energii niż ten, który stale czyta i zapisuje na dysku twardym.
Gort the Robot
@StevenBurnap, który jest nieistotny w zależności od HD, trochę HD wiruje i wyciąga sok przez cały czas. Najbardziej znaczące optymalizacje mocy zawsze będą pochodzić ze sprzętu (i zawartego w nim mikrokodu). To samo oprogramowanie z Green HD zużywa mniej energii, więc sprzęt nadal robi większą różnicę.
2
To nie jest prawda. Podłącz do systemu Kill-a-wat i uruchom dwie aplikacje, pierwszą, która po prostu dodaje liczby w nieskończonej pętli, i drugą, która skanuje plik 5 GB wielokrotnie. Zobaczysz różnicę. Zużycie energii na pewno będzie się różnić na komputerze, czasem dramatycznie, w zależności od tego, o co go poproszono.
Gort the Robot
Oto przykład pokazujący zmianę zużycia energii przez komputer wyłącznie w oparciu o uruchomione oprogramowanie: codinghorror.com/blog/2005/08/…
Gort the Robot
2

Najlepsze, co możesz zrobić, to zoptymalizować algorytmy i logikę biznesową swojej aplikacji.

Możesz także zastosować określony proces kompilacji, wielu programistów po prostu zapomina o funkcjach wbudowanych i optymalizacji w fazie kompilacji, przez większość czasu daje to niewielką przewagę pod względem wydajności, a co za tym idzie, optymalizacji zużycia energii.

użytkownik827992
źródło
To jest właściwa odpowiedź. Optymalizacja to jedyny sposób.
superM
1
Jak to jest poprawna odpowiedź? W systemie jest o wiele więcej odbiorników energii niż procesor.
James
1
@James, twoje oprogramowanie używa tylko procesora? nic więcej?
user827992,
3
@ user827992: Nie, o to chodzi. Rzeczy takie jak radio (GSM / 3G / Wi-Fi) i ekran zużywają znacznie więcej energii niż procesor. Optymalizacja algorytmów tu ci nie pomoże. Chciałbym powiedzieć, że w systemie, w którym zużycie energii stanowi problem, optymalizacja kodu jest przedwczesną optymalizacją.
James
1
@ user827992: Tak, ale te oszczędności są niewielkie w porównaniu z innymi źródłami zużycia baterii. Możesz zoptymalizować do -OInfinity, jak tylko chcesz, ale jeśli, na przykład, twój kod odpytuje flagę gdzieś nie żyjesz.
James
2

Prawidłowa odpowiedź to ....

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

Skoncentruj się na zapewnianiu wartości swoim klientom. Utwórz rozwiązanie, które jest czyste, łatwe do zrozumienia i łatwe w utrzymaniu.

Następnie, jeśli potrzebujesz więcej „mocy”, możesz profilować swoją aplikację. Dzięki profilowaniu wskażesz wąskie gardła, które po zmianie zapewnią największe korzyści i zwiększą „efektywność”.

Michał Franc
źródło
4
Powiedziałbym, że to nie odpowiada na pytanie, ponieważ mówisz: „Zużycie energii nie jest twoim problemem; skup się na wartości dla klientów”. I to bardzo przypomina mantrę zarządzania. OP może mieć poważne uzasadnienie dla wymagania niższego zużycia energii.
K.Steff
Cóż, źle zrozumiałem „zużycie energii”. Nadal uważam, że powinien ustawić poziom zużycia energii, który po osiągnięciu optymalizacji powinien zostać przeprowadzony poprzez analizę części systemu, które zużywają zbyt dużo mocy. Można to wykonać za pomocą serii testów warunków skrajnych.
Michal Franc
1

Chociaż prawdą jest, że jeśli chodzi o procesor, nie ma wiele do zrobienia, jednak często są to cechy urządzenia, które zużywają energię, gdy jest używane. Na PC w zasadzie nikogo to nie obchodzi, ale zdecydowanie jest prawdą, że odczyt dysku spowoduje (zakładając, że dyski inne niż SSD) wirowanie dysku twardego i ruch głowicy, co zużywa trochę energii. Na PC jest to banalne, ale na urządzeniach mobilnych może to być bardzo realny problem.

Na telefonie najbardziej oczywistym tego przykładem jest komunikacja. Wysłanie sygnału bezprzewodowego wymaga energii. Na komputerze podłączonym do zasilacza 500 WATT nie ma to znaczenia. Na telefonie tak nie jest. Aplikacja, która stale odpytuje serwer o duże ilości danych, zużywa znacznie więcej energii niż ta, która w ogóle nie korzysta z sieci.

To bardzo realny problem, wystarczy google dla „Aplikacja na Androida wyczerpała moją baterię”. Oto jedna z wielu stron mówiących programistom, jak zminimalizować zużycie energii.

Ogólnie rzecz biorąc, chcesz zoptymalizować ogólną wydajność (tj. Maksymalnie zwiększyć moc procesora), a także wykorzystanie sieci. Komunikuj się jak najmniej za pomocą jak najmniejszych wiadomości.

Jak powiedzieli inni, jest to zadanie po zakończeniu większości kodu, gdy zidentyfikujesz problem i profilujesz zużycie energii.

Gort the Robot
źródło