ATIVIDADE 3 - DESENVOLVIMENTO E APRENDIZAGEM MOTORA - 52_2024
(ACH2055) Arquitetura de Computadores - Aula 08
1. Arquitetura de Computadores
ACH2055
Aula 08 – Conflitos de Pipeline e Exce¸c˜oes
Norton Trevisan Roman
(norton@usp.br)
24 de outubro de 2019
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 1 / 36
2. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Voltemos ao exem-
plo da aula passada
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
3. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Nele, o problema era que
o valor necess´ario no
2o
est´agio do and sa´ıa
do 5o
est´agio de sub
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
4. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Esse valor, no entanto,
j´a est´a dispon´ıvel ao final
do 3o
est´agio de sub
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
5. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Sendo realmente ne-
cess´ario somente no in´ıcio
do 3o
est´agio de and e or
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
6. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Evitamos ent˜ao o pro-
blema simplesmente en-
viando o dado para quem
precisa assim que ele esti-
ver dispon´ıvel (forwarding)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
7. Conflitos de Dados
Forwarding
Fonte: Adaptado de [1]
Note que o forwarding
foi feito ao final do
3o
est´agio e refeito
ao final do 4o
est´agio,
eliminando assim 2 stalls
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 2 / 36
8. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
9. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
rs ou rt em ID/EX = rd em EX/MEM
A instru¸c˜ao que sai de EX ir´a armazenar o resultado da
ALU em uma entrada da ALU da instru¸c˜ao seguinte
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
10. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
rs ou rt em ID/EX = rd em EX/MEM
Ou seja, o resultado de uma instru¸c˜ao ´e usado
diretamente pela ALU da instru¸c˜ao seguinte
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
11. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
rs ou rt em ID/EX = rd em EX/MEM
Mas somente se a instru¸c˜ao em EX/MEM for realmente
escrever no registrador (caso em que seu RegWrite = 1)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
12. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
rs ou rt em ID/EX = rd em MEM/WB
A instru¸c˜ao que sai de MEM ir´a armazenar o valor lido
em uma entrada da ALU da instru¸c˜ao que sai de ID
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
13. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
rs ou rt em ID/EX = rd em MEM/WB
Novamente, somente se a instru¸c˜ao em MEM/WB for
realmente escrever no registrador (seu RegWrite = 1)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 3 / 36
14. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
Isso, contudo, n˜ao impede forwarding no caso
de tentativas de escrita em $s0 (rd = $s0)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 4 / 36
15. Conflitos de Dados
Forwarding
Sob que condi¸c˜oes forwarding deve ocorrer?
Tipo-R: op rs rt rd shamt funct
Fonte: Adaptado de [1]
Isso, contudo, n˜ao impede forwarding no caso
de tentativas de escrita em $s0 (rd = $s0)
Devemos ent˜ao adicionar essa condi¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 4 / 36
16. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
17. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Se (EX/MEM.RegWrite
e (EX/MEM.Rd = 0) e
(EX/MEM.Rd = ID/EX.Rs))
ForwardA = 10
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
18. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
ForwardA = 10: O pri-
meiro operando da ALU
vem da sa´ıda anterior da
ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
19. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Se (EX/MEM.RegWrite
e (EX/MEM.Rd = 0) e
(EX/MEM.Rd = ID/EX.Rt))
ForwardB = 10
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
20. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
ForwardB = 10: O se-
gundo operando da ALU
vem da sa´ıda anterior da
ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
21. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Se (MEM/WB.RegWrite
e (MEM/WB.Rd = 0) e
(MEM/WB.Rd = ID/EX.Rs))
ForwardA = 01
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
22. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
ForwardA = 01: O pri-
meiro operando da ALU
vem da mem´oria ou de um
resultado anterior da ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
23. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Se (MEM/WB.RegWrite
e (MEM/WB.Rd = 0) e
(MEM/WB.Rd = ID/EX.Rt))
ForwardB = 01
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
24. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
ForwardB = 01: O se-
gundo operando da ALU
vem da mem´oria ou de um
resultado anterior da ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
25. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
O controle de forwarding
est´a no est´agio EX porque
´e onde est˜ao os MUXes da
ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
26. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
Al´em dos registradores
necess´arios para a tomada
de decis˜ao (sobre fazer ou
n˜ao o forwarding)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
27. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Fonte: Adaptado de [1]
N˜ao h´a conflitos em WB
porque os registradores
podem ser escritos e lidos
no mesmo ciclo de clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 5 / 36
28. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Estamos livres de problemas?
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
29. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Estamos livres de problemas?
Considere o seguinte c´odigo:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
30. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
De onde vir´a esse valor?
(add RD, RS, RT)
Estamos livres de problemas?
Considere o seguinte c´odigo:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
31. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
De onde vir´a esse valor?
(add RD, RS, RT)
Se (MEM/WB.RegWrite e (MEM/WB.Rd = 0)
e (MEM/WB.Rd = ID/EX.Rs)) ForwardA = 01
Estamos livres de problemas?
Considere o seguinte c´odigo:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
32. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
De onde vir´a esse valor?
(add RD, RS, RT)
Se (MEM/WB.RegWrite e (MEM/WB.Rd = 0)
e (MEM/WB.Rd = ID/EX.Rs)) ForwardA = 01
Se (EX/MEM.RegWrite e (EX/MEM.Rd = 0)
e (EX/MEM.Rd = ID/EX.Rs)) ForwardA = 10
Estamos livres de problemas?
Considere o seguinte c´odigo:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
33. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
OPS! Dos 2 est´agios seguintes...
Se (MEM/WB.RegWrite e (MEM/WB.Rd = 0)
e (MEM/WB.Rd = ID/EX.Rs)) ForwardA = 01
Se (EX/MEM.RegWrite e (EX/MEM.Rd = 0)
e (EX/MEM.Rd = ID/EX.Rs)) ForwardA = 10
Estamos livres de problemas?
Considere o seguinte c´odigo:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 6 / 36
34. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Que fazer ent˜ao?
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 7 / 36
35. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Que fazer ent˜ao? Fazer com que valha o mais novo:
Fonte: Adaptado de [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 7 / 36
36. Conflitos de Dados
Forwarding Unit: Condi¸c˜oes de Controle
Que fazer ent˜ao? Fazer com que valha o mais novo:
Fonte: Adaptado de [1]
Somente far´a forwarding de WB
se este n˜ao for acontecer em MEM
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 7 / 36
37. Conflitos de Dados
Pipeline Stalls
Vimos na aula passada que forwarding n˜ao evita
todo problema
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 8 / 36
38. Conflitos de Dados
Pipeline Stalls
Vimos na aula passada que forwarding n˜ao evita
todo problema
Como quando
uma instru¸c˜ao
lˆe um
registrador em
seguida a um
lw para esse
mesmo
registrador
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 8 / 36
39. Conflitos de Dados
Pipeline Stalls
Vimos na aula passada que forwarding n˜ao evita
todo problema
Como quando
uma instru¸c˜ao
lˆe um
registrador em
seguida a um
lw para esse
mesmo
registrador
Fonte: [1]
Forwarding n˜ao ajuda,
pela dependˆencia
voltar no tempo
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 8 / 36
40. Conflitos de Dados
Pipeline Stalls
Nesses casos nos resta apenas parar a pipeline at´e o
conflito ser resolvido
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 9 / 36
41. Conflitos de Dados
Pipeline Stalls
Nesses casos nos resta apenas parar a pipeline at´e o
conflito ser resolvido
E para isso, precisamos
de uma unidade de
detec¸c˜ao de
conflitos (Hazard
Detection Unit)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 9 / 36
42. Conflitos de Dados
Pipeline Stalls
Nesses casos nos resta apenas parar a pipeline at´e o
conflito ser resolvido
E para isso, precisamos
de uma unidade de
detec¸c˜ao de
conflitos (Hazard
Detection Unit)
Posicionada em ID,
para que ela possa
introduzir a parada Fonte: [1]
entre a carga e o uso de uma instru¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 9 / 36
43. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
44. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Se (ID/EX.MemRead e ((ID/EX.Rt
= IF/ID.Rs) ou (ID/EX.Rt =
IF/ID.Rt))) pare a pipeline
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
45. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Fazemos isso impedindo que PC e
IF/ID sejam modificados
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
46. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Isso faz com que a instru¸c˜ao no
est´agio IF continue a ser lida com
o mesmo PC
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
47. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
O mesmo ocorre com a instru¸c˜ao
em ID, usando os valores de IF/ID
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
48. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Al´em disso, os sinais de controle
s˜ao desativados (zerados) em ID
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
49. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Criando uma instru¸c˜ao sem efeito
(que n˜ao gera mudan¸cas de estado)
→ um nop
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
50. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Instru¸c˜ao esta que ´e propagada
pela pipeline a cada ciclo do clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
51. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Sem causar escrita em registradores
ou na mem´oria
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
52. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Note que o atraso dura um ´unico
ciclo do clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
53. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Ap´os isso o forwarding pode lidar
com o problema
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
54. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Note tamb´em que somente quando
lw est´a em EX que h´a informa¸c˜ao
suficiente para seu teste
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
55. Conflitos de Dados
Pipeline Stalls
Fonte: Adaptado de [1] Tipo-I: op rs rt deslocamento
Por isso o stall s´o ocorre a partir
desse est´agio, impedindo os efeitos
da instru¸c˜ao que sai de ID/EX
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 10 / 36
56. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
57. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Ao detectar o lw, o controle
de conflitos gera um stall,
transformando o and em nop
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
58. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
A detec¸c˜ao ocorre apenas em
EX, onde a bolha ´e inserida
no pr´oximo ciclo do clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
59. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Nesse momento, contudo,
and e or j´a estavam na
pipeline, ficando “presos”
em seus est´agios (ciclo 4)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
60. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Sendo for¸cados a re-
petir o que fizeram
no ciclo 3 do clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
61. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Como resultado, and e
or tiveram seu tempo de
pipeline “esticado”, enquanto
que as demais instru¸c˜oes
foram atrasadas em um ciclo
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
62. Conflitos de Dados
Pipeline Stalls
Nosso exemplo ent˜ao fica
Fonte: [1]
Ap´os a inser¸c˜ao da bolha,
todas as dependˆencias
se d˜ao para frente no
tempo, sendo ent˜ao tra-
tadas pelo forwarding
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 11 / 36
63. Conflitos de Controle
Branches
Considere o seguinte c´odigo na pipeline:
Fonte: Adaptado de [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 12 / 36
64. Conflitos de Controle
Branches
Considere o seguinte c´odigo na pipeline:
Fonte: Adaptado de [1]
Lembre que o c´alculo do
endere¸co de branch ´e (PC
+ 4) + 4×deslocamento
((40 + 4) + 4 × 7 = 72)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 12 / 36
65. Conflitos de Controle
Branches
Considere o seguinte c´odigo na pipeline:
Fonte: Adaptado de [1]
O problema ´e que, na
ausˆencia de hardware extra
para reduzir o tempo desse
conflito, s´o no ciclo 4 sabe-
remos se o branch ocorrer´a
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 12 / 36
66. Conflitos de Controle
Branches
Considere o seguinte c´odigo na pipeline:
Fonte: Adaptado de [1]
Quando outras 3 ins-
tru¸c˜oes j´a est˜ao na pipeline
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 12 / 36
67. Conflitos de Controle
Branches
Infelizmente, n˜ao h´a um equivalente ao forwarding
para conflitos de controle
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 13 / 36
68. Conflitos de Controle
Branches
Infelizmente, n˜ao h´a um equivalente ao forwarding
para conflitos de controle
Que fazer ent˜ao?
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 13 / 36
69. Conflitos de Controle
Branches
Infelizmente, n˜ao h´a um equivalente ao forwarding
para conflitos de controle
Que fazer ent˜ao?
Assumir que o branch n˜ao ocorrer´a
Reduzir o atraso de branches
Predi¸c˜ao dinˆamica de branches
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 13 / 36
70. Conflitos de Controle
Branches: Assumindo que o branch n˜ao ocorrer´a
Continuamos a execu¸c˜ao, supondo que o branch
n˜ao ocorrer´a
Se ele ocorrer, precisamos descartar as instru¸c˜oes
processadas indevidamente
A execu¸c˜ao continua ent˜ao no alvo do branch
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 14 / 36
71. Conflitos de Controle
Branches: Assumindo que o branch n˜ao ocorrer´a
Continuamos a execu¸c˜ao, supondo que o branch
n˜ao ocorrer´a
Se ele ocorrer, precisamos descartar as instru¸c˜oes
processadas indevidamente
A execu¸c˜ao continua ent˜ao no alvo do branch
E como descartar uma instru¸c˜ao?
Mudando seus valores de controle para 0s (como num stall),
nos est´agios IF, ID e EX, quando o branch chegar a MEM
Processo conhecido como descarga (flush)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 14 / 36
72. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Movemos o tratamento de branches para antes de
MEM
Assim menos instru¸c˜oes precisam ser removidas
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 15 / 36
73. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Movemos o tratamento de branches para antes de
MEM
Assim menos instru¸c˜oes precisam ser removidas
Fazemos isso apenas para testes simples, que n˜ao
necessitam de uma ALU completa
Como testes de igualdade e sinal, por exemplo
Bastante comuns em c´odigo
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 15 / 36
74. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Movemos o tratamento de branches para antes de
MEM
Assim menos instru¸c˜oes precisam ser removidas
Fazemos isso apenas para testes simples, que n˜ao
necessitam de uma ALU completa
Como testes de igualdade e sinal, por exemplo
Bastante comuns em c´odigo
Se testes mais complexos s˜ao necess´arios, usamos
uma instru¸c˜ao separada, para uso da ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 15 / 36
75. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Para isso,
adiantamos o c´alculo
o endere¸co-alvo do
branch
F´acil, pois temos o PC
e o campo imediato da
instru¸c˜ao no
registrador IF/ID
Ent˜ao podemos mover Fonte: [1]
o c´alculo do endere¸co de EX para ID
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 16 / 36
76. Conflitos de Controle
Branches: Reduzindo o atraso de branches
O problema ´e definir
se haver´a ou n˜ao o
branch
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 17 / 36
77. Conflitos de Controle
Branches: Reduzindo o atraso de branches
O problema ´e definir
se haver´a ou n˜ao o
branch
Mover esse teste
para ID implica mais
hardware para
detec¸c˜ao de conflitos
e forwarding
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 17 / 36
78. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Uma vez que o
branch pode
depender do
resultado de uma
instru¸c˜ao ainda na
pipeline
Como no caso de
conflitos de dados
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 18 / 36
79. Conflitos de Controle
Branches: Reduzindo o atraso de branches
Uma vez que o
branch pode
depender do
resultado de uma
instru¸c˜ao ainda na
pipeline
Como no caso de
conflitos de dados
Ainda assim, vale Fonte: [1]
Pois reduz o custo de um branch para apenas 1 instru¸c˜ao,
caso este ocorra
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 18 / 36
81. Conflitos de Controle
Branches: Datapath
Fonte: [1]
Movemos o hardware
de detec¸c˜ao de
branch para ID
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 19 / 36
82. Conflitos de Controle
Branches: Datapath
Fonte: [1]
Para dar um flush em
IF, usamos o sinal
IF.Flush, que zera a
instru¸c˜ao em IF/ID,
transformando-
a em um nop
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 19 / 36
83. Conflitos de Controle
Branches: Exemplo
Considere a seguinte sequˆencia de instru¸c˜oes:
36 sub $10, $4, $8
40 beq $1, $3, 7
44 and $12, $2, $5
48 or $13, $2, $6
52 add $14, $4, $2
56 slt $15, $6, $7
. . .
72 lw $4, 50($7)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 20 / 36
84. Conflitos de Controle
Branches: Exemplo
O que acon-
tece quando o
branch ´e seguido?
Considere a seguinte sequˆencia de instru¸c˜oes:
36 sub $10, $4, $8
40 beq $1, $3, 7
44 and $12, $2, $5
48 or $13, $2, $6
52 add $14, $4, $2
56 slt $15, $6, $7
. . .
72 lw $4, 50($7)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 20 / 36
86. Conflitos de Controle
Branches: Exemplo
Fonte: [1]
No 3o ciclo, o branch
´e determinado em ID,
72 ´e definido como
novo PC e IF.Flush=1
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 21 / 36
87. Conflitos de Controle
Branches: Exemplo
Fonte: [1]
A instru¸c˜ao em
72 ´e buscada, en-
quanto que a bolha
viaja pela pipeline
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 21 / 36
88. Conflitos de Controle
Branches: Exemplo
Fonte: [1]
Com esse es-
quema, uma ´unica
bolha ´e inserida
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 21 / 36
89. Conflitos de Controle
Branches: Predizendo branches dinamicamente
Com hardware adicional, podemos prever o
comportamento de branches durante a execu¸c˜ao
Podemos, por exemplo, verificar se da ´ultima vez que o
endere¸co da instru¸c˜ao foi executado, ocorreu um branch
Se tiver ocorrido, podemos come¸car buscando instru¸c˜oes do
mesmo lugar do ´ultimo branch
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 22 / 36
90. Conflitos de Controle
Branches: Predizendo branches dinamicamente
Com hardware adicional, podemos prever o
comportamento de branches durante a execu¸c˜ao
Podemos, por exemplo, verificar se da ´ultima vez que o
endere¸co da instru¸c˜ao foi executado, ocorreu um branch
Se tiver ocorrido, podemos come¸car buscando instru¸c˜oes do
mesmo lugar do ´ultimo branch
Usamos para isso um buffer de predi¸c˜ao de branch
Uma mem´oria, em ID, indexada por parte do endere¸co da
instru¸c˜ao, contendo um bit dizendo se houve ou n˜ao branch
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 22 / 36
91. Conflitos de Controle
Branches: Predizendo branches dinamicamente
Isso, naturalmente, ´e um “chute”
Nada garante que o comportamento ocorrer´a
Se n˜ao ocorrer, basta dar um flush na instru¸c˜ao
incorretamente carregada, e inverter o bit de predi¸c˜ao no
buffer
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 23 / 36
92. Conflitos de Controle
Branches: Predizendo branches dinamicamente
Isso, naturalmente, ´e um “chute”
Nada garante que o comportamento ocorrer´a
Se n˜ao ocorrer, basta dar um flush na instru¸c˜ao
incorretamente carregada, e inverter o bit de predi¸c˜ao no
buffer
Frequentemente s˜ao usados 2 bits em vez de 1
Exigindo 2 erros antes da mudan¸ca dos bits
E acomodando assim as varia¸c˜oes de comportamento na
entrada e sa´ıda de la¸cos
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 23 / 36
94. Interrup¸c˜oes e Exce¸c˜oes
Defini¸c˜ao
Exce¸c˜ao
Um evento n˜ao programado que interrompe a execu¸c˜ao do
programa (Ex: instru¸c˜ao inv´alida e overflow em opera¸c˜oes
aritm´eticas)
Interrup¸c˜ao
Uma exce¸c˜ao vinda de fora do processador (Ex: E/S)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 25 / 36
95. Interrup¸c˜oes e Exce¸c˜oes
Defini¸c˜ao
Exce¸c˜ao
Um evento n˜ao programado que interrompe a execu¸c˜ao do
programa (Ex: instru¸c˜ao inv´alida e overflow em opera¸c˜oes
aritm´eticas)
Interrup¸c˜ao
Uma exce¸c˜ao vinda de fora do processador (Ex: E/S)
Algumas arquiteturas adotam o nome “interrup¸c˜ao”
para ambas
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 25 / 36
96. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Suponha um overflow em add $1, $2, $1. O que
fazer?
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 26 / 36
97. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Suponha um overflow em add $1, $2, $1. O que
fazer?
O processador salva o endere¸co da instru¸c˜ao problem´atica no
EPC (exception program counter)
De fato, salva seu PC+4
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 26 / 36
98. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Suponha um overflow em add $1, $2, $1. O que
fazer?
O processador salva o endere¸co da instru¸c˜ao problem´atica no
EPC (exception program counter)
De fato, salva seu PC+4
Ele ent˜ao transfere o controle ao sistema operacional, em
algum endere¸co espec´ıfico
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 26 / 36
99. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Suponha um overflow em add $1, $2, $1. O que
fazer?
O processador salva o endere¸co da instru¸c˜ao problem´atica no
EPC (exception program counter)
De fato, salva seu PC+4
Ele ent˜ao transfere o controle ao sistema operacional, em
algum endere¸co espec´ıfico
O S.O. ent˜ao executa a a¸c˜ao apropriada
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 26 / 36
100. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Suponha um overflow em add $1, $2, $1. O que
fazer?
O processador salva o endere¸co da instru¸c˜ao problem´atica no
EPC (exception program counter)
De fato, salva seu PC+4
Ele ent˜ao transfere o controle ao sistema operacional, em
algum endere¸co espec´ıfico
O S.O. ent˜ao executa a a¸c˜ao apropriada
Se resolver n˜ao matar o programa, o S.O. pode usar o EPC
para continuar sua execu¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 26 / 36
101. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Mas saber que instru¸c˜ao causou a exce¸c˜ao n˜ao ´e
suficiente
O S.O. tamb´em precisa saber sua raz˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 27 / 36
102. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Mas saber que instru¸c˜ao causou a exce¸c˜ao n˜ao ´e
suficiente
O S.O. tamb´em precisa saber sua raz˜ao
Algumas arquiteturas usam um arranjo de
interrup¸c˜oes
Um arranjo, indexado pela causa, contendo o endere¸co em
RAM de onde deve estar a rotina de tratamento:
Fonte: [1]
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 27 / 36
103. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
MIPS usa um ´unico ponto de entrada para todas as
exce¸c˜oes
Endere¸co de mem´oria fixo (0x8000 0180), onde deve ser
colocado (pelo S.O.) o c´odigo geral para o tratamento das
exce¸c˜oes
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 28 / 36
104. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
MIPS usa um ´unico ponto de entrada para todas as
exce¸c˜oes
Endere¸co de mem´oria fixo (0x8000 0180), onde deve ser
colocado (pelo S.O.) o c´odigo geral para o tratamento das
exce¸c˜oes
A causa da exce¸c˜ao ´e armazenada em um registrador de
status chamado Registrador de Causa (Cause Register)
Usado pelo S.O. para ativar a rotina de tratamento apropriada
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 28 / 36
106. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Temos o EPC, guar-
dando o endere¸co da ins-
tru¸c˜ao problem´atica (+4)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
107. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
E o registrador de Causa,
guardando a raz˜ao da exce¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
108. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Al´em do endere¸co onde
deve estar a rotina de trata-
mento, no caso de exce¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
109. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Exce¸c˜oes s˜ao trata-
das como uma forma
de conflito de controle
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
110. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Ent˜ao linhas de con-
trole s˜ao criadas, para
flushes em IF, ID e EX
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
111. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Lembre que EX ´e o
est´agio em que o over-
flow ´e detectado na ALU
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
112. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Embora n˜ao seja mostrado,
a ALU envia um sinal de
overflow como entrada
para a unidade de controle
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
113. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Note que flush em IF j´a
estava implementado
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
114. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
E usamos o mesmo mecanismo
de stalls para o flush em IF
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
115. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
O ´unico sinal realmente novo
´e o de flush em EX, tamb´em
para zerar as linhas de controle
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
116. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Muitas exce¸c˜oes exigem que
completemos a instru¸c˜ao ap´os
seu tratamento (Ex: E/S)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
117. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
Fonte: [1]
Para isso, podemos fazer um
flush na instru¸c˜ao e inici´a-la
novamente ao fim da exce¸c˜ao
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 29 / 36
118. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Considere a sequˆencia de instru¸c˜oes:
Endere¸co Instru¸c˜ao
0x40 sub $11, $2, $4
0x44 and $12, $2, $5
0x48 or $13, $2, $6
0x4C add $1, $2, $1
0x50 slt $15, $6, $7
0x54 lw $16, 50($7)
. . .
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 30 / 36
119. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
O que acontece
em caso de over-
flow em add?
Considere a sequˆencia de instru¸c˜oes:
Endere¸co Instru¸c˜ao
0x40 sub $11, $2, $4
0x44 and $12, $2, $5
0x48 or $13, $2, $6
0x4C add $1, $2, $1
0x50 slt $15, $6, $7
0x54 lw $16, 50($7)
. . .
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 30 / 36
121. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
O overflow ´e detectado em
EX e o endere¸co da instru¸c˜ao
seguinte a add ´e salvo em EPC
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
122. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
O sinal de overflow (n˜ao mos-
trado) ´e enviado ao controle,
que liga todos os sinais de flush
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
123. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
Isso ocorre pr´oximo ao
fim desse ciclo de clock
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
124. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
Os sinais de flush trans-
forma as instru¸c˜oes a
partir de add em bolhas
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
125. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
Fazendo tamb´em com
que a instru¸c˜ao em
0x8000 0180 seja buscada
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
126. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
Onde espera-se que o S.O.
tenha colocado o c´odigo
de tratamento de exce¸c˜oes
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
127. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: Exemplo
Fonte: [1]
Vale notar que as ins-
tru¸c˜oes anteriores ao add
(and e or) completaram
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 31 / 36
128. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: M´ultiplas Exce¸c˜oes
M´ultiplas exce¸c˜oes podem ocorrer no mesmo ciclo
de clock
Caso em que devem ser priorizadas
Em muitas implementa¸c˜oes, s˜ao ordenadas de modo a
interromper a instru¸c˜ao mais antiga na pipeline
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 32 / 36
129. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: M´ultiplas Exce¸c˜oes
M´ultiplas exce¸c˜oes podem ocorrer no mesmo ciclo
de clock
Caso em que devem ser priorizadas
Em muitas implementa¸c˜oes, s˜ao ordenadas de modo a
interromper a instru¸c˜ao mais antiga na pipeline
Interrup¸c˜oes (E/S) tem a vantagem de n˜ao serem
associadas a instru¸c˜oes espec´ıficas
Temos mais flexibilidade com rela¸c˜ao a quando interromper,
e podemos usar os mesmos mecanismos das exce¸c˜oes
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 32 / 36
130. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: M´ultiplas Exce¸c˜oes
No caso de m´ultiplas exce¸c˜oes, nada muda com o
EPC
Ele ainda mant´em o endere¸co da instru¸c˜ao seguinte `a
interrompida
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 33 / 36
131. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: M´ultiplas Exce¸c˜oes
No caso de m´ultiplas exce¸c˜oes, nada muda com o
EPC
Ele ainda mant´em o endere¸co da instru¸c˜ao seguinte `a
interrompida
O registrador de causa, contudo, registra todas as
interrup¸c˜oes em um mesmo ciclo de clock
Fazendo com que a rotina de tratamento tenha que casar
cada exce¸c˜ao `a sua instru¸c˜ao correspondente
Para isso, ajuda saber em que est´agio da pipeline cada
exce¸c˜ao pode ocorrer
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 33 / 36
132. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS: M´ultiplas Exce¸c˜oes
As exce¸c˜oes s˜ao mantidas no registrador de causa
em um campo de exce¸c˜oes pendentes
Assim o hardware pode interromper a pipeline com base nas
exce¸c˜oes ainda n˜ao tratadas, quando terminar o tratamento
de alguma
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 34 / 36
133. Interrup¸c˜oes e Exce¸c˜oes
Exce¸c˜oes em MIPS
´E importante que o hardware e o S.O. trabalhem em
conjunto
O hardware deve parar a instru¸c˜ao problem´atica; completar
as anteriores; dar um flush nas posteriores; carregar o
registrador de causa com a causa da exce¸c˜ao; carregar o EPC
com o endere¸co da instru¸c˜ao seguinte `a problem´atica; e
desviar para um endere¸co de mem´oria pr´e-definido
O S.O. deve olhar a causa da exce¸c˜ao e agir
apropriadamente, armazenando o c´odigo para seu
tratamento no endere¸co de mem´oria definido pelo hardware
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 35 / 36
134. Referˆencias
1 Patterson, D.A.; Hennessy, J.L. (2013): Computer Organization and
Design: The Hardware/Software Interface. Morgan Kaufmann. 5a
ed.
Para detalhes sobre as partes do circuito consulte tamb´em o
Apˆendice B e a se¸c˜ao avan¸cada 4.13 (online)
2 http://bellerofonte.dii.unisi.it/index.asp
Simulador de uma arquitetura de pipeline (MIPS)
Norton Trevisan Roman (norton@usp.br) 24 de outubro de 2019 36 / 36