1 Introdução Arquitectura com unidade de controlo uniciclo.
Transcript of 1 Introdução Arquitectura com unidade de controlo uniciclo.
1
Introdução
Arquitectura com unidade de controlo uniciclo
PC
Descodificador de Endereços
Descodificador de Instruções
Controlo de saltos
Memória de programa
Memória de dados
Datapath
Unidade de controlo
Leitura/Escrita
Palavra de Controlo
Bits de estado (flags)
Load / INC
Tipo de salto
2
PC
Bancode
registos ALU
Controlo de saltos
MUX
Inc
MUX
MUX
Const
End. salto
Tipo salto
Memória de dados
Memória de
instruções
Introdução
A mesma ideia, posta de uma forma diferente...
3
PC
Bancode
registos ALU
Controlo de saltos
MUX
Inc
MUX
MUX
Const
End. salto
Tipo salto
Memória de dados
Memória de
instruções
Introdução
Fetch Descodificação Execução Acesso à memória
Write back
4
Descodificação
ID
Fetch
IF
Execução
EXE
Memória
MEM
Write-back
WB
Por cada instrução tem-se a sequência
Introdução
Fetch (IF) – ler a instrução localizada no endereço dado por PC Descodificação (ID) – obter o opcode e operandos; ler os
registos fonte Execução (EXE) – operações na ALU e controlo dos saltos Memória (MEM) – aceder à memória para escrever ou ler dados Write-back (WB) – escrever o resultado no registo de destino
5
Funcionamento em pipeline Estrutura de um pipeline
IDIF EXE MEM WBIDIF EXE MEM WBIDIF EXE MEM WB
Clock
Separam-se as várias etapas por registos (buffers)
E sincronizam-se esses registos com um sinal de relógio comum…
Obtém-se um pipeline
6
Funcionamento em pipeline
Com mais detalhe...
PC
Bancode
registos AL
U
Controlo de saltos
MUX
Inc
MUX
MUX
Const
End. salto
Tipo salto
Memória de dados
Memória de
instruções
7
Funcionamento em pipeline
Ideia semelhante a uma linha de montagem: Por cada impulso de relógio é realizada uma etapa de
uma instrução Se o pipeline tem N etapas, então N instruções
podem estar simultaneamente dentro do pipeline Uma instrução em cada etapa
IDIF EXE MEM WB
Clock
Inst. iInst. i+1Inst. i+2Inst. i+3Inst. i+4
8
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
9
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 1
10
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 2 Inst. 1
11
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 3 Inst. 2 Inst. 1
12
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 3 Inst. 2 Inst. 1Inst. 4
13
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 3 Inst. 2 Inst. 1Inst. 4Inst. 5
14
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1Inst. 2Inst. 3Inst. 4Inst. 5Inst. 6…
Programa a correr
Inst. 3 Inst. 2Inst. 4Inst. 5Inst. 6
15
Funcionamento em pipeline
Outra maneira de ver..
1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 11º
inst 1 IF ID EXE MEM WB
inst 2 IF ID EXE MEM WB
inst 3 IF ID EXE MEM WB
inst 4 IF ID EXE MEM WB
inst 5 IF ID EXE MEM WB
inst 6 IF ID EXE MEM WB
... ... .... .... ... ...
Ciclos de relógio
Por exemplo, no 5º ciclo de relógio, a instrução 1 está na fase WB, a instrução 2 na fase MEM, a instrução 3 na fase EXE, a inst. 4 está na fase ID e a inst. 5 na fase IF.
16
Desempenho ideal
Em condições ideais O pipeline está “equilibrado”
todas as etapas demoram o mesmo tempo
O pipeline encontra-se sempre cheio tem-se sempre uma instrução em cada etapa
Ganho (ideal) face a uma versão sem pipeline:
etapas
oldetapanew N
TTT
17
Conflitos
Mas num pipeline nem tudo são rosas... Existem situações em que
Instruções em fases diferentes tentam aceder ao mesmo recurso (e.g. à memória)
O resultado de uma instrução depende de outra que ainda não terminou a execução
Essas situações designam-se por conflitos (ou pipeline hazards)
A existência de conflitos reduzem significativamente o ganho de um pipeline...
18
Conflitos
Tipos de conflitos Conflitos de dados
ocorrem quando existem dependências de dados entre instruções que se encontram dentro do pipeline
Conflitos estruturais ocorrem quando duas instruções em fases diferentes tentam aceder ao mesmo recurso
Conflitos de controloocorrem em instruções de salto, quando o salto depende de um resultado que ainda não foi calculado
19
Conflitos de dados
Conflito RAW (Read after Write) Para ilustrar a ocorrência destes conflitos vamos considerar que
temos duas instruções: instrução 1 e instrução 2 A instrução 2 vai ser executada depois da instrução 1
Vamos supor que a instrução 2 lê dados que são o resultado da instrução 1 – existe uma dependência entre as instruções
O conflito ocorre se a instrução 2 tentar ler os dados antes da instrução 1 os ter escrito
A instrução 2 iria ler um valor desactualizado...
Exemplo:...
inst. 1: ADD R0, R1, R2 # R0 ← R1 + R2
inst. 2: SUB R5, R0, R4 # R5 ← R0 – R4
...
20
Conflitos de dados
Conflito RAW (cont.)
k k+1 k+2 k+3 k+4 k+5 k+6 k+7
... ... ... ... ...
ADD R0, R1, R2 IF ID EXE MEM WB
SUB R5, R0, R4 IF ID EXE MEM WB
... ... ... ... ... ...
CONFLITO !
A instrução SUB está a utilizar o valor de R0 antes de tempo, pois a instrução ADD ainda não escreveu o resultado (Write-back)...
21
Conflitos de dados
Resolução básica de conflitos Detecta-se o conflito
Introduzem-se bolhas no pipeline Uma bolha é basicamente uma palavra de controlo que
manda “não fazer nada” (nop) Cada bolha faz com que seja desperdiçado um ciclo de
relógio
Contudo existem alternativas mais eficientes para resolver cada tipo de conflito
Inserir bolhas, só mesmo se não houver uma alternativa...
22
Conflitos de dados
Para o caso anterior, resolve-se o conflito introduzindo 2 bolhas após detectado o conflito O conflito pode ser detectado quando é feita a descodificação do SUB Depois atrasa-se o SUB dois ciclos, de forma a dar tempo para fazer o
WB do ADD
k k+1 k+2 k+3 k+4 k+5 k+6 k+7
... ... ... ... ...
ADD R0, R1, R2 IF ID EXE MEM WB
SUB R5, R0, R4 IF ID B B EXE MEM WB
… ... ... ... ... ...
Conflito resolvido
Conflito detectado
23
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 …
24
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 ……
25
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2 ……BB
26
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4 ADD R0,R1,R2…BB BB
27
IDIF EXE MEM WB
Clock
Conflitos de dados
Outra maneira de ver o problema:
SUB R5,R0,R4… BB BB…
28
Conflitos de dados
Resolução mais eficiente de conflitos RAW Utiliza-se uma técnica chamada forwarding A ideia consiste em disponibilizar resultados nas
entradas da unidade funcional (fase EXE)… …ainda antes de ser feito o write-back Quando são detectados conflitos, utilizam-se esses
resultados em vez do que foi lido dos registos
29
MUX
ALU
MUXMemória
de dados
Conflitos de dados
Utilização de forwarding
MUX
MUX
ALU
MUXMemória
de dados
30
Conflitos de dados
Outros conflitos de dados Conflito WAW (Write after Write)
Ambas as instruções são de escrita e o resultado vai ser escrito no mesmo local
O conflito ocorre quando se a instrução 2 tentar escrever antes da instrução 1
Conflito WAR (Write after Read) A instrução 1 lê dados do local onde a instrução 2 escreve O conflito ocorre se a instrução 2 tentar escrever antes da
instrução 1 ler
Ocorrem em pipelines mais complexos, com várias fases onde podem ser feitas leituras e escritas e nos registos
31
Conflitos estruturais
Duas (ou mais) instruções tentam aceder simultaneamente ao mesmo recurso Situação típica:
Quando se usa uma única memória para dados e programa, não se pode fazer o fetch (IF) ao mesmo tempo que uma instrução acede à memória para ler/escrever dados
Situações menos típicas Tentar escrever no mesmo registo em simultâneo (só ocorre em
processadores com mais do que uma fase de write-back) Tentar ler ou escrever dados em simultâneo na mesma memória (só
ocorre em processadores com mais do que uma fase de acesso à memória)
32
Conflitos estruturais
Exemplo de um conflito estrutural
k k+1 k+2 k+3 k+4 k+5 k+6 k+7
... ... ... ... ...
LOAD R1, a IF ID EXE MEM WB
ADD R3,R4,R5 IF ID EXE MEM WB
SUB R6,R6,R7 IF ID EXE MEM WB
XOR R1,R4,R5 IF ID EXE MEM WB
...
Não pode ser feito o fetch ao mesmo tempo que se acede à memória para ler dados (o LOAD)...
CONFLITO !
33
Conflitos estruturais
Resolução do conflito Introdução de uma bolha antes do fetch...
k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8
... ... ... ... ...
LOAD R1, a IF ID EXE MEM WB
ADD R3,R4,R5 IF ID EXE MEM WB
SUB R6,R6,R7 IF ID EXE MEM WB
XOR R1,R4,R5 B IF ID EXE MEM WB
... ... ... ... ...
Conflito resolvido
34
Conflitos estruturais
Resoluções mais eficientes Memórias de dados e de instruções separadas
Tipicamente este esquema é implementado usando uma memória cache para dados e outra para instruções
Instruction pre-fetching É feito antecipadamente o fetch de várias instruções, que
ficam guardadas numa memória interna (buffer de instruções) Quando o buffer fica vazio vão-se buscar mais instruções à
memória.
35
Conflitos de controlo
Ocorrem quando aparecem saltos Saltos incondicionais
O processador só fica a saber que é uma instrução de salto na fase ID (descodificação)...
... mas nessa altura a instrução na posição que se segue à de salto já se encontra na fase IF (fetch)
Saltos condicionais Para além do que acontece com os saltos incondicionais, não
se sabe antecipadamente se vai ou não ocorrer o salto Tipicamente só se sabe a ocorrência (ou não) do salto após a
verificação da condição do salto (tipicamente associada à fase EXE)
36
PC
Bancode
registos ALU
Controlo de saltos
MUX
Inc
MUX
MUX
Const
End. salto
Tipo salto
Memória de dados
Memória de
instruções
Conflitos de controlo
Só aqui se sabe que é um salto...
Nos saltos condicionais, só aqui se sabe se o salto vai ser tomado ou não...
37
Conflitos de controlo
Exemplo (salto incondicional)
...
LBL1: ADD R1, R4, R5
...
STORE a, R1
JUMP LBL1
LBL2: LOAD R1, a
...
38
Conflitos de controlo
Ilustração do problema (salto incondicional):
k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9
... ... ... ... ...
JUMP LBL1 IF ID EXE MEM WB
LOAD R1, a IF B B B B
ADD R1, R4, R5 IF ID EXE MEM WB
... ... ... ... ...
Perde-se 1 ciclo, pois é feito um fetch inútil da instrução que se segue à de salto
39
Conflitos de controlo
Exemplo (salto condicional)
...
DEC R1, R1
JZER END
ADD R0, R1, R2
STORE a, R0
...
END: LOAD R1, a
...
Umas vezes há salto, outras não...
40
Conflitos de controlo
supondo que o salto ocorre:
k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9
... ... ... ... ...
DEC R1, R1 IF ID EXE MEM WB
JZER END IF ID EXE MEM WB
ADD R0, R1, R2 IF ID B B B
STORE a, R4 IF B B B B
LOAD R1, a IF ID EXE MEM WB ...
Perdem-se 2 ciclos, pois só se irá actualizar o valor de PC depois do salto concluir a fase EXE (só aí se sabe que o salto se vai verificar ou não)...
41
Conflitos de controlo
Minorar a introdução de bolhas:Previsão de saltos (branch prediction) Previsão estática
Assume-se que o salto é sempre tomado (predict-taken) Ou se assume que o salto nunca é tomado (predict-not-taken)
Previsão dinâmica A previsão depende do que se passou em saltos anteriores Muito usada actualmente
Nos casos em que a previsão está errada vão-se perder ciclos de processamento
A anular o efeito das instruções que entretanto entraram