Una nuova tecnica di compressione dei dati per programmi per computer più veloci

Una nuova tecnica sviluppata dai ricercatori del MIT ripensa la compressione dei dati hardware per liberare più memoria utilizzata da computer e dispositivi mobili, consentendo loro di funzionare più velocemente ed eseguire più attività contemporaneamente.
La compressione dei dati sfrutta i dati ridondanti per liberare capacità di archiviazione, aumentare la velocità di elaborazione e fornire altri vantaggi. Negli attuali sistemi informatici, l’accesso alla memoria principale è molto costoso rispetto al calcolo effettivo. Per questo motivo, l’utilizzo della compressione dei dati nella memoria aiuta a migliorare le prestazioni, poiché riduce la frequenza e la quantità di dati che i programmi devono recuperare dalla memoria principale.
La memoria nei computer moderni gestisce e trasferisce i dati in blocchi di dimensioni fisse, su cui devono operare le tecniche di compressione tradizionali. Il software, tuttavia, non archivia naturalmente i suoi dati in blocchi di dimensioni fisse. Utilizza invece “oggetti”, strutture di dati che contengono vari tipi di dati e hanno dimensioni variabili. Pertanto, le tecniche di compressione hardware tradizionali gestiscono male gli oggetti.
In un articolo presentato questa settimana all’ACM International Conference on Architectural Support for Programming Languages and Operating Systems, i ricercatori del MIT descrivono il primo approccio per comprimere gli oggetti attraverso la gerarchia della memoria. Ciò riduce l’utilizzo della memoria migliorando le prestazioni e l’efficienza.
I programmatori potrebbero trarre vantaggio da questa tecnica quando programmano in qualsiasi linguaggio di programmazione moderno, come Java, Python e Go, che memorizza e gestisce i dati negli oggetti, senza modificare il loro codice. Da parte loro, i consumatori vedrebbero computer che possono funzionare molto più velocemente o possono eseguire molte più app alla stessa velocità. Poiché ogni applicazione consuma meno memoria, viene eseguita più velocemente, quindi un dispositivo può supportare più applicazioni all’interno della memoria assegnata.
Negli esperimenti che utilizzano una macchina virtuale Java modificata, la tecnica ha compresso il doppio dei dati e ridotto della metà l’utilizzo della memoria rispetto ai metodi tradizionali basati sulla cache.
“La motivazione era cercare di creare una nuova gerarchia di memoria che potesse eseguire la compressione basata su oggetti, invece della compressione della linea di cache, perché è così che la maggior parte dei linguaggi di programmazione moderni gestisce i dati”, afferma il primo autore Po-An Tsai, uno studente laureato. nel Laboratorio di Informatica e Intelligenza Artificiale (CSAIL).
“Tutti i sistemi informatici ne trarrebbero beneficio”, aggiunge il coautore Daniel Sanchez, professore di informatica e ingegneria elettrica e ricercatore presso il CSAIL. “I programmi diventano più veloci perché smettono di essere ostacolati dalla larghezza di banda della memoria”.
I ricercatori si sono basati sul loro lavoro precedente che ristruttura l’architettura della memoria per manipolare direttamente gli oggetti. Le architetture tradizionali memorizzano i dati in blocchi in una gerarchia di memorie progressivamente più grandi e più lente, chiamate “cache”. I blocchi a cui si accede di recente salgono alle cache più piccole e più veloci, mentre i blocchi più vecchi vengono spostati in cache più lente e più grandi, finendo infine di nuovo nella memoria principale. Sebbene questa organizzazione sia flessibile, è costosa: per accedere alla memoria, ogni cache deve cercare l’indirizzo tra i suoi contenuti.
“Poiché l’unità naturale della gestione dei dati nei moderni linguaggi di programmazione sono gli oggetti, perché non creare semplicemente una gerarchia di memoria che si occupi degli oggetti?” dice Sanchez.
In un articolo pubblicato lo scorso ottobre, i ricercatori hanno descritto in dettaglio un sistema chiamato Hotpads, che memorizza interi oggetti, strettamente impacchettati in livelli gerarchici, o “pad”. Questi livelli risiedono interamente su memorie efficienti, su chip, indirizzate direttamente, senza che siano necessarie ricerche sofisticate.
I programmi quindi fanno riferimento direttamente alla posizione di tutti gli oggetti nella gerarchia dei pad. Gli oggetti appena allocati e referenziati di recente e gli oggetti a cui puntano rimangono nel livello più veloce. Quando il livello più veloce si riempie, esegue un processo di “sfratto” che mantiene gli oggetti referenziati di recente ma sposta gli oggetti più vecchi a livelli più lenti e ricicla gli oggetti che non sono più utili, per liberare spazio. I puntatori vengono quindi aggiornati in ciascun oggetto per puntare alle nuove posizioni di tutti gli oggetti spostati. In questo modo, i programmi possono accedere agli oggetti in modo molto più economico rispetto alla ricerca attraverso i livelli di cache.
Per il loro nuovo lavoro, i ricercatori hanno progettato una tecnica, chiamata “Zippads”, che sfrutta l’architettura Hotpads per comprimere gli oggetti. Quando gli oggetti iniziano a un livello più veloce, non sono compressi. Ma quando vengono sfrattati a livelli più lenti, vengono tutti compressi. I puntatori in tutti gli oggetti tra i livelli puntano quindi a quegli oggetti compressi, il che li rende facili da richiamare ai livelli più veloci e in grado di essere archiviati in modo più compatto rispetto alle tecniche precedenti.
Un algoritmo di compressione sfrutta quindi la ridondanza tra gli oggetti in modo efficiente. Questa tecnica scopre più opportunità di compressione rispetto alle tecniche precedenti, che si limitavano a trovare la ridondanza all’interno di ciascun blocco di dimensioni fisse. L’algoritmo prima seleziona alcuni oggetti rappresentativi come oggetti “base”. Quindi, nei nuovi oggetti, memorizza solo i diversi dati tra quegli oggetti e gli oggetti di base rappresentativi.
Brandon Lucia, un assistente professore di ingegneria elettrica e informatica presso la Carnegie Mellon University, elogia il lavoro per sfruttare le funzionalità dei linguaggi di programmazione orientati agli oggetti per comprimere meglio la memoria. “Astrazioni come la programmazione orientata agli oggetti vengono aggiunte a un sistema per semplificare la programmazione, ma spesso introducono un costo nelle prestazioni o nell’efficienza del sistema”, afferma. “La cosa interessante di questo lavoro è che utilizza l’astrazione dell’oggetto esistente come un modo per rendere più efficace la compressione della memoria, rendendo a sua volta il sistema più veloce ed efficiente con nuove funzionalità dell’architettura del computer”.