Conflitos
Aula 9
31 de Março de 2005
1
Estrutura desta aula
z
z
z
z
z
z
z
Taxonomia dos conflitos
Dependências entre instruções
Conflitos num pipeline
Conflitos estruturais
Conflitos de dados
Conflitos de controlo
Ref: Hennessy e Patterson, A2, A4
Patterson e Hennessy, 6.4-6.6
31 de Março de 2005
Arquitectura de Computadores 2004/05
2 - Aula 9
Taxonomia dos conflitos
z
3 diferentes tipos de conflitos (“hazards”) podem atrasar
a execução das instruções no pipeline:
• Conflitos estruturais: uma instrução no pipeline necessita
•
•
de um recurso que está a ser usado por outra instrução no
pipeline
Conflitos de dados: uma instrução no pipeline tem a sua
execução dependente dos resultados de outras instruções
anteriores que estão no pipeline => dependência de
instruções que podem ou não gerar conflitos de dados
Conflitos de controlo: alterações ao fluxo normal do
programa só conhecidas em andares posteriores do pipeline
e o fetch de uma instrução é feito no primeiro andar
•
por exemplo, BEQ R1,R2,offset só faz o teste à igualdade ou
desigualdade entre R1 e R2 no andar EX do pipeline
31 de Março de 2005
Arquitectura de Computadores 2004/05
3 - Aula 9
Conflitos estruturais (1)
z
z
z
Conflito estrutural quando duas ou mais instruções no
pipeline querem utilizar o mesmo recurso de hardware no
mesmo ciclo de relógio
Exemplos:
•
•
•
Um único somador serve para os Branches e para a ALU
Múltiplos acessos a uma Memória única
Múltiplos acessos à Register File
Soluções
•
Provocar uma bolha (stall) no pipeline (veremos à frente
como implementar uma bolha)
•
•
A bolha atrasa a instrução que se segue no pipeline e todas as
instruções posteriores (mais à frente no programa)
Replicar os recursos de hardware envolvidos no conflito
31 de Março de 2005
Arquitectura de Computadores 2004/05
4 - Aula 9
Conflitos estruturais (2)
z
Exemplo 1:
31 de Março de 2005
Sem o ADDER#2, o cálculo do endereço e o
processamento aritmético precisariam do
acesso À ALU no mesmo ciclo de relógio
=> obviamente impossível !
Arquitectura de Computadores 2004/05
5 - Aula 9
Conflitos estruturais (3)
z
Exemplo 2: Duas instruções precisam de aceder à
memória no mesmo ciclo de relógio
•
O conflito apenas existe se a memória for única, como
indica o acetato a seguir
31 de Março de 2005
Arquitectura de Computadores 2004/05
6 - Aula 9
Conflitos estruturais (4)
DSUB R5,R6,R7
DADD R10,R11,R12
DADD R12,R10,R11
31 de Março de 2005
R
M
Ciclo 7
M
R
R
M
R
M
R
M
R
M
R
ALU
M
Ciclo 5 Ciclo 6
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
ALU
LW R2,10(R4)
Tempo
ALU
Execução do
programa
M
Arquitectura de Computadores 2004/05
Ciclo 8
R
7 - Aula 9
Conflitos estruturais (5)
z
Solução 1:
•
•
•
Inserir uma bolha (fazer o stall do pipeline durante 1 ciclo
de relógio)
Atrasa a instrução que entra no pipeline e todas as que se
lhe seguem no programa
Pode ser implementada com uma instrução NOP
31 de Março de 2005
Arquitectura de Computadores 2004/05
8 - Aula 9
Conflitos estruturais (6)
DSUB R5,R6,R7
DADD R10,R11,R12
STALL (NOP)
DADD R12,R10,R11
31 de Março de 2005
R
M
Ciclo 8
M
R
R
M
R
M
R
M
R
bubble
bubble
bubble
bubble
bubble
M
R
ALU
M
Ciclo 5 Ciclo 6 Ciclo 7
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
ALU
LW R2,10(R4)
Tempo
ALU
Execução do
programa
M
Arquitectura de Computadores 2004/05
9 - Aula 9
Conflitos estruturais (7)
z
Solução 2:
•
•
Replicar o recurso
Esta é a razão pela qual se usam, em geral, duas memórias
separadas, uma Memória de Instruções (IM) e uma Memória
de Dados (DM)
31 de Março de 2005
Arquitectura de Computadores 2004/05
10 - Aula 9
Conflitos estruturais (8)
z
Exemplo 3: a Register File é pretendida por duas
instruções no pipeline
Escrita na Register File em R1
DADD R1,R2,R3
. . .
. . .
SW R2,500(R5)
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
IF
ID
?
WB
?
Leitura de R5 da Register File
31 de Março de 2005
Arquitectura de Computadores 2004/05
11 - Aula 9
?
Conflitos estruturais (9)
z
Solução 2:
•
•
•
“Replicar” o recurso
Usar uma Register File que permita escritas na primeira
metade do período de relógio e leituras na segunda metade
•
Fácil de fazer se utilizarmos
flip-flops edge-triggered
Daqui para a frente, admitiremos que temos sempre esta
situação
31 de Março de 2005
Arquitectura de Computadores 2004/05
12 - Aula 9
Conflitos estruturais (10)
SW
R2,500(R5)
M
M
R
R
M
R
M
R
M
R
M
R
ALU
...
R
ALU
...
M
ALU
DADD R1,R2,R3
Ciclo 5 Ciclo 6 Ciclo 7
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
M
Ciclo 8
R
Não há conflito
estrutural
31 de Março de 2005
Arquitectura de Computadores 2004/05
13 - Aula 9
Dependências de dados - RAW
z
Conflitos
Read After Write (RAW)
A InstrJ tenta ler um operando antes de a InstrI o escrever
I:
J:
z
z
daddi
daddi
R1,R0,10
R4,R1,17
I
RAW R1
J
Estas dependências são inerentes ao programa, representando o
seu fluxo de instruções => dependências verdadeiras
Se as instruções forem suficientemente próximas por forma a
coexistirem no pipeline, e se nada for feito, existe um conflito
de dados que conduz à incorrecta execução da InstrJ
31 de Março de 2005
Arquitectura de Computadores 2004/05
14 - Aula 9
RAW – Outro exemplo (2)
OR
R8,R1,R9
XOR
R10,R1,R11
R
Há RAW
R
M
R
M
R
M
R
M
R
M
R
M
R
ALU
R6,R1,R7
M
M
ALU
AND
R
ALU
DSUB R4,R1,R3
M
Ciclo 8
ALU
DADD R1,R2,R3
Ciclo 5 Ciclo 6 Ciclo 7
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
M
Não há RAW
Reparar como só há RAW se a seta estiver “para trás” no tempo
31 de Março de 2005
Arquitectura de Computadores 2004/05
15 - Aula 9
Dependências de nome
z
z
z
Dependências que não exigem a produção de resultados
Apenas devem preservar a ordem
•
•
Antidependências
Dependências de saída
Não são dependências verdadeiras, por isso também se
designam por dependências falsas
31 de Março de 2005
Arquitectura de Computadores 2004/05
16 - Aula 9
Antidependências – WAR (1)
z
z
Conflitos Write After Read (WAR)
A InstrI deve ler um operando antes de a InstrJ o
actualizar
I:
daddi
R2,R1,10
I
J:
daddi
R1,R4,17
J
WAR R1
Conflitos WAR só podem ocorrer em pipelines em que os
andares de escrita (em registos ou em memória)
antecedem um andar de leitura do mesmo recurso
31 de Março de 2005
Arquitectura de Computadores 2004/05
17 - Aula 9
Antidependências – WAR (2)
z
O pipeline do MIPS, com 5 andares, não pode gerar um
conflito WAR porque
•
•
•
Todas as instruções usam os 5 andares para serem
executadas (mesmo as que só necessitam de 3 ou 4 ciclos
de relógio)
As leituras só ocorrem no andar 2, ID
As escritas são sempre no andar 5, WB
31 de Março de 2005
Arquitectura de Computadores 2004/05
18 - Aula 9
Dependências de saída – WAW (1)
z
Conflitos Write After Write (WAW)
A InstrI deve escrever um resultado antes de a InstrJ o
actualizar
z
I:
daddi
R1,R2,10
I
J:
daddi
R1,R4,17
J
WAW R1
Conflitos WAW só podem ocorrer em pipelines que
escrevem (em registos ou memória) em mais do que um
andar
•
O pipeline do MIPS não gera conflitos deste tipo
31 de Março de 2005
Arquitectura de Computadores 2004/05
19 - Aula 9
Dependências de saída – WAW (2)
z
O pipeline do MIPS, com 5 andares, não pode gerar um
conflito WAR porque
•
•
z
z
z
Todas as instruções usam os 5 andares para serem
executadas (mesmo as que só necessitam de 3 ou 4 ciclos
de relógio)
As escritas são sempre no andar 5, WB
Veremos mais à frente no curso que os conflitos WAR e
WAW ocorrem em pipelines mais complexos, quando
existir execução fora de ordem
O objectivo, nesses casos, é melhorar o CPI
O pipeline do MIPS apenas admite execução em ordem
31 de Março de 2005
Arquitectura de Computadores 2004/05
20 - Aula 9
RAR?
z
E RAR?
•
RAR não é uma dependência, logo não é geradora de
conflitos
31 de Março de 2005
Arquitectura de Computadores 2004/05
21 - Aula 9
Dependências RAW (1)
R4 <--- R1 ...
I:
J:
31 de Março de 2005
daddi
daddi
R1 <--- ...
R1,R0,10
R4,R1,17
Arquitectura de Computadores 2004/05
22 - Aula 9
Dependências RAW (2)
. . .
IF ID EX MEM WB
DADDI R1,R0,10
IF ID
EX
DADDI R4,R1,17
IF
ID
EX
MEM
IF
ID
EX
IF
ID
. . .
. . .
MEM WB
MEM WB
EX
Dependência RAW
31 de Março de 2005
Arquitectura de Computadores 2004/05
23 - Aula 9
Soluções para as dependências RAW
z
z
z
z
Solução 1: Bloqueio (stall) dos andares do pipeline,
até que o dado correcto esteja disponível (este bloqueio
também é designado por interlocking)
Solução 2: Se o dado correcto existir algures no pipeline,
estabelece-se um bypass para o andar correcto (esta
técnica também é conhecida por forwarding)
Solução 3: o forwarding nem sempre resolve os conflitos
RAW, como veremos mais tarde. Nesses casos tem que
se usar bloqueio e forwarding
Solução 4: escalonar (ordenar) as instruções
•
•
Escalonamento estático – pelo compilador
Escalonamento dinâmico – pelo hardware
31 de Março de 2005
Arquitectura de Computadores 2004/05
24 - Aula 9
Bloqueio do pipeline (1)
z
z
z
z
z
Vamos ver como bloquear o pipeline e, em seguida, vamos
passar aos conflitos de controlo
O forwarding será estudado mais tarde, para podermos
ter uma visão global dos problemas do pipeline típico com
5 andares que estamos a analisar
Para que o bloqueio funcione, é necessário que a
instrução no andar i+1 possa ser completada sem
interferência das instruções nos andares 1 a i
Bloqueia-se o pipeline no andar ID inserindo um NOP
nesse andar
O NOP vai-se propagar no pipeline até ao fim
31 de Março de 2005
Arquitectura de Computadores 2004/05
25 - Aula 9
Bloqueio do pipeline (2)
. . .
IF ID EX MEM WB
DADDI R1,R0,10
IF ID
DADDI R4,R1,17
IF
. . .
. . .
EX
MEM WB
stall
stall stall ID EX MEM
stall
stall stall IF
ID
EX
stall stall stall IF
ID
Iremos ver já a seguir como é que o NOP (stall) é
inserido no pipeline em ID e se propaga até ao fim
31 de Março de 2005
Arquitectura de Computadores 2004/05
26 - Aula 9
Bloqueio do pipeline (3)
z
O princípio é o seguinte:
•
Detecta-se a dependência e gera-se feedback para os
andares anteriores do pipeline, por forma a fazer o bloqueio
das instruções que se encontram nesses andares
31 de Março de 2005
Arquitectura de Computadores 2004/05
27 - Aula 9
Bloqueio do pipeline (4)
Inserção do NOP no andar ID
Bloqueio da actualização do PC
Bloqueio da instrução no andar ID
31 de Março de 2005
Arquitectura de Computadores 2004/05
28 - Aula 9
Bloqueio do pipeline (5)
I1: DADDI R1,R0,10
I2: DADDI R4,R1,17
I3:
I4:
I5:
Utilização dos
recursos
31 de Março de 2005
Arquitectura de Computadores 2004/05
29 - Aula 9
Bloqueio do pipeline (6)
Comparam-se os registos fonte da instrução no andar ID
com o registo destino da instrução que está a fazer o WB.
Só no WB? E para todas as instruções?
31 de Março de 2005
Arquitectura de Computadores 2004/05
30 - Aula 9
Bloqueio do pipeline (7)
z
Comparação dos registos fonte e destino para todas as
instruções?
•
•
Nem todas as instruções escrevem num reg. destino Î
Nem todas as instruções usam registos fonte Î
we
re
Registo destino no andar WB
. . .
IF ID EX MEM WB
DADDI R1,R0,10
IF ID
DADDI R4,R1,17
IF
. . .
. . . fonte no andar ID
Registo
31 de Março de 2005
EX
MEM WB
stall
stall stall ID EX MEM
stall
stall stall IF
ID
EX
stall stall stall IF
ID
Arquitectura de Computadores 2004/05
31 - Aula 9
Bloqueio do pipeline (8)
Só fazemos bloqueio nestas condições
31 de Março de 2005
Arquitectura de Computadores 2004/05
32 - Aula 9
Bloqueio do pipeline (9)
31 de Março de 2005
Arquitectura de Computadores 2004/05
33 - Aula 9
Bloqueio do pipeline (10)
Apenas parte
do problema !
31 de Março de 2005
Arquitectura de Computadores 2004/05
34 - Aula 9
Bloqueio do pipeline (11)
z
z
Vamos ver o que se passa com os Loads e Stores
Por exemplo, a sequência de instruções
SD R2,7(R1)
LD R4,5(R3)
z
gera uma dependência de dados se R1+7 = R3+5 (isto é, se os
endereços forem iguais)
Contudo, não existe conflito RAW se a Memória de Dados
completar as operações de escrita num único ciclo
•
para já, este é o modelo (simplificado) que estamos a usar para a
Memória de Dados e de Instruções Æ mas mais à frente no curso
iremos ter que que usar um modelo muito mais complexo, quando
falarmos em Memória Virtual e caches
31 de Março de 2005
Arquitectura de Computadores 2004/05
35 - Aula 9
Cálculo do CPI com bloqueios
z
z
Começar com o CPI de base
Adicionar bloqueios (stalls)
CPI = CPI base + CPI stall
CPI stall = STALLtype −1 × freqtype −1 + STALLtype − 2 × freqtype − 2
z
z
Suponhamos:
•
•
•
•
CPIbase=1
Freqbranch=20%, freqload=30%
Os Branches causam sempre 1 ciclo de stall
Os Loads causam um stall com 100 ciclos 1% das vezes
Então: CPI = 1 + (1×0.20) + (100 × 0.30×0.01) = 1.5
31 de Março de 2005
Arquitectura de Computadores 2004/05
36 - Aula 9
Conflitos de controlo (1)
304
Um Jump elimina (não bloqueia)
a instrução que se segue
Como?
31 de Março de 2005
Arquitectura de Computadores 2004/05
37 - Aula 9
Conflitos de controlo (2)
31 de Março de 2005
Arquitectura de Computadores 2004/05
38 - Aula 9
Conflitos de controlo (3)
31 de Março de 2005
Arquitectura de Computadores 2004/05
39 - Aula 9
Conflitos de controlo (4)
z
E os branches?
A condição do branch só é
conhecida no andar EX.
Que acção tomar no andar ID?
31 de Março de 2005
Arquitectura de Computadores 2004/05
40 - Aula 9
Conflitos de controlo (5)
31 de Março de 2005
Arquitectura de Computadores 2004/05
41 - Aula 9
Conflitos de controlo (6)
br
31 de Março de 2005
304
200
PC de I3 = 104
Arquitectura de Computadores 2004/05
42 - Aula 9
Conflitos de controlo (7)
z
O sinal de stall tem de vir modificado por causa dos
branches que saltam para o endereço alvo
Não fazer o stall se o branch se efectuar para o endereço alvo. Porquê?
A instrução no andar ID não é válida num BEQZ que salta.
Queremos eliminá-la
Mas é uma instrução válida no caso de um conflito RAW.
Neste caso, queremos apenas bloqueá-la (stall)
31 de Março de 2005
Arquitectura de Computadores 2004/05
43 - Aula 9
Conflitos de controlo (8)
• Equações de controlo
dos muxs
Dar prioridade à
instrução mais antiga,
a que se encontra no
andar EX, sobre a que
está no andar ID
31 de Março de 2005
Arquitectura de Computadores 2004/05
44 - Aula 9
Conflitos de controlo (9)
31 de Março de 2005
Arquitectura de Computadores 2004/05
45 - Aula 9
Conflitos de controlo (10)
z
z
Podemos remover uma bolha se usarmos um comparador
suplementar no andar ID
Nesse caso, o diagrama do pipeline fica igual ao dos
Jumps
31 de Março de 2005
Arquitectura de Computadores 2004/05
46 - Aula 9
Conflitos de controlo (11)
z
z
Podemos resolver os conflitos de controlo deixando-os
para o compilador
Muda-se o fluxo de instruções do programa, de modo a
que a instrução que se segue a um Jump ou a um Branch
é sempre executada
•
z
O compilador deve escolher a instrução a colocar no slot de
atraso, substituindo a bolha que o hardware lá colocaria
O slot de atraso vem prenchido
com uma instrução que é executada
independentemente do resultado
do Branch
Outra técnica usa Predição de Saltos (Branch Prediction),
que pode reduzir significativamente a penalização
associada aos Branches Î para mais tarde no curso
31 de Março de 2005
Arquitectura de Computadores 2004/05
47 - Aula 9
Forwarding para conflitos RAW (1)
z
Retomemos um exemplo anterior:
DADD R1,R2,R3
DSUB R4,R1,R3
31 de Março de 2005
AND
R6,R1,R7
OR
R8,R1,R9
XOR
R10,R1,R11
Arquitectura de Computadores 2004/05
48 - Aula 9
Forwarding para conflitos RAW (2)
OR
R8,R1,R9
XOR
R10,R1,R11
31 de Março de 2005
R
Há RAW
R
M
R
M
R
M
R
M
R
M
R
M
R
ALU
R6,R1,R7
M
M
ALU
AND
R
ALU
DSUB R4,R1,R3
M
Ciclo 8
ALU
DADD R1,R2,R3
Ciclo 5 Ciclo 6 Ciclo 7
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
M
Arquitectura de Computadores 2004/05
Não há RAW
49 - Aula 9
Forwarding para conflitos RAW (3)
OR
R8,R1,R9
XOR
R10,R1,R11
31 de Março de 2005
R
Há RAW
R
M
R
M
R
M
R
M
R
M
R
M
R
ALU
R6,R1,R7
M
M
ALU
AND
R
ALU
DSUB R4,R1,R3
M
Ciclo 8
ALU
DADD R1,R2,R3
Ciclo 5 Ciclo 6 Ciclo 7
ALU
Ciclo 1 Ciclo 2 Ciclo 3 Ciclo 4
M
Arquitectura de Computadores 2004/05
50 - Aula 9
OR
R8,R1,R9
XOR
R10,R1,R11
31 de Março de 2005
R
Já não há RAW
R
M
R
M
R
M
R
M
R
M
R
M
R
ALU
R6,R1,R7
M
M
ALU
AND
R
ALU
DSUB R4,R1,R3
M
ALU
DADD R1,R2,R3
ALU
Forwarding para conflitos RAW (4)
M
Arquitectura de Computadores 2004/05
51 - Aula 9
Bypassing (1)
Cada bloqueio (stall) ou eliminação (kill) introduz uma bolha no pipeline
Î CPI > 1
Uma modificação do datapath, designado por bypass ou forwarding,
pode obter o resultado à saída da ALU e colocá-lo à sua entrada
(não precisa de esperar pelo WB)
31 de Março de 2005
Arquitectura de Computadores 2004/05
52 - Aula 9
Bypassing (2)
z
Acrescentando um bypass
31 de Março de 2005
Arquitectura de Computadores 2004/05
53 - Aula 9
Bypassing (3)
z
Em que situações é que o bypass ajuda?
DADDI R1,R0,10
DADDI R4,R1,17
31 de Março de 2005
Sim
Arquitectura de Computadores 2004/05
54 - Aula 9
Bypassing (4)
z
Em que situações é que o bypass ajuda?
LD
R1,10(R0)
DADDI R4,R1,17
31 de Março de 2005
Não
Arquitectura de Computadores 2004/05
55 - Aula 9
Bypassing (5)
z
Em que situações é que o bypass ajuda?
JAL
500
DADDI R4,R31,17
31 de Março de 2005
Não
Arquitectura de Computadores 2004/05
56 - Aula 9
Bypassing (6)
z
Obtenção do sinal de bypass a partir do sinal de stall
Estará correcto ?
Não, porque apenas as instruções ALU e ALUI podem beneficiar
deste bypass (apenas consideramos, para já, bypasses provenientes
da ALU)
Solução: partir weE em dois componentes, we-bypass e we-stall
31 de Março de 2005
Arquitectura de Computadores 2004/05
57 - Aula 9
Bypassing (7)
z
Partir weE em dois componentes: we-bypass e we-stall
31 de Março de 2005
Arquitectura de Computadores 2004/05
58 - Aula 9
Bypassing (8)
z
Datapath completo com bypass
•
Vamos agora considerar bypasses com origem nos andares
MEM e WB, para além do andar EX (o bypass anterior)
31 de Março de 2005
Arquitectura de Computadores 2004/05
59 - Aula 9
Bypassing (9)
z
Datapath completo com bypass
31 de Março de 2005
Arquitectura de Computadores 2004/05
60 - Aula 9
Bypassing (10)
z
z
z
E o sinal de stall?
Reduz-se a:
Ainda temos de fazer stalls por causa dos Loads (ver 2
acetatos à frente)
31 de Março de 2005
Arquitectura de Computadores 2004/05
61 - Aula 9
Bypassing (11)
z
z
Porque é que não conseguimos fazer sair para o exterior
do pipeline (“dispatch”) uma instrução em cada ciclo de
relógio? Ou seja,
Porque é que não conseguimos um CPI = 1 ?
•
O bypass completo pode ser muito dispendioso
•
•
•
Tipicamente, apenas se incluem os caminhos de bypass mais
frequentes
Alguns caminhos de bypass pouco frequentes podem aumentar a
duração do ciclo de relógio, e desta forma diminuir realmente o
benefício pretendido da redução do CPI
Os Branches podem causar bolhas
•
•
Temos de eliminar a instrução (ou as duas instruções) que se
segue(m) ao Branch, no caso de se efectivar o salto
As alternativas são os slots de atraso ou a predição de saltos
31 de Março de 2005
Arquitectura de Computadores 2004/05
62 - Aula 9
Bypassing (12)
z
Porque é que não conseguimos um CPI = 1 ?
•
Mesmo com bypass, os Loads têm uma latência igual a 2
ciclos
•
A instrução depois de um Load não pode utilizar o resultado do
Load, como vimos atrás
31 de Março de 2005
Arquitectura de Computadores 2004/05
63 - Aula 9
Conflito de dados, mesmo com forwarding
A instrução que se segue a um Load não pode utilizar o
resultado do Load, mesmo com bypass
R
M
R
AND
R6,R1,R7
M
OR
R8,R1,R9
Com forwarding
não há RAW
31 de Março de 2005
M
Há RAW
R
Não precisa de
forwarding
M
R
R
M
R
M
R
ALU
DSUB R4,R1,R3
M
ALU
R1,0(R2)
ALU
LD
ALU
z
M
Arquitectura de Computadores 2004/05
R
64 - Aula 9
Próxima aula
z
z
Excepções
Arquitecturas multi-ciclo
31 de Março de 2005
Arquitectura de Computadores 2004/05
65 - Aula 9
Download

Aula 9 - Conflitos