Approfondiamo la nostra analisi su due diverse tipologie di istruzioni SIMD, entrambe realizzate dalla Intel: istruzioni MMX e istruzioni SSE.
MMX -> Questo set di istruzioni fu implementato per la prima volta nel processore Pentium MMX (1996).
Con un esempio esaminiamo il funzionamento e l’utilizzo di questo tipo di istruzioni. Supponiamo di dover lavorare su una immagine di dimensioni 1.024×768 pixel, con una profondità di colore di 24 bit per pixel (16 milioni di colori). Il nostro obiettivo è quello di aumentarne la luminosità. I 24 bit, per ogni pixel, rappresentano i tre colori principali (rosso, verde e blu). Con opportune combinazioni si realizzano tutti gli altri colori. Dei 24 bit: 8 rappresentano il colore rosso, 8 il verde e 8 il blu. Se volessimo aumentare la luminosità di un solo grado, non utilizzando le istruzioni SIMD, dobbiamo sommare una unità ai tre byte che rappresentano il colore per ogni pixel dell’immagine. Una immagine di dimensioni 1.024×768 contiene 786.432 pixel. Per ogni pixel dovranno essere eseguite tre operazioni per un totale di 2.359.296 operazioni. Le istruzioni MMX accelerano il processo di elaborazione. È possibile caricare nei registri, da 64 bit, 8 byte dell’immagine per volta con una sola istruzione (ricordiamo che 1 byte è pari ad 8 bit). Il processo con MMX si conclude dopo 294.912 operazioni rispetto alle 2.359.296 senza istruzioni SIMD. Una differenza pari a 2.064.384 operazioni.
Le istruzioni MMX utilizzano i registri a 64 bit dell’unita di calcolo in virgola mobile (FPU) che, come in parte già visto, comporta una serie di problematiche. Un altro difetto di queste istruzioni SIMD è quello di poter operare solo sui numeri interi a 32 bit: una mancanza grave, dato che i software SIMD attuali utilizzano, in modo abbondante, calcoli in virgola mobile.
SSE -> L’istruzioni SSE hanno risolto gran parte delle problematiche delle istruzioni MMX. Si tratta di un set di istruzioni, utilizzato nel Pentium III (1999), che utilizza registri a 128 bit (XXM). Ogni registro permette di gestire quattro numeri in virgola mobile a 32 bit con precisione singola.
L’implementazione SSE fu maggiormente utilizzata rispetto a quella MMX perché capace di supportare la virgola mobile e viene realizzata con l’utilizzo degli stessi circuiti della FPU. Malgrado si utilizzano registri diversi per le istruzioni SSE, il microprocessore non ha la possibilità di inviare contemporaneamente nella pipeline le istruzioni SSE e quelle in virgola mobile della FPU.
SSE2 estende la precedente versione. Vengono definitivamente abbandonate le istruzioni MMX. Il set SSE2, implementato per la prima volta nel processore Pentium 4 (2001), aggiunge il supporto per il calcolo in virgola mobile a doppia precisione (64 bit) e quello per le operazioni su numeri interi sui registri XXM a 128 bit.
Particolari istruzioni SSE2 sono in grado di effettuare controlli sulla cache: consentono di eliminare su di essa dati inutili o temporaneamente non utilizzabili.
L’AMD ha esteso, in modo indipendente, il set di istruzioni SSE2 nei processori che lavorano a 64 bit: ha aumentato il numero di registri XXM da 8 a 16 unità. Soluzione adottata successivamente anche dalla Intel.
Ulteriore rettifica dello Streaming SIMD Extensions è rappresentata dalla inedita versione SSE3, implementata negli ultimi modelli del Pentium 4 (2004).
Il set SSE3 migliora l’efficienza di elaborazione dei dati multimediali con nuove tredici istruzioni.
Tra quest’ultime, sono state aggiunte istruzioni per sommare e sottrarre i molteplici valori allocati in un singolo registro.
A fine anno 2007, arrivano sul mercato le istruzioni SSE4 che promettono un generale aumento di prestazioni nell’elaborazione di dati multimediali. Le istruzioni SSE4, infatti, portano grandi benefici a tutte quelle applicazioni che richiedono una grande quantità di calcoli in virgola mobile, in particolare i videogiochi, migliorando grafica ed accelerazione video.
Sommario, Bibliografia e Sitografia
Vincenzo Barile
segue…