Una novedosa técnica desarrollada por investigadores del MIT replantea la compresión de datos en hardware para liberar más memoria utilizada por ordenadores y dispositivos móviles, lo que les permite funcionar más rápido y realizar más tareas simultáneamente.
La compresión de datos aprovecha los datos redundantes para liberar capacidad de almacenamiento, aumentar la velocidad de cálculo y ofrecer otras ventajas. En los sistemas informáticos actuales, acceder a la memoria principal es muy costoso en comparación con el cálculo en sí. Por ello, utilizar 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 de los ordenadores modernos gestiona y transfiere datos en fragmentos de tamaño fijo, sobre los cuales deben operar las técnicas de compresión tradicionales. Sin embargo, el software no almacena de forma natural sus datos en fragmentos de tamaño fijo. En cambio, utiliza «objetos», estructuras de datos que contienen distintos tipos de datos y tienen tamaños variables. Por ello, las técnicas tradicionales de compresión en hardware gestionan mal los objetos.
En un artículo que se presenta esta semana en la Conferencia Internacional de la ACM sobre Soporte Arquitectónico para Lenguajes de Programación y Sistemas Operativos, los investigadores del MIT describen el primer enfoque para comprimir objetos en toda la jerarquía de memoria. Esto reduce el uso de memoria, a la vez que mejora el rendimiento y la eficiencia.
Los programadores podrían beneficiarse de esta técnica al programar en cualquier lenguaje moderno —como Java, Python o Go— que almacene y gestione datos en objetos, sin cambiar su código. Por su parte, los usuarios verían ordenadores que pueden funcionar mucho más rápido o ejecutar muchas más aplicaciones a las mismas velocidades. Como 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 realizados con una máquina virtual de Java modificada, la técnica comprimió el doble de datos y redujo a la mitad el uso de memoria frente a los métodos tradicionales basados en caché.
«La motivación era intentar crear una nueva jerarquía de memoria que pudiera realizar una compresión basada en objetos, en lugar de una compresión por líneas de caché, porque así es como la mayoría de los lenguajes de programación modernos gestionan los datos», afirma el primer autor, Po-An Tsai, estudiante de posgrado en el Laboratorio de Ciencias de la Computación e Inteligencia Artificial (CSAIL).
«Todos los sistemas informáticos se beneficiarían de esto», añade el coautor Daniel Sanchez, profesor de ciencias de la computación e ingeniería eléctrica e investigador del CSAIL. «Los programas se vuelven más rápidos porque dejan de estar limitados por el ancho de banda de la memoria».
Los investigadores se basaron en su trabajo previo, que reestructura la arquitectura de memoria para manipular directamente los objetos. Las arquitecturas tradicionales almacenan los datos en bloques dentro de una jerarquía de memorias progresivamente más grandes y lentas, denominadas «cachés». Los bloques accedidos recientemente pasan a las cachés más pequeñas y rápidas, mientras que los bloques más antiguos se trasladan a cachés más lentas y grandes, terminando finalmente de nuevo en la memoria principal. Aunque esta organización es flexible, resulta costosa: para acceder a la memoria, cada caché debe buscar la dirección entre su contenido.
«Como la unidad natural de gestión de datos en los lenguajes de programación modernos son los objetos, ¿por qué no crear simplemente una jerarquía de memoria que trabaje con objetos?», afirma Sanchez.
En un artículo publicado el pasado octubre, los investigadores detallaron un sistema llamado Hotpads, que almacena objetos completos, muy compactados, en niveles jerárquicos o «pads». Estos niveles residen íntegramente en memorias eficientes, integradas en el chip y de direccionamiento directo, sin necesidad de búsquedas sofisticadas.
Los programas hacen referencia directamente a la ubicación de todos los objetos en la jerarquía de pads. Los objetos recién asignados y los referenciados recientemente, así como 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 conserva los objetos referenciados recientemente, pero desplaza hacia niveles más lentos los objetos más antiguos y recicla los objetos que ya no son útiles, para liberar espacio. Después, los punteros de cada objeto se actualizan para apuntar a las nuevas ubicaciones de todos los objetos desplazados. De este modo, los programas pueden acceder a los objetos de forma mucho más económica que buscando a través de los niveles de caché.
Para su nuevo trabajo, los investigadores diseñaron una técnica, denominada «Zippads», que aprovecha la arquitectura de Hotpads para comprimir objetos. Cuando los objetos se crean por primera vez en el nivel más rápido, no están comprimidos. Pero cuando se desalojan a niveles más lentos, se comprimen todos. Los punteros de todos los objetos en todos los niveles apuntan entonces a esos objetos comprimidos, lo que facilita recuperarlos en los niveles más rápidos y permite almacenarlos de forma más compacta que con las técnicas anteriores.
Un algoritmo de compresión aprovecha después la redundancia entre objetos de forma eficiente. Esta técnica descubre más oportunidades de compresión que las técnicas anteriores, que se limitaban a encontrar redundancia dentro de cada bloque de tamaño fijo. El algoritmo primero selecciona unos pocos objetos representativos como objetos «base». Luego, en los objetos nuevos, solo almacena los datos diferentes entre esos objetos y los objetos base representativos.
Brandon Lucia, profesor adjunto 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 añaden a un sistema para simplificar la programación, pero a menudo introducen un coste en el rendimiento o la eficiencia del sistema», afirma. «Lo interesante de este trabajo es que utiliza la abstracción de objetos existente como una forma de hacer la compresión de memoria más eficaz, lo que a su vez hace que el sistema sea más rápido y eficiente con características novedosas de arquitectura de computadoras».


