Una técnica novedosa desarrollada por investigadores del MIT replantea la compresión de datos de hardware para liberar más memoria utilizada por las computadoras y dispositivos móviles, permitiéndoles correr más rápido y realizar más tareas simultáneamente.
La compresión de datos aprovecha los datos redundantes para liberar la capacidad de almacenamiento, aumentar la velocidad de cómputo y proporcionar otros beneficios. En los sistemas informáticos actuales, acceder a la memoria principal es muy costoso en comparación con el cálculo real. Debido a esto, el uso de la compresión de datos en la memoria ayuda a mejorar el rendimiento, ya que reduce la frecuencia y la cantidad de datos que los programas necesitan recuperar de la memoria principal.
La memoria en las computadoras modernas administra y transfiere datos en trozos de tamaño fijo, en los que deben operar las técnicas de compresión tradicionales.
Sin embargo, el software, naturalmente, no almacena sus datos en trozos de tamaño fijo. En su lugar, utiliza «objetos», estructuras de datos que contienen diversos tipos de datos y tienen tamaños variables. Por lo tanto, las técnicas tradicionales de compresión de hardware manejan los objetos pobremente.
En un documento presentado en la Conferencia Internacional ACM sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos (ASPLOS 2020), los investigadores del MIT describen el primer enfoque para comprimir objetos a través de la jerarquía de memoria. Esto reduce el uso de memoria al tiempo que mejora el rendimiento y la eficiencia.
Los programadores podrían beneficiarse de esta técnica al programar en cualquier lenguaje de programación moderno, como Java, Python y Go, que almacena y administra datos en objetos sin cambiar su código. Al final, los consumidores verían computadoras que pueden correr mucho más rápido o pueden ejecutar muchas más aplicaciones a la misma velocidad. Debido a que cada aplicación consume menos memoria, se ejecuta más rápido, por lo que un dispositivo puede admitir más aplicaciones dentro de su memoria asignada.
En experimentos con una máquina virtual Java modificada, la técnica comprimió el doble de datos y redujo el uso de memoria a la mitad con respecto a los métodos tradicionales basados en caché.
«La motivación fue intentar crear una nueva jerarquía de memoria que pudiera hacer compresión basada en objetos, en lugar de compresión de línea de caché, porque así es como la mayoría de los lenguajes de programación modernos administran los datos», dice el primer autor Po-An Tsai, un estudiante graduado en el Laboratorio de Informática e Inteligencia Artificial (CSAIL).
«Todos los sistemas informáticos se beneficiarían de esto«, agrega el coautor Daniel Sanchez, profesor de ciencias informáticas e ingeniería eléctrica, e investigador del CSAIL. «Los programas se vuelven más rápidos porque dejan de verse afectados por el ancho de banda de la memoria«.
Los investigadores desarrollaron su trabajo anterior que reestructura la arquitectura de la memoria para manipular directamente los objetos. Las arquitecturas tradicionales almacenan los datos en bloques en una jerarquía de memorias progresivamente más grandes y más lentas, llamadas «cachés». Los bloques a los que se ha accedido recientemente suben a los cachés más pequeños y más rápidos, mientras que los bloques más antiguos se trasladan a cachés más lentos y más grandes, que finalmente terminan en la memoria principal. Si bien esta organización es flexible, es costosa: para acceder a la memoria, cada caché debe buscar la dirección entre sus contenidos. «Debido a que la unidad natural de administración de datos en los lenguajes de programación modernos son los objetos, ¿por qué no crear una jerarquía de memoria que se ocupe de los objetos?» Dice Sanchez
En un artículo publicado en octubre pasado, los investigadores detallaron un sistema llamado Hotpads, que almacena objetos enteros, agrupados en niveles jerárquicos, o » almohadillas».
Estos niveles residen enteramente en memorias eficientes, en chip, dirigidas directamente, sin que se requieran búsquedas sofisticadas. Luego, los programas hacen referencia directa a la ubicación de todos los objetos en la jerarquía de los parches. Los objetos recientemente asignados y recientemente referenciados, y los objetos a los que apuntan, permanecen en el nivel más rápido. Cuando el nivel más rápido se llena, ejecuta un proceso de «desalojo» que mantiene los objetos a los que se hizo referencia recientemente, pero derriba los objetos más antiguos a niveles más lentos y recicla los objetos que ya no son útiles, para liberar espacio. Los punteros se actualizan en cada objeto para señalar las nuevas ubicaciones de todos los objetos movidos. De esta manera, los programas pueden acceder a los objetos de forma mucho más económica que la búsqueda a través de los niveles de caché.
Nueva técnica de compresión de datos y algoritmo
Para su nuevo trabajo, los investigadores diseñaron una técnica, llamada «Zippads», que aprovecha la arquitectura Hotpads para comprimir objetos. Cuando los objetos comienzan por primera vez en el nivel más rápido, se descomprimen. Pero cuando son desalojados a niveles más lentos, todos se comprimen. Los punteros en todos los objetos a lo largo de los niveles apuntan a esos objetos comprimidos, lo que hace que sean fáciles de recuperar a los niveles más rápidos y se puedan almacenar de forma más compacta que las técnicas anteriores.
Un algoritmo de compresión aprovecha la redundancia entre los objetos de manera eficiente.
Esta técnica descubre más oportunidades de compresión que las técnicas anteriores, que se limitaron a encontrar redundancia dentro de cada bloque de tamaño fijo. El algoritmo primero selecciona algunos objetos representativos como objetos «base». Luego, en los nuevos objetos, solo almacena los diferentes datos entre esos objetos y los objetos base representativos.

Imagen: Po-An Tsai y Daniel Sanchez
(MIT CSAIL)
Brandon Lucia, profesor asistente de ingeniería eléctrica e informática en la Universidad Carnegie Mellon, elogia el trabajo por aprovechar las características de los lenguajes de programación orientados a objetos para comprimir mejor la memoria. «Las abstracciones como la programación orientada a objetos se agregan a un sistema para simplificar la programación, pero a menudo introducen un costo en el rendimiento o la eficiencia del sistema», dice. «Lo interesante de este trabajo es que utiliza la abstracción de objetos existente como una forma de hacer que la compresión de memoria sea más efectiva, a su vez, hace que el sistema sea más rápido y más eficiente con características novedosas de arquitectura de computadora».
Más información en el trabajo original:
Compress Objects, Not Cache Lines: An Object-Based Compressed Memory Hierarchy
Autores: Po-An Tsai MIT CSAIL, Daniel Sanchez MIT CSAIL
Fuente: MIT