El consumo de energía en relación con el tamaño físico del hardware electrónico ha aumentado a medida que los componentes se han vuelto más pequeños y más compactos. Esto, unido a las altas frecuencias de funcionamiento, ha dado lugar a niveles inaceptables de disipación de energía. La memoria representa una gran proporción de la energía consumida y esta contribución se puede reducir optimizando la organización de los datos (la forma en que se almacenan). [1]
Motivación
La optimización energética en sistemas electrónicos con alta densidad de memoria se ha convertido en uno de los principales desafíos para dispositivos como teléfonos móviles , sistemas integrados y dispositivos inalámbricos . A medida que aumenta el número de núcleos en un solo chip, también aumenta el consumo de energía de los dispositivos. Los estudios sobre la distribución del consumo de energía en teléfonos inteligentes y centros de datos han demostrado que el subsistema de memoria consume alrededor del 40% de la energía total. En los sistemas de servidor, el estudio revela que la memoria consume alrededor de 1,5 veces el consumo de energía del núcleo. [2]
Organización de datos de memoria del bus de direcciones de bajo consumo
Los buses a nivel de sistema, como los buses fuera del chip o los buses largos en el chip entre bloques IP, suelen ser fuentes importantes de consumo de energía debido a su gran capacidad de carga. Los resultados experimentales han demostrado que la actividad del bus para el acceso a la memoria se puede reducir al 50 % organizando los datos. Consideremos el caso de compilar el código escrito en lenguaje de programación C :
int A [ 4 ][ 4 ], B [ 4 ][ 4 ];
para ( i = 0 ; i < 4 ; i ++ ) { para ( j = 0 ; j < 4 ; j ++ ) { B [ i ][ j ] = A [ j ][ i ]; } }

La mayoría de los compiladores de C existentes colocan una matriz multidimensional en formato de fila principal , es decir, fila por fila: esto se muestra en la columna "no optimizada" de la tabla adjunta. Como resultado, no se produce ningún acceso a la memoria mientras se ejecuta este código, ya que se accede a los elementos de las columnas de forma secuencial. Pero es posible cambiar la forma en que se colocan en la memoria para maximizar la cantidad de accesos secuenciales desde la memoria. Esto se puede lograr ordenando los datos como se muestra en la columna "optimizada" de la tabla. Esta redistribución de datos por parte del compilador puede reducir significativamente el consumo de energía debido al acceso a la memoria. [3]
Transformaciones de estructuras de datos
Este método implica transformaciones del código fuente que modifican la estructura de datos incluida en el código fuente o introducen nuevas estructuras de datos o, posiblemente, modifican el modo de acceso y las rutas de acceso con el objetivo de reducir el consumo de energía. Se utilizan ciertas técnicas para realizar dichas transformaciones.
Ordenación de declaraciones de matriz
La idea básica es modificar el orden de las declaraciones de matrices locales , de modo que las matrices a las que se accede con mayor frecuencia se coloquen en la parte superior de la pila de forma que se acceda directamente a las ubicaciones de memoria que se utilizan con más frecuencia. Para lograr esto, las declaraciones de matrices se reorganizan para colocar primero las matrices a las que se accede con mayor frecuencia, lo que requiere una estimación estática o un análisis dinámico de la frecuencia de acceso de las matrices locales.
Modificación del alcance de la matriz (de local a global)
En cualquier programa de cálculo, las variables locales se almacenan en la pila de un programa y las variables globales se almacenan en la memoria de datos. Este método implica convertir matrices locales en matrices globales para que se almacenen en la memoria de datos en lugar de en la pila. La ubicación de una matriz global se puede determinar en tiempo de compilación, mientras que la ubicación de la matriz local solo se puede determinar cuando se llama al subprograma y depende del valor del puntero de la pila. Como consecuencia, se accede a las matrices globales con el modo de direccionamiento de desplazamiento con una constante 0, mientras que se accede a las matrices locales, excluyendo la primera, con un desplazamiento constante distinto de 0, y esto logra una reducción de energía.
Cambio de tamaño de matriz (inserción temporal de matriz)
En este método, los elementos a los que se accede con mayor frecuencia se identifican mediante la creación de perfiles o consideraciones estáticas. Luego, se almacena una copia de estos elementos en una matriz temporal a la que se puede acceder sin que se produzcan errores en la caché de datos. Esto da como resultado una reducción significativa de la energía del sistema, pero también puede reducir el rendimiento. [1]
Uso de la memoria del bloc de notas
Las memorias caché en chip utilizan una RAM estática que consume entre el 25% y el 50% de la potencia total del chip y ocupa aproximadamente el 50% del área total del chip. La memoria scratchpad ocupa menos área que las memorias caché en chip. Esto normalmente reducirá el consumo de energía de la unidad de memoria, porque una menor área implica una reducción en la capacidad conmutada total. Los procesadores integrados actuales, particularmente en el área de aplicaciones multimedia y controladores gráficos, tienen memorias scratchpad en chip. En los sistemas de memoria caché, el mapeo de los elementos del programa se realiza durante el tiempo de ejecución, mientras que en los sistemas de memoria scratchpad esto lo hace el usuario o automáticamente el compilador usando un algoritmo adecuado. [4]
Véase también
Referencias
- ^ ab Brandolese, Carlo; Fornaciari, William; Salice, Fabio; Sciuto, Donatella (octubre de 2002). "El impacto de las transformaciones del código fuente en el consumo de energía y potencia del software". Revista de circuitos, sistemas y computadoras . 11 (5): 477–502. doi :10.1142/S0218126602000586.
- ^ Panda, PR; Patel, V.; Shah, P.; Sharma, N.; Srinivasan, V.; Sarma, D. (3–7 de enero de 2015). Técnicas de optimización de potencia para DDR3 SDRAM . 28.ª Conferencia internacional sobre diseño VLSI (VLSID), 2015. IEEE. págs. 310–315. doi :10.1109/VLSID.2015.59.
- ^ "Técnicas de optimización energética para memorias SDRAM DDR3"
- ^ "Memoria Scratchpad: una alternativa de diseño para la memoria caché en chip en sistemas integrados" (PDF) .