incremento delle prestazioni di un processore

1
INCREMENTO DELLE PRESTAZIONI
DI UN PROCESSORE
TIPI DI PARALLELISMO E CLASSIFICAZIONE DI FLYNN
PIPELINING DELLE ISTRUZIONI
I PROCESSORI SUPERSCALARI
I PROCESSORI VLIW
MULTITHREADING, CHIP MULTI PROCESSOR (CMP) E
MASSIVELY PARALLEL PROCESSOR (MPP)
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
2
TIPI DI PARALLELISMO E
CLASSIFICAZIONE DI FLYNN
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MOTIVAZIONI
3
E’ opinione diffusa che il trend che negli ultimi anni ha
portato alla crescita delle frequenze di funzionamento
per le tecnologie CMOS prima o poi dovrà arrestarsi al
raggiungimento dei limiti fisici di tale tecnologia, di
conseguenza al fine di continuare la minimizzazione
dei tempi di esecuzione di un codice su un processore
si dovranno cercare di percorrere altre strade.
Una paradigma progettuale volto a questo scopo è
quello che cerca di adattare l’architettura del
processore alle esigenze di parallelismo che
l’applicazione presenta, al fine di poter minimizzare il
tempo di esecuzione totale svolgendo più task
contemporaneamente.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TIPI DI PARALLELISMO
4
PARALLELISMO
A LIVELLO
DI ISTRUZIONE:
throughput elevato,
bassa scalabilità
A LIVELLO
DI DATI:
application specific
Architetture di Sistemi Embedded, AA 2007/2008
A LIVELLO
DI THREAD:
sincronizzazione,
risoluzione delle
interdipendenze
Ing. Francesca Palumbo
TIPI DI PARALLELISMO: ILP
5
Il più comune tipo di parallelismo è il PARALLELISMO A
LIVELLO DI ISTRUZIONE (ILP: Instruction Level Parallelism).
L’ILP prevede l’esecuzione parallela di due o più istruzioni
“vicine” nel codice sequenziale da eseguire. Tali istruzioni
vengono eseguite in unità funzionali separate, omogenee (se
eseguono istruzioni dello stesso tipo) o eterogenee (se
eseguono istruzioni di tipo differente). E’ sfruttabile sia da
microprocessori general purpose che application specific.
Sfruttare il parallelismo a livello di istruzione garantisce al
sistema un throughput più elevato ma non è molto scalabile:
• limitazioni dovute a problemi strutturali (e.g. accesso in
memoria e relativi hazard strutturali);
• limitazioni dovute alla limitata parallelizzazione intrinseca del
codice (e.g. hazard sui dati e di controllo).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TIPI DI PARALLELISMO: DLP
6
Il PARALLELISMO A LIVELLO DI DATI (DLP: Data
Level Parallelism) prevede l’esecuzione parallela di
una medesima istruzione in contemporanea su più di
un dato.
E’ immediata la considerazione che un codice capace
di sfruttare un tale tipo di parallelismo è ben lungi
dall’essere un codice di tipo generico. Applicazioni che
si prestano intrinsecamente allo sfruttamento del DLP
sono quelle che hanno a che fare col calcolo vettoriale
(e.g. prodotti scalare per vettore) o col processing di
segnali audio-video (dove la medesima operazione
viene eseguita su uno stream di dati)
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TIPI DI PARALLELISMO: TLP
(1)
7
Il PARALLELISMO A LIVELLO DI THREAD (TLP:
Thread Level Parallelism) prevede l’esecuzione
contemporanea di diversi blocchi di istruzioni, definiti
appunto thread.
Da non confondersi con il concetto di sistema
multi-threaded tipico dei sistemi operativi, che prevede
la gestione ed esecuzione di un codice su una unica
CPU, sulla quale però i thread non vengono eseguiti
contemporaneamente ma alternativamente attraverso
strategie di scheduling a divisione di tempo.
In questo contesto il TLP è inteso invece come
esecuzione dei thread contemporanea su unità di
esecuzione differenti.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TIPI DI PARALLELISMO: TLP
(2)
8
Problemi tipici legati allo sfruttamento del TLP sono la
sincronizzazione fra thread e la risoluzione delle
interdipendenze tra di essi.
Il thread A potrebbe necessitare di un dato non ancora
disponibile perché risultato dell’esecuzione del thread
B non ancora iniziato (problema di interdipendenza)
oppure il thread A potrebbe dover modificare dato con
una frequenza più elevata rispetto a quella dei thread
B C e D che condividono tale dato con A (problema di
sincronizzazione).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LA CLASSIFICAZIONE DI FLYNN
9
Nel 1966 Michael J. Flynn propose una classificazione dei sistemi
di calcolo basata sulla possibilità di gestire contemporaneamente
diversi flussi di istruzioni e sulla possibilità di far lavorare
contemporaneamente ciascuna istruzione su dati differenti.
CLASSIFICAZIONE
SINGLE
INSTRUCTION
SINGLE
DATA
(SISD)
SINGLE
INSTRUCTION
MULTIPLE
DATA
(SIMD)
MULTIPLE
INSTRUCTION
SINGLE
DATA
(MISD)
Architetture di Sistemi Embedded, AA 2007/2008
MULTIPLE
INSTRUCTION
MULTIPLE
DATA
(MIMD)
Ing. Francesca Palumbo
SISD
10
Le macchine di questo tipo non sfruttano alcuna forma
di parallelismo e rientrano nel paradigma classico di
esecuzione sequenziale delle istruzioni, ove ogni
istruzione è caricata dalla memoria, decodificata, ed
eseguita sui soli dati componenti il proprio set di
operandi.
Il processore MIPS nella versione sequenziale nonpipelined è un esempio di calcolatore SISD.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
SIMD
11
Calcolatori di questo tipo sono in grado di eseguire la
medesima istruzione su un intero set o vettore di dati.
Ovviamente il tipo di parallelismo che viene supportato
è il DLP.
L’unità di controllo è tipicamente centralizzata al fine di
avere N unità sincronizzate operanti in parallelo su N
dati ma rispondenti ad una unica istruzione
memorizzata nel PC. L’approccio funzionale,
relativamente al singolo flusso, è simile all’approccio
usato nelle macchine SISD in quanto ogni unità
funzionale ha i propri registri di indirizzamento dedicati
per poter accedere a dati diversi ed essere in grado di
gestirli.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MIMD
(1)
12
I calcolatori annoverabili in questa categoria sono
composti da diverse unità computazionali, le quali
possono eseguire flussi di elaborazione diversi su set
di dati diversi. Le varie unità computazionali possono
essere dello stesso tipo (MIMD omogenei) o di tipo
diverso (MIMD eterogenei).
La caratteristica principale di questo tipo di calcolatori
è che sono pensati per essere scalabili: l’hardware è
progettato per essere venduto con un numero di
processori variabile e la scalabilità del software è tale
da permettere ad un calcolatore MIMD di funzionare
anche se il processore i-esimo di N disponibili smette
di farlo.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MIMD
(2)
13
Calcolatori di questo tipo ben si prestano a sfruttare al
meglio il TLP avendo a disposizione più unità
computazionali sulle quali eseguire in parallelo del
codice, ma ogni unità computazionale poi può a sua
volta sfruttare gli altri tipi di parallelismo per cercare di
migliorare ulteriormente le sue prestazioni intrinseche.
I problemi tipici di questo tipo di architetture sono
legati alla condivisione dei dati (scelta fra memoria
condivisa o memoria distribuita) e al coordinamento fra
i diversi processori.
E’ chiaro che sfruttare il TLP implica anche un
overhead di comunicazione e il dover scegliere
opportunamente fra le infrastrutture di comunicazione
esistenti in letteratura (bus o network on chip).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
RIASSUMENDO…
Architetture di Sistemi Embedded, AA 2007/2008
14
Ing. Francesca Palumbo
15
PIPELINING DELLE ISTRUZIONI
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TEMPO MEDIO PER ISTRUZIONE (TMI)
16
Il tempo medio per istruzione (TMI) rappresenta
l’intervallo di tempo medio necessario per l’esecuzione
di una singola istruzione, ed è calcolabile come:
TMI = CPI × CC
dove:
CPI è il Clock Per Instruction: ovvero il numero medio
di cicli di clock necessari per eseguire un’istruzione
CC è il Clock Cycle: ovvero la durata di un colpo di
clock
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
TMI E VALUTAZIONE DELLE PRESTAZIONI
17
Nella seguente tabella è riportata una stima dei fattori che
condizionano il TMI per diverse architetture
CPI=1
CC elevato
CPI è ottimo ma CC è
condizionato dall’esecuzione della
istruzione più lenta (LOAD)
Microarchitettura
CPI=5
Multiciclo (5 cicli per
CC migliore
istruzione)
CPI è condizionato dal numero di
fasi in cui viene scomposta
l’esecuzione dell’istruzione ma il
CC
è
migliore
perché
condizionato dall’esecuzione della
fase più lenta (nel caso migliore
1/5 del precedente)
Microarchitettura a
singolo ciclo
Micoarchitettura
Pipelined
CPI≈1
CC ≈ precedente
Architetture di Sistemi Embedded, AA 2007/2008
CPI ≈1 perché si tende ad avere
un throughput di quasi una
istruzione per colpo di clock e il
CC come nel caso precedente è
condizionato dall’esecuzione della
fase più lenta
Ing. Francesca Palumbo
PIPELINING DELLE ISTRUZIONI
18
In una microarchitettura di tipo pipelined le unità funzionali di
base, necessarie all’esecuzione di una istruzione macchina,
vengono organizzate in “stadi” i quali sono utilizzati in sequenza
al fine di completare una singola esecuzione.
Ogni istruzione ha una latenza di completamento pari al numero
di stadi che deve attraversare per essere terminata ma un
throughput nel caso migliore tendente all’unità.
Le architetture pipelined si pongono l’obiettivo di migliorare le
prestazioni del processore sfruttando l’intrinseco parallelismo
presente in un flusso di istruzioni sequenziale, favorendo
l’overlapping dell’esecuzione di istruzioni differenti a patto che
non siano interdipendenti e/o vogliano sfruttare le stesse unità
funzionali.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
IL CICLO DI ESECUZIONE DELLE ISTRUZIONI NELLE
ARCHITETTURE SEQUENZIALI
19
Nella microarchitettura sequenziale del MIPS in
generale l’esecuzione delle istruzioni è divisibile in 5
fasi:
FETCH-DECODE-EXECUTE-MEMORY-WRITE BACK
Le istruzioni di salto condizionato sono quelle a
latenza inferiore (3 colpi di clock) infatti terminano
nella fase di EXECUTE, quelle di store necessitano di
4 colpi di clock mentre quelle di load e le istruzioni di
tipo logico-aritmetico necessitano di attraversare tutte
le 5 fasi.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MICROARCHITETTURA NON-PIPELINED - LATENZA
20
Supponiamo di avere una microarchitettura con le
seguenti caratteristiche:
ISTRUZ.
FE.
DEC.
EXE.
MEM.
W.B.
Load
20 ps
5 ps
10 ps
20 ps
5 ps
Store
20 ps
5 ps
10 ps
20 ps
--
Salto
20 ps
5 ps
10 ps
--
--
Aritmetico Logica
20 ps
5 ps
10 ps
--
5 ps
E il seguente codice assembly:
lw $1,100($0)
lw $2,104($0)
Latenza Effettiva:
(2*60+40+55) ps = 215 ps
add $3,$2,$1
sw $3,200($0)
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MICROARCHITETTURA PIPELINED – LATENZA (1)
21
In una microarchitettura di tipo pipelined, dove gli stadi
di pipe corrispondono esattamente alle fasi di
esecuzione di una istruzione, il flusso di esecuzione
del precedente codice assembly sarebbe il seguente:
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MICROARCHITETTURA PIPELINED – LATENZA (2)
22
La durata del colpo di clock in una microarchitettura
pipelined corrisponde più o meno alla latenza più
lunga fra le fasi di esecuzione di una istruzione, in
quanto è condizionato dalla sezione di datapath più
critica.
Il codice assembly visto in precedenza viene
processato in 8*20ps=160ps; contro i 215ps calcolati
nel caso non-pipelined.
E’ importante sottolineare che il miglioramento delle
prestazioni di un processore ottenibile tramite il
pipelining delle istruzioni comporta semplicemente
modifiche architetturali, ma è totalmente trasparente al
programmatore.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI
OTTENIBILI
(1)
23
La pipeline non aiuta a migliorare la latency intrinseca
della singola istruzione, che rimane di 5 colpi di clock
come nelle microarchitetture sequenziali, ma il
throughput. Quest’ultimo risulta essere limitato dal
tempo di esecuzione della fase più lenta (il clock non è
sceso sotto i 20 ps).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI
OTTENIBILI
(2)
24
Sebbene
l’incremento
potenziale
delle
prestazioni
della
microarchitettura corrisponda al numero di stadi di pipelining introdotti,
il valore di latenza ottenuto non è pari a 215ps/5=43 ps. Per capirne la
ragione bisogna considerare il tempo necessario a riempire e svuotare
la pipe (in questo esempio solo per 2 colpi di clock su 8 la pipe risulta
essere a regime) ed inoltre il fatto che solo nel caso in cui gli stadi di
pipeline fossero identici l’incremento sarebbe esattamente:
SpeedUp =
TimePerInstructionNonPipelined
NumberOfStages
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI
OTTENIBILI
(3)
25
In aggiunta a questi limiti c’è da considerare anche
che le prestazioni delle architetture pipelined possono
essere drasticamente ridotte a causa del manifestarsi
di hazards ed eccezioni.
L’effetto degli hazards è quello di interdire l’esecuzione
della prossima istruzione prevista dalla sequenza
nello slot assegnatogli. Conseguenza è che la pipeline
viene stallata, per un numero di colpi di clock tale da
risolvere la condizione critica che ha ingenerato
l’hazard e questo ovviamente peggiora le prestazioni
teoriche ottenibili.
1
SpeedUp =
× PipeDepth
1 + PipeStallCyclesPerInstructions
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LIMITI DELLA AL MIGLIORAMENTO DELLE PRESTAZIONI
OTTENIBILI
(4)
26
Tipi di hazards:
Hazard Strutturali: si verificano a causa di conflitti
per l’accesso alla medesima unità funzionale, se l’unità
funzionale in questione non è in grado di soddisfare la
combinazione di istruzioni corrente;
Hazard legati ai Dati: l’istruzione corrente dipende
dal risultato della precedente non ancora conclusa;
Hazard legati al Controllo: generati dalla
parallelizzazione di codice contenente salti, condizionati
o meno.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
HAZARD STRUTTURALI
27
Supponiamo che due differenti istruzioni richiedano
nello stesso momento l’accesso ad una stessa risorsa,
le possibili soluzioni sono due:
Il compilatore potrebbe preventivamente occuparsi di
spostare le due istruzioni ad una distanza tale l’una
dall’altra che non si crei conflitto (non sempre
percorribile perché si potrebbe dover modificare l’intero
flusso);
Resource Splitting e/o Resource Replication (eg. Un
processore potrebbe disporre di un register file a una
sola porta di scrittura, ma ci sono situazioni che
richiedono due scritture simultanee e se la porta di
scrittura non viene duplicata si creerebbe un hazard
strutturale).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
HAZARD LEGATI AI DATI
Esempio:
add
sub
and
or
xor
28
$1,$2,$3;
$4,$1,$5;
$6,$1,$7;
$8,$1,$9;
$10,$1,$11;
Tutte le istruzioni dopo la add utilizzano come operando il suo risultato,
che verrà memorizzato in $1 nello stadio di pipeline equivalente alla
fase di WRITE BACK. Gli operandi però vengono caricati nel register
file nella fase di DECODE e quindi a meno di precauzioni in tal senso
la sub e la and avranno accesso ad un valore non ancora aggiornato.
La soluzione delle dipendenze a livello di dato è diversa a seconda che
si abbia a che fare con “false dipendenze” (e.g. WaW il compilatore si
occupa semplicemente di fare il Renaming dei registri) o “vere
dipendenze” (e.g. RaW, la soluzione va trovata sia a livello hw, per
esempio si usa il data forwarding, che a livello di compilazione tramite il
re-ordering delle istruzioni).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
HAZARD LEGATI AL CONTROLLO
29
Gli hazard relativi al controllo possono dipendere sia
dai salti condizionati che da quelli incondizionati.
Nel caso incondizionato a parte soluzioni hw basate
sull’anticipo del calcolo dell’indirizzo di destinazione
non si può far molto.
Per quelli condizionati anticipando via hw il calcolo
dell’indirizzo e il test di salto si possono ridurre da 3 a
1 le bubble da inserire e in più si possono anche
utilizzare tecniche di Branch Prediction. Sempre a
livello di compilazione esiste anche un’altra tecnica,
denominata Branch Hoisting, secondo la quale il
compilatore sposta ove possibile l’istruzione di salto
tre istruzioni più in alto.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA
PIPELINED – L’ESEMPIO DEL MIPS
(1)
30
Nel caso del MIPS le 5 fasi di esecuzione delle
istruzioni rispecchiano a pieno la struttura interna del
datapath.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA
PIPELINED – L’ESEMPIO DEL MIPS
(2)
31
Di conseguenza il passaggio alla microarchitettura
pipelined è immediato
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA
PIPELINED – L’ESEMPIO DEL MIPS
(3)
32
Il datapath delle due precedenti microarchitetture è praticamente
lo stesso e questo rende chiaro il motivo per cui il percorso
critico, e di conseguenza la durata del ciclo di clock, nel caso
multiciclo sequenziale e in quello pipelined sia pressoché lo
stesso.
Evidentemente se CC non è cambiato la velocità di accesso alla
memoria nel caso pipelined deve essere proporzionalmente
incrementata.
Il register file viene utilizzato sia nello stadio di DECODE che
nello stadio di WRITE BACK, nel caso peggiore nello stesso
colpo di clock potrebbero essere effettuate due letture e una
scrittura. Per evitare conflitti a livello di dati, il register file è
progettato in modo da gestire la scrittura nella prima metà del
ciclo di clock e la lettura nella seconda metà.
I valori passati da uno stadio di pipe al successivo vengono
memorizzati in registri temporanei, noti come pipeline registers,
posti fra uno stadio e l’altro.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
DALLA MICROARCHITETTURA SEQUENZIALE A QUELLA
PIPELINED – L’ESEMPIO DEL MIPS
(4)
33
Dal punto di vista del controllo le modifiche da fare
sono diverse, infatti nel caso pipelined non si ha a che
fare con una semplice macchina a stati classica.
I bit di controllo vengono generati una volta per tutte in
funzione dell’opcode durante la fase di DECODE e poi
vengono propagati, colpo di clock per colpo di clock,
da uno stadio di pipe al successivo attraverso i
pipeline registers.
Ogni stadio di pipe per controllare le proprie unità
funzionali sfrutta parte dei bit di controllo e propaga gli
altri senza alterarli.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
34
I PROCESSORI SUPERSCALARI
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
VERSO LE ARCHITETTURE SUPERSCALARI
35
Nelle architetture scalari e pipelined date diverse classi di
istruzioni
(e.g.
accesso
alla
memoria,
operazioni
aritmetico/logiche in virgola fissa, operazioni aritmetiche in
virgola mobile) è possibile distinguere diversi flussi di operazioni.
Da qui l’evoluzione di queste architetture verso CPU in cui a ogni
flusso corrisponde una diversa pipeline, a valle della lettura e
decodifica delle istruzioni. In tali architetture è possibile
l’implementazione del ILP, a patto di:
• potere leggere e decodificare più istruzioni simultaneamente;
• disporre di un di controllo in grado di verificare che non
esistano dipendenze sia fra le istruzioni lette che fra loro e
quelle in esecuzione sulle varie pipeline
• disporre di un eventuale logica di riordino delle istruzioni nel
caso di flussi a latenza differente (e quindi pipeline di
lunghezza diversa) per preservare la semantica originale del
codice.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
ARCHITETTURE SUPERSCALARI
(1)
36
La caratteristica fondamentale delle architetture
superscalari è che l’identificazione del potenziale
parallelismo
e
la
conseguente
gestione
dell’esecuzione delle istruzioni in parallelo non viene
compiuta a tempo di compilazione (come invece
avviene per i processori VLIW) ma dinamicamente a
tempo di esecuzione dall’unità di controllo.
Esattamente come nel caso delle architetture pipelined
l’implementazione dell’ILP in queste architetture è
completamente trasparente al programmatore.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
ARCHITETTURE SUPERSCALARI
(2)
37
ISSUE
WINDOW
• load/store => 5 stadi;
• aritmetico/logiche in virgola fissa => 3 stadi;
• aritmetiche in virgola mobile => 8 stadi
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
ARCHITETTURE SUPERSCALARI
(3)
38
Le prestazioni delle architetture superscalari sono
fortemente dipendenti dal compilatore: nonostante la
gestione dinamica del parallelismo il compilatore ha il
compito di ristrutturare il codice (riordino delle
istruzioni e register renaming) per sfruttare al meglio il
parallelismo intrinseco del programma, in quanto più
unità funzionali debbono essere in grado di operare in
parallelo.
In aggiunta è necessario disporre di una banda di
memoria adeguata per istruzioni e dati per poter
consentire l’esecuzione del programma alla velocità
richiesta.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
FLUSSO DI ESECUZIONE DELLE ISTRUZIONI
(1)
39
Vediamo come funziona a grandi linee una architettura di questo
tipo:
• Un numero di istruzioni pari, nel caso migliore, a quelle
eseguibili in parallelo vengono lette contemporaneamente.
Alcune architetture superscalari hanno a disposizione anche
dell’hardware dedicato per il branch prediction per consentire la
predizione dell’esito dei salti condizionali ed effettuare letture
oltre l’istruzione di salto. Durante la decodifica vengono
identificate le “vere” dipendenze (RAW) e risolte le “false”
(WAW e WAR). In assenza di reservation station ad ogni ciclo,
le istruzioni nella “issue window” (che contiene le istruzioni
lette e decodificate ma non ancora lanciate in esecuzione)
vengono controllate riguardo alle dipendenze rispetto a tutte
le istruzioni nella finestra di esecuzione nonché entro la
finestra di issue stessa. Se sono presenti le reservation station
invece nessun controllo viene effettuato e le istruzioni
decodificate vengono inviate alle reservation station.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
FLUSSO DI ESECUZIONE DELLE ISTRUZIONI
(2)
40
• La fase di invio delle istruzioni decodificate alle unità funzionali di
competenza viene denominata “dispatching”
• Le reservation station, ove presenti, hanno il compito di
conservare operandi e operazione fino a che l’unità funzionale non è
in grado di eseguirla. In pratica sono dei buffer che servono a
disaccoppiare la fase di issue e il controllo delle vere dipendenze. Il
controllo delle vere dipendenze viene compiuto sulle istruzioni nelle
reservation stations in una successiva fase di dispatching e quelle
libere da dipendenze vengono inoltrate alle
unità funzionali.
• Quando una unità funzionale è pronta a ricevere una nuova
istruzione la reservation station associata viene controllata al fine di
trovare una istruzione eleggibile per l’esecuzione. Se ce ne fossero
più di una disponibile si ricorre a politiche di dispatching per
selezionarne una e inviarla in esecuzione.
• L’esecuzione delle istruzioni ha inizio in parallelo in base alla
disponibilità dei dati e non dell’ordine delle istruzioni (out of
order
execution).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
FLUSSO DI ESECUZIONE DELLE ISTRUZIONI
(3)
41
• Una volta completate le istruzioni, i risultati vengono scritti nella
“commit unit”, in modo tale che le istruzioni vengano
logicamente riordinate cosicché lo stato della CPU sia
aggiornato (committment phase) in base all’ordine corretto
delle istruzioni e dall’esterno si
abbia
sempre
la
sensazione di un esecuzione “in ordine”.
Il fatto che le istruzioni
possono terminare in ordine
diverso rispetto a
come sarebbero
terminate
su
un
processore scalare o
pipelined a
causa
del
reordering iniziale delle istruzioni
operato dal
compilatore
e/o a causa della diversa latenza delle
varie pipeline
poste
in
parallelo.
Detto
ciò
non
è
possibile
l’aggiornamento immediato del
register
file
e
della
memoria: necessità di una memoria
temporanea per i
risultati dell’istruzione corrente (accessibile da eventuali
istruzioni dipendenti) fino alla fase di commitment.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LIMITAZIONI
42
Più le pipeline dedicate sono profonde e sbilanciate in
termini di latenza le une rispetto alle altre più critico è il
compito del compilatore e maggiori sono le esigenze
di memorizzazione pre-committment dei risultati delle
istruzioni, relativamente alle pipeline a latenza
inferiore.
Le prestazioni delle architetture superscalari sono
comunque limitate da dipendenze a livello di dati e
salti condizionati esattamente come nel caso delle
architetture scalari, vista la necessità per il processore
di dovere attendere per dipendenze non risolte o un
salto non previsto correttamente.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
43
I PROCESSORI VLIW
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
VLIW
44
VLIW sta per Very Long Instruction Word.
Anche i processori VLIW sfruttano il parallelismo a livello di
istruzione ma, a differenza dei processori superscalari,
sono dotati di CPU a scheduling statico: le istruzioni
eseguibili simultaneamente (in parallelo) sono identificate
dal compilatore e assemblate in pacchetti che poi sono
letti, decodificati ed eseguiti dalla CPU.
Il vantaggio che questo tipo di approccio introduce risiede
nella considerazione che nei processori superscalari l’unità
controllo occupa il 30-35% dello spazio della CPU; quindi
affidare al compilatore il compito di ottimizzare lo
scheduling delle istruzioni, aiuta a ridurre la complessità
dell’unità di controllo e libera conseguentemente area sul
chip.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
LE ISTRUZIONI
45
L’istruzione “lunga” viene indicata come “bundle” ed è
proporzionale, in lunghezza, al numero di unità funzionali in
grado di eseguire le operazioni in parallelo.
In una bundle vengono impacchettate insieme più “sillabe”
distinte, che rappresentano le istruzioni macchina
elementari, ognuna con i propri operandi.
Le sillabe sono eseguibili in parallelo, mentre l’ordine di
esecuzione delle bundle è rigorosamente sequenziale.
La selezione delle sillabe che andranno a comporre un
bundle e l’ordine di esecuzione dei bundle vengono
generati in fase di compilazione a partire dal programma
statico, al più basandosi su informazioni ottenute da
profiling del codice precedentemente ottenute.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
SCHEMA A BLOCCHI GENERALE – VLIW A 4 “VIE” (1)
Architetture di Sistemi Embedded, AA 2007/2008
46
Ing. Francesca Palumbo
SCHEMA A BLOCCHI GENERALE – VLIW A 4 “VIE” (2)
47
• 4 “lane” o “vie”, cioè 4 unità funzionali aritmetico/logiche sono
collegate ad un unico register file dotato di 4 porte di scrittura
e 8 di lettura.
• Una sola lane ha la possibilità di accedere alla
cache dati, il
che significa che in un bundle di 4 sillabe una sola
sillaba potrà essere una operazione di accesso alla memoria.
• Non è detto che se ho una bundle di 4 sillabe si abbiano
esattamente 4 lane, potrebbero essercene di più ma per
qualche ragione non essere sfruttate.
• La BYPASS LOGIC serve a ridurre la latenza visibile di alcune
operazioni, ed è in pratica equivalente alla logica di forwarding
che viene utilizzata dal MIPS pipelined per ridurre il numero di
stalli dovuti alle dipendenze fra dati.
• L’area di interconnessione è elevata.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
SCHEMA DI FUNZIONAMENTO
48
Il compilatore:
• identifica 4 operazioni mutuamente indipendenti, per
comporre le sillabe di un bundle;
• si occupa, ove possibile, di risolvere i conflitti relativi alle
risorse;
• associa ad ogni sillaba una lane, lungo la quale verrà
eseguita (il codice oggetto specifica, non solo quali
operazioni vengono eseguite in un’istruzione lunga, ma
anche su quali unità funzionali sono eseguite).
Conflitti di controllo: in un bundle può essere presente al
più una operazione che modifica il flusso del controllo
dell’esecuzione del programma (e.g. salto condizionato o
no, chiamata a funzione o ritorno da sottoprogramma).
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
I CLUSTER
49
Per poter essere in grado si
supportare efficientemente
applicazioni che presentino
intrinsecamente gradi di
parallelismo superiore, la
CPU viene organizzata in
“cluster”.
Ogni cluster sfrutta un
parallelismo limitato (e.g. 4
lane per cluster), ma nel
complesso
si
possono
ottenere prestazioni migliori.
Esiterà un banco di registri
dedicato per ogni cluster,
ma
è
necessario
dell’hardware aggiuntivo per
gestire la coerenza della
memoria.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
PRO E CONTRO
(1)
50
A LIVELLO ARCHITETTURALE:
La microarchitettura di un processore VLIW è più semplice di
una CPU superscalare con uguale parallelismo, e
tendenzialmente si possono raggiungere frequenze di
funzionamento superiori (considerato che il ciclo di clock ora è
determinato dai percorsi critici del datapath e non dall’unità di
controllo che è notevolmente più semplice) .
A LIVELLO DI COMPILAZIONE:
Il compilatore deve avere una conoscenza dei dettagli della
microarchitettura unitamente ad alcuni parametri tecnologici (e.g.
la latenza e throughput delle unità funzionali) al fine di poter
efficientemente comporre i bundle. Questo fatto riduce la
portabilità del codice oggetto anche fra successive generazioni
della stessa famiglia di processori VLIW, in quanto potrebbe
venire a mancare la compatibilità binaria.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
PRO E CONTRO
(2)
51
Per risolvere i problemi di compatibilità binaria una soluzione
diffusa è quella che utilizza i “software binary translation”:
software dedicati per la conversione dinamica, al momento
dell’esecuzione, delle istruzioni appartenenti ad un instruction
set in equivalenti istruzioni dell’instruction set nativo.
Nonostante le sofisticate tecniche di analisi, generazione di
codice e scheduling utilizzate dai compilatori VLIW, è possibile
che non sempre il compilatore sia in grado di garantire ad ogni
colpo di clock l’utilizzo di ogni unità funzionale. In tali casi
verrebbero inserite delle NOP. Se l’applicazione non presenta un
grado di parallelismo adeguato a quello messo a disposizione, il
numero di NOP potrebbe risultare elevato, causando un utilizzo
poco efficiente della memoria. Per questo motivo i processori
VLIW utilizzano tecniche di compressione dell’immagine
dell’applicazione in memoria, permettendo di evitare, in fase di
compilazione, l’introduzione di NOP, per poi generarli via
hardware durante la fase di issue delle istruzioni.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
52
MULTITHREADING,
CHIP MULTI PROCESSOR (CMP)
E MASSIVELY PARALLEL PROCESSOR (MPP)
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MULTITHREADING A GRANA FINE E GRANA GROSSA
53
GRANA FINE:
La CPU commuta da un thread all’altro ad ogni istruzione.
L’esecuzione di diversi thread risulta essere interallacciata
(nel caso di stallo, il thread che dovrebbe essere eseguito
salta il suo turno di esecuzione). La CPU deve essere in
grado di cambiare thread a ogni ciclo di clock, quindi per
evitare inefficienze sono richieste duplicazioni pesanti
dell’hardware disponibile.
GRANA GREZZA:
La CPU commuta da un thread a un altro solo in
corrispondenza di stalli lunghi (e.g. cache miss). I thread in
questione condividono molte risorse del sistema (e.g.
registri architetturali) per questo la commutazione da un
thread all’altro richiede diversi cicli di clock per poter
effettuare il salvataggio del contesto.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
SIMULTANEOUS MULTITHREADING (SMT)
54
L’obiettivo di questa classe di architetture è quello di
utilizzare le risorse messe a disposizione da un processore
superscalare, per sfruttare simultaneamente ILP e TLP.
Il motivo fondamentale risiede nella considerazione che
molto spesso una CPU ha a disposizione più risorse
funzionali di quante un singolo thread possa effettivamente
sfruttare. Unitamente a ciò, grazie alle tecniche di register
renaming e allo scheduling dinamico, è possibile pensare
di eseguire più istruzioni indipendenti sulla stessa CPU.
Se le istruzioni che vengono lanciate in parallelo
appartengono a thread diversi allora si possono anche
limitare le problematiche relative alle dipendenze fra dati.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
RIASSUMENDO …
Architetture di Sistemi Embedded, AA 2007/2008
55
Ing. Francesca Palumbo
CHIP MULTI PROCESSOR (CMP)
(1)
56
I Chip MultiProcessor (CMP) rappresentano un approccio
alternativo a quello dei processori SMT per la gestione del
TLP. In questo caso l’architettura del processore è
composta dalla replicazione di diverse celle di calcolo
identiche connesse poi le une con le altre (tipicamente a
formare una griglia).
La caratteristica fondamentale di queste architetture, da cui
prendono anche il nome, è il fatto che la potenza
computazionale e la conseguente complessità di ogni
elemento della griglia di processori è paragonabile a quella
di una classica architettura superscalare.
Ogni cella è in grado di eseguire uno o più thread ed
interagirà con le altre mediante un layer di comunicazione
adeguato alle esigenze di banda che una architettura di
questo tipo richiede.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
CHIP MULTI PROCESSOR (CMP)
(2)
57
La differenza fondamentale fra un architettura SMT e
un architettura CMP risiede nel fatto che nei CMP le
diverse unità funzionali sono indipendenti le une dalle
altre e non condividono alcun tipo di logica di
esecuzione delle istruzioni.
Risultato di questa diversità è una maggiore scalabilità
intrinseca di architetture di questo tipo.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
MASSIVELY PARALLEL PROCESSOR (MPP)
58
Nel caso di architetture che prevedano l’integrazione all’interno
dello stesso chip di un numero elevato di celle elementari di
calcolo (in letteratura si parla di almeno 64 unità), il modello
architetturale prende il nome di Massively Parallel Processor
(MPP).
Tipico esempio di MPP sono le architetture di tipo “tyled-based”.
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
59
MATERIALE
DI
RIFERIMENTO
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo
60
TIPI DI PARALLELISMO E CLASSIFICAZIONE DI FLYNN:
Patterson, Hennessy; “Struttura e Progettazione dei Calcolatori:
l’interfaccia hardware e software”: capitolo 9 – I processori paralleli
PIPELINING DELLE ISTRUZIONI:
Patterson, Hennessy; “Computer Architecture, A Quantitative
Approach”: appendice A - Pipelining: Basic and Intermediate
Concepts
I PROCESSORI SUPERSCALARI E I PROCESSORI VLIW:
Patterson, Hennessy; “Computer Architecture, A Quantitative
Approach”: capitolo 3 – Instruction-Level Parallelism and Its dynamic
Exploitation
CMP E MPP:
Patterson, Hennessy; “Struttura e Progettazione dei Calcolatori:
l’interfaccia hardware e software”: capitolo 9 – I processori paralleli
Architetture di Sistemi Embedded, AA 2007/2008
Ing. Francesca Palumbo