Single instruction multiple data

Da Wikipedia, l'enciclopedia libera.
Architetture correlate
  Istruzione
Singola
Istruzioni
Multiple
Dato
Singolo
SISD MISD
Dati
Multipli
SIMD MIMD

Single Instruction, Multiple Data (SIMD) è un'architettura in cui più unità elaborano dati diversi in parallelo. Questa viene utilizzata da processori vettoriali o da processori che funzionano in parallelo. La SIMD è spesso usata dai supercomputer e con alcune varianti anche nei moderni microprocessori.

Il modello SIMD è composto da un'unica unità di controllo che esegue una istruzione alla volta controllando più ALU che operano in maniera sincrona. Ad ogni passo, tutti gli elementi eseguono la stessa istruzione scalare, ma ciascuno su un dato differente. Un elaboratore basato su questo modello è anche detto Array Processor.

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 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 ad un altro insieme di istruzioni usualmente gestito dal 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.

Vantaggi[modifica | modifica sorgente]

Nell'elaborazioni di 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 nei 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 sempre 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.

Svantaggi[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 associate a operazioni in virgola mobile.

Storia[modifica | modifica sorgente]

Il primo utilizzo di istruzioni SIMD si ebbe nei computer vettoriali, specialmente in quelli prodotti dalla Cray negli anni 70.

Le macchine successive preferirono utilizzare un numero relativamente elevato di semplici processori. Esempi di questo tipo di macchine sono:

E molte altre macchine meno conosciute

Recenti computer SIMD[modifica | modifica sorgente]

Negli ultimi anni sono strati prodotti molti microprocessori dotati di istruzioni SIMD di media dimensione (64 o 128 bit). Nel 1994 i processori PA-RISC vennero dotati delle istruzioni MAX. Attualmente istruzioni SIMD sono incluse in quasi tutti i microprocessori, tra i quali ricordiamo PowerPC, con le istruzioni AltiVec, le Intel MMX, SSE, SSE2, SSE3 e SSE4, l'AMD 3DNow!, le istruzioni SPARC VIS, le PA-RISC MAX e le MIPS MDMX e MIPS-3D.

Queste istruzioni generalmente includono tutte le principali operazioni di elaborazione sui vettori e le matrici. Spesso queste istruzioni includono elaborazioni tridimensionali. Le moderne schede grafiche sono dotate di processori SIMD dedicati che sgravano la CPU di elaborazioni onerose legate alla visualizzazione tridimensionale. Alcuni processori includono istruzioni dedicate all'elaborazione dei segnali, queste operazioni vengono utilizzate per codificare/decodificare i flussi video per velocizzare gli algoritmi di compressione.

Software[modifica | modifica sorgente]

Nei personal computer lo sviluppo di software SIMD inizialmente ha proceduto con lentezza. Questo è stato dovuto a due problemi concomitanti. Il primo problema era dovuto al fatto che Intel e AMD per risparmiare avevano deciso di utilizzare come registri per le istruzioni SIMD i registri della FPU e questa scelta progettuale deprimeva le prestazioni del software SIMD. Il secondo problema era le gestione deficitaria dei compilatori. Inizialmente i compilatori non erano in grado di gestire efficacemente le istruzioni SIMD e quindi spesso i programmatori che intendevano utilizzare queste istruzioni erano costretti a scrivere estese porzioni di codice in Assembly.

Nonostrante la partenza lenta del software SIMD su macchine x86 in seguito i compilatori migliorarono e Intel rilasciò le istruzioni SSE che risolvevano i maggiori problemi delle precedenti istruzioni SIMD. Infatti attualmente il software SIMD si sta diffondendo rapidamente.

Nei sistemi prodotti da Apple Computer il software SIMD invece si è diffuso quasi subito. I processori utilizzati da Apple utilizzavano le istruzioni SIMD AltiVec, notevolmente più performanti delle istruzioni MMX di Intel. Inoltre i programmatori di sistemi Apple ebbero a disposizione quasi subito buoni compilatori per istruzioni SIMD prodotti da Motorola, IBM e dal progetto GNU. Inoltre Apple puntò molto sulle istruzioni SIMD infatti molti suoi programmi come QuickTime e iTunes utilizzano istruzioni SIMD.

Applicazioni commerciali[modifica | modifica sorgente]

Spesso i processori SIMD vengono utilizzati per le applicazioni audio/video e per gestire la grafica tridimensionale. Infatti all'interno della console PlayStation 2 della Sony è montato un processore SIMD che utilizzano vettori a quattro dimensioni e provvede a gestire la grafica dei videogiochi.

Un processore vettoriale annunciato di recente è il Cell. Questo processore viene sviluppato da IBM in congiunzione con Toshiba e Sony. Il processore è dotato di un certo numero di unità SIMD dotate di RAM indipendente e di un processore classico utilizzato per eseguire le istruzioni non SIMD. Questo processore è sviluppato per essere utilizzato dalle applicazioni che fanno un utilizzo intenso della grafica tridimensionale, infatti è stato utilizzato dalla PlayStation 3.

Collegamenti esterni[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica