Os aplicativos podem afetar o consumo de energia de maneira substancial?

16

Existe algo que possa ser feito para um único aplicativo de uso geral que afete o consumo de energia do dispositivo em que está sendo executado?

Não estou familiarizado com como as otimizações de aplicativos individuais podem afetar o consumo de energia de uma maneira geral. Alguém pode explicar se diferentes abordagens para escrever aplicativos afetam o consumo de energia do dispositivo em que estão sendo executados?

Ou seja, um único programa, que faz exatamente a mesma coisa funcionalmente, escrito de maneiras diferentes, afeta drasticamente o consumo de energia de um dispositivo em geral, não sobre como diferentes programas não relacionados podem afetar o consumo de energia de um dispositivo.

Juan Manuel
fonte
8
Faça com que ele funcione com mais eficiência.
Christopher Berman
Não estou dizendo que sua pergunta é totalmente fora do tópico, mas acho que um livro será mais adequado do que uma resposta em um site de perguntas e respostas. Você deve fornecer pelo menos algum contexto, como sistemas embarcados, desenvolvimento móvel ou algo totalmente diferente. Qualquer resposta deve depender muito disso.
K.Steff
2
Você está falando de sistemas embarcados alimentados por bateria? Em geral, a chave para minimizar o consumo de energia é identificar os momentos em que o sistema realmente não precisará fazer muito e minimizar a quantidade de tempo em que qualquer parte do sistema estará ativa quando não houver realmente nada a oferecer. façam. Na maioria dos casos, haverá um limite bastante claro de quanto esforço vale a pena; se um dispositivo usar 1mAH / dia nas funções necessárias, uma rotina simples que gaste 10uAH / dia pode ser preferível a uma complexa que gaste apenas 1uAH / dia (já que este último economizaria apenas 1% em energia).
22712
1
Eu estava pensando em algo geral, não com um contexto em particular. Era uma pergunta "apenas por curiosidade". Mas, por exemplo, existe alguma regra para economizar energia em dispositivos móveis? ou sistemas incorporados? ou no desenvolvimento de aplicativos da web? Pode estar atrasando o acesso ao disco e a rede ou coisas assim.
Juan Manuel
1
Eu suspeito que você está perdendo o objetivo. Se você alterar um aplicativo para usar a metade do rádio, verá o consumo de energia quando o aplicativo for desativado. O rádio do telefone não está consumindo energia a uma taxa constante. O consumo de energia depende diretamente do que o software solicita.
Gort the Robot

Respostas:

7

As preocupações com o consumo de energia costumam prejudicar o desempenho, portanto, as duas precisam ser equilibradas. Aplique a contabilidade de custos de capital para considerar um hardware mais eficiente, e isso se torna uma troca muito complexa. (simplesmente você gasta 100 horas para economizar um miliwatt / hora ou US $ 10 para um PSU mais eficaz nos computadores que executam o software). A única vez em que faz sentido comercial se preocupar com o consumo de energia (causado por software) é um farm de servidores do tamanho do Google, dispositivos alimentados por bateria e, se o marketing quiser um sinal na caixa Tree Hugging Greenie.

É muito complexo banalizá-lo dizendo "Torne seus algoritmos mais eficientes" - esse é apenas o primeiro passo. A curva desempenho / potência e, em particular, a "performance percebida" / curva potência são não lineares. Depende se você tem controle e em que nível através do sistema operacional em uso.

Além disso, a pergunta terá respostas diferentes para cada situação específica. Por exemplo, uma vez eu trabalhei em um sistema alimentado por bateria (alvo 18 meses em uma célula de 9V) que era mais eficiente em termos de energia, funcionando na velocidade máxima do relógio por uma curta duração do que dormindo, mas outro software semelhante com micro-execução era melhor para marcar em um relógio lento por um minuto ou mais, depois durma.

