Superscalare
Il design di una CPU superscalare crea una forma di calcolo parallelo chiamata parallelismo a livello di istruzione all'interno di una singola CPU, che permette di lavorare di più alla stessa velocità di clock. Ciò significa che la CPU esegue più di un'istruzione durante un ciclo di clock eseguendo più istruzioni contemporaneamente (chiamato dispacciamento delle istruzioni) su unità funzionali duplicate. Ogni unità funzionale è solo una risorsa di esecuzione all'interno del core della CPU, come un'unità logica aritmetica (ALU), un'unità in virgola mobile (FPU), un bit shifter, o un moltiplicatore.
La maggior parte delle CPU superscalari sono anche pipeline, ma è possibile avere una CPU superscalare non pipeline o una CPU non superscalare pipeline.
La tecnica superscalare è supportata da diverse caratteristiche del core della CPU:
- Le istruzioni provengono da una lista di istruzioni ordinate.
- L'hardware della CPU può capire quali istruzioni hanno quali dipendenze di dati.
- Può leggere più istruzioni per ogni ciclo dell'orologio
Ogni istruzione eseguita da un processore scalare cambia uno o due dati alla volta, ma ogni istruzione eseguita da un processore vettoriale gestisce molti dati contemporaneamente. Un processore superscalare è una miscela dei due:
- Ogni istruzione elabora un dato.
- All'interno di ogni core della CPU sono presenti più unità funzionali duplicate, in modo che più istruzioni gestiscono contemporaneamente elementi di dati indipendenti.
In una CPU superscalare un dispatcher di istruzioni legge le istruzioni dalla memoria e decide quali possono essere eseguite in parallelo, inviandole sulle molteplici unità funzionali duplicate disponibili all'interno della CPU.
Il design della CPU Superscalar si preoccupa di migliorare l'accuratezza del dispatcher di istruzioni e di permettere di tenere sempre occupate le unità funzionali multiple. A partire dal 2008, tutte le CPU generiche sono superscalari, una tipica CPU superscalare può includere fino a 4 ALU, 2 FPU e due unità SIMD. Se il dispatcher non riesce a tenere occupate tutte le unità, le prestazioni della CPU saranno inferiori.
Semplice gasdotto superscalare. Prendendo e inviando due istruzioni alla volta, si possono completare al massimo due istruzioni per ciclo.
Scheda processore di un computer parallelo CRAY T3e con quattro processori Alpha superscalari
Limitazioni
Il miglioramento delle prestazioni nella progettazione della CPU Superscalar è limitato da due cose:
- Il livello di parallelismo incorporato nell'elenco delle istruzioni
- La complessità e il costo in termini di tempo del dispatcher e il controllo della dipendenza dai dati.
Anche dato il controllo di dipendenza infinitamente veloce all'interno di una normale CPU superscalare, se la lista delle istruzioni stessa ha molte dipendenze, questo limiterebbe anche il possibile miglioramento delle prestazioni, quindi la quantità di parallelismo incorporato nel codice è un'altra limitazione.
Non importa quanto veloce sia la velocità del dispatcher, c'è un limite pratico al numero di istruzioni che possono essere inviate contemporaneamente. Mentre i progressi dell'hardware consentiranno di avere più unità funzionali (ad esempio, ALU) per ogni core della CPU, il problema di controllare le dipendenze delle istruzioni aumenta fino al limite che il limite di dispacciamento superscalare ottenibile è piuttosto piccolo. -- Probabilmente nell'ordine di cinque o sei istruzioni inviate simultaneamente.
Alternative
- Multithreading simultaneo: spesso abbreviato come SMT, è una tecnica per migliorare la velocità complessiva delle CPU superscalari. SMT permette di eseguire più threads indipendenti e multipli per utilizzare al meglio le risorse disponibili all'interno di un moderno processore superscalare.
- Processori multi-core: i processori superscalari si differenziano dai processori multi-core per il fatto che le unità funzionali multiple ridondanti non sono processori interi. Un singolo processore superscalare è composto da unità funzionali avanzate come l'ALU, il moltiplicatore intero, lo shifter intero, l'unità a virgola mobile (FPU), ecc. Ci possono essere più versioni di ogni unità funzionale per consentire l'esecuzione di molte istruzioni in parallelo. Questo si differenzia da un processore Multi-core che elabora contemporaneamente le istruzioni da più thread, un thread per core.
- Processori pipeline: anche i processori superscalari si distinguono da una CPU pipeline, dove le istruzioni multiple possono essere contemporaneamente in varie fasi di esecuzione.
Le varie tecniche alternative non si escludono a vicenda - possono essere (e spesso lo sono) combinate in un unico processore, per cui è possibile progettare una CPU multicore è dove ogni core è un processore indipendente con più pipeline parallele superscalari. Alcuni processori multicore includono anche capacità vettoriali.
Pagine correlate
- Calcolo parallelo
- Parallelismo a livello di istruzione
- Multifilettatura simultanea (SMT)
- Processori multi-core
Domande e risposte
D: Cos'è la tecnologia superscalare?
R: La tecnologia superscalare è una forma di calcolo parallelo di base che consente di elaborare più di un'istruzione in ogni ciclo di clock, utilizzando più unità di esecuzione contemporaneamente.
D: Come funziona la tecnologia superscalare?
R: La tecnologia superscalare prevede che le istruzioni arrivino al processore in ordine, cercando le dipendenze dei dati durante l'esecuzione e caricando più di un'istruzione in ogni ciclo di clock.
D: Qual è la differenza tra processori scalari e vettoriali?
R: In un processore scalare, le istruzioni di solito lavorano con uno o due elementi di dati alla volta, mentre in un processore vettoriale le istruzioni di solito lavorano con molti elementi di dati alla volta. Un processore superscalare è un mix di entrambi, in quanto ogni istruzione elabora un elemento di dati, ma più istruzioni vengono eseguite contemporaneamente, per cui il processore gestisce molti elementi di dati contemporaneamente.
D: Che ruolo svolge un distributore di istruzioni accurato in un processore superscalare?
R: Un distributore di istruzioni accurato è molto importante per un processore superscalare, in quanto garantisce che le unità di esecuzione siano sempre occupate con il lavoro che probabilmente sarà necessario. Se il dispatcher di istruzioni non è accurato, è possibile che una parte del lavoro debba essere buttata via, il che lo renderebbe non più veloce di un processore scalare.
D: In quale anno tutte le CPU normali sono diventate superscalari?
R: Tutte le CPU normali sono diventate superscalari nel 2008.
D: Quante ALU, FPU e unità SIMD possono esserci in una CPU normale?
R: In una CPU normale ci possono essere fino a 4 ALU, 2 FPU e 2 unità SIMD.