Politecnico di Milano
Come aumentare le prestazioni
Cenni alle architetture avanzate
Mariagiovanna Sami
Richiamo: CPI
CPI = (cicli di clock della CPU richiesti dall’esecuzione di
un programma)/ numero di istruzioni nel programma
dinamico
tempo di CPU = numero istruzioni * CPI * durata del
ciclo di clock = (numero istruzioni * CPI) /fck
Introducendo nella prima formula le unità di misura, si
può notare in che relazione stiano le varie componenti
istruzioni cicli clock
sec ondi
sec ondi
∗
∗
=
= tempo di CPU
programma istruzione ciclo di clock programma
20072007-08
-2-
Fattori che influenzano il tempo di
CPU
ciclo di clock (o frequenza)
tecnologia hardware e organizzazione
cicli di clock per istruzione
organizzazione e architettura set istruzioni
numero istruzioni
architettura set istruzioni e tecnologia dei compilatori
Non è possibile modificare separatamente i vari termini
poiché le tecnologie di base da cui dipendono le singole
caratteristiche sono interdipendenti
20072007-08
-3-
Prospettiva storica
Fino agli anni ’70: si è lavorato principalmente
migliorando le tecnologie elettroniche;
Dopo gli anni ‘70-80 si è “rivisitato” il progetto
dell’insieme di istruzioni (passando in molti casi alla
soluzione load/store) abbinato all’uso esteso del
pipelining;
Anni ’90: si è introdotto massicciamente il Parallelismo
a livello istruzione (architetture “superscalari” e
“VLIW”);
Dopo il 2005: architetture multi-core e many-core,
altre forme di parallelismo.
20072007-08
-4-
Il parallelismo a livello di
istruzione: concetti fondamentali
Si possono distinguere flussi di operazioni
differenti per diverse classi di istruzioni:
Un flusso per l’accesso alla memoria (Load/Store)
Uno per le operazioni aritmetiche in virgola fissa
Uno per le operazioni aritmetiche in virgola mobile…
È ragionevole pensare a una CPU in cui a ogni
flusso corrisponde una diversa pipeline, a valle
della lettura e decodifica delle istruzioni;
20072007-08
-5-
Il parallelismo a livello di
istruzione: concetti fondamentali
Si supponga di potere leggere e decodificare
più istruzioni simultaneamente: si supponga
inoltre che l’unità di controllo sia in grado di
verificare se fra tali istruzioni non esistono
dipendenze (né esistono dipendenze con le
istruzioni già avviate attraverso le pipeline:
Ö diventa possibile avviare in esecuzione
simultaneamente – in parallelo - più istruzioni;
20072007-08
-6-
Il parallelismo a livello di
istruzione: concetti fondamentali
Le architetture in cui identificazione del potenziale
parallelismo e conseguente gestione delle istruzioni
vengono compiute dall’unità di controllo durante
l’esecuzione (in modo dinamico) sono dette
superscalari.
Una CPU superscalare è dotata di parallelismo a livello
di istruzione (ILP) – più istruzioni appartenenti allo
stesso flusso di programma vengono eseguite in
parallelo.
Il parallelismo in una macchina superscalare è
trasparente al programmatore – si può eseguire codice
binario (compatibile!) compilato per un’architettura più
semplice.
20072007-08
-7-
Architetture superscalari
Esempio: architettura con 3 pipeline:
Floating-point pipeline
Integer pipeline
Load/store pipeline
capace di leggere, decodificare e avviare all’esecuizione fino a tre
istruzioni per ciclo
Register File
Fetch/decode
Hazards
Unit
Floating-point pipeline - 8 phases
Load/store pipeline - 5 phases
Integer pipeline - 3 phases
20072007-08
-8-
Architetture superscalari
Le prestazioni dipendono fortemente dalle risorse
disponibili durante l’esecuzione, dal progetto del
sistema di memoria… e dal compilatore!
più unità funzionali debbono essere in grado di operare in
parallelo; l’unità di controllo deve garantire che alla fine i
risultati siano sempre “corretti”, cioè identici a quelli che
si avrebbero sulla macchina di Von Neumann;
la banda della memoria per istruzioni e dati deve
consentire di mantenere il throughput richiesto
… e un compilatore ottimizzante deve ristrutturare il
codice per sfruttare meglio il parallelismo intrinseco del
programma (non è in contraddizione con la “compatibilità
binaria”, riguarda l’ottimalità delle prestazioni!)
20072007-08
-9-
Processori superscalari
Macchine con scheduling dinamico (superscalari)
la scelta delle istruzioni da avviare all’esecuzione è fatta dallo
hardware;
È possibile la compatibilità a livello di codice binario con CPU a singola
pipeline o anche non pipelined;
Molto diffuse
Pentium (da Pro a IV), Centrino, AMD Opteron, IBM Power…
L’esecuzione delle istruzioni ha inizio in base alla disponibilità dei
dati e non dell’ordine delle istruzioni Ö esecuzione fuori ordine
Completate le istruzioni, i risultati sono riordinati in modo da
aggiornare lo stato della CPU in base all’ordine corretto delle
istruzioni (committment).
20072007-08
- 10 -
Le dipendenze di controllo
Per ottenere buon parallelismo si devono superare le
dipendenze di controllo;
Quando si incontra un salto condizionato:
si effettua una predizione sul risultato del salto
si leggono in modo speculativo le istruzioni che si
prevede saranno eseguite dopo
queste nuove istruzioni vengono avviate in esecuzione
in modo speculativo (“etichettate” come tali)
20072007-08
- 11 -
Speculazione
Se la predizione era corretta
Si toglie l’etichetta di “speculazione” alle istruzioni lette e
si permette che aggiornino lo stato della macchina
Se la predizione era sbagliata
Si deve “tornare indietro” garantendo che lo stato non sia
modificato erroneamente
Si riprende l’esecuzione dal flusso corretto;
Se la probabilità che la predizione sia corretta è elevata,
si migliorano le prestazioni;
Nelle macchine superscalari, la predizione è dinamica,
basata sulla “storia precedente” dell’esecuzione del
programma.
20072007-08
- 12 -
Dipendenze da risolvere
Aspetto essenziale: l’unità di controllo è molto
complessa (deve gestire dipendenze, esecuzione fuori
ordine, esecuzione speculativa…)
Occupa molta area di silicio;
Determina la durata del ciclo di clock;
Porta a consumo di potenza elevato.
20072007-08
- 13 -
L’alternativa di ILP: le
architetture VLIW
Consideriamo ancora CPU con molte pipeline di esecuzione:
Alternativa alla soluzione superscalare: CPU “Very Long
Instruction Word” (VLIW): l’istruzione è molto lunga e
costituita in realtà da n istruzioni elementari (“sillabe”)
mutuamente indipendenti e composte dal compilatore
in un’unica istruzione lunga Ö scheduling statico – il
parallelismo è estratto in fase di compilazione, a priori.
Se non si trovano istruzioni indipendenti in numero
sufficiente, si completa l’istruzione lunga inserendo
delle nop.
20072007-08
- 14 -
L’alternativa di ILP: le
architetture VLIW
Lo stadio di lettura legge l’istruzione lunga, la decodifica
e invia le diverse istruzioni elementari ai diversi data
path specializzati (spesso detti lanes);
Vincoli sulle dipendenze: verificati dal compilatore.
Esempi di architettura VLIW: Intel Itanium (64 bit),
ST200, alcuni DSP di ultima generazione;
In una VLIW l’unità di controllo poco più complessa di
quella di una singola pipeline; occorre risolvere problemi
quali l’eccessiva occupazione della memoria, la gestione
efficiente dei salti, etc.
20072007-08
- 15 -
La necessità di architetture
con prestazioni più elevate
Per particolari applicazioni (alcune di grande rilevanza
pratica – es., multimedia) il parallelismo offerto da
pipelining e Instruction-Level Parallelism non è
sufficiente a garantire le prestazioni necessarie;
Per tentare un ulteriore miglioramento dell’ILP, la
complessità dell’unità di controllo di un’architettura
superscalare e il consumo di potenza crescono troppo in
rapporto al miglioramento delle prestazioni ottenibile;
Soluzione: cercare ulteriori forme di parallelismo
nell’applicazione e proporre architetture che lo
sfruttino.
20072007-08
- 16 -
Un primo esempio:
Vector processors
Sviluppati inizialmente per il supercalcolo: i principi
sono oggi adottati per elaborazione multimediale.
L’insieme delle istruzioni ne include alcune che lavorano
su vettori di dati.
SCALARE
(1 operazione)
v1 v2
r2
r1
20072007-08
VETTORIALE
(N operazioni)
+
+
r3
v3
add r3, r1, r2
vector
length
vadd.vv v3, v1, v2
- 17 -
Vector processors
Un’unica istruzione vettoriale implica molte operazioni (un intero
loop)
Si leggono meno istruzioni
Ogni risultato è indipendente da quello precedente
Si possono eseguire in parallelo più operazioni
Il progetto è più semplice Ö alta frequenza di clock
Il compilatore (o il programmatore) deve garantire che non ci
siano dipendenze
Si riducono le alee dovute a dipendenze di controllo
Le istruzioni vettoriali accedono alla memoria secondo uno schema
noto
Si può effettuare “prefetching” dei dati – un gran numero di dati
viene preventivamente letto in un insieme di “registri vettoriali”
Si possono sfruttare memorie a banda larga
Non occorre cache dati!
20072007-08
- 18 -
Uso esteso di operazioni vettoriali
Istruzioni di tipo vettoriale sono state introdotte in
alcuni DSP di fascia alta;
Opportune tecniche di programmazione/compilazione
permettono di sfruttare al meglio le opportunità offerte;
In alternativa: adozione di particolari istruzioni di tipo
parallelo per operazioni di tipo multimediale
(estensione MMX delle architetture Intel);
Parallelismo noto come SIMD (Single InstructionMultiple Data): una stessa istruzione (letta quindi una
volta sola) viene eseguita simultaneamente su più dati
indipendenti fra loro.
20072007-08
- 19 -
Più in generale: architetture parallele
Single instruction, single data stream – SISD – la solita
CPU!
Single instruction, multiple data stream - SIMD
Multiple instruction, single data stream – MISD – in
pratica, non esiste…
Multiple instruction, multiple data stream- MIMD
20072007-08
- 20 -
Single Instruction, Single Data Stream SISD
Un singolo processore
Un solo flusso di istruzioni
I dati sono registrati in una sola memoria
Un solo processore
20072007-08
- 21 -
Single Instruction, Multiple Data Stream
- SIMD
Una sola istruzione di macchina controlla l’esecuzione
simultanea da parte di molti elementi di elaborazione
che operano in modo sincronizzato (lockstep)
Ogni elemento di elaborazione ha una memoria dati
associata
Ogni istruzione viene eseguita su un differente insieme
di dati da elementi di elaborazione
20072007-08
- 22 -
Single Instruction, Multiple Data
Stream - SIMD
20072007-08
- 23 -
Multiple Instruction, Multiple Data
Stream- MIMD
Più processori eseguono simultaneamente differenti
sequenze di istruzioni su differenti insiemi di dati
Sistemi di varie classi, da “SMP” (symmetric
multiProcessor) a cluster e al grid! Comunque:
I processori sono di tipo generale
Ognuno ha un insieme di istruzioni di tipo generale (di
norma)
Un’ulteriore classificazione del sistema fa riferimento al
modo di comunicazione fra i processori.
20072007-08
- 24 -
Multiple Instruction, Multiple Data
Stream- MIMD
Fondamentalmente, due classi di architetture MIMD:
Sistemi a memoria condivisa (shared memory): le diverse
CPU condividono un unico spazio di indirizzamento della
memoria, eseguono processi diversi in modo concorrente,
si scambiano informazione attraverso I dati scritti/letti in
memoria.
Sistemi a scambio di messaggio (message-passing): le
varie unità sono dotate ognuna di un proprio spazio di
indirizzamento (e di una propria memoria locale),
comunicano attraverso una rete di interconnessione
scambiandosi messaggi (che consentono scambio di dati,
sincronizzazione fra i processi etc.)
20072007-08
- 25 -
MIMD – shared memory: schema di
principio
CPU
1
Cache 1
CPU
2
Cache 2
interconnessione
Memoria
20072007-08
- 26 -
CPU
k
Cache k
SMP: organizzazione reale
Problemi:
Il bus diventa un collo di bottiglia Ö al crescere del
numero delle CPU si passa a reti di interconnessione più
complesse;
Ogni CPU ha la/le sua/e cache per rendere il sistema più
veloce Ö occorre garantire la coerenza non solo fra cache
e RAM, ma anche fra le diverse “immagini” contenute nelle
varie cache;
Una memoria monolitica con una sola porta di accesso
diventa un collo di bottiglia Ö uso di memorie a più porte
(soluzione poco scalabile) oppure organizzazione della
memoria in “moduli” Ö memoria logicamente condivisa ma
fisicamente distribuita.
20072007-08
- 27 -
SMP: organizzazione reale
Oggi, le architetture ad alte prestazioni su chip
appartengono a questa classe (“Chip Multi Processors” –
CMP): v. architetture dual-core, quad-core… Sun Niagara
(8 core – CPU – e relative cache su un unico chip);
Il parallelismo di esecuzione fra le diverse CPU e quello
fra flussi di programma (thread) diversi – estratti da
uno stesso programma o anche appartenenti a
programmi diversi;
Tendenza attuale: ridurre la complessità della singola
CPU (quindi ridurre l’ILP estratto da un singolo flusso di
istruzioni) a favore del numero di CPU sul chip (quindi a
favore del parallelismo fra thread - TLP)
20072007-08
- 28 -
SMP: organizzazione reale
Vantaggi: si ottengono prestazioni più elevate e si
bilancia meglio il consumo di potenza (eventuali CPU non
attive possono essere messe “in sonno”);
Problema: per ottenere prestazioni elevate in modo
“sostenuto” occorre bilanciare bene il carico sulle
diverse CPU – occorre che il programma sia progettato in
modo da essere eseguito su un sistema parallelo!
Parallel programming: un settore aperto…
20072007-08
- 29 -