mattnz
fonte
Na verdade, essa é a resposta correta: o hardware desempenha um papel muito mais afetivo no consumo de energia do que o software. O exemplo de uma PSU mais eficiente compõe TODO o dispositivo e ofusca as micro-otimizações de aplicativos únicos, tornando-as contribuições insignificantes.
Sim, mas um programa não usa todo o hardware do dispositivo igualmente. Por exemplo, um programa que nunca usa o disco rígido em um PC consome significativamente menos energia do que aquele que está constantemente lendo e gravando no disco rígido.
Gort the Robot
@StevenBurnap que é irrelevante, dependendo do HD, alguns HD rodam e puxam suco o tempo todo. As otimizações de energia mais significativas sempre virão do hardware (e do microcódigo). O mesmo software com um HD verde consome menos energia, portanto o hardware ainda faz mais diferença.
2
Isso não é verdade. Conecte um Kill-a-watt ao seu sistema e execute dois aplicativos, o primeiro que apenas adiciona números em um loop infinito e o outro que verifica um arquivo de 5 GB repetidamente. Você verá a diferença. O consumo de energia definitivamente varia em um computador, às vezes dramaticamente, dependendo do que está sendo solicitado a fazer.
Gort the Robot
Aqui está um exemplo que mostra o consumo de energia de um PC mudando com base apenas no software que está sendo executado: codinghorror.com/blog/2005/08/…
Gort the Robot
2

A melhor coisa que você pode fazer é otimizar seus algoritmos e a lógica comercial do seu aplicativo.

Você também pode adotar um processo de compilação específico; muitos codificadores esquecem as funções e a otimização em linha em uma fase de compilação; na maioria das vezes, isso oferece uma pequena vantagem em termos de desempenho e, consequentemente, em termos de otimização do consumo de energia.

user827992
fonte
Esta é a resposta certa. Otimizar é o único caminho.
SuperM
1
Como é essa a resposta certa? Há muito mais dissipadores de energia em um sistema que a CPU.
James
1
@ James, seu software usa apenas a CPU? nada mais?
user827992
3
@ user827992: Não, esse é o ponto. Coisas como o rádio (GSM / 3G / Wifi) e a tela consomem muito mais energia que uma CPU. A otimização de seus algoritmos não ajudará você aqui. Eu diria que, no sistema em que o consumo de energia é uma preocupação, otimizar seu código é uma otimização prematura.
James
1
@ user827992: Sim, mas essas economias são minúsculas em comparação com outras fontes de consumo de bateria. Você pode otimizar para -OInfinity tudo o que quiser, mas se, por exemplo, seu código pesquisar alguma sinalização em algum lugar em que você esteja morto.
James
2

A resposta certa é ....

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

Concentre-se em fornecer valor aos seus clientes. Crie uma solução limpa, fácil de entender e fácil de manter.

Então, se você precisar de mais "poder", poderá criar um perfil do seu aplicativo. Com a criação de perfil, você identificará pontos de estrangulamento que, quando alterados, fornecerão o maior benefício e aumentarão a "eficácia".

Michal Franc
fonte
4
Eu diria que isso não responde à pergunta, já que você está dizendo "O consumo de energia não é seu problema; concentre-se no valor para os clientes". E parece muito com algum mantra de gerenciamento. O OP pode ter uma justificativa séria para exigir um menor consumo de energia.
22412 K # Steff
Bem, eu entendi mal "consumo de energia". Ainda acho que ele deve definir um nível de consumo de energia que, quando atingido, a otimização deve ser realizada analisando partes do sistema que estão consumindo muita energia. Isso pode ser realizado por uma série de testes de estresse.
Michal Franc
1

Embora seja verdade que, em termos de CPU, não haja muito a ser feito, geralmente há recursos do dispositivo que consomem energia quando usados. Em um PC, quase ninguém se importa, mas é definitivamente verdade que uma leitura de disco (assumindo unidades não SSD) fará com que o disco rígido gire e a cabeça se mova, o que consumirá um pouco de energia. Em um PC, isso é trivial, mas em um dispositivo móvel, isso pode ser um problema muito real.

Em um telefone, o exemplo mais óbvio disso é a comunicação. Enviar um sinal sem fio consome energia. Em um PC, conectado a uma fonte de alimentação 500 WATT, isso é inconseqüente. Em um telefone, não é. Um aplicativo que pesquisa constantemente um servidor por grandes quantidades de dados consumirá muito mais energia do que aquele que não usa nenhuma rede.

Este é um problema muito real, basta pesquisar no Google por "O aplicativo Android esgotou minha bateria". Aqui está uma das muitas páginas que dizem aos desenvolvedores como minimizar o consumo de energia.

Em geral, você deseja otimizar o desempenho em geral (por exemplo, tornar a CPU o máximo possível) e também para o uso da rede. Comunique o mínimo possível com o menor número possível de mensagens.

Como já foi dito, essa é uma tarefa para depois que a maior parte do seu código estiver concluída, quando você identificar um problema e usar o perfil de energia.

Gort the Robot
fonte