Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
La CPU pipeline
A. Borghese, F. Pedersini
Dipartimento di Scienze dellInformazione
Universit degli Studi di Milano
A.A. 2009/10
CPU Pipeline 1
lavare,
2.!
asciugare,
3.!
stirare
4.!
mettere via
un carico di biancheria
"!
La lavatrice richiede:
30 minuti
"!
Lasciugatrice:
30 minuti
"!
Stirare richiede:
30 minuti
"!
Piegare/mettere via:
30 minuti
A.A. 2009/10
CPU Pipeline 2
La lavanderia sequenziale
Anna
Bruno
Carla
Dario
!!
!!
A.A. 2009/10
8 ore
CPU Pipeline 3
La lavanderia pipe-line
Anna
Bruno
Carla
Dario
!!
!!
A.A. 2009/10
3,5 ore
CPU Pipeline 4
!!
!!
Aumenta il Throughput
throughput = quantit di lavoro / tempo
A.A. 2009/10
CPU Pipeline 5
!!
unarchitettura pipeline
Prelievo istruzione:
Fase di Fetch
Decodifica
Esecuzione
3: EX: Esecuzione
4: MEM: Accesso a memoria (Read/Write)
5: WB: Scrittura del register file
A.A. 2009/10
Accesso Memoria
Write Back
CPU Pipeline 6
registri pipe-line
Ciclo 1
IF
Ciclo 2
ID
IF/ID
Ciclo 3
EX
ID/EX
A.A. 2009/10
EX/Mem
Ciclo 4
MEM
Ciclo 5
WB
Mem/WB
CPU Pipeline 7
Rappresenzatione convenzionale:
"!
Ascisse (X):
tempo
"!
Ordinate (Y):
Flusso di programma
A.A. 2009/10
CPU Pipeline 8
A.A. 2009/10
CPU Pipeline 9
!!
!!
"!
A.A. 2009/10
CPU Pipeline 10
Istruzioni $
passo %
Istruzioni
tipo R
Istruzioni di
accesso a memoria
Salto
condizionato
1. Fetch
IR = Memory[PC] ; PC = PC + 4
2. Decodifica
A = Reg[IR[25-21]] ; B = Reg[IR[20-16]]
ALUout = PC + (sign_ext(IR[15-0]) << 2)
3. Esecuzione
ALUOut =
A oper B
ALUOut =
A + sign_ext(IR[15-0])
4. Mem: acc.
R: WB
Reg([IR[15-11]] =
ALUOut
lw: MDR=Mem[ALUOut]
sw: Mem[ALUOut] = B
5. Mem: WB
!!
If (A==B) then
PC = ALUOut
Salto non
condizionato
PC = PC[31-28] ||
IR[25-0]<<2
CPU Pipeline 11
Passo esecuzione
1
2
ALU
Memoria
Register File
Fase fetch
Yes (PC+4)
Yes
No
Decodifica
Yes (salto)
No
Yes
Exec I beq
Yes (test)
No
No
Exec I jump
No
No
No
Exec I tipo R
Yes (salto)
No
No
Exec I sw
Yes (indirizzo)
No
No
Exec I lw
Yes (indirizzo)
No
No
Yes (op)
No
Yes
Exec II sw
No
Yes
No
Exec II lw
No
Yes
No
Exec III lw
No
No
Yes
Exec II tipo R
A.A. 2009/10
CPU Pipeline 12
ALU
PC
Yes
No
No
ALU
No
No
Yes
branch
No
No
No
Memoria
Dati
Istruzioni
No
Yes
No
No
No
No
Register
File
No
Yes
No
No
No
No
Yes
No
No
WB (riscrittura)
No
No
No
No
No
Yes
lw $t0, 8($t2)
ALU (PC)
Mem
lw $t1, 12($t2)
RF
ALU
Mem
RF
ALU (PC)
Mem
RF
ALU
Mem
RF
ALU (PC)
Mem
RF
ALU
Mem
RF
ALU-PC
Mem
ALU
(addr.)
lw $t1, 16($t2)
beq $1, $0, +16
A.A. 2009/10
CPU Pipeline 13
Duplicazione memoria
(Dati / Istruzioni)
!!
Triplicazione ALU
A.A. 2009/10
CPU Pipeline 14
Esempio: istruzione
clock(t)
t
A.A. 2009/10
CPU Pipeline 15
RegDst
ALUSrc
Branch
MemtoReg
MemRead
Nessuno
MemWrite
Nessuno
RegWrite
Nessuno
!!
CPU Pipeline 16
!!
!!
Soluzione:
!!
!!
A.A. 2009/10
CPU Pipeline 17
Osservazioni
!!
"!
Fase $
Exec
Memory
WB
Segnali $
% Istruz.
Reg
Dst
ALU
Op1
ALU
Op0
ALU
Src
Branch
MemRead
MemWrite
RegWrite
MemToReg
Tipo R
lw
sw
beq
A.A. 2009/10
CPU Pipeline 18
A.A. 2009/10
CPU Pipeline 19
CPU Pipeline 20
A.A. 2009/10
Considerazioni
!!
!!
!!
!!
!!
"!
strutturali,
"!
di controllo,
"!
sui dati.
A.A. 2009/10
CPU Pipeline 21
!!
Criticit strutturali
"!
"!
Criticit di Dato
"!
"!
lw
"!
A.A. 2009/10
$t0, 16($s1)
CPU Pipeline 22
IF
ID
EX
$1$3
MEM
WB
s$$2
IF
ID
EX
$2 and $5
MEM
WB
s$$12
IF
ID
EX
$6 or $2
MEM
WB
(s$$13)
IF
ID
EX
$2+$2
MEM
WB
s$$14
IF
ID
EX
$2+100
MEM
$15$Mem
sw $15, 100($s2)
!!
"!
"!
WB
A.A. 2009/10
CPU Pipeline 23
"!
!!
CPU Pipeline 24
IF
and $12,
$2, $5
ID
EX
$1$3
IF
ID
or $13,
$6, $2
IF
add $14,
$2, $2
MEM
EX
WB
s$$2
MEM
WB
s$$12
ID
EX
$6 or $2
MEM
WB
(s$$13)
IF
ID
EX
$2+$2
MEM
WB
s$$14
IF
ID
EX
$2+100
MEM
$15$Mem
$2 and $5
sw $15,
100($s2)
WB
!!
!!
!!
CPU Pipeline 25
IF
ID
EX
$1$3
MEM
WB
s$$2
IF
ID
EX
$2 and $5
MEM
WB
s$$12
IF
ID
EX
$6 or $2
MEM
WB
(s$$13)
IF
ID
EX
$2+$2
MEM
WB
s$$14
IF
ID
EX
$2+100
MEM
$15$Mem
WB
!!
!!
A.A. 2009/10
CPU Pipeline 26
CPU Pipeline 27
!!
!!
!!
!!
A.A. 2009/10
CPU Pipeline 28
!!
$2
Datapath:
"!
collegamenti da
ALU:out ad
ALU:in
"!
e da MEM:out a
ALU:in
$1-$3
Controllore:
"!
Unit di
propagazione
A.A. 2009/10
CPU Pipeline 29
t:
IF (RDt-1 == RSt)
then collega: RDt-1 $ RSt
IF (RDt-1 == RTt)
then collega: RDt-1 $ RTt
!!
$2
il contenuto del registro destinazione
dellistruzione precedente la and (sub $2, $1, $3)
contenuto nel registro EX/MEM
t-1
A.A. 2009/10
sub
CPU Pipeline 30
!!
RDt+2 = RDsub = $2
il contenuto del registro destinazione di
2 istruzioni precedenti la or: (sub $2, $1, $3)
che copiato nella fase MEM.
A.A. 2009/10
CPU Pipeline 31
A.A. 2009/10
CPU Pipeline 32
Registro
Sorgente
Funzione
PropagaA = 00
PropagaA = 10
PropagaA = 01
PropagaB = 00
PropagaB = 10
PropagaB = 01
A.A. 2009/10
CPU Pipeline 33
!!
Compilatore efficiente
"!
!!
A.A. 2009/10
CPU Pipeline 34
Sommario
!!
!!
A.A. 2009/10
CPU Pipeline 35
!!
"!
lw $s2, 40($s3)
and $t2,$s2,$s5
or $t3,$s6,$s2
add $t4,$s2,$s2
sw $t5, 100($s2)
A.A. 2009/10
IF
ID
EX
$3+40
MEM
WB
s$ $2
IF
ID
EX
$2 and $5
MEM
WB
s$$t2
IF
ID
EX
$6 or $2
MEM
WB
s$$t3
IF
ID
EX
$2 +$2
MEM
WB
s $ $t4
IF
ID
EX
$2+100
MEM
$t5$Mem
WB
CPU Pipeline 36
IF
ID
EX
$3+40
MEM
WB
s$ $2
IF
ID
EX
$2 and $5
MEM
WB
s$$t2
IF
ID
EX
$6 or $2
MEM
WB
s$$t3
IF
ID
EX
$2 +$2
MEM
Il dato corretto per $s2 pronto nella lw solamente alla fine della MEM
"!
!!
!!
WB
s $ $t4
A.A. 2009/10
CPU Pipeline 37
!!
IF (RDt2 == RTt)
then collega:
A.A. 2009/10
CPU Pipeline 38
lw $s2, 40($s3)
and $t2, $s2, $s5
ID
EX
$s3+40
MEM
WB
s$$s2
IF
ID
EX
$s2 and $s5
MEM
WB
s$$t2
IF
ID
EX
$s2 or $s5
MEM
WB
s$$t2
!!
Il dato corretto per $s2 pronto nella lw solamente alla fine della
fase MEM, ed perci utilizzabile solamente a partire dallinzio della
fase di WB
!!
!
"!
A.A. 2009/10
CPU Pipeline 39
IF
stallo
ID
EX
$s3+40
MEM
WB
s$$s2
IF
ID
EX
$s2 and $s5
MEM
WB
s$$t2
IF
ID
ID
EX
$s2 and $s5
MEM
WB
s$$t2
!!
!!
"!
A.A. 2009/10
CPU Pipeline 40
A.A. 2009/10
EX
DEC
rd, rt
lw $s2, 40($s3)
and $t2, $s2, $s5
CPU Pipeline 41
Riconoscimento Criticit
lw $s2, 40($s3)
IF
ID
EX
MEM
WB
IF and
IDand
EXand
MEMand
ID and
EX and
ID or
EX or
IF or
ID or
IF or
Bubble
A.A. 2009/10
CPU Pipeline 42
!!
!!
CPU Pipeline 43
Sommario
!!
!!
A.A. 2009/10
CPU Pipeline 44
Criticit di salto:
"!
"!
sub $s2,$s1,$s3
beq $t2,$t6,24
or $t7,$s6,$s7
IF
ID
EX
$1$3
MEM
WB
ris.! $s2
IF
ID
EX
zero IF $t2=$t6
MEM
WB
IF
ID
EX
$s6 or $s7
MEM
WB
ris.! $t7
IF
ID
EX
$s8+$s8
MEM
WB
ris.! $t4
IF
ID
EX
MEM
add $t4,$s8,$s8
add $t0,$t1,$t2
A.A. 2009/10
CPU Pipeline 45
Soluzioni possibili...
!!
!!
"!
A.A. 2009/10
CPU Pipeline 46
!!
ci si affida al compilatore
"!
A.A. 2009/10
CPU Pipeline 47
Delayed branch
Delayed branch: esempio
add
beq
add
salto:
add
add
add
beq
add
add
salto:
add
$s4,
$s5,
$t5,
$s0,
$t0,
$s6,
$t4,
$s0,
$t1
salto
$t3
$s1
!!
!!
A.A. 2009/10
CPU Pipeline 48
!!
"!
"!
Se indovino:
"!
Se sbaglio:
"!
A.A. 2009/10
CPU Pipeline 49
del salto:
"!
"!
sub $s2,$s1,$s3
beq $t2,$t5, 24
or $t7,$s6,$s7
add $t4,$s8,$s8
add $t0,$t1,$t2
A.A. 2009/10
IF
ID
EX
$s1$s3
MEM
WB
ris.! $s2
IF
ID
EX
zero IF
$t2=$t5
MEM
WB
IF
ID
EX
$s6 or $s7
MEM
WB
ris.! $t7
IF
ID
EX
$s8+$s8
MEM
WB
ris.! $t4
IF
ID
EX
MEM
CPU Pipeline 50
ALU calcolo
indirizzo di salto
+
Comparatore per
confronto rs ed rt
!!
Modifica della CPU nella gestione dei salti: anticipazione del calcolo dellindirizzo di
salto.
"!
HW addizionale:
"!
"!
A.A. 2009/10
CPU Pipeline 51
A.A. 2009/10
CPU Pipeline 52
!!
!!
A.A. 2009/10
CPU Pipeline 53
!!
annullare la add
"!
saltare a SALTA.
beq
add
sub
or
SALTA: and
$t0,
$s0,
$s3,
$s6
$t2,
$t1,
$s1,
$s4,
$s7,
$t3,
SALTA
$s2
$s5
$s8
$t4
CPU Pipeline 54
!!
In fase di fetch:
"!
!!
A.A. 2009/10
CPU Pipeline 55
CPU
completa:
Gestione di hazard dati/controllo
Gestione di eccezioni/interrupt
A.A. 2009/10
CPU Pipeline 56
Le CPU moderne
!!
!!
!!
Architettura Superscalare:
pi di una istruzione viene iniziata nello stesso ciclo di pipeline
"!
Scheduling statico:
parallelismo definito a priori dal programmatore o dal compilatore (IA-64)
"!
Scheduling dinamico:
parallelismo deciso automaticamente dalla CPU (MIPS, IA-32).
"!
"!
tempi medi di esecuzione della ALU sono met del periodo di clock
fino a 126 istruzioni contemporanee
A.A. 2009/10
CPU Pipeline 57
Superpipeline
!!
Pipelines pi lunghe:
teoricamente guadagno in velocit proporzionale al n. di stadi
Es: Digital DEC Alpha: 5-7 stadi, Intel/AMD: oltre 20 stadi
!!
Problemi:
"!
"!
"!
Maggior numero di registri $ maggiori dimensioni chip $ il clock non si riduce con il
numero degli stadi
A.A. 2009/10
CPU Pipeline 58
!!
"!
!!
% statement 1
# statements 1 e 2 possono
(~p)
% statement 2
# essere parallelizzati!
A.A. 2009/10
CPU Pipeline 59
"!
"!
A.A. 2009/10
CPU Pipeline 60
Schedulazione dinamica:
Schedulazione Dinamica:
!!
Fetch:
Prelievo ed invio alla coda istruzioni
!!
Decodifica:
Conversione in microistruzioni
"!
!!
!!
Esecuzione:
Le istruzioni arrivano alla stazione di prenotazione
corrispondente allunit funzionale richiesta (smistamento)
"!
"!
Commit Unit:
Riordino istruzioni per rispettare lordine sequenziale
"!
CPU Pipeline 61
!!
!!
CPU Pipeline 62
A.A. 2009/10
CPU Pipeline 63
Fetch
Prelievo di 16 byte dalla MI ed invio alla coda istruzioni
!!
Decodifica
Conversione in microistruzioni di lunghezza fisssa: 72 bit
!!
!!
"!
In questa fase vengono valutate le branch (su un certo numero di istruzioni) attraverso
una Branch Prediction Table di 512 elementi
"!
Esecuzione
Le istruzioni vengono alla stazione di prenotazione corrispondente allunit
funzionale richiesta (smistamento)
"!
"!
Riconsegna:
Riordino istruzioni in modo che terminino in modo sequenziale
"!
Lunit di consegna tiene traccia delle istruzioni pendenti all'interno del buffer di riordino.
"!
A.A. 2009/10
CPU Pipeline 64
Esecuzione dellistruzione
!!
!!
!!
!!
"!
"!
"!
A.A. 2009/10
CPU Pipeline 65
Front End
Trace cache
A.A. 2009/10
Scheduling
Execution
CPU Pipeline 66
!!
!!
!!
A.A. 2009/10
CPU Pipeline 67
!!
Nel trasferimento da L1 ed L2 agiscono Branch Target Buffer e lookaside buffer che gestiscono le predizioni sulle branch
!!
!!
A.A. 2009/10
CPU Pipeline 68
Funzioni svolte:
"!
la pipeline ha 20 stadi.
"!
"!
A.A. 2009/10
CPU Pipeline 69
"!
Contiene le micro-istruzioni con il loro stato, la presenza o assenza dei dati, per
tutta la durata dellesecuzione.
"!
"!
"!
!!
!!
C una parte dedicata ai flag che vengono poi inviati alla BTB per
predire correttamente i salti.
A.A. 2009/10
CPU Pipeline 70