Académique Documents
Professionnel Documents
Culture Documents
Arquitetura e Organização de
Computadores 2
Paralelismo em Nível de Instruções
Arquiteturas Pipelining e Superescalar
Microarquitetura de Processador:
Uma perspectiva de implementação
O foco está nos aspectos de implementação, com
discussões sobre abordagens alternativas e suas
implicações em termos de desempenho, potência e custo.
A microarquitetura de processadores sofreu uma
evolução contínua.
Por exemplo, a Intel tem lançado novos microprocessadores a
cada ano.
A renovação é alimentada principalmente por dois tipos de
fatores:
(1) evolução da tecnologia e
(2) evolução da carga de trabalho (workload).
1
09/05/2018
2
09/05/2018
Motivação:
O tempo de execução (Tcpu) de um programa é dado por:
3
09/05/2018
Introdução
Duas técnicas são frequentemente utilizadas para a
execução de instruções em paralelo:
Execução encadeada de instruções (Pipelining) – cada
instrução é executada em várias fases, sendo a execução de
várias instruções sobreposta, como numa linha de montagem;
as várias instruções executam em paralelo, mas em fases
diferentes;
Execução superscalar de instruções – as instruções são
executadas em paralelo, o que envolve a duplicação de
unidades funcionais para suportar a combinação de instruções
pretendida.
Introdução
Arquitetura com unidade de controle monociclo
Unidade de controlo
Load / INC
PC Memória de
Memória de dados
programa
Descodificador
Controlo de
de Endereços
saltos
Leitura/Escrita
Tipo
de salto Descodificador
de Instruções Palavra de Controlo
Datapath
Bits de estado (flags)
4
09/05/2018
Introdução
Datapath
A mesma ideia, apresentada de uma forma diferente...
M
U
X
End. salto
Controlo de
Tipo salto saltos
Inc Const
P
M
C U
Memória Banco X
ALU
de de
instruções M
registos U
X
Memória
de dados
Introdução
Fetch Decodificação Execução Acesso à Write
memória back
M
U
X
End. salto
Controlo de
Tipo salto saltos
Inc Const
P
M
C U
Memória Banco X
ALU
de de
instruções M
registos U
X
Memória
de dados
10
5
09/05/2018
Introdução
11
Funcionamento em pipeline
Estrutura de um pipeline
IF ID EXE MEM WB
IF ID EXE MEM WB
Clock
12
6
09/05/2018
Funcionamento em pipeline
Com mais detalhe...
M
U
X
End. salto
Controlo de
Tipo salto saltos
Inc Const
P
M
C U
Memória Banco X
ALU
de de
instruções M
registos U
X
Memória
de dados
13
Funcionamento em pipeline
IF ID EXE MEM WB
Clock
14
7
09/05/2018
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa a executar
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
IF ID EXE MEM WB
Clock
15
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa a correr
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Inst. 1
IF ID EXE MEM WB
Clock
16
8
09/05/2018
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa a correr
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Inst. 2 Inst. 1
IF ID EXE MEM WB
Clock
17
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa a correr
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
IF ID EXE MEM WB
Clock
18
9
09/05/2018
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa em execução
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
IF ID EXE MEM WB
Clock
19
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa em execução
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
IF ID EXE MEM WB
Clock
20
10
09/05/2018
Funcionamento em pipeline
Ilustração do funcionamento
Inst. 1
Inst. 2
Programa em execução
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
IF ID EXE MEM WB
Clock
21
Funcionamento em pipeline
Outra maneira de ver..
Ciclos de relógio
1º 2º 3º 4º 5º 6º 7º 8º 9º 10º 11º
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.
22
11
09/05/2018
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
Told
Tnew = Tetapa = CPIideal = 1
Netapas
Ganhoideal = Netapas
23
Objetos de estudo:
Pipelining:
Pipelining torna-se uma técnica universal em 1985.
Explora a potencial sobreposição da execução de instruções para
melhorar o desempenho.
“Paralelismo em Nível de Instrução”
Os hazards inconvenientes, que provocam degradação
de desempenho em processadores pipelined e os
mecanismos para minimizar seus efeitos.
Implicações de hardware e software do pipelining.
Processadores superscalares.
24
12
09/05/2018
Introdução
Duas abordagens para explorar o paralelismo de
instruções:
Hardware-based dynamic approaches
Usadas em processadores de desktops e servidores
Não utilizada de forma extensiva em processadores voltados ao
Mercado de equipamentos móveis (PMP processors)
Compiler-based static approaches
Restrito ao mundo das aplicações científicas
13
09/05/2018
Desafios:
Dependência dos Dados
Instrução j é dependente de dados gerados pela instrução i se:
Instrução i produz um resultado que pode ser usado pela instrução j
Instrução j é dependente dos dados da instrução k e a instrução k é dependente de
dados da instrução i
Conflitos (hazards)
Mas em um pipeline nem tudo são flores...
Existem situações em que
Instruções em fases diferentes tentam acessar o 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 caracterizam conflitos (ou pipeline hazards)
A existência de conflitos reduzem significativamente o ganho de um
pipeline...
28
14
09/05/2018
29
Dependência de Dados
As dependências são propriedades dos programas
A organização Pipeline determina se a dependência é
detectada e se ela causa parada (stall)
15
09/05/2018
31
Data hazards
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 te-
os escrito.
A instrução 2 iria ler um valor desatualizado...
Exemplo:
...
inst. 1: ADD R0, R1, R2 # R0 ← R1 + R2
inst. 2: SUB R5, R0, R4 # R5 ← R0 – R4
...
32
16
09/05/2018
Data hazards
Resolução básica de conflitos
Detecta-se o conflito
Introduzem-se bolhas no pipeline
Uma bolha é basicamente uma palavra de controle que manda “não
fazer nada” (nop)
Cada bolha faz com que seja desperdiçado um ciclo de relógio
33
Conflitos de dados
Resolução mais eficiente de conflitos RAW
Utiliza-se uma técnica chamada data 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 registradores
34
17
09/05/2018
Conflitos de dados
Utilização de forwarding
M M
U U
X X
ALU
M
U
M X
Memória
U
X de dados
35
Data Hazards
Time (clock cycles)
IF ID/RF EX MEM WB
I
ALU
n
s
ALU
d
or r8,r1,r9
e
ALU
Reg
r xor r10,r1,r11 Ifetch Reg DMem
The use of the result of the ADD instruction in the next three instructions causes a
hazard, since the register is not written until after those instructions read it.
Appendix A - Pipelining
36
18
09/05/2018
ALU
add r1,r2,r3 Ifetch Reg DMem Reg
s
t
ALU
r. sub r4,r1,r3 Ifetch Reg DMem Reg
ALU
Ifetch Reg DMem Reg
r and r6,r1,r7
d
e
ALU
Ifetch Reg DMem Reg
r or r8,r1,r9
ALU
Ifetch Reg DMem Reg
xor r10,r1,r11
Appendix A - Pipelining
37
Data Hazards The data isn’t loaded until after the MEM stage.
n
s
t
ALU
r.
O
ALU
r
or r8,r1,r9
There are some instances where hazards occur, even with forwarding.
Appendix A - Pipelining
38
19
09/05/2018
ALU
Reg
s lw r1, 0(r2) Ifetch Reg DMem
t
r.
ALU
sub r4,r1,r6 Ifetch Reg Bubble DMem Reg
O
r
d Bubble
ALU
Ifetch Reg DMem Reg
e and r6,r1,r7
r
Bubble
ALU
Ifetch Reg DMem
or r8,r1,r9
There are some instances where hazards occur, even with forwarding.
Appendix A - Pipelining
39
Data Hazards
Instruções 1º 2º 3º 4º 5º 6º 7º 8º 9º
LW R1, 0(R2) IF ID EX MEM WB
Instruções 1º 2º 3º 4º 5º 6º 7º 8º 9º
LW R1, 0(R2) IF ID EX MEM WB
40
20
09/05/2018
lw Rb, b
lw Rc, c
lw Re, e
Add Ra, Rb, Rc
lw Rf, f
sw a, Ra
sub Rd, Re, Rf
sw d, Rd
Appendix A - Pipelining
41
scheduled unscheduled
gcc 54%
31%
spice 42%
14%
tex 65%
25%
Appendix A - Pipelining
42
21
09/05/2018
43
Conflitos de dados
Dependências de Nome
Ocorre quando duas instruções usam o mesmo registrador ou local
de memória, chamado nome, mas não existe fluxo de dados entre as
instruções associadas.
Não é uma dependência verdadeira, mas é um problema na reordenação
de instruções (reordering instructions)
Antidependência - WAR
Ordem inicial (i antes de j) deve ser preservada
Dependência de saída - WAW
Ordem deve ser preservada
22
09/05/2018
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 nos
registradores.
45
Escalonamento de Instruções
. .
. .
. .
ld r2, I ld r2, I
add r2, r2, #123 ld r3, J
st r2, I add r2, r2, #123
ld r3, J sub r3, r3, #567
sub r3, r3, #567 st r2, I
st r3, J st r3, J
. .
. .
. .
46
23
09/05/2018
Conflitos estruturais
Duas (ou mais) instruções tentam acessar simultaneamente o
mesmo recurso
Situação típica:
Quando se usa uma única memória para dados e código, não se pode fazer o
fetch (IF) ao mesmo tempo que uma instrução acessa à memória para
ler/escrever dados.
Situações menos típicas
Tentar escrever no mesmo registrador simultaneamente (só ocorre em
processadores com mais do que uma fase de write-back)
Tentar ler ou escrever dados simultaneamente na mesma memória (só ocorre
em processadores com mais do que uma fase de acesso à memória)
47
Conflitos estruturais
Exemplo de um conflito estrutural
...
CONFLITO !
Não pode ser feito o fetch ao mesmo tempo que acessa à memória para ler
dados (o LOAD)...
48
24
09/05/2018
Conflitos estruturais
Resolução do conflito
Introdução de uma bolha antes do fetch...
Conflito resolvido
49
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 busca-se mais instruções à memória.
50
25
09/05/2018
Conflitos de Controle
Hazards de controle ocorrem quando a execução ou não
da próxima instrução depende de um decisão de controle
realizada pela instrução anterior.
51
Conflitos de controle
Ocorrem quando aparecem desvios
Desvios incondicionais
O processador só saberá que é uma instrução de desvio na fase ID
(decodificação)...
... mas nessa altura a instrução na posição que se segue à de salto já se
encontra na fase IF (fetch)
Desvios condicionais
Para além do que acontece com os desvios incondicionais, não se
sabe antecipadamente se vai ou não ocorrer o desvio
Tipicamente só se sabe a ocorrência (ou não) do desvio após a
verificação da condição do desvio (tipicamente associada à fase EXE)
52
26
09/05/2018
Conflitos de controle
Só aqui se sabe que Nos desvios condicionais, só aqui se sabe se
é um desvio... o desvio vai ser realizado ou não...
M
U
X
End. salto
Controlo de
Tipo salto saltos
Inc Const
P
M
C U
Memória Banco X
ALU
de de
instruções M
registos U
X
Memória
de dados
53
Conflitos de controle
Exemplo (desvio incondicional)
...
LBL1: ADD R1, R4, R5
...
STORE a, R1
JUMP LBL1
LBL2: LOAD R1, a
...
54
27
09/05/2018
Conflitos de controle
Ilustração do problema (salto incondicional):
LOAD R1, a IF B B B B
55
Conflitos de controle
Exemplo (desvio condicional)
...
DEC R1, R1 algumas vezes há desvio,
JZ END outras não...
ADD R0, R1, R2
STORE a, R0
...
END: LOAD R1, a
...
56
28
09/05/2018
Conflitos de controle
supondo que o salto ocorre:
STORE a, R4 IF B B B B
58
29
09/05/2018
Software Scheduling
Expose branch delay slots as part of the instruction set. Branch
delay slots are instructions that follow a jump or branch and
are always executed regardless of whether a jump or branch is
taken or not taken. Compiler tries to insert useful instructions,
otherwise inserts nops.
addiu r1, r2, 1
j foo
nop
addiu r3, r4, 1
foo: addiu r5, r6, 1
bne r0, r0, bar
nop
nop
addiu r7, r8, 1
bar: addiu r9, r10, 1
59
Conflitos de controle
Hardware Speculation:
Previsão de desvios (branch prediction)
Previsão estática
Assume-se que o desvio é sempre tomado (predict-taken)
Ou se assume que o desvio nunca é tomado (predict-not-taken)
Previsão dinâmica
A previsão depende do que se passou em desvios anteriores
Muito usada atualmente
60
30
09/05/2018
Interrupções e Exceções
Interrupções e exceções alteram o fluxo normal do programa. São
causados por evento externo ou interno que precisam ser processados
pelo sistema, e estes eventos são frequentemente não esperados ou raros
do ponto de vista do programa.
61
62
31
09/05/2018
63
64
32
09/05/2018
Bibliografia
David Patterson e John Hennessy,
Arquitetura e Organização de
Computadores – uma abordagem
quantitativa, 5ª Edição, ed. Campus.
65
33