Testo di riferimento:
[Congiu] – 9.1-9.3 (pg. 253–264)
Tecniche di parallelismo, processori RISC
09.a
Pipelining
Altre tecniche di parallelismo
Processori superscalari
Caratteristiche dei processori RISC
Esempi di processori RISC
Fasi per elaborazione di un istruzione
1
IF (Instruction Fetch)
● Lettura dell'istruzione da memoria, incremento PC
ID (Instruction Decode)
● Decodifica istruzione e prelievo operandi da registri
EX (Execution)
● Esecuzione dell'istruzione
MEM (Memory)
● Accesso in memoria (scrittura o lettura, solo per certe
istruzioni
WB (Write Buffer)
● Scrittura del risultato nel registro opportuno (register file)
Architettura degli Elaboratori
32
© 2009
Pipelining
2
Se le fasi sono eseguite da sezioni indipendenti di
hardware, possono essere tutte contemporaneamente
attive (su istruzioni diverse)
32
transitorio
Dopo il transitorio: istruzione completata ad ogni stadio
Architettura degli Elaboratori
Hardware in più
Nuovi registri fra ogni stadio del pipeline per
memorizzare i risultati parziali di ogni ciclo.
Architettura degli Elaboratori
© 2009
3
32
© 2009
Evoluzione
4
32
Architettura degli Elaboratori
© 2009
Pipelining: esempio numerico
5
32
Se le 4 fasi sono eseguite da 4 sezioni indipendenti di
hardware, possono essere tutte 4 contemporaneamente
attive (su istruzioni diverse):
Da T3 in poi viene completata una istruzione ogni 20 ns.
Architettura degli Elaboratori
© 2009
Pipelining: vantaggi
6
Il tempo richiesto per l’esecuzione di un
programma di N istruzioni con la tecnica del
pipelining descritta nella figura precedente è
pari a:
32
TE = 80 + 20 × (N - 1) ns
Senza pipeline il tempo necessario sarebbe:
TE = 80 × N ns
Per N abbastanza grande, il pipeline riduce il
tempo di esecuzione di un fattore 4.
Architettura degli Elaboratori
© 2009
Pipelining: fattore di speed-up
7
Fattore di speedup SK: indica quanto più veloce l’uso di un
pipeline rende l’esecuzione di un programma (ovvero di quanto
viene ridotto il tempo di esecuzione), rispetto al caso in cui il
pipeline sia assente:
32
● TK = tempo di esecuz. di N istruzioni con pipeline di k fasi,
● T1 = tempo di esecuz. di N istruzioni senza pipeline;
fattore di speedup SK:
SK = T1/TK = (NkT ) / [kT + (N-1)T ] = Nk / (k+N-1 )
● k = numero di fasi del pipeline,
● T = tempo di esecuzione di una fase.
● Per N grande, SK tende ad essere uguale a k.
quando k è grande (> 8) il processore si dice superpipelined.
Architettura degli Elaboratori
© 2009
SuperPipeline
8
Incremento della lunghezza del pipeline per aumentare
la velocità di esecuzione del singolo stadio (riduzione tk)
Se lo stadio ALU ha una durata superiore rispetto agli
altri moduli, considero stadi ALU separati per ridurre il
tempo sprecato dagli stadi più brevi
È necessaria una unità di controllo più complicata per
gestire il pipeline e gli “inceppamenti”
32
Intel Pentium 4 - superpipeline con 20 stadi
Architettura degli Elaboratori
© 2009
Inceppamento del pipeline
9
Il fattore di speedup Sk è un valore teorico
raggiunto solo se il pipeline opera, a regime,
avviando sempre, ad ogni periodo del clock, una
nuova istruzione (e completandone una):
in realtà il pipeline può incepparsi (subire un
pipeline stall ) per problemi dovuti a:
● accessi alla memoria (cache miss),
● conflitti dei dati (data hazard),
● conflitti di salto (branch hazard);
in conseguenza a questi stall, il fattore di
speedup si riduce.
Architettura degli Elaboratori
32
© 2009
Cache miss
10
Le fasi di fetch e di accesso a operandi/risultati hanno una
durata pari alle altre fasi (un periodo di clock), solo se gli
accessi alla memoria si risolvono nella cache (cache hit). 32
In caso di cache miss, l’operazione può richiedere 2 o 3
periodi di clock; di conseguenza il pipeline si inceppa
(subisce uno stall ) e l’esecuzione delle istruzioni viene
ritardata, come indicato nel seguente diagramma temporale:
Architettura degli Elaboratori
Data hazard
© 2009
11
Data hazard (conflitto dei dati): si verifica quando gli
operandi di una istruzione sono i risultati dell’istruzione 32
precedente;
in tal caso l’esecuzione dell’istruzione non può procedere
e l’esecuzione subisce un ritardo (pipeline stall) (di 2
periodi di clock nell’esempio di figura):
Architettura degli Elaboratori
© 2009
Rimedi contro i data hazard
I data hazard possono essere evitati dal compilatore, con un
riordino delle istruzioni (per eseguire altre istruzioni prima
di quella cui servono i dati);
le conseguenze negative di un data hazard possono essere
ridotte dal processore, con la tecnica del by-pass (detta
anche data-forwarding): i risultati prodotti dall’ALU vengono
inoltrati allo stadio successivo del pipeline, in contemporanea
alla (e senza attendere la) loro memorizzazione:
Architettura degli Elaboratori
Branch hazard
12
32
© 2009
13
Branch hazard (conflitto dei salti): si verifica
nelle istruzioni di salto condizionato, quando
32
(prima di conoscere se il salto verrà effettuato)
il pipeline viene alimentato con le istruzioni della
diramazione che non sarà intrapresa;
in tal caso è necessario:
● svuotare il pipeline,
● annullare gli effetti delle istruzioni che ne
hanno percorso indebitamente alcune fasi,
● ri-alimentare il pipeline con le istruzioni
dell’altra diramazione.
Architettura degli Elaboratori
© 2009
Gestione dei branch hazard
14
Per gestire correttamente un branch hazard si può:
● ritardare il pipeline (stall): il pipeline non
viene alimentato fino a che, valutati gli
effetti dell’istruzione precedente, (dai quali
spesso dipende la condizione di salto), la
diramazione da intraprendere risulta nota;
così l’esecuzione subisce sempre un ritardo;
● cercare di evitare questo ritardo usando
tecniche di:
32
▪ delayed branch (salto ritardato),
▪ branch prediction (predizione del salto).
Architettura degli Elaboratori
Delayed branch
© 2009
15
La tecnica prevede che il processore esegua
comunque una ulteriore istruzione (successiva a 32
quella di salto) prima di intraprendere il salto;
●il compilatore può allora riordinare le istruzioni
in modo da collocarne una (da eseguire comunque)
dopo ogni istruzione di salto;
●se non riesce a trovare una istruzione di questo
tipo, il compilatore inserisce, dopo l’istruzione di
salto, una NOP (comporta un ritardo, ma evita di
avviare l’esecuzione di istruzioni che non devono
essere eseguite).
Architettura degli Elaboratori
© 2009
Branch prediction
16
La predizione dei salti (branch prediction) può essere:
● statica: stabilita dal compilatore: ad es. i salti
32
all’indietro nelle iterazioni vengono (quasi) sempre
intrapresi;
● dinamica: stabilita dal processore sulla base della
storia precedente (stimando che la prossima volta
venga intrapresa la diramazione presa più volte in
passato);
il processore utilizza a questo scopo una cache veloce
contenente (su CAM) gli indirizzi delle istruzioni di salto
● il PC viene confrontato con gli indirizzi nella CAM;
● è comunemente usata una di queste due organizzazioni:
▪ BHT (Branch History Table), in cui ciascun elemento indica
solo se il salto va intrapreso oppure no;
▪ BTB (Branch Target Buffer), che contiene anche, per ciascun
elemento, direttamente l’indirizzo a cui saltare.
Architettura degli Elaboratori
Altre tecniche di parallelismo
© 2009
17
32
•
•
•
•
•
•
Superscalarità
Speculative execution
Out of order execution
VLIW (Very Long Instruction Word)
Register renaming
SIMD (Single Instruction Multiple Data)
Architettura degli Elaboratori
© 2009
Superscalarità
18
Le tecniche superscalari, che negli anni ‘60
erano usate solo nei supercomputer (> 1M$) sono
ora impiegate anche nei desktop, grazie al
numero elevato di transistor/chip reso possibile
dalla tecnologia di integrazione.
Il termine “superscalare” vuole indicare che
questa tecnica consente di andar oltre
l’aumento di velocità reso possibile dalla
riduzione di scala (delle dimensioni dei
componenti) nella tecnologia di integrazione dei
microprocessori.
Architettura degli Elaboratori
32
© 2009
Processori superscalari
19
Un processore superscalare usa più di un pipeline, in
modo da poter avviare l’esecuzione di più istruzioni in
parallelo, quando le circostanze lo consentono.
32
Un processore superscalare con N pipeline è
potenzialmente N volte più veloce del suo equivalente
con pipeline singola.
La potenzialità di una CPU superscalare è sfruttata
appieno solo se il codice che viene eseguito è
caratterizzato da un alto grado di parallelismo a livello
di istruzioni (Instruction Level Parallelism - ILP);
altrimenti le prestazioni non differiscono molto da
quelle di una CPU tradizionale.
Architettura degli Elaboratori
© 2009
Prestazioni dei processori superscalari
20
In funzione delle caratteristiche del codice che
viene eseguito e del numero di pipeline,
l’incremento di velocità ottenuto con la
superscalarità, rispetto ad una CPU con pipeline
singolo, ha valori comunemente compresi tra il
50% e il 500%;
per ottenere buone prestazioni è molto
importante individuare le possibilità di ILP nel
codice che deve essere eseguito;
nei processori superscalari attuali, una porzione
significativa dell’hardware (area di silicio) viene
usata a questo scopo.
Architettura degli Elaboratori
© 2009
Esempi storici di processori superscalari
Intel Pentium-I:
2-way superscalar (1993).
Sun SuperSPARC/Viking:
3-way superscalar (1993).
Intel Pentium-II/III:
5-way superscalar (1996-1999).
AMD Athlon/K7:
9-way superscalar (1999).
Architettura degli Elaboratori
32
21
32
© 2009
Speculative execution
22
• Il termine esecuzione speculativa (speculative
execution) è talvolta usato per indicare il fatto che il
processore esegue contemporaneamente, su 2 pipeline,
entrambi i flussi di istruzioni delle due diramazioni di
un salto condizionato, scartandone uno quando il valore
della condizione di salto è divenuto noto;
32
• l’esecuzione speculativa comporta un notevole impiego
di risorse hardware, dal momento che vengono eseguiti
due flussi di istruzioni per raccogliere i risultati di uno
solo;
• l’Intel Pentium Pro/II/III è un esempio storico di
processore con speculative execution.
Architettura degli Elaboratori
© 2009
Out of order execution
23
• Per le istruzioni tra le quali non vi sono dipendenze,
non è necessario che l’esecuzione avvenga nello stesso
ordine con cui esse si trovano in memoria;
• può essere conveniente alterare questo ordine (out of
order execution) in modo da inserire l’esecuzione di
queste istruzioni, prive di dipendenze, tra quelle che
presentano dipendenze, al fine di evitare inceppamenti
(stall ) dei pipeline;
• l’esecuzione fuori ordine consente di sfruttare
maggiormente i pipeline di un processore
superscalare;
• per evitare incongruenze, i risultati prodotti dalle
istruzioni sono solitamente scritti (in memoria o nei
registri) secondo l’ordine originario delle istruzioni.
Architettura degli Elaboratori
32
© 2009
Very Long Instruction Word (VLIW)
24
• La tecnologia VLIW, utilizzata in alcuni processori
superscalari, prevede che istruzioni (indipendenti) la cui
esecuzione può essere avviata contemporaneamente
vengano raggruppate in una unica istruzione;
• ciascuna istruzione VLIW specifica pertanto più operazioni
da eseguire su distinti operandi da parte di più pipeline;
• è responsabilità del compilatore individuare le possibilità di
ILP (parallelismo a livello di istruzioni) e raggruppare in
un’unica VLIW le istruzioni indipendenti;
• rispetto ai processori superscalari privi di VLIW, nei quali la
individuazione e lo sfruttamento dell’ILP è compito dell’HW,
quelli con VLIW hanno un hardware più semplice;
• le prestazioni di un processore VLIW dipendono fortemente
dalla qualità del compilatore.
Architettura degli Elaboratori
CPU tradizionale vs. VLIW
32
© 2009
25
32
Architettura degli Elaboratori
© 2009
Emulazione di CISC con VLIW
26
• La tecnologia VLIW viene anche usata per emulare con
processori RISC le istruzioni di “vecchi” processori CISC
o RISC (backward compatibility);
• per ottenere ciò si usano metodi di “traduzione dinamica”,
con i quali le istruzioni CISC o RISC vengono tradotte in
una singola istruzione VLIW, via software, durante
l’esecuzione;
• per velocizzare la traduzione, i processori VLIW
mantengono in una cache veloce le traduzioni da
CISC/RISC a VLIW;
• ovviamente la hit rate di questa translation cache è molto
importante;
• l’IA-64 “Itanium” dell’Intel e il Crusoe della Transmeta
sono due esempi di processori con tecnologia VLIW;
(chiamata EPIC - Explicit Parallel Instruction Computing da
Intel e “code morphing” da Transmeta).
Architettura degli Elaboratori
© 2009
Register renaming
27
● Nell’esecuzione fuori ordine delle istruzioni,
può accadere che istruzioni indipendenti non
possano essere eseguite in parallelo perché
usano o modificano lo stesso registro.
● Per sfruttare la possibilità di parallelismo
anche in questi casi, il processore può essere
dotato di una gran quantità di registri cui
vengono assegnati i nomi dinamicamente, per
cui a due istruzioni che usano lo stesso registro
il processore può assegnare due registri fisici
diversi (sistemando le cose alla fine).
Architettura degli Elaboratori
32
32
© 2009
Single Instruction Multiple Data (SIMD)
Una istruzione opera le medesime elaborazioni,
simultaneamente, su un insieme di dati.
Questa possibilità è utile negli algoritmi di
elaborazione di immagini (le stesse
trasformazioni operate su tutti i pixel),
nell’elaborazione dei segnali e, in generale, nelle
applicazioni multimediali.
28
32
Esempio:
istruzioni MMX (Multi Media Extension) e SSE
(Streaming SIMD Extension) nelle CPU x86.
Architettura degli Elaboratori
© 2009
CISC vs. RISC
29
CISC: Complex Instruction Set Computer
RISC: Reduced Instruction Set Computer
Per un programma di NI istruzioni, eseguito da un
processore che impiega in media CI periodi di clock (TC)
per eseguire una istruzione, il tempo di esecuzione TE è:
TE = NI × CI × TC
32
Entrambe le architetture CISC e RISC perseguono l’obiettivo
di ridurre i tempi di esecuzione dei programmi:
● CISC cercando di ridurre NI (poche istruzioni
potenti, la cui esecuzione può richiedere molti periodi
di clock CI);
● RISC cercando di ridurre CI (molte istruzioni
semplici, eseguite velocemente, in pochi periodi di
clock CI).
Architettura degli Elaboratori
© 2009
CISC
30
● La facilità con cui in un processore microprogrammato
si possono definire nuove istruzioni, ha portato a
32
processori dotati di istruzioni complesse, tali da
eseguire, con un’unica istruzione, più operazioni che
altrimenti richiederebbero più istruzioni di macchina
(allo scopo di ridurre NI);
● il risparmio di tempo ottenuto evitando le operazioni di
fetch di queste ultime può essere decisamente più
consistente del tempo richiesto per gli accessi,
ancorché numerosi, alla memoria di controllo;
● quest’ultima affermazione era vera fintanto che i
tempi di accesso alla RAM erano molto più lunghi di
quelli per l’accesso alla memoria di controllo.
Architettura degli Elaboratori
© 2009
RISC
31
• Istruzioni con struttura il più possibile uniforme, tale
da garantire che il loro prelievo e la loro esecuzione
avvengano in un numero costante e piccolo di periodi
di clock (lo scopo è di ridurre CI );
• istruzioni progettate per sfruttare bene i pipeline;
• niente microcodice (responsabile della varietà nel
numero di cicli di clock necessari per eseguire
istruzioni diverse);
• il 20% delle istruzioni CISC svolge l’80% del lavoro
(regola dell’80/20): l’obiettivo dei RISC è di essere
capaci di eseguire solo questo 20% ma velocemente
(le operazioni eseguite dal rimanente 80% vengono
realizzate tramite combinazioni delle prime)
Architettura degli Elaboratori
32
© 2009
Caratteristiche dei processori RISC
32
• Pochissime forme di indirizzamento utilizzate (spesso solo
quella “diretta di registro” e “auto-relativa”): le forme di
indirizzamento sofisticate richiedono word di estensione,
comportano istruzioni di diversa lunghezza e un numero
variabile di cicli di clock per la loro esecuzione;
• accessi in memoria consentiti solo a pochissime istruzioni
(load e store);
• un numero di registri elevato (per diminuire la necessità di
accedere alla memoria);
• le istruzioni che accedono alla memoria richiedono un
periodo di clock e una fase di pipeline in più: i rallentamenti
che ne derivano sono drasticamente ridotti dalla presenza
di memoria cache veloce ed efficiente;
• anche l’ordinamento delle istruzioni (prodotto dai
compilatori) è tale da evitare fenomeni di data hazard.
Architettura degli Elaboratori
Confronto RISC vs/ CISC
32
© 2009
33
32
Architettura degli Elaboratori
© 2009
Vantaggi dell’impostazione RISC
34
• Il progresso tecnologico nella velocità delle RAM e nelle
memorie cache ha ridotto i tempi di accesso alla
32
memoria centrale e ha reso meno significativo
il vantaggio della microprogrammazione;
• il progresso nelle tecniche di parallelismo dell’hardware
ha portato ad usare meccanismi (pipeline, etc) che
producono risultati migliori se le istruzioni hanno tutte la
stessa lunghezza e vengono eseguite nello stesso numero
di periodi di clock;
• il progresso nelle tecniche di ottimizzazione dei
compilatori ha portato a produrre codice che sfrutta
bene le risorse del processore che consentono il
parallelismo (registri, cache, pipeline, …).
Architettura degli Elaboratori
© 2009
CISC vs. RISC
35
• Nonostante tutti i vantaggi dei RISC, il numero
di processori CISC esistenti al mondo è almeno 32
1000 volte maggiore di quello dei processori
RISC;
• gli embedded computer (negli elettrodomestici,
nelle automobili, nelle fotocopiatrici, etc.) hanno
quasi sempre un chip CISC al loro interno: la
potenza e le prestazioni dei processori RISC
semplicemente non servono in quelle applicazioni;
• anche tra i calcolatori il numero di macchine con
istruzioni CISC è almeno 20 volte superiore a
quello delle macchine con istruzioni RISC.
Architettura degli Elaboratori
© 2009
x86: CISC o RISC?
36
• L’architettura x86 è di tipo CISC, ma all’interno
dei moderni processori x86 le unità di calcolo
eseguono istruzioni RISC (che consentono di
sfruttare le possibilità di parallelismo presenti
nell’hardware);
• le istruzioni di macchina CISC del programma da
eseguire vengono convertite dall’hardware in
sequenze di istruzioni RISC (chiamate μops
dall’Intel e R-ops dall’AMD); sono queste ultime
ad essere effettivamente inviate ai pipeline.
Architettura degli Elaboratori
32
© 2009
Esempi di processori CISC
37
CISC:
32
▪ Digital: VAX, PDP-11,
▪ Intel: x86 (fino al Pentium),
▪ Motorola: 68000.
CISC con conversione interna a RISC:
▪ Intel: Pentium II/III/4, Core 2, Atom, Core i7
▪ AMD: Athlon, K6, K8.
Architettura degli Elaboratori
© 2009
Esempi di processori RISC
38
RISC:
● desktop e server:
▪
▪
▪
▪
▪
▪
32
Silicon Graphics: MIPS,
Sun Microsystems: SPARC,
Digital: Alpha,
Hewlett Packard: PA-RISC,
IBM e Motorola: PowerPC,
Intel: i860, i960.
● embedded:
▪
▪
▪
▪
Advanced RISC Machines: ARM,
Hitachi: SuperH,
Mitsubishi: M32R,
Silicon Graphics: MIPS16.
Architettura degli Elaboratori
© 2009
Fine
09.a
Le architetture RISC