Capítulo 6
Hazards
1998 Morgan Kaufmann Publishers
Ch6c-1
Dependências de Dados
•
Problema: iniciar uma instrução antes da anterior ter finalizado
• dependências que “voltam no tempo” são hazards de dados
• qual instrução receberá o valor errado de $2 (velho 10, novo -20)
Time (in clock cycles)
CC 1
Value of
register $2: 10
Program
execution
order
(in instructions)
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IM
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
10
10
10
10/– 20
– 20
– 20
– 20
– 20
DM
Reg
Reg
IM
DM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
Reg
Reg
1998 Morgan Kaufmann Publishers
Reg
DM
Reg
Ch6c-2
Erro devido à dependência de dados
sub
and
or
add
sw
$2, $1, $3
$12, $2, $5
$13, $6, $2
$14, $2, $2
$15, 100($2)
• and e or lêem resultado errado (velho 10)
• store está claramente à direita (depois no tempo) e lê resultado
certo (-20)
• hazard no add pode ser evitado se a escrita no banco de
registradores for feita (em CC5) na metade do ciclo (borda de
descida)
Reg WR
CC4
Reg RD
CC5
1998 Morgan Kaufmann Publishers
CC6
Ch6c-3
Solução de software
•
•
•
O compilador deve garantir a ausência de hazards: inserção de nops
Onde inserir os “nops” ?
Quantos?
sub
and
or
add
sw
•
$2, $1, $3
$12, $2, $5
$13, $6, $2
$14, $2, $2
$15, 100($2)
Problema: essa abordagem afeta o desempenho!
1998 Morgan Kaufmann Publishers
Ch6c-4
Forwarding (algumas vezes: bypassing)
•
Usar resultados temporários
• Não esperar que os resultados sejam escritos no banco de registradores
– Unidade de forwarding para manipular leitura/escrita para um mesmo
registrador
Time (in clock cycles)
– ULA forwarding
CC 1
CC 2
CC 3
CC 4
CC 5
CC 6
CC 7
CC 8
CC 9
Value of register $2 : 10
Value of EX/MEM : X
Value of MEM/WB : X
10
X
X
10
X
X
10
– 20
X
10/– 20
X
– 20
DM
Reg
– 20
X
X
– 20
X
X
– 20
X
X
– 20
X
X
Program
execution order
(in instructions)
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
IM
Reg
IM
Reg
IM
DM
Reg
IM
Reg
DM
Reg
IM
E se esse $2 fosse $13?
1998 Morgan Kaufmann Publishers
Reg
DM
Reg
Reg
DM
Reg
Ch6c-5
Forwarding
ID/EX
Control
PC
Instruction
memory
Instruction
IF/ID
WB
EX/MEM
M
WB
MEM/WB
EX
M
WB
M
u
x
Registers
ALU
Data
memory
M
u
x
M
u
x
IF/ID.RegisterRs
IF/ID.RegisterRt
IF/ID.RegisterRt
Rs
Rt
Rt
IF/ID.RegisterRd
Rd
M
u
x
EX/MEM.RegisterRd
Forwarding
unit
1998 Morgan Kaufmann Publishers
MEM/WB.RegisterRd
Ch6c-6
Forward não é válido para todos os casos
•
Load (lw) ainda pode causar um hazard
– Uma instrução, após um load, tenta ler um registrador que é o
alvo (destino) do load
Time (in clock cycles)
Program
CC1
CC2
execution
order
(in instructions)
Reg
lw$2, 20($1) IM
and $4, $2, $5
–
or $8, $2, $6
add $9, $4, $2
slt $1, $6, $7
•
IM
CC3
CC4
CC5
DM
Reg
Reg
IM
DM
Reg
IM
CC6
CC 8
CC9
Reg
DM
Reg
IM
CC7
Reg
DM
Reg
Reg
DM
Reg
Uma unidade de detecção de hazard é necessária para travar (stall) a
instrução de load
1998 Morgan Kaufmann Publishers
Ch6c-7
Stalling
•
A idéia de stall consiste em “congelar” instruções em seus
respectivos estágios
Program
Time (in clock cycles)
execution
CC 1
CC 2
order
(in instructions)
lw $2, 20($1)
and $4, $2, $5
or $8, $2, $6
IM
CC 3
Reg
IM
Reg
IM
CC 4
CC 5
DM
Reg
Reg
IM
CC 6
CC 7
DM
Reg
Reg
DM
CC 8
CC 9
CC 10
Reg
bubble
add $9, $4, $2
slt $1, $6, $7
IM
DM
Reg
IM
Reg
1998 Morgan Kaufmann Publishers
Reg
DM
Reg
Ch6c-8
Unidade de detecção de hazards
ID/EX.MemRead
IF/IDWrite
Hazard
detection
unit
ID/EX
Control
0
M
u
x
PC
Instruction
memory
Instruction
PCWrite
IF/ID
WB
EX/MEM
M
WB
MEM/WB
EX
M
WB
M
u
x
Registers
ALU
Data
memory
M
u
x
IF/ID.RegisterRs
IF/ID.RegisterRt
IF/ID.RegisterRt
IF/ID.RegisterRd
ID/EX.RegisterRt
Rt
Rd
Rs
Rt
M
u
x
M
u
x
EX/MEM.RegisterRd
Forwarding
unit
1998 Morgan Kaufmann Publishers
MEM/WB.RegisterRd
Ch6c-9
a n d $ 4, $2 , $ 5
lw $ 2 , 20 ($ 1 )
1
X
IF/IDWrite
Exemplo
pag 493
b efo re < 1 >
Hazard
detection
unit
ID/EX.MemRead
ID/EX
11
WB
Control
0
M
u
x
PCWrite
IF/ID
PC
Instruction
1
Instruction
memory
b efo re < 2>
b e fo re <3 >
EX/MEM
M
WB
MEM/WB
EX
M
WB
$1
M
u
x
X
Registers
Data
memory
ALU
$X
M
u
x
M
u
x
1
X
2
M
u
x
ID/EX.RegisterRt
Forwarding
unit
C l oc k 2
o r $ 4, $4 , $ 2
lw $ 2 , 2 0 ($ 1 )
a nd $4 , $ 2, $ 5
Hazard
detection
unit
IF/IDWrite
2
5
ID/EX.MemRead
ID/EX
11
00
WB
Control
0
M
u
x
PCWrite
IF/ID
PC
$2
Instruction
2
Instruction
memory
b e fore < 1 >
EX/MEM
M
WB
MEM/WB
EX
M
WB
$1
M
u
x
5
Registers
$5
ALU
$X
M
u
x
2
5
4
ID/EX.RegisterRt
C l oc k 3
be fore < 2>
1
X
2
M
u
x
Forwarding
unit
Data
memory
M
u
x
or $ 4 , $ 4, $2
a nd $ 4, $2 , $ 5
2
5
Control
0
M
u
x
PCWrite
IF/ID
PC
Instruction
2
Instruction
memory
lw $ 2 , . . .
ID/EX.MemRead
ID/EX
10
00
WB
IF/IDWrite
Exemplo
pag 493
bu b b le
Hazard
detection
unit
EX/MEM
M
WB
EX
M
$2
b e fo re < 1>
11
MEM/WB
WB
$2
M
u
x
5
Registers
$5
Data
memory
ALU
$5
M
u
x
M
u
x
2
5
2
5
4
4
2
M
u
x
ID/EX.RegisterRt
Forwarding
unit
C lo ck 4
a d d $ 9, $ 4 , $ 2
o r $ 4, $4 , $ 2
an d $ 4, $2 , $ 5
Hazard
detection
unit
ID/EX.MemRead
ID/EX
10
10
WB
IF/IDWrite
4
2
Control
0
M
u
x
PCWrite
IF/ID
PC
Instruction
4
Instruction
memory
b u b ble
$4
lw $2 , . . .
M
EX/MEM
0
WB
MEM/WB
EX
M
WB
11
$2
M
u
x
2
2
Registers
ALU
$2
$5
Data
memory
M
u
x
M
u
x
ID/EX.RegisterRt
C lo ck 5
4
2
2
5
4
4
M
u
x
2
Forwarding
unit
Hazards de desvio
•
Quando o desvio é decidido, outras instruções estão no pipeline
Time (in clock cycles)
Program
execution
CC 1
CC2
order
(in instructions)
40 beq $1, $3, 7
44 and $12, $2, $5
48 or $13, $6, $2
52 add $14, $2, $2
72 lw $4, 50($7)
•
•
IM
CC 3
Reg
IM
CC 4
CC 5
DM
Reg
Reg
IM
DM
Reg
IM
CC 6
CC 8
CC 9
Reg
DM
Reg
IM
CC 7
Reg
DM
Reg
Reg
DM
Reg
Nesse caso, considera-se que o desvio não será tomado (branch not
taken) uma vez que o stall afeta o desempenho consideravelmente
É necessário mais um hardware para limpar (flush) as instruções,
caso elas não sejam as instruções corretas (alvos do desvio)
Ch6c-12
1998 Morgan Kaufmann Publishers
Diminuindo a penalidade do “branch taken”
•
•
•
no esquema anterior
– decisão só é tomada no estágio MEM
– caso “branch taken” é necessário limpar (flush) os estágios IF, ID
e EX
– 3 ciclos de clock perdidos
para diminuir a penalidade:
– antecipar a decisão do estágio MEM para o estágio ID
– economia de dois ciclos clocks
– Limpar somente instrução sendo lida da memória (fetched)
mudanças no hardware:
– cálculo do endereço do desvio (PC + offset<<2)
– comparação dos registradores
• 32 XORs com or na saída
• mais rápido do que a ALU
1998 Morgan Kaufmann Publishers
Ch6c-13
Limpando instruções
IF.Flush
Hazard
detection
unit
ID/EX
M
u
x
Control
0
M
u
x
IF/ID
4
EX/MEM
M
WB
MEM/WB
EX
M
WB
Shift
left 2
=
PC
WB
M
u
x
Registers
Instruction
memory
ALU
Data
memory
M
u
x
M
u
x
Sign
extend
M
u
x
Forwarding
unit
1998 Morgan Kaufmann Publishers
Ch6c-14
and $12, $2, $5
beq $1, $3, 7
sub $10, $4, $8
before<1>
before<2>
IF.Flush
Hazard
detection
unit
72
48
ID /EX
M
u
x
WB
Control
Funcionamento do
branch taken com
mudança na decisão
28
0
M
u
x
IF/ID
48
44
EX/MEM
M
WB
EX
M
MEM/WB
WB
72
4
$1
Shift
left 2
Registers
72
PC
In struc tion
memory
44
M
u
x
=
$4
Data
memory
ALU
$3
M
u
x
7
MEM -->ID
M
u
x
$8
Sign
extend
(fig 6.52)
10
Forwarding
unit
Clock 3
lw $4, 50($7)
bubble(nop)
beq $1, $3, 7
sub $10, . . .
before<1>
IF.Flush
40 beq $1, $3, 7
Hazard
detection
unit
ID /EX
76
M
u
x
WB
M
u
x
Control
44 and $12, $2, $5
EX/MEM
M
WB
EX
M
MEM/WB
0
IF/ID
76
WB
72
4
Shift
left 2
48 or $13, $6, $2
Registers
PC
76
72
=
M
u
x
In struc tion
memory
Data
memory
ALU
M
u
x
52 add $14, $2, $2
$1
$3
Sign
extend
10
72 lw $4, 50($7)
Forwarding
unit
Clock 4
M
u
x
Melhorando o desempenho...
•
Tente evitar os stalls! Ex: reordene as instruções a seguir:
lw
lw
sw
sw
•
•
•
$t0,
$t2,
$t2,
$t0,
0($t1)
4($t1)
0($t1)
4($t1)
Adicione um slot de atraso do desvio “branch delay slot”
– A próxima instrução depois do desvio é sempre executada
– Depende do compilador preencher “fill” o slot com alguma
instrução útil
Previsão de desvios (Branch Prediction)
– tentar acertar se o desvio será tomado ou não
– em loops, desvio é tomado a maior parte das vezes
– Necessidade de uma branch history table
Em máquinas superscalarers: mais de uma instrução é iniciada no
mesmo ciclo
1998 Morgan Kaufmann Publishers
Ch6c-16
Delay slot
a. From before
add $s1, $s2, $s3
if $s2 = 0 then
Delay slot
b. From target
sub $t4, $t5, $t6
…
c. From fall through
add $s1, $s2, $s3
if $s1 = 0 then
add $s1, $s2, $s3
Delay slot
if $s1 = 0 then
Delay slot
Becomes
Becomes
sub $t4, $t5, $t6
Becomes
add $s1, $s2, $s3
if $s1 = 0 then
if $s2 = 0 then
add $s1, $s2, $s3
sub $t4, $t5, $t6
add $s1, $s2, $s3
if $s1 = 0 then
sub $t4, $t5, $t6
1998 Morgan Kaufmann Publishers
Ch6c-17
Escalonamento Dinâmico
•
O hardware realiza o escalonamento (“scheduling”)
– Hardware tenta encontrar instruções para executar
– Execução fora-de-ordem é possível
– Execução especulativa e previsão dinâmica de desvios
– TODOS os processadores modernos possuem algum(ns) desse(s)
recurso(s) e, por isso, são bastante complicados!
– DEC Alpha 21264: 9 estágios de pipeline, 6 instruções podem ser
despachadas simultaneamente
– PowerPC e Pentium: possuem uma branch history table
– A tecnologia existente no compilador está cada vez mais importante
1998 Morgan Kaufmann Publishers
Ch6c-18
Comparação de desempenho
•
•
•
•
para monociclo, multiciclo e pipeline
gcc: lw (23%), sw (13%), beq (19%), j (2%), resto (43%)
pipeline:
– 2ns (memória e ALU) e 1ns para o registrador (RD ou WR)
– 1/2 dos lw seguidos por instruções que usam o resultado
– 1/4 dos beq são errados (1 clock perdido)
– jumps perdem um ciclo
pipeline:
– lw: 1 clock sem hazard e 2 clock com hazard; média = 1.5
– beq: 1 clock se OK (3/4) e 2 clocks se não OK (1/4); média = 1.25
– jump: 2 clocks
– demais instruções: 1 clock
•
•
•
•
CPI = 1.5*0.23+1*0.13+1*0.43+1.25*0.19+2*0.02 = 1.18
clock = 2ns; tempo médio de execução = 2*1.18=2.36ns
multiciclo; 4.02*2=8.08ns; monociclo = 8ns
pipeline é 3.4 vezes mais rápido do que monociclo ou multiciclo
1998 Morgan Kaufmann Publishers
Ch6c-19
Circuito completo
Branch
IF.Flush
EX.Flush
ID.Flush
Hazard
detection
unit
WB
Control
IF/ID
4
Instruction
memory
PC
Address
Read
data
Instruction
Shift
left 2
0
0
16 Sign
extend
Except
PC
=
ALUSrc
WB
Data
memory
ALU
M
u
x
MEM/WB
M
M
u
x
32
Instruction [25– 21]
Instruction [20– 16]
Instruction [20– 16]
Instruction [15– 11]
WB
Cause
EX
Read
Read
register 1data 1
Read
register 2
Registers
Write
register Read
data 2
Write
data
EX/MEM
M
u
x
M
RegWrite
0
M
u
x
M
u
x
M
u
x
ALU
control
ALUOp
RegDst
M
u
x
Forwarding
unit
Address
Read
data
Write
data
MemRead
MemtoReg
ID/EX
M
u
x
MemWrite
40000040
M
u
x
Download

Pipeline-Hazards - Facom-UFMS