Organizando o Modelo de Ciclo ´
Unico
Fonte: Adaptado de [1]
Voltemos ao datapath
de ciclo ´
unico
Organizando o Modelo de Ciclo ´
Unico
Fonte: Adaptado de [1]
Existe nele uma divis˜
ao de
est´
agios natural, seguindo
Organizando o Modelo de Ciclo ´
Unico
Fonte: Adaptado de [1]
Que vai da
es-querda para a direita
Organizando o Modelo de Ciclo ´
Unico
Fonte: Adaptado de [1]
Com exce¸
c˜
ao da
atua-liza¸c˜
ao do PC e
armaze-namento no registrador,
que “voltam” na pipeline
Organizando o Modelo de Ciclo ´
Unico
Fonte: Adaptado de [1]
Embora n˜
ao afetem a
instru¸
c˜
ao corrente,
in-fluenciam as posteriores
Pipeline
Organizando o Modelo de Ciclo ´
Unico
Separar em est´
agios,
contudo, n˜
ao ´
e simples
Precisamos ent˜
ao reter os
valores parciais de cada
instru¸c˜
ao, para que
possam ser usados nos
est´
agios seguintes
Pipeline
Organizando o Modelo de Ciclo ´
Unico
Separar em est´
agios,
contudo, n˜
ao ´
e simples
Rodaremos instru¸c˜
oes
diferentes em cada est´
agio
instru¸c˜
ao, para que
possam ser usados nos
est´
agios seguintes
Organizando o Modelo de Ciclo ´
Unico
Separar em est´
agios,
contudo, n˜
ao ´
e simples
Rodaremos instru¸c˜
oes
diferentes em cada est´
agio
Precisamos ent˜
ao reter os
valores parciais de cada
instru¸c˜
ao, para que
possam ser usados nos
Organizando o Modelo de Ciclo ´
Unico
Precisamos salvar esses valores em registradores
Organizando o Modelo de Ciclo ´
Unico
Precisamos salvar esses valores em registradores
Organizando o Modelo de Ciclo ´
Unico
Precisamos salvar esses valores em registradores
Fonte: [1]
Os registradores precisam
ser grandes o suficiente
para armazenar os dados
Organizando o Modelo de Ciclo ´
Unico
Precisamos salvar esses valores em registradores
Fonte: [1]
IF/ID, por exemplo,
possui 32b (instru¸
c˜
ao)
+ 32b (PC+4) = 64b
Organizando o Modelo de Ciclo ´
Unico
Precisamos salvar esses valores em registradores
Fonte: [1]
A cada ciclo do clock,
as instru¸
c˜
oes avan¸
cam
de um registrador
da pipeline ao outro
Pipeline
Organizando o Modelo de Ciclo ´
Unico
Mas se cada ciclo comanda a sa´ıda
e entrada de registradores da
pipeline, quando o arquivo de
registradores ser´
a atualizado, j´
a
que est´
a dentro de um est´
agio?
algum atraso (como veremos mais
adiante)
Organizando o Modelo de Ciclo ´
Unico
Mas se cada ciclo comanda a sa´ıda
e entrada de registradores da
pipeline, quando o arquivo de
registradores ser´
a atualizado, j´
a
que est´
a dentro de um est´
agio?
Podemos esperar a pr´
oxima borda do
ascendente clock, mas isso pode gerar
algum atraso (como veremos mais
adiante)
Organizando o Modelo de Ciclo ´
Unico
Alternativamente, podemos mudar
o projeto
Permitindo que o arquivo seja escrito e
lido no mesmo ciclo de clock
A escrita ocorrendo na primeira metade,
e a leitura na segunda
Assim, a leitura retorna o que foi escrito
Basta para isso usar a borda
descendente no arquivo de registradores
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
sw PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
O PC ´
e
incremen-tado e escrito de
volta, esperando o
pr´
oximo ciclo de clock
sw PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
PC+4 tamb´
em ´
e
salvo no registrador
da pipeline, caso a
instru¸
c˜
ao seja um beq
sw PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Toda informa¸
c˜
ao
necess´
aria em um
est´
agio posterior deve
ser passada via um
registrador da pipeline
sw PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1] PC+4 19 17 $19 $17 12Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1] PC+4 PC+4 $19 $17 12 $19+12Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1] $19+12 $17 PC+4 PC+4Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Mas a instru¸
c˜
ao
em PC+4 j´
a n˜
ao
est´
a rodando no
3
oest´
agio (Ex)?
$19+12
$17 PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Sim, e justamente
para controlar
isso existe o MUX
$19+12
$17 PC+4 PC+4
Exemplo 1: sw $17, 12($19)
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Mesmo tendo acabado
no est´
agio anterior, a
instru¸
c˜
ao ainda passa
por todos os demais
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Como as instru¸
c˜
oes
seguintes j´
a est˜
ao
em progresso, n˜
ao h´
a
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Assim, as instru¸
c˜
oes
passam por
to-dos os est´
agios,
mesmo sem precisar
Exemplo 1: sw $17, 12($19)
Fonte: Adaptado de [1]
Pois as instru¸
c˜
oes
posteriores j´
a est˜
ao
caminhando o mais
r´
apido que podem
Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1]
lw PC+4 PC+4
Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1] PC+4 19 17 $19 12Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1] PC+4 PC+4 $19 12 $19+12Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1] $19+12 $19+12 ($19+12) PC+4 PC+4Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1]
($19+12)
Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1]
Que valor est´
a aqui,
se h´
a outra instru¸
c˜
ao
rodando nesse est´
agio?
($19+12)
Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1]
OPS! Assim como
o valor a ser
arma-zenado, tamb´
em o
registrador deve vir
do ´
ultimo est´
agio
($19+12)
Exemplo 2: lw $17, 12($19)
Fonte: Adaptado de [1]Ent˜
ao...
($19+12) ($19+12) 17 17 17 17Exemplo 3: lw $10,40($11); sub $11,$22,$23
PC1+4
lw
Exemplo 3: lw $10,40($11); sub $11,$22,$23
PC1+8 sub PC1+4 11 10 40 $11 Fonte: Adaptado de [1]Exemplo 3: lw $10,40($11); sub $11,$22,$23
PC1+8 22 23 11 $22 $23 PC1+4 40 $11 10 $11+40 Fonte: Adaptado de [1]Exemplo 3: lw $10,40($11); sub $11,$22,$23
10 $11+40 ($11+40) PC1+8 $22 $23 11 $22-$23 Fonte: Adaptado de [1]Exemplo 3: lw $10,40($11); sub $11,$22,$23
($11+40) ($11+40) 10 10 $22-$23 11 Fonte: Adaptado de [1]Exemplo 3: lw $10,40($11); sub $11,$22,$23
$22-$23 $22-$23 11 11 Fonte: Adaptado de [1]Pipeline
Controlando a pipeline
Fonte: [1]
Controlando a pipeline
Fonte: [1]
Agora que temos a pipeline, que mais falta?
Controlando a pipeline
Controlando a pipeline
Fonte: [1]
O PC e os registradores
da pipeline s˜
ao escritos
a cada ciclo do clock,
por isso seus sinais
n˜
ao s˜
ao mostrados
Controlando a pipeline
Fonte: [1]
Inclu´ımos os 6 bits
do campo funct
da instru¸
c˜
ao, para
o controle da ALU
Controlando a pipeline
Fonte: [1]
Bem como um
MUX, para definir
se o registrador de
escrita ser´
a o do
campo rd ou rt
Controlando a pipeline
Fonte: [1]
Para controlar a
pipeline, basta definir
os valores de controle
durante cada est´
agio
Controlando a pipeline
Fonte: [1]
Busca de instru¸
c˜
ao:
os sinais de controle
est˜
ao sempre
liga-dos, ent˜
ao n˜
ao h´
a
nada para controlar
Controlando a pipeline
Fonte: [1]
Decodifica¸
c˜
ao:
O mesmo que na
busca da instru¸
c˜
ao.
Controlando a pipeline
Fonte: [1]
Execu¸
c˜
ao: Devemos
definir RegDst,
ALUOp e ALUSrc
Controlando a pipeline
Fonte: [1]
Acesso `
a mem´
oria:
Devemos definir
Branch, MemRead
Controlando a pipeline
Fonte: [1]
Lembrando que PCsrc
seleciona entre PC+4
(da instru¸
c˜
ao em IF) e
Controlando a pipeline
Fonte: [1]
Write back: definimos
MemtoReg e RegWrite
(este no 3
oest´
agio)
Pipeline
Controlando a pipeline
E como fica o
controle ent˜
ao?
sinais necess´
arios
em cada est´
agio
Uma vez que as
linhas come¸cam no
est´
agio de
execu¸c˜
ao (EX),
Fonte: [1]
Pipeline
Controlando a pipeline
E como fica o
controle ent˜
ao?
sinais necess´
arios
em cada est´
agio
Uma vez que as
linhas come¸cam no
est´
agio de
execu¸c˜
ao (EX),
Fonte: [1]
Pipeline
Controlando a pipeline
E como fica o
controle ent˜
ao?
Cada instru¸c˜
ao
carrega consigo os
sinais necess´
arios
em cada est´
agio
est´
agio de
execu¸c˜
ao (EX),
Fonte: [1]
Controlando a pipeline
E como fica o
controle ent˜
ao?
Cada instru¸c˜
ao
carrega consigo os
sinais necess´
arios
em cada est´
agio
Uma vez que as
linhas come¸cam no
est´
agio de
execu¸c˜
ao (EX),
Fonte: [1]
Controlando a pipeline
Fonte: [1]
Pipeline
Conflitos de Pipeline
9 ciclos de clock
Considere as seguintes instru¸c˜
oes
lw $10, 20($1)
sub $11, $2, $3
add $12, $3, $4
lw $13, 24($1)
add $14, $5, $6
Pipeline
Conflitos de Pipeline
Para complet´
a-las
todas ser˜
ao necess´
arios
9 ciclos de clock
Considere as seguintes instru¸c˜
oes
lw $10, 20($1)
sub $11, $2, $3
add $12, $3, $4
lw $13, 24($1)
add $14, $5, $6
Conflitos de Pipeline
Para complet´
a-las
todas ser˜
ao necess´
arios
9 ciclos de clock
Considere as seguintes instru¸c˜
oes
lw $10, 20($1)
sub $11, $2, $3
add $12, $3, $4
lw $13, 24($1)
add $14, $5, $6
Conflitos de Pipeline
Conflitos de Pipeline
Fonte: [1]
Um componente
sem cor indica
que n˜
ao ´
e usado
Conflitos de Pipeline
Fonte: [1]
Colorido `
a direita
indica que ´
e lido
Conflitos de Pipeline
Fonte: [1]
E `
a esquerda
que ´
e escrito
Conflitos de Pipeline
Fonte: [1]Embora apare¸
ca
2×, o conjunto
de
registrado-res ´
e um s´
o
Conflitos de Pipeline
Fonte: [1]
Problema
ne-nhum com essa
Pipeline
Conflitos de Pipeline
E agora?
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
$2 definido em sub
Valor este definido no 5
o
est´
agio dessa instru¸c˜
ao
Mas qu˜
ao grave ´
e esse
problema, e que instru¸c˜
oes
ser˜
ao afetadas?
Pipeline
Conflitos de Pipeline
E agora?
sub
$2
, $1, $3
and $12,
$2
, $5
or $13, $6,
$2
add $14,
$2
,
$2
sw $15, 100(
$2
)
H´
a uma grande
dependˆ
encia do valor de
$2 definido em sub
Valor este definido no 5
o
est´
agio dessa instru¸c˜
ao
Conflitos de Pipeline
E agora?
sub
$2
, $1, $3
and $12,
$2
, $5
or $13, $6,
$2
add $14,
$2
,
$2
sw $15, 100(
$2
)
H´
a uma grande
dependˆ
encia do valor de
$2 definido em sub
Valor este definido no 5
o
est´
agio dessa instru¸c˜
ao
Mas qu˜
ao grave ´
e esse
problema, e que instru¸c˜
oes
ser˜
ao afetadas?
Conflitos de Pipeline
Conflitos de Pipeline
Fonte: [1]
Suponha que o valor de
$2, antes 10, foi feito
-20 por sub, durante
o 5
ociclo do clock
Conflitos de Pipeline
Fonte: [1]
and e or usar˜
ao o
valor antigo (10)
Conflitos de Pipeline
Fonte: [1]
E somente add e
sw usar˜
ao o
va-lor correto (-20)
Conflitos de Pipeline
Fonte: [1]
Isso se o arquivo de
registradores puder ser lido
Conflitos de Pipeline
Fonte: [1]
As linhas em azul
mos-tram as dependˆ
encias
Conflitos de Pipeline
Fonte: [1]
E o problema fica
claro quando uma
de-pendˆ
encia precisa viajar
Pipeline
Conflitos de Pipeline
Temos aqui um caso de conflito de pipeline
(pipeline hazard )
Uma situa¸c˜
ao em que a instru¸c˜
ao seguinte n˜
ao pode
executar no pr´
oximo ciclo de clock
De dados
De controle
Conflitos de Pipeline
Temos aqui um caso de conflito de pipeline
(pipeline hazard )
Uma situa¸c˜
ao em que a instru¸c˜
ao seguinte n˜
ao pode
executar no pr´
oximo ciclo de clock
H´
a 3 tipos diferentes de conflitos:
Estruturais
De dados
De controle
Pipeline
Conflitos de Pipeline
Conflitos estruturais
Quando o hardware n˜
ao permite que
uma determinada combina¸c˜
ao de
instru¸c˜
oes seja executada no mesmo
ciclo de clock
os registradores da pipeline
Conflitos de Pipeline
Conflitos estruturais
Quando o hardware n˜
ao permite que
uma determinada combina¸c˜
ao de
instru¸c˜
oes seja executada no mesmo
ciclo de clock
Ex: se o arquivo de registradores for
ativado na mesma borda do clock que
os registradores da pipeline
Conflitos de Pipeline
Ou se tiv´
essemos uma ´
unica mem´
oria
Nesse caso, Ter´ıamos um conflito toda vez
que busc´
assemos uma nova instru¸c˜
ao no
mesmo ciclo em que outra acessa dados da
mem´
oria
Pipeline
Conflitos de Pipeline
Conflitos de Dados
Quando uma instru¸c˜
ao
n˜
ao pode executar porque
o dado de que necessita
n˜
ao est´
a dispon´ıvel
rela¸c˜
ao a outra anterior
que ainda est´
a na pipeline
Fonte: [1]´
Pipeline
Conflitos de Pipeline
Conflitos de Dados
Quando uma instru¸c˜
ao
n˜
ao pode executar porque
o dado de que necessita
n˜
ao est´
a dispon´ıvel
Surgem da dependˆ
encia
de uma instru¸c˜
ao com
rela¸c˜
ao a outra anterior
que ainda est´
a na pipeline
Conflitos de Pipeline
Conflitos de Dados
Quando uma instru¸c˜
ao
n˜
ao pode executar porque
o dado de que necessita
n˜
ao est´
a dispon´ıvel
Surgem da dependˆ
encia
de uma instru¸c˜
ao com
rela¸c˜
ao a outra anterior
que ainda est´
a na pipeline
Fonte: [1]´
Pipeline
Conflitos de Pipeline
Conflitos de Dados
Precisamos ent˜
ao parar
(stall ) a pipeline at´
e a 1
a
instru¸c˜
ao se completar
add $s0, $t0, $t1
sub $t2, $s0, $t3
Temos um conflito
Pipeline
Conflitos de Pipeline
Conflitos de Dados
Precisamos ent˜
ao parar
(stall ) a pipeline at´
e a 1
a
instru¸c˜
ao se completar
Suponha agora que temos
as seguintes instru¸c˜
oes:
add $s0, $t0, $t1
sub $t2, $s0, $t3
Conflitos de Pipeline
Conflitos de Dados
Precisamos ent˜
ao parar
(stall ) a pipeline at´
e a 1
a
instru¸c˜
ao se completar
Suponha agora que temos
as seguintes instru¸c˜
oes:
add
$s0
, $t0, $t1
sub $t2,
$s0
, $t3
Temos um conflito
Conflitos de Pipeline: Conflitos de Dados
A solu¸c˜
ao parte do princ´ıpio de que n˜
ao precisamos
esperar que a instru¸c˜
ao se complete:
Assim que a soma ´
e calculada, podemos envi´
a-la a sub
Conflitos de Pipeline: Conflitos de Dados
Processo denominado forwarding ou bypassing
Requer, naturalmente, a adi¸c˜
ao de hardware
Al´
em de ser v´
alido somente se o est´
agio de destino estiver
mais no futuro que o atual
Pipeline
Conflitos de Dados: Forwarding
Forwarding, contudo, n˜
ao previne todo stall
sub $t2, $s0, $t3
O dado estaria dispon´ıvel somente ap´
os o 4
o
est´
agio
de lw
Pipeline
Conflitos de Dados: Forwarding
Forwarding, contudo, n˜
ao previne todo stall
Suponha que as instru¸c˜
oes fossem:
lw $s0, 20($t1)
sub $t2, $s0, $t3
Conflitos de Dados: Forwarding
Forwarding, contudo, n˜
ao previne todo stall
Suponha que as instru¸c˜
oes fossem:
lw $s0, 20($t1)
sub $t2, $s0, $t3
O dado estaria dispon´ıvel somente ap´
os o 4
o
est´
agio
de lw
Pipeline
Conflitos de Dados: Forwarding
Mesmo com forwarding, ainda precisar´ıamos parar a
pipeline por um est´
agio
Conflitos de Dados: Forwarding
Mesmo com forwarding, ainda precisar´ıamos parar a
pipeline por um est´
agio
Fonte: [1]
Stalls da pipeline
s˜
ao tamb´
em
conhe-cidas como bolhas
Conflitos de Dados: Forwarding
Uma maneira de lidar com isso ´
e reordenar o c´
odigo,
quando poss´ıvel
Procedimento adotado por compiladores e montadores
Pipeline
Conflitos de Pipeline
Conflitos de Controle (ou de Branch)
Quando precisamos tomar uma decis˜
ao de controle baseada
no resultado de uma instru¸c˜
ao enquanto outras executam
O atraso em determinar qual instru¸
c˜
ao rodar ´
e chamado de conflito
de controle
Solu¸c˜
ao 1: stall
Pare a pipeline imediatamente ap´
os buscar um branch da mem´
oria
Aguarde at´
e que a pipeline possa determinar o resultado do branch
Pipeline
Conflitos de Pipeline
Conflitos de Controle (ou de Branch)
Quando precisamos tomar uma decis˜
ao de controle baseada
no resultado de uma instru¸c˜
ao enquanto outras executam
O atraso em determinar qual instru¸
c˜
ao rodar ´
e chamado de conflito
de controle
Como, quando em um beq, a instru¸c˜
ao que est´
a na pipeline
n˜
ao ´
e a que deveria ser rodada
Conflitos de Pipeline
Conflitos de Controle (ou de Branch)
Quando precisamos tomar uma decis˜
ao de controle baseada
no resultado de uma instru¸c˜
ao enquanto outras executam
O atraso em determinar qual instru¸
c˜
ao rodar ´
e chamado de conflito
de controle
Como, quando em um beq, a instru¸c˜
ao que est´
a na pipeline
n˜
ao ´
e a que deveria ser rodada
Solu¸c˜
ao 1: stall
Pare a pipeline imediatamente ap´
os buscar um branch da mem´
oria
Aguarde at´
e que a pipeline possa determinar o resultado do branch
Conflitos de Pipeline: Conflitos de Controle
Mesmo com adi¸c˜
ao de hardware para todo o c´
alculo
do branch no 2
o
est´
agio, ainda ter´ıamos paradas
Pois a nova instru¸c˜
ao s´
o poderia ser buscada ap´
os isso
Conflitos de Pipeline: Conflitos de Controle
Ent˜
ao o custo dessa op¸c˜
ao ´
e alto
Pois ter´ıamos que parar a cada branch
Pipeline
Conflitos de Pipeline: Conflitos de Controle
Solu¸c˜
ao 2: Predi¸c˜
ao
Assuma (prediga) que o branch sempre ir´
a falhar
Conflitos de Pipeline: Conflitos de Controle
Solu¸c˜
ao 2: Predi¸c˜
ao
Assuma (prediga) que o branch sempre ir´
a falhar
Se estivermos corretos, n˜
ao haver´
a atraso
Conflitos de Pipeline: Conflitos de Controle
Se estivermos errados, haver´
a o atraso
Al´
em do controle ter que “limpar” a pipeline das instru¸c˜
oes
incorretamente em andamento
Conflitos de Pipeline: Conflitos de Controle
Solu¸c˜
ao 3: Decis˜
ao Adiada
Imediatamente ap´
os o branch, posicione uma instru¸c˜
ao que
n˜
ao seja afetada por ele
Assim, o branch muda o endere¸co somente da instru¸c˜
ao
seguinte a esta instru¸c˜
ao
Pipeline
Conflitos de Controle: Decis˜
ao Adiada
No exemplo abaixo, o add n˜
ao afeta o branch
Conflitos de Controle: Decis˜
ao Adiada
No exemplo abaixo, o add n˜
ao afeta o branch
Podemos ent˜
ao movˆ
e-lo para depois do branch, escondendo
o atraso
Conflitos de Controle: Decis˜
ao Adiada
No exemplo abaixo, o add n˜
ao afeta o branch
Podemos ent˜
ao movˆ
e-lo para depois do branch, escondendo
o atraso
1
Patterson, D.A.; Hennessy, J.L. (2013): Computer Organization and
Design: The Hardware/Software Interface. Morgan Kaufmann. 5
a
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