¿Pueden las aplicaciones afectar el consumo de energía de manera sustancial?

16

¿Hay algo que se pueda hacer para que una sola aplicación de propósito general afecte el consumo de energía del dispositivo en el que se está ejecutando?

No estoy familiarizado con la forma en que las optimizaciones para las aplicaciones individuales pueden afectar el consumo de energía de manera general, ¿alguien puede explicar si los diferentes enfoques para escribir aplicaciones afectan el consumo de energía del dispositivo en el que se están ejecutando?

Es decir, puede un solo programa, que hace exactamente lo mismo funcionalmente, escrito de diferentes maneras que afecta drásticamente el consumo de energía de un dispositivo en general, no sobre cómo los diferentes programas no relacionados pueden afectar el consumo de energía de un dispositivo.

Juan Manuel
fuente
8
Haz que funcione de manera más eficiente.
Christopher Berman
No estoy diciendo que su pregunta esté completamente fuera de tema, pero creo que un libro será más adecuado que una respuesta en un sitio de preguntas y respuestas. Debe proporcionar al menos algo de contexto, como son estos sistemas integrados, desarrollo móvil o algo completamente diferente. Cualquier respuesta debería depender en gran medida de eso.
K.Steff
2
¿Estás hablando de sistemas integrados alimentados por batería? En general, la clave para minimizar el consumo de energía es identificar los momentos en que el sistema realmente no tendrá que estar haciendo mucho, y minimizar la cantidad de tiempo que cualquier parte del sistema estará activa cuando realmente no haya nada para ello. que hacer. En la mayoría de los casos, habrá un límite bastante claro en cuanto a cuánto esfuerzo vale la pena; si un dispositivo usará 1 mAH / día en las funciones necesarias, una rutina simple que desperdicie 10 uAH / día puede ser preferible a una compleja que solo desperdicie 1 uAH / día (ya que esta última solo ahorraría un 1% en energía).
supercat
1
Estaba pensando en algo general, no con un contexto en particular. Era una pregunta "solo por curiosidad". Pero, por ejemplo, ¿hay alguna regla para ahorrar energía en dispositivos móviles? o sistemas embebidos? o en el desarrollo de aplicaciones web? Puede estar retrasando los accesos al disco y las redes o cosas por el estilo.
Juan Manuel
1
Sospecho que te estás perdiendo el punto. Si cambia una aplicación para usar la radio la mitad, verá el consumo de energía cuando la aplicación se desactive. La radio de un teléfono no consume energía a una velocidad constante. Su consumo de energía depende directamente de lo que el software le pide que haga.
Gort the Robot

Respuestas:

7

Los problemas de consumo de energía a menudo van en detrimento del rendimiento, por lo que ambos deben ser equilibrados. Aplica el costo de la contabilidad de capital para considerar un hardware más eficiente, y se convierte en una compensación muy compleja. (simplemente pasa 100 horas para ahorrar un milivatio / hora, o $ 10 para una fuente de alimentación más eficiente en los equipos que ejecutan el software). La única vez que tiene sentido comercial preocuparse por el consumo de energía (causado por el software) es una granja de servidores del tamaño de Google, dispositivos alimentados por batería, y si el marketing quiere marcar el casillero Tree Hugging Greenie.

Es demasiado complejo para trivializarlo diciendo "Haz que tus algoritmos sean más eficientes", ese es solo el primer paso. La curva de rendimiento / potencia y en particular la curva de "rendimiento percibido" / potencia no son lineales. Depende de si tiene control y hasta qué nivel a través del sistema operativo en uso.

Más allá de eso, la pregunta tendrá diferentes respuestas a cada situación específica. Por ejemplo, una vez trabajé en un sistema alimentado por batería (objetivo de 18 meses en una celda de 9 V) que funcionaba más eficientemente a la velocidad máxima del reloj durante un corto período de tiempo que durmiendo, sin embargo, otro micro software similar que funcionaba mejor era mejor en un reloj lento por un minuto más o menos y luego dormir.

Mattnz
fuente
Esta es realmente la respuesta correcta, el hardware juega un papel mucho más afectivo en el consumo de energía que el software. El ejemplo de una fuente de alimentación más eficiente hace TODO el dispositivo y eclipsa las micro optimizaciones de aplicaciones individuales, lo que las convierte en contribuciones insignificantes.
Sí, pero un programa no utiliza todos los bits de hardware en el dispositivo por igual. Por ejemplo, un programa que nunca usa el disco duro en una PC usará significativamente menos energía que uno que está constantemente leyendo y escribiendo en el disco duro.
Gort the Robot
@StevenBurnap que es irrelevante dependiendo de la HD, algo de spin y pull de HD todo el tiempo. Las optimizaciones de energía más significativas siempre vendrán del hardware (y del microcódigo en ellas). El mismo software con un Green HD usará menos energía, por lo que el hardware aún hace una gran diferencia.
2
Eso no es verdad. Adjunte un Kill-a-watt a su sistema y ejecute dos aplicaciones, la primera que solo agrega números en un bucle infinito, y otra que escanea un archivo de 5 GB repetidamente. Verás una diferencia. El consumo de energía definitivamente variará en una computadora, a veces dramáticamente, dependiendo de lo que se le pida que haga.
Gort the Robot
Aquí hay un ejemplo que muestra el cambio de consumo de energía de una PC basado únicamente en qué software se está ejecutando: codinghorror.com/blog/2005/08/…
Gort the Robot
2

Lo mejor que puede hacer es optimizar sus algoritmos y la lógica empresarial de su aplicación.

También puede adoptar un proceso de compilación particular, muchos codificadores simplemente se olvidan de las funciones en línea y la optimización en una fase de compilación, la mayoría de las veces esto le da una pequeña ventaja en términos de rendimiento y, en consecuencia, en términos de optimización del consumo de energía.

usuario827992
fuente
Esta es la respuesta correcta. La optimización es la única forma.
superM
1
¿Cómo es esta la respuesta correcta? Hay muchos más sumideros de energía en un sistema que la CPU.
James
1
@James, ¿tu software solo usa la CPU? ¿nada más?
user827992
3
@ user827992: No, ese es el punto. Cosas como la radio (GSM / 3G / Wifi) y la pantalla consumen mucha más energía que una CPU. Optimizar sus algoritmos no lo ayudará aquí. Llegaría al extremo de decir que en un sistema donde el consumo de energía es una preocupación, la optimización de su código es una optimización prematura.
James
1
@ user827992: Sí, pero estos ahorros son minúsculos en comparación con otras fuentes de consumo de batería. Puede optimizar a -OInfinity todo lo que quiera, pero si, por ejemplo, su código sondea alguna bandera en algún lugar donde esté muerto.
James
2

La respuesta correcta es ...

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

Concéntrese en proporcionar valor a sus clientes. Cree una solución limpia, fácil de entender y fácil de mantener.

Entonces, si necesita más "potencia", puede perfilar su aplicación. Con la creación de perfiles, detectará cuellos de botella que, cuando se cambien, proporcionarán el mayor beneficio y aumentarán la "eficiencia".

Michal Franc
fuente
44
Yo diría que esto no responde la pregunta, ya que usted dice "El consumo de energía no es su problema; concéntrese en el valor para los clientes". Y se parece mucho a un mantra de gestión. El OP podría tener una justificación seria para requerir un menor consumo de energía.
K.Steff
Bueno, entendí mal el "consumo de energía". Aún así, creo que debería establecer un nivel de consumo de energía que, cuando se alcanza, la optimización se debe realizar analizando partes del sistema que consumen demasiada energía. Esto podría realizarse mediante una serie de pruebas de estrés.
Michal Franc
1

Si bien es cierto que en términos de CPU no hay mucho por hacer, a menudo hay características del dispositivo que consumen energía cuando se usan. En una PC, en general a nadie le importa, pero definitivamente es cierto que una lectura de disco (suponiendo que no sean unidades SSD) hará que el disco duro gire y la cabeza se mueva, lo que consumirá un poco de energía. En una PC esto es trivial, pero en un dispositivo móvil, esto puede ser un problema muy real.

En un teléfono, el ejemplo más obvio de esto son las comunicaciones. Enviar una señal inalámbrica requiere energía. En una PC, conectada a una fuente de alimentación de 500 WATT, es intrascendente. En un teléfono, no lo es. Una aplicación que sondea constantemente un servidor en busca de grandes cantidades de datos utilizará dramáticamente más potencia que una que no use ninguna red.

Este es un problema muy real, solo google para "la aplicación de Android agotó mi batería". Aquí hay una de las muchas páginas que le dicen a los desarrolladores cómo minimizar el consumo de energía.

En general, desea optimizar el rendimiento en general (es decir, hacer que la CPU sea lo más posible) y también para el uso de la red. Comuníquese lo menos posible con los mensajes más pequeños posibles.

Como han dicho otros, esta es una tarea para después de que la mayoría de su código esté completo, cuando haya identificado un problema y haya perfilado el uso de energía.

Gort the Robot
fuente