Le applicazioni possono influenzare il consumo di energia in modo sostanziale?


16

Esiste qualcosa che può essere fatto per una singola applicazione generica per influire sul consumo energetico del dispositivo su cui è in esecuzione?

Non ho familiarità con il modo in cui l'ottimizzazione delle singole applicazioni può influire sul consumo di energia in modo generale, qualcuno può spiegare se approcci diversi alla scrittura di applicazioni influiscono sul consumo di energia del dispositivo su cui sono in esecuzione?

Cioè, può un singolo programma, che fa esattamente la stessa cosa funzionalmente, scritto in modi diversi che influiscono drasticamente sul consumo di energia di un dispositivo in generale, non su come diversi programmi non correlati potrebbero influenzare il consumo di energia di un dispositivo.


8
Renderlo più efficiente.
Christopher Berman,

Non sto dicendo che la tua domanda sia assolutamente fuori tema, ma penso che un libro sarà più adatto di una risposta in un sito di domande e risposte. Dovresti fornire almeno un po 'di contesto, come ad esempio questi sistemi integrati, lo sviluppo mobile o qualcos'altro. Qualsiasi risposta dovrebbe dipendere fortemente da questo.
K.Steff,

2
Stai parlando di sistemi integrati alimentati a batteria? In generale, la chiave per ridurre al minimo il consumo energetico è identificare i momenti in cui il sistema non dovrà fare molto, e ridurre al minimo il tempo in cui una parte del sistema sarà attiva quando non c'è davvero nulla fare. Nella maggior parte dei casi, ci sarà un limite abbastanza chiaro su quanto vale la pena; se un dispositivo utilizzerà 1mAH / giorno sulle funzioni necessarie, una semplice routine che spreca 10uAH / giorno potrebbe essere preferibile a una complessa che spreca solo 1uAH / giorno (poiché quest'ultima risparmierebbe solo l'1% di energia).
supercat

1
Stavo pensando a qualcosa di generale, non con un contesto in particolare. Era una domanda "solo per curiosità". Ad esempio, esiste qualche regola per il risparmio energetico sui dispositivi mobili? o sistemi integrati? o sullo sviluppo di applicazioni web? Potrebbe ritardare gli accessi al disco e la rete o cose del genere.
Juan Manuel,

1
Ho il sospetto che ti stia perdendo il punto. Se si modifica un'applicazione per utilizzare la radio la metà, si vedrà il consumo di energia quando l'applicazione in esecuzione si riduce. La radio su un telefono non assorbe energia a una velocità costante. Il consumo di energia dipende direttamente da ciò che viene richiesto dal software.
Gort the Robot,

Risposte:


7

Le preoccupazioni relative al consumo di energia vanno spesso a scapito delle prestazioni, quindi i due devono essere bilanciati. Applicare il costo della contabilità del capitale per considerare l'hardware più efficiente e diventa un compromesso molto complesso. (spendi semplicemente 100 ore per risparmiare un milliwatt / ora o $ 10 per un PSU più efficiente nei computer che eseguono il software). L'unica volta che ha senso commerciale preoccuparsi del consumo di energia (causato dal software) è una server farm delle dimensioni di Google, dispositivi alimentati a batteria e se il marketing desidera un segno di spunta sulla casella Treeie Hugging Greenie.

È troppo complesso per banalizzarlo dicendo "Rendi i tuoi algoritmi più efficienti" - questo è solo il primo passo. La curva prestazione / potenza e in particolare la curva "prestazione percepita" / potenza non sono lineari. Dipende se hai il controllo e a quale livello attraverso il sistema operativo in uso.

Oltre a ciò, la domanda avrà risposte diverse a ciascuna situazione specifica. Ad esempio, una volta ho lavorato su un sistema alimentato a batteria (obiettivo 18 mesi su una cella da 9 V) che era più efficiente in termini di potenza e funzionava alla massima velocità di clock per una breve durata rispetto al sonno, ma un altro micro con software simile funzionava meglio su un orologio lento per circa un minuto, quindi dormi.


questa è in realtà la risposta corretta, l'hardware svolge un ruolo molto più efficace nel consumo di energia rispetto al software. L'esempio di un alimentatore più efficiente rende TUTTO il dispositivo e mette in ombra le microottimizzazioni di singole applicazioni che li rendono contributi insignificanti.

Sì, ma un programma non utilizza allo stesso modo ogni componente hardware del dispositivo. Ad esempio, un programma che non utilizza mai il disco rigido su un PC utilizzerà una quantità di energia significativamente inferiore rispetto a uno che legge e scrive costantemente sul disco rigido.
Gort the Robot,

