Vai al contenuto

Architetture dei processori/Single Instruction Multiple Data

Wikibooks, manuali e libri di testo liberi.
Motorola PowerPC G4, primo processore PowerPC dotato di unità SIMD
Pipeline di un processore SIMD, dopo aver decodificato l'istruzione e caricato i dati applica le operazioni a un blocco di dati sequenzialmente senza dover ogni volta decodificare le istruzioni

Quasi tutti i moderni processori per incrementare le loro prestazioni dell'elaborazione dei dati multimediali fanno uso di unità SIMD. Le unità SIMD sono unità basate su più unità specializzate per elaborare dati diversi in parallelo. Questa architettura viene utilizzata dai processori vettoriali o da processori che funzionano in parallelo.

In passato venivano prodotti un numero elevato di dispositivi dedicati allo svolgimento di compiti specifici. Usualmente questi dispositivi erano DSP opportunamente programmati. La differenza fondamentale tra le istruzioni SIMD e i DSP è che questi ultimi sono dotati di un set di istruzioni completo e quindi sono in grado di svolgere teoricamente qualsiasi compito. Invece le istruzioni SIMD sono progettate per manipolare elevate quantità di dati in parallelo e per le usuali operazioni si appoggiano alle altre istruzioni del microprocessore. Inoltre i DSP tendono a includere un certo numero di istruzioni dedicate ad elaborare tipi specifici di dati come possono essere i dati audio o video mentre le istruzioni SIMD vengono utilizzate per elaborare dati generici.

Nell'elaborazione dei dati multimediali spesso si incontrano algoritmi che possono avvantaggiarsi di un'architettura SIMD. Per esempio per cambiare la luminosità di un'immagine un microprocessore dovrebbe caricare ogni pixel che compone l'immagine dei suoi registri, effettuare la modifica della luminosità e poi salvare i risultati in memoria. Un processore SIMD eseguirebbe prima un'istruzione che caricherebbe con un'unica operazione un certo numero di pixel (il numero preciso dipende dall'architettura) poi il processore modificherebbe tutti i dati in parallelo e in seguito li salverebbe tutti contemporaneamente in memoria. Eseguire le operazioni a blocchi invece che agire sui singoli pixel rende le operazioni molto più efficienti dato che i moderni computer sono progettati per trasferire i dati a blocchi e sono inefficienti nei singoli accessi alla memoria.

Un altro vantaggio deriva dal fatto che tipicamente le istruzioni SIMD sono in grado di manipolare tutti i dati caricati contemporaneamente: Quindi se un processore SIMD è in grado di caricare 8 dati, questo sarà anche in grado di processarli tutti contemporaneamente. Anche i microprocessori superscalari sono in grado di elaborare più dati contemporaneamente ma con un'efficienza inferiore.

Problematiche

[modifica | modifica sorgente]

Le architetture basate su SIMD richiedono un numero elevato di registri e quindi a volte i progettisti per ridurre i costi decidono di utilizzare i registri della FPU. Questa scelta rende impossibile utilizzare istruzioni SIMD e FPU contemporaneamente a meno di lenti cambi di contesto. Questo era l'approccio scelto da intel per le istruzioni MMX che infatti sono notoriamente lente se eseguite insieme ad operazioni in virgola mobile.