Architettura funzionale Pentium Pro
256 KB integrata
4 cicli per operazione
L2 Cache
System Bus
Bus Interface Unit
8 KB integrata
1 ciclo per
operazione
3 istruz.
per ciclo
L1 I-Cache
Fetch/Decode
unit
in-order
L1 D-Cache
5 istruz.
per ciclo
Dispatch/Execute
unit
out-of-order
Instruction Pool
8 KB integrata
1 ciclo per
operazione
Retire
unit
3 istruz.
per ciclo
in-order
ARCHITETTURA CPU
L2
ext. BUS
MOB
BIU
DCU
IFU
MIU
AGU
BTB
RS
ID
FEU
MIS
ROB
RRF
RAT
front end in-order
IEU
core out-of-order
back end in-order
Legenda schema Pentium pro
BIU Bus Interface Unit
IFU Instruction Fetch Unit
ID Instruction Decoder
BTB Branch Target Buffer
MIS Microcode Instruction
Sequencer
RAT Register Alias Table
ROB ReOrder Buffer
RRF Retirement Register File
RS Reservation Station
FEU Floating point Execute Unit
IEU Integer Execute Unit
AGU Address Generation Unit
MIU Memory Interface Unit
DCU Data Cache Unit
MOB Memory Order Buffer
pipeline Pentium Pro
1
2
3
4
5
6
31
32
33
34
35
36
7
8
9
10
11
1
2
3
4
5
Cicli di clock = 0
6
7
8
9
10
11
12
Istruzioni completate = 0
pipeline Pentium Pro
Il pipeline esegue il prefetch
di tutte le istruzioni disponibili, e ne determina le dipendenze. Nell’esempio:
prima la #1 e poi la #3
prima la #4 e poi la #5
prima la #32 e poi la #33
prima la #34 e poi la #35
prima la #7 e poi la #8
prima la #9 e poi la #11
: istruzione eseguibile
1
immediatamente
: istruzione sospesa
3
in attesa di dati
1
2
3
4
5
6
31
32
33
34
35
36
7
8
9
10
11
1
2
3
4
5
Cicli di clock = 0
6
7
8
9
10
11
12
Istruzioni completate = 0
pipeline Pentium Pro
1
2
Il Pentium Pro ha un
pipeline superscalare a tre
livelli con esecuzione outof-order, preceduto da un
modulo di prefetch e
seguito da un modulo di
writeback per aggiornare lo
stato della CPU in-order.
Manda quindi in esecuzione
le prime tre istruzioni
pronte, cioè #1, #2 e #4.
La #3 viene accantonata
perché non è pronta.
Al termine le modifiche
apportate dalle istruzioni #1
e #2 vengono registrate
nello stato della CPU.
1
aggiornamento in-order dello stato della CPU
2
3
4
4
istruzione da 2 cicli
5
6
31
32
33
34
35
36
7
8
9
10
11
1
2
3
4
5
Cicli di clock = 1
6
7
8
9
10
11
12
Istruzioni completate = 2
pipeline Pentium Pro
1
1
2
2
3
4
3
L1 miss
4
5
6
6
31
31
32
33
34
35
36
7
8
9
10
11
1
2
3
4
5
Cicli di clock = 2
6
7
8
9
10
11
12
L’istruzione #4 si conclude,
ma le sue modifiche non
vengono ancora registrate
perché l’istruzione che la
precede non è ancora
terminata (writeback inorder). L’istruzione #5 non
è ancora pronta, quindi il
pipeline carica altre tre
istruzioni, la #3 (che nel
frattempo è diventata
pronta), la #6 e la #31. La
ricerca delle dipendenze
segue anche i salti. La #3
determina un miss in L1, e
quindi durerà 4 cicli.
Tuttavia il pipeline non si
blocca.
Istruzioni completate = 2
pipeline Pentium Pro
1
1
2
2
3
4
3
L’istruzione #3 resta sempre
in attesa. Il termine interno
della #4 permette
l’esecuzione della #5.
Le altre due nuove
istruzioni eseguibili da
immettere nel pipeline sono
la #32 e la #34, anche se
quest’ultima causa un miss
su L1 della durata di 4 cicli.
La gestione degli accessi
esterni (L2) è composto da
un altro pipeline a 4 livelli,
cioè si possono accodare
fino a 4 richieste di dati in
parallelo.
L1 miss
4
5
5
6
6
31
31
32
32
33
34
34
L1 miss
35
36
7
8
9
10
11
1
2
3
4
5
Cicli di clock = 3
6
7
8
9
10
11
12
Istruzioni completate = 2
pipeline Pentium Pro
1
1
2
2
3
4
3
Le istruzioni #3 e #34
restano sempre in attesa. Le
modifiche apportate dalle
istruzioni #4, #5, #6, #31,
#32 non vengono ancora
registrate.
L1 miss
4
5
5
6
6
31
31
32
32
33
33
34
34
L1 miss
35
36
36
7
7
istruzione lunga due cicli
8
9
10
11
1
2
3
4
5
Cicli di clock = 4
6
7
8
9
10
11
12
Istruzioni completate = 2
pipeline Pentium Pro
1
1
2
2
3
4
3
Vengono immesse nel
pipeline le istruzioni #9 e
#10, e l’ipotetica istruzione
#12. L’istruzione #3
finalmente termina e
svincola anche le modifiche
delle istruzioni #4 e #5 che
aggiornano nella giusta
sequenza lo stato della
CPU. Il modulo di
Writeback può aggiornare al
massimo tre istruzioni per
volta, e quindi le modifiche
apportate dalle istruzioni
#6, #31, #32, #33, #36, #7 e
#10 non vengono ancora
registrate.
L1 miss L2 hit
4
5
5
6
6
31
31
32
32
33
33
L1 miss
34
34
35
36
36
7
7
8
9
9
10
10
L1 miss
11
1
2
3
4
5
6
7
8
9
10
11
12
12
Cicli di clock = 5
Istruzioni completate = 5
pipeline Pentium Pro
1
1
2
2
3
4
Vengono immesse nel
pipeline l’istruzione #8,
finalmente pronta, e le
ipotetiche istruzioni #13 e
#14. Le istruzioni #34 ed #8
terminano ed escono dal
pipeline, la #9 resta sempre
in attesa. Le modifiche
apportate dalle istruzioni
#6, #31 e #32 vengono
registrate in-order nel
registro di stato della CPU.
3
4
5
5
6
6
31
31
32
32
33
33
34
34
L1 miss L2 hit
35
36
36
7
7
8
8
9
9
10
10
L1 miss
11
1
2
3
4
5
6
12
13
7
8
9
10
11
12
14
Cicli di clock = 6
Istruzioni completate = 8
pipeline Pentium Pro
1
1
2
2
3
4
Vengono immesse nel
pipeline l’istruzione #35,
finalmente pronta, e le
ipotetiche istruzioni #15 e
#16. L’istruzione #9 resta
sempre in attesa. Le
modifiche apportate dalle
istruzioni #36, #7, #8 e #10
non vengono ancora
registrate.
3
4
5
5
6
6
31
31
32
32
33
33
34
34
35
35
36
36
7
7
8
8
9
9
10
10
L1 miss
11
1
2
3
4
5
6
7
12
13
15
14
16
Cicli di clock = 7
8
9
10
11
12
Istruzioni completate = 11
pipeline Pentium Pro
1
1
2
2
3
4
Vengono immesse nel
pipeline le ipotetiche
istruzioni #17, #18 e #19.
L’istruzione #9 termina ma
le sue modifiche non
vengono registrate. Le
modifiche apportate dalle
istruzioni #36, #7 e #8
vengono registrate in-order
nel registro di stato della
CPU.
3
4
5
5
6
6
31
31
32
32
33
33
34
34
35
35
36
36
7
7
8
8
9
9
10
10
L1 miss L2 hit
11
1
2
3
4
5
6
7
8
12
13
15
17
14
16
18
9
10
11
12
19
Cicli di clock = 8
Istruzioni completate = 14
pipeline Pentium Pro
1
1
2
2
3
4
3
4
5
5
6
6
31
31
32
32
33
33
34
34
35
35
36
36
7
7
8
8
9
9
10
10
11
11
1
2
3
4
5
6
7
8
9
12
13
15
17
20
14
16
18
21
10
11
12
Vengono immesse nel
pipeline l’istruzione #11
finalmente pronta, e le
ipotetiche istruzioni #20 e
#21. Al fine del ciclo le
modifiche apportate dalle
istruzioni #9, #10 e #11
vengono registrate in-order
nel registro di stato della
CPU. Globalmente dopo 9
cicli di clock sono state
eseguite in ordine 17
istruzioni, e sono state
immesse nel pipeline e
potenzialmente pronte per
essere terminate altre 10
istruzioni. A regime si può
arrivare a 3 istruzioni per
ciclo.
19
Cicli di clock = 9
Istruzioni completate = 17
pipeline Pentium Pro
I principi dell’esecuzione dinamica sono:
•Multiple branch predition
•DataFlow analysis
•Speculative execution
Acquisizione delle istruzioni e loro completamento secondo l’ordine voluto dal
programmatore.
Esecuzioni interna out-of-order, per ottimizzare l’occupazione del pipeline interno, secondo
modalità data-flow.
Quando si verificano interrupt, predizioni errate di salti, miss anche a livello L2 o eccezioni
interne, il pipeline deve essere in grado di annullare il lavoro di esecuzione preventiva svolto
in precedenza
.
Speculative execution (esecuzione preventiva o esecuzione anticipata?)
Scarica

pip_pro