@StevenBurnap che è irrilevante a seconda dell'HD, un po 'di spin HD e tiri succo continuamente. Le ottimizzazioni di potenza più significative verranno sempre dall'hardware (e dal microcodice in esse). Lo stesso software con un Green HD consumerà meno energia, quindi l'hardware fa ancora la differenza.

2
Quello non è vero. Collega un Kill-a-watt al tuo sistema ed esegui due applicazioni, la prima che aggiunge solo numeri in un ciclo infinito e un'altra che scansiona ripetutamente un file da 5 GB. Vedrai una differenza. Il consumo energetico varierà sicuramente su un computer, a volte in modo drammatico, a seconda di ciò che viene chiesto di fare.
Gort the Robot,

Ecco un esempio che mostra il consumo di energia di un PC che cambia in base al software in esecuzione: codinghorror.com/blog/2005/08/…
Gort the Robot

2

La cosa migliore che puoi fare è ottimizzare i tuoi algoritmi e la logica aziendale della tua applicazione.

Puoi anche adottare un particolare processo di compilazione, molti programmatori dimenticano semplicemente le funzioni in linea e l'ottimizzazione in una fase di compilazione, il più delle volte questo ti dà un piccolo vantaggio in termini di prestazioni e, di conseguenza, in termini di ottimizzazione del consumo di energia.


Questa è la risposta esatta. L'ottimizzazione è l'unico modo.
superM

1
Come è questa la risposta giusta? Ci sono molti più dissipatori di potenza in un sistema rispetto alla CPU.
James,

1
@James il tuo software utilizza solo la CPU? nient'altro?
user827992,

3
@ user827992: No, questo è il punto. Cose come la radio (GSM / 3G / Wifi) e lo schermo consumano molta più energia di una CPU. L'ottimizzazione dei tuoi algoritmi non ti aiuterà qui. Andrei fino al punto di dire che nel sistema in cui il consumo di energia è un problema, l'ottimizzazione del codice è un'ottimizzazione prematura.
James,

1
@ user827992: Sì, ma questi risparmi sono minuscoli rispetto ad altre fonti di consumo della batteria. Puoi ottimizzare a -Ofinity tutto ciò che ti piace, ma se ad esempio, il tuo codice esegue il polling di qualche flag da qualche parte sei morto.
James,

2

La risposta giusta è ...

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

Concentrati sul fornire valore ai tuoi clienti. Crea una soluzione che sia pulita, facile da capire e facile da mantenere.

Quindi se hai bisogno di più "potenza" puoi profilare la tua applicazione. Con la profilazione è possibile individuare i colli di bottiglia che, una volta modificati, offriranno il massimo beneficio e aumenteranno l '"efficacia".


4
Direi che questo non risponde alla domanda, dal momento che stai dicendo "Il consumo di energia non è un tuo problema; concentrati sul valore per i clienti". E suona molto come un mantra di gestione. L'OP potrebbe avere una seria giustificazione per richiedere un consumo di energia inferiore.
K.Steff,

Bene ho frainteso il "consumo di energia". Penso comunque che dovrebbe impostare un livello di consumo energetico che, una volta raggiunto, l'ottimizzazione dovrebbe essere eseguita analizzando parti del sistema che consumano troppa energia. Questo potrebbe essere eseguito da una serie di prove di stress.
Michal Franc,

1

Mentre è vero che in termini di CPU non c'è molto da fare, spesso ci sono funzionalità del dispositivo che consumano energia quando vengono utilizzate. Su un PC, quasi nessuno se ne frega, ma è sicuramente vero che una lettura del disco (supponendo unità non SSD) farà girare il disco rigido e la testa si sposterà, il che consumerà un po 'di energia. Su un PC questo è banale, ma su un dispositivo mobile, questo può essere un problema molto reale.

Su un telefono, l'esempio più evidente di ciò sono le comunicazioni. L'invio di un segnale wireless richiede energia. Su un PC, collegato a un alimentatore da 500 WATT, non ha importanza. Al telefono, non lo è. Un'applicazione che esegue costantemente il polling di un server per grandi quantità di dati utilizzerà una potenza notevolmente maggiore rispetto a una che non utilizza alcuna rete.

Questo è un problema molto reale, basta google per "Applicazione Android scarica la mia batteria". Ecco una delle tante pagine che dicono agli sviluppatori come ridurre al minimo il consumo di energia.

In generale, si desidera ottimizzare le prestazioni in generale (ovvero rendere la CPU il più possibile) e anche per l'utilizzo della rete. Comunica il meno possibile con il minor numero possibile di messaggi.

Come altri hanno già detto, questo è un compito da svolgere dopo che la maggior parte del codice è stata completata, quando hai identificato un problema e il consumo di energia profilato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.