Numerosi software con dispendio di grosse risorse, come ad esempio i programmi scientifici, analizzano e risolvono problemi complessi.
Solitamente, i software complessi hanno una struttura regolare che permette di velocizzare il processo di elaborazione per mezzo della tecnica del parallelismo. Questa tecnica si avvale di una delle due architetture: l’array processor o il processore vettoriale.
Un array processor è costituito da più processori identici, gestiti da una unità di controllo. Un collegamento di tipo matriciale unisce fra loro i processori; lo stesso tipo di collegamento unisce i processori alla memoria centrale. Le istruzioni sono lette ed eseguite dall’unità di controllo qualora risultino di tipo scalare; quelle di tipo vettoriale vengono inviate dalla stessa ad ogni processore. Quest’ultimi eseguono la stessa sequenza di istruzioni su un insieme di dati diverso, operando in parallelo. Quando tutti i processori, che compongono l’array processor, hanno terminato le loro mansioni, l’unità di controllo passa ad esaminare l’istruzione successiva. Le prestazioni di un array processor danno i loro vantaggi quando vengono eseguiti programmi che operano frequentemente su matrici e vettori. Il primo processore realizzato con questa architettura fu chiamato ILLIAC IV: un successo per l’Università dell’Illinois dove venne realizzato.
Diversa si presenta l’architettura vettoriale dove tutte le operazioni sono eseguite con un unico processore, dotato di numerose pipeline. Un noto processore vettoriale fu il Cray-1 prodotto nel 1974 dalla Cray Research, nota azienda fondata da Seymour Cray. Un processore vettoriale, similmente ad un array processor, lavora su un array di dati, ma a differenza di quest’ultimo che fa uso di processori multipli, utilizza una singola CPU di tipo scalare che implementa registri vettoriali. Ogni registro vettoriale è formato da una serie di registri tradizionali che variano da 8 a 32 bit e consentono di contenere più valori (dati) contemporaneamente. I registri vettoriali favoriscono le applicazioni multimediali. Un’architettura vettoriale realizza un processore in grado di eseguire contemporaneamente operazioni matematiche su più dati elementari. Anche la memoria centrale di questi sistemi è strutturata in modo vettoriale: è possibile leggere o scrivere contemporaneamente più valori. Il processore vettoriale presenta unità funzionali vettoriali che implementano la tecnica della pipeline e sono in grado anche di lavorare su numeri interi e in virgola mobile. I sistemi che adottano processori vettoriali, detti anche sistemi a parallelismo temporale, gestiscono in modo ottimale applicazioni per il calcolo scientifico e quelle utilizzate nel campo dell’ingegneria. Viceversa, queste architetture sono poco adatte per l’elaborazione di software che hanno una struttura irregolare con dati non costanti.
Il processore vettoriale è la base dei supercomputer. Un supercomputer è un sistema di elaborazione dotato di potenze di calcolo molto elevate, dedicate ad eseguire operazioni particolarmente dispendiose, come quelle di meteorologia. Alla fine degli anni ’90, i microprocessori hanno registrato una notevole evoluzione e molti di essi sono stati dotati di unità vettoriali per eseguire applicazioni generiche. Il processore Cell (IBM – Toshiba e Sony) costituisce un ottimo esempio. Infatti, è dotato di molte unità vettoriali ed è integrato in molti sistemi che spaziano da quelli del supercalcolo alle console per i videogiochi. Il processore Cell è in grado di elaborare flussi audio e video in tempo reale.
Attualmente, tutti i processori moderni supportano le istruzioni vettoriali, meglio note come istruzioni SIMD (Single Instruction Multiple Data), perché i software multimediali inglobano tali istruzioni. Si pensi, ad esempio, a complessi videogiochi che lavorano con immagini tridimensionali.
Sommario, Bibliografia e Sitografia
Vincenzo Barile
segue…