El consumo de energía del software lo define el ordenador de acuerdo con los sistemas que lo componen. Se pueden utilizar varios principios de desarrollo para limitar el consumo de software . Hoy, con la cantidad de dispositivos informáticos que se utilizan todos los días, desde el centro de datos hasta el teléfono inteligente , ahorrar energía se ha vuelto más importante que nunca.
A nivel mundial, se estima que los dispositivos informáticos consumen el 5,3% de la electricidad total. A pesar de este bajo porcentaje, esto corresponde a una cantidad significativa de energía , y el menor ahorro en este consumo podría permitir reducirlo con un impacto positivo en la ecología y la economía .
Existen varios medios para reducir el consumo. Uno de los enfoques es mejorar el consumo de energía de los componentes . Otra es diseñar software para que consuma menos. Este enfoque permite reducir el consumo sin necesariamente diseñar nuevos dispositivos porque la energía incorporada producida por la construcción de una computadora es alta.
El consumo de energía de un dispositivo informático se define por el costo de energía necesario para que los componentes de hardware realicen su tarea. Esta actividad se produce mediante la ejecución de un software que a su vez está vinculado a la actividad de un usuario.
Potencia La velocidad a la que se realiza el trabajo, expresada en vatios ⇒ . Energía La integral de tiempo y potencia, expresada en julios ⇒ .El costo de energía de los componentes del hardware se rige por el software, por lo que existen varias formas de reducir el consumo general del hardware trabajando con el software. Éstos son solo algunos de ellos.
Se realizó un estudio para definir perfiles energéticos de las clases tipo Colecciones en Java. Este estudio muestra que elegir una clase de colección inadecuada puede aumentar el consumo de energía en un 300%, mientras que elegir una clase adecuada puede reducir el consumo en un 38%.
Java es un lenguaje muy utilizado en el mundo del software gracias a su portabilidad, lo que lo convierte en un lenguaje impactante en el ámbito del consumo energético. El estudio indica que cuando se ejecuta un programa Java , el consumo de energía está relacionado con las operaciones realizadas, no con el uso de la memoria. Los bucles , y por tanto indirectamente las clases de tales colecciones, influyen fuertemente en la complejidad de las operaciones de un programa.
Para medir el consumo de energía en julios , se utilizó la infraestructura GreenMiner en un teléfono inteligente Android . Se ha creado una aplicación vacía, en la que se han ejecutado pruebas unitarias JUnit. Estas pruebas analizan casos de uso de colecciones particulares en entradas de 1 a 5,000 elementos con 13 tamaños de lista diferentes.
Este estudio se llevó a cabo en las siguientes Bibliotecas: Java Collections Framework (JCF), (ACC) y Trove, en listas , arreglos asociativos y conjuntos .
Valoración Inserción al principio de la listaEl árbol enraizado (ACC) consume más que los demás, por ejemplo a 5.000 elementos implica un consumo cercano a los 7 julios , mientras que los demás están aproximadamente entre 1 y 2,5 julios .
La lista encadenada (JCF) tiene el mejor consumo de todos los tamaños de lista.
Los otros tipos de colecciones tienen puntuaciones similares hasta 2000 artículos y luego muestran una ligera diferencia en tamaños más grandes. Los siguientes son los tipos de colecciones de mayor consumo a menor: matriz (JCF), TIntArrayList (Trove), TIntLinkedList (Trove).
Inserción en el medio de la listaEl TIntLinkedList consume más que los demás, por ejemplo a 5.000 elementos implica un consumo cercano a los 25 julios , mientras que los demás están aproximadamente entre 0 y 10 julios .
TIntArrayList y la matriz (JCF) son las que menos consumen y se acercan en consumo a al menos 5.000 elementos (entre 0 y 3 julios) .
Los demás están entre 5 y 10 julios .
Inserción al final de la listaEl árbol enraizado (ACC) consume más que los demás, por ejemplo a 5.000 elementos implica un consumo cercano a los 7 julios , mientras que los demás están aproximadamente entre 0 y 2 julios .
TIntArrayList, TIntLinkedList, la matriz y la lista encadenada son las que menos consumen y tienen un consumo cercano de al menos 5.000 elementos (entre 0 y 2 julios ). Todavía vemos que TIntArrayList es en su mayoría el más bajo en consumo.
Iterar sobre una listaTodas las Colecciones tienen un consumo energético muy similar, a 5.000 elementos están entre 8 y 10 julios .
Acceso aleatorio a una listaEl TIntLinkedList consume más que los demás, por ejemplo a 5.000 elementos implica un consumo superior a 30 julios , mientras que los demás están aproximadamente entre 5 y 15 julios .
El TIntArrayList, el arreglo (JCF) y el árbol enraizado (ACC) son los que menos consumen y se acercan al consumo hasta al menos 5.000 elementos (entre 5 y 10 julios ).
La lista encadenada está entre 10 y 15 julios .
Hoja de balanceEl artículo hizo una calificación de la calidad de consumo de una Colección que va desde 1 para el mejor hasta 6 para el peor, aquí están los resultados:
Inserción | Iteración | Acceso aleatorio | |||
---|---|---|---|---|---|
Al principio | En el medio | Al final | |||
Junta | 4 | 2 | 3 | 1 | 2 |
TIntArrayList | 3 | 1 | 1 | 2 | 1 |
Lista encadenada | 1 | 3 | 4 | 2 | 3 |
TIntLinkedList | 2 | 5 | 2 | 2 | 3 |
Árbol enraizado | 5 | 4 | 5 | 3 | 3 |
Inserción | Iteración | Pedido | |
---|---|---|---|
Tabla de picadillo | 1 | 1 | 1 |
TIntHashMap | 2 | 2 | 2 |
HashedMap | 2 | 2 | 2 |
LinkedHashMap | 2 | 2 | 2 |
LinkedMap | 3 | 2 | 2 |
TreeMap | 4 | 2 | 3 |
Inserción | Iteración | Pedido | |
---|---|---|---|
HashSet | 2 | 1 | 1 |
TIntHashSet | 1 | 1 | 1 |
MapBackedSet | 4 | 1 | 1 |
LinkedHashSet | 3 | 1 | 1 |
ListOrderedSet | 5 | 1 | 1 |
TreeSet | 6 | 1 | 2 |
En términos generales, TIntArrayList es la mejor lista seguida por la matriz , la tabla hash es la mejor matriz asociativa y HashSet es el mejor conjunto seguido por TIntHashSet.
Se realizó un estudio en teléfonos inteligentes , para medir su consumo según ciertos algoritmos de clasificación . El problema es que los dispositivos a bordo a menudo funcionan con baterías y, por lo tanto, su vida útil depende de la energía consumida por sus componentes. El estudio apunta a algoritmos de clasificación que no solo son utilizados por los usuarios directamente, sino también indirectamente por otros algoritmos, midiendo el consumo de energía de la CPU y la memoria.
La clasificación rápida es un algoritmo de clasificación estándar de varias bibliotecas e idiomas . Existe una fuerte creencia de que el consumo de energía depende directamente del rendimiento del software, pero también influyen otros factores, como el uso de memoria o la recursividad. Los experimentos llevados a cabo en este estudio muestran que la clasificación rápida puede ser la más rápida pero no menos intensiva en energía.
Algoritmos estudiados:
Julios de resultado del consumidor de algoritmos de clasificación como procesadores ATMega 16, 32 y 128:
ATMega 16 | ATMega 32 | ATMega 128 | |
---|---|---|---|
Ordenación rápida | 1,76 | 2,81 | 6.29 |
Clasificación rápida recursiva | 0,29 | 1,74 | 1,34 |
Ordenar por montón | 2,32 | 2,40 | 1,42 |
Ordenar por selección | 4.58 | 4,80 | 7.35 |
Ordenar por inserción | 0,85 | 0,89 | 0,19 |
Clasificación de burbujas | 3.32 | 3,47 | 5.01 |
Ordenación de combinación recursiva | n / A | 2.52 | 3,79 |
Combinar ordenación | 1,21 | 1,26 | 1,77 |
Coctelera / cóctel de clasificación | 1,24 | 1,29 | 0,12 |
Clasificación de conchas | 1,19 | 1,25 | 0,87 |
Resultado del tiempo de ejecución en milisegundos de los algoritmos de ordenación según los procesadores ATMega 16, 32 y 128:
ATMega 16 | ATMega 32 | ATMega 128 | |
---|---|---|---|
Ordenación rápida | 2520 | 259640 | 237534 |
Clasificación rápida recursiva | 33120 | 32240 | 201220 |
Ordenar por montón | 224920 | 224920 | 224920 |
Ordenar por selección | 442040 | 444120 | 443720 |
Ordenar por inserción | 81640 | 81600 | 81640 |
Clasificación de burbujas | 321320 | 321220 | 321220 |
Ordenación de combinación recursiva | 44920 | 233920 | 233920 |
Combinar ordenación | 118400 | 118400 | 118400 |
Coctelera / cóctel de clasificación | 117400 | 117400 | 117400 |
Clasificación de conchas | 115800 | 115800 | 115800 |
El estudio muestra que, en última instancia, el uso de la memoria tiene un impacto en el consumo de energía. Sin embargo, los algoritmos como el ordenamiento por inserción son más eficientes que otros.
Otro enfoque que han demostrado los experimentos es que los tipos de datos utilizados tienen un impacto en el consumo, por ejemplo, los tipos de punto flotante consumen más que los tipos enteros .
Un patrón de diseño en la arquitectura de software es una disposición de roles y acciones establecidos por módulos. Estos patrones , reconocidos por diseñadores y programadores, describen procesos que permiten organizar y estructurar un proyecto.
Para evaluar el consumo de energía de estos diferentes patrones de diseño , varios estudios han creado bancos de pruebas. Han desarrollado una herramienta compuesta por una FPGA y una computadora para medir con precisión las fluctuaciones de energía.
ValoraciónCada fragmento de código antes y después de aplicar un patrón de diseño se ha ejecutado varias veces para obtener datos consistentes. Aquí están los resultados :
Patrón de diseño | Consumo antes
(en julios) |
Consumo después
(en julios) |
Diferencia porcentual |
---|---|---|---|
Fábrica abstracta | 87,78 | 106,69 | 21.55 |
Editor | 111,75 | 113.08 | 1,19 |
Hecho | 118.13 | 118.06 | -0,07 |
Prototipo | 99,60 | 98,68 | -0,93 |
único | 98,70 | 99.11 | 0,42 |
Puente | 99,78 | 99,54 | -0,24 |
Objeto compuesto | 97,15 | 102,14 | 5.14 |
Decorador | 13,92 | 113.13 | 712,89 |
Peso mosca | 92,89 | 38,94 | -58,08 |
Apoderado | 104,33 | 66.28 | -36,47 |
Ordenado | 98,32 | 96,53 | -1,82 |
Mediador | 120,55 | 109.02 | -9,56 |
Observador | 61,62 | 99,95 | 62,20 |
Estrategia | 115,73 | 115,52 | -0,18 |
Visitante | 104,89 | 97.04 | -7,49 |
Los resultados indican que la mayoría de los patrones de diseño apenas influyen en el consumo de energía . Sin embargo, es interesante notar que los patrones de diseño Flyweight y Proxy ahorran 58% y 36% de energía respectivamente.
Por otro lado, los patrones de diseño Observer y Decorator consumen un 62% y un 712% más de energía, respectivamente. A pesar de esto, es posible optimizar el uso de energía de estos patrones de diseño .
El patrón de diseño de Observer se puede optimizar reduciendo el número de llamadas a métodos y accesos a memoria de lo observado. Menos llamadas permitirán que los observadores sean notificados con menos frecuencia de las acciones observadas.
El jefe de diseño (o decorador) puede ser más eficiente energéticamente creando una subclase de la clase decorada que contendrá todos los atributos y métodos de la clase decorada. Por lo tanto, una sustitución de la instanciación del objeto decorado con el objeto de la subclase ahorrará energía .
El protocolo SSL se usa ampliamente para realizar comunicaciones seguras en Internet . SSL ofrece servicios básicos de cifrado , autenticación de origen y protección de la integridad de los datos intercambiados. A menudo se utiliza como una superposición de software para evitar modificaciones en profundidad de un protocolo de aplicación, como HTTP . Este protocolo se utiliza mucho, su consumo de energía debe ser ligero dado que cualquier tipo de dispositivo lo utiliza, esto incluye dispositivos equipados con baterías y por lo tanto de baja autonomía.
Para medir el impacto de SSL en el consumo de energía , se instaló un banco de pruebas durante los estudios sobre el consumo de energía de los protocolos de seguridad. Consiste en un dispositivo portátil bajo Linux conectado directamente a un dispositivo de medición. La computadora de mano que sirve como cliente se comunica directamente con un servidor utilizando la implementación SSL del proyecto OpenSSL . El cliente está constantemente conectado para mantener la batería al mismo nivel de carga para que las mediciones sean consistentes.
ValoraciónPrimero, el análisis se centra en el consumo de energía en diferentes tamaños de intercambio SSL . Los resultados indican que con los intercambios más pequeños, 256 kilo bytes , autenticación entre el cliente y el servidor utilización 98,9% de la energía , el resto se utiliza para el cifrado de la fase de intercambio. Más de cambio es grande, de hasta 1 Mega bytes , además de la fase de encriptación consumirá, con este tamaño de mensaje, nos damos cuenta que los consume fase de autenticación más de un 19,6% del consumo total.
Sin embargo, las fases de autenticación y encriptación del intercambio utilizan muchos algoritmos de criptografía , lo que nos interesa aquí es el uso de SSL . Por tanto, se han realizado medidas para determinar el consumo puro de SSL . Tres tamaños de cambio 1 kilo bytes , kilos- 100 bytes y 1 Mega bytes , los resultados muestran que SSL consume un 41% a un 45,8% de la energía total utilizada por los intercambios. El resto lo utilizan los diferentes algoritmos de cifrado.
La autenticación se puede realizar de diferentes formas utilizando diferentes algoritmos de cifrado, el estudio muestra que dependiendo del tamaño del intercambio, el consumo energético de la autenticación difiere según el uso de cifrado RSA o criptografía en curvas elípticas e incluso según las diferentes versiones de estas. Para los mensajes pequeños, de menos de 20 kilos- bytes , es más ventajoso usar la versión ECC-3DES-SHA de la criptografía de curva elíptica , para mensajes más grandes es más ventajoso el uso de la versión de la RSA -RC5-SHA1 de RSA cifrado .
Hoja de balanceEl estudio muestra que para ahorrar energía es necesario variar varios parámetros que son: