microarquitetura de processadorclaudio/cursos/aoc2/slides/aoc2_aula8.0_2p.pdf · a microarquitetura...
TRANSCRIPT
09/05/2018
1
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
2
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).
09/05/2018
2
Classificação das Microarquiteturas
3
As microarquiteturas de processadores podem ser classificadas em várias dimensões ortogonais.
Processadores Pipelined / Nonpipelined Os processadores com pipelines dividem a execução de cada instrução em várias fases e permitem que
diferentes instruções sejam processadas em diferentes fases simultaneamente. O pipelining aumenta o paralelismo de nível de instrução (ILP) e, devido à sua relação custo-benefício, é praticamente utilizado por todos os processadores atualmente.
Processadores In-Order/Out-Of-Order Um processador in-order processa as instruções na ordem em que aparecem no código binário (de
acordo com a semântica sequencial das instruções), enquanto um processador out-of-order processa as instruções em uma ordem que pode ser diferente (e geralmente é ) a partir do binário. O propósito de executar instruções fora de ordem é aumentar a quantidade de ILP, proporcionando mais liberdade ao hardware para escolher quais instruções processar em cada ciclo.
Obviamente, os processadores out-of-order exigem hardware mais complexo do que os in-order.
Processadores Escalares / Superescalares Um processador escalar é um processador que não pode executar mais de uma instrução em pelo
menos um de seus estágios de pipeline. Em outras palavras, um processador escalar não pode atingir um rendimento maior que 1 instrução por ciclo para qualquer código. Um processador que não é escalar é chamado superescalar.
Observe que um processador superescalar pode executar mais de uma instrução ao mesmo tempo em todos os estágios do pipeline e, portanto, pode obter uma taxa de transferência maior que 1 instrução por ciclo para alguns códigos.
Os processadores de palavra de instrução muito longa (VLIW) são um caso particular de processadores superescalares.
Ciclo de Execução de Instruções
4
09/05/2018
3
Eventos do Ciclo de Execução de Instruções:
5
início
busca de instrução;
decodificação da instrução;
cálculo de endereço de operando;
busca de operando;
execução da instrução;
cálculo de endereço do resultado;
verificação de interrupção;
se interrupção então tratamento de interrupção;
cálculo de endereço da próxima instrução;
volta para busca de instrução;
fim.
Motivação:
6
O tempo de execução (Tcpu) de um programa é dado por:
Tcpu = IC x CPI x Tcc
A execução de instruções em cadeia (pipelining) permite
reduzir a duração do ciclo de relógio (Tcc) do processador, ou
seja, aumentar a sua frequência. Por outro lado, a execução
superscalar aumenta o número de instruções realizadas em
cada ciclo de clock (IPC) , ou seja, diminui o CPI.
Note que qualquer uma das alternativas permite reduzir o tempo de
execução da aplicação.
09/05/2018
4
Introdução
7
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.
Estas duas técnicas são geralmente combinadas, sendo ambas utilizadas na arquitetura dos processadores modernos.
Introdução
Arquitetura com unidade de controle monociclo
PC
Descodificador
de Endereços
Descodificador
de Instruções
Controlo de
saltos
Memória de
programaMemória de dados
Datapath
Unidade de controlo
Leitura/Escrita
Palavra de Controlo
Bits de estado (flags)
Load / INC
Tipo
de salto
8
09/05/2018
5
Introdução
Datapath
A mesma ideia, apresentada de uma forma diferente...
P
C
Banco
de
registos AL
U
Controlo de
saltos
M
U
X
Inc
M
U
X
M
U
X
Const
End. salto
Tipo salto
Memória
de dados
Memória
de
instruções
9
Introdução
P
C
Banco
de
registos AL
U
Controlo de
saltos
M
U
X
Inc
M
U
X
M
U
X
Const
End. salto
Tipo salto
Memória
de dados
Memória
de
instruções
Fetch Decodificação Execução Acesso à
memória
Write
back
10
09/05/2018
6
Para cada instrução tem-se a sequência
Fetch (IF) – ler a instrução localizada no endereço dado por PC
Decode (ID) – obter o opcode e operandos; ler os registradores fonte
Execute (EX) – operações na ALU e controle dos saltos (desvios)
Memory (MA) – acesso à memória para escrever ou ler dados
Write-Back (WB) – escrever o resultado no registrador de destino
Introdução
11
Fetch
IF
DecodeID
Execute EX
MemoryMA
Write Back
WB
Funcionamento em pipeline
Estrutura de um pipeline
IDIF EXE MEM WB
IDIF EXE MEM WB
Clock
Separam-se as várias etapas por registradores (buffers)
E sincronizam-se esses registradores com um sinal de
relógio comum…
Obtém-se um pipeline
12
09/05/2018
7
Funcionamento em pipeline
Com mais detalhe...
P
C
Banco
de
registos AL
U
Controlo de
saltos
M
U
X
Inc
M
U
X
M
U
X
Const
End. salto
Tipo salto
Memória
de dados
Memória
de
instruções
13
Funcionamento em pipeline
Ideia semelhante a uma linha de montagem:
Para cada pulso 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
14
09/05/2018
8
15
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa a executar
16
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa a correr
Inst. 1
09/05/2018
9
17
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa a correr
Inst. 2 Inst. 1
18
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa a correr
Inst. 3 Inst. 2 Inst. 1
09/05/2018
10
19
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa em execução
Inst. 3 Inst. 2 Inst. 1Inst. 4
20
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa em execução
Inst. 3 Inst. 2 Inst. 1Inst. 4Inst. 5
09/05/2018
11
21
Funcionamento em pipeline
Ilustração do funcionamento
IDIF EXE MEM WB
Clock
Inst. 1
Inst. 2
Inst. 3
Inst. 4
Inst. 5
Inst. 6
…
Programa em execução
Inst. 3 Inst. 2Inst. 4Inst. 5Inst. 6
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.
22
09/05/2018
12
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:
etapasideal NGanho =
etapas
oldetapanew
N
TTT == 1=idealCPI
23
Objetos de estudo:
24
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.
09/05/2018
13
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
Paralelismo em Nível de Instrução
O objetivo principal do ILP é a maximização do CPI
Pipeline CPI = Ideal pipeline CPI + Structural stalls+ Data hazard stalls + Control stalls
O Paralelismo no bloco básico é limitado Em programas típicos, a frequência média de desvios é de 15-25%.
Assim, o tamanho típico do bloco básico = 3-6 instruções executadas entre um par de desvios.
Devemos explorar o ILP em diversos blocos básicos, quebrando a fronteira dos desvios...
09/05/2018
14
Paralelismo em Nível de Instrução
Paralelismo em Nível de Loop Desdobramento de laços estaticamente ou dinamicamente
Uso de SIMD (processadores vetoriais e GPUs)
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
Instruções dependentes não podem ser executadas simultaneamente
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
09/05/2018
15
Tipos de Conflitos (hazards)
Conflitos de dadosocorrem quando existem dependências de dados entre
instruções que se encontram dentro do pipeline
Conflitos estruturaisocorrem quando duas instruções em fases diferentes tentam
acessar o mesmo recurso
Conflitos de controleocorrem em instruções de desvio, quando o desvio depende de
um resultado que ainda não foi calculado.
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)
Uma dependência de dados transmite três coisas: Possibilidade de um hazard.
A ordem em que os resultados podem ser calculados.
O limite máximo de paralelismo a ser explorado
As dependências que fluem através da memória são mais difíceis de serem detectadas.
09/05/2018
16
Dependência de Dados (Hazards)
31
.
.
sub $2, $1, $3
and $12, $2, $5
or $13, $6, $2
add $14, $2, $2
sw $15, 100($2)
.
.
❖Dependência de dados:
Instruções que seguem
sub utilizam o registrador
$2, cujo valor é produzido
pela instrução sub
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
09/05/2018
17
Data hazards
33
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
Contudo existem alternativas mais eficientes para resolver
cada tipo de conflito
Inserir bolhas, só mesmo se não houver uma alternativa...
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
09/05/2018
18
M
U
X
AL
U
M
U
XMemória
de dados
Conflitos de dados
Utilização de forwarding
M
U
X
M
U
X
AL
U
M
U
XMemória
de dados
35
Data Hazards
Appendix A - Pipelining 36
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.
Instr.
Order
add r1,r2,r3
sub r4,r1,r3
and r6,r1,r7
or r8,r1,r9
xor r10,r1,r11
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Time (clock cycles)
IF ID/RF EX MEM WB
09/05/2018
19
Data Hazards
Appendix A - Pipelining 37
Forwarding To Avoid Data Hazard
Forwarding is the concept of making data
available to the input of the ALU for
subsequent instructions, even though the
generating instruction hasn’t gotten to WB in
order to write the memory or registers.
Time (clock cycles)
Inst
r.
Order
add r1,r2,r3
sub r4,r1,r3
and r6,r1,r7
or r8,r1,r9
xor r10,r1,r11
Reg ALU
DMemIfetch Reg
Reg ALU
DMemIfetch Reg
Reg ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Data Hazards
Appendix A - Pipelining 38
There are some instances where hazards occur, even with forwarding.
The data isn’t loaded until after the MEM stage.
Time (clock cycles)
Instr.
Order
lw r1, 0(r2)
sub r4,r1,r6
and r6,r1,r7
or r8,r1,r9
Reg
ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
Reg ALU
DMemIfetch Reg
Reg
ALU
DMemIfetch Reg
09/05/2018
20
Data Hazards
Appendix A - Pipelining 39
There are some instances where hazards occur, even with forwarding.
The stall is necessary as shown here.
Time (clock cycles)
or r8,r1,r9
Instr.
Order
lw r1, 0(r2)
sub r4,r1,r6
and r6,r1,r7
Reg
ALU
DMemIfetch Reg
RegIfetch
ALU
DMem RegBubble
Ifetch
ALU
DMem RegBubble Reg
Ifetch
ALU
DMemBubble Reg
Data Hazards
40
Instruções 1º 2º 3º 4º 5º 6º 7º 8º 9º
LW R1, 0(R2) IF ID EX MEM WB
SUB R4, R1, R5 IF ID EX MEM WB
AND R6, R1, R7 IF ID EX MEM WB
OR R8, R1, R9 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
SUB R4, R1, R5 IF ID stall EX MEM WB
AND R6, R1, R7 IF stall ID EX MEM WB
OR R8, R1, R9 IF ID EX MEM WB
09/05/2018
21
Data Hazards
Appendix A - Pipelining 41
Instruction scheduled by compiler - move instruction in order to reduce stall.
lw Rb, b code sequence for a = b+c before scheduling
lw Rc, c
Add Ra, Rb, Rc stall
sw a, Ra
lw Re, e code sequence for d = e+f before scheduling
lw Rf, f
sub Rd, Re, Rf stall
sw d, Rd
Arrangement of code after scheduling.
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
Pipeline Scheduling
Data Hazards
Appendix A - Pipelining 42
Pipeline Scheduling
% loads stalling pipeline
0% 20% 40% 60% 80%
tex
spice
gcc
25%
14%
31%
65%
42%
54%
scheduled unscheduled
09/05/2018
22
Abordagens para resolver conflitos de dados
43
Software Scheduling : Programador ou compilador evita explicitamenteinstruções de programação que criariam riscos de dados
HardwareScheduling : Hardware escalona dinamicamenteinstruções para evitar conflitos RAW, potencialmente permitindoinstruções para executar fora de ordem
Hardware Stalling : Hardware inclui a lógica de controle que congelainstruções posteriores até que a instrução anterior termine a execução, produzindo valor de dados
Hardware Bypassing: Hardware permite que os valores sejam enviados a partir de uma instrução anterior para uma instrução posterior antes que a instrução anteriormente executando saia do pipeline.
Hardware Speculation : Hardware adivinha que não há perigo e permite instruções posteriores lerem dados potencialmente inválidos; detectaquando existe um problema e re-executa instruções que operaram em dados inválidos
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
Solução - utilizar técnica de renomeação de registrador.
09/05/2018
23
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
46
.
.
.
ld r2, I
add r2, r2, #123
st r2, I
ld r3, J
sub r3, r3, #567
st r3, J
.
.
.
.
.
.
ld r2, I
ld r3, J
add r2, r2, #123
sub r3, r3, #567
st r2, I
st r3, J
.
.
.
09/05/2018
24
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
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 acessa à memória para ler
dados (o LOAD)...
CONFLITO !
48
09/05/2018
25
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
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
09/05/2018
26
Conflitos de Controle
51
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.
addiu r1, r2, 1
j foo # Jumps are always taken
addiu r3, r4, 1
foo: addiu r5, r6, 1
bne r0, r0, bar # This branch is not taken
addiu r7, r8, 1
bar: addiu r9, r10, 1
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
09/05/2018
27
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 controle
Só aqui se sabe que
é um desvio...
Nos desvios condicionais, só aqui se sabe se
o desvio vai ser realizado ou não...
53
Conflitos de controle
Exemplo (desvio incondicional)
...
LBL1: ADD R1, R4, R5
...
STORE a, R1
JUMP LBL1
LBL2: LOAD R1, a
...
54
09/05/2018
28
Conflitos de controle
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
55
Conflitos de controle
Exemplo (desvio condicional)
...
DEC R1, R1
JZ END
ADD R0, R1, R2
STORE a, R0
...
END: LOAD R1, a
...
algumas vezes há desvio,
outras não...
56
09/05/2018
29
Conflitos de controle
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á atualizar o valor de PC depois do salto
concluir a fase EXE (só aí se sabe que o salto será realizado ou não)...
57
Resolução dos conflitos de controle
58
Software Scheduling: Programador ou compilador evita explicitamente escalonar instruções que criariam riscos de controle.
Software Predication: Programador ou compilador converte o fluxo de controle em fluxo de dados usando instruções que executam condicionalmente baseadas no valor dos dados.
Hardware Stalling: Hardware inclui a lógica de controle que congela instruções posteriores até que a instrução anterior tenha terminado, determinando o fluxo de controle correto.
Hardware Speculation: hardware de controle supõe qual o caminho que o controle fluxo seguirá e potencialmente busca instruções incorretas; detecta quando existe um problema e re-executa as instruções que estão ao longo do fluxo de controle correto.
Software Hints: Programador ou compilador fornece dicas sobre se um desvio condicional serão tomadas ou não, e o hardware pode usar essas dicas para especulação mais eficiente.
09/05/2018
30
Software Scheduling
59
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
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
Nos casos em que a previsão estiver errada perder-se-á ciclos de
processamento
Para anular o efeito das instruções que foram executadas
desnecessariamente...
60
09/05/2018
31
Interrupções e Exceções
61
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.
Interrupções Assíncronas (Asynchronous Interrupts) Dispositivos de Entrada/Saída precisam ser atendidos
Experição do timer
Falhas de hardware
Exceções Síncronas (Synchronous Exceptions) Opcode desconhecido, instrução privilegiada
Arithmetic overflow, floating-point exception
Acesso a memória desalinhada na busca de intruções ou acesso a dados
Violação da proteção de memória
Virtual memory page faults
System calls (traps)
Semântica para Interrupções e Exceções
62
Interrupções são síncronas em relação ao programa,
assim a microarquitetura pode decidir quando tratar a
interrupção.
Exceções são síncronas em relação ao programa, assim
elas devem ser tratadas imediatamente.
09/05/2018
32
Tratando interrupções ou exceções
63
the hardware/software must: Stop program at current instruction (I), ensure previous insts finished
Save cause of interrupt or exception in privileged arch state
Save the PC of the instruction I in a special register (EPC)
Switch to privileged mode
Set the PC to the address of either the interrupt or the exception handler
Disable interrupts
Save the user architectural state
Check the type of interrupt or exception
Handle the interrupt or exception
Enable interrupts
Switch to user mode
Set the PC to EPC if I should be restarted
Potentially set PC to EPC+4 if we should skip I
Interrupções e Exceções no pipeline
64
How should we handle a single instruction which generates multiple exceptions in different stages as it goes down the pipeline?
How should we handle multiple instructions generating exceptions in different stages at the same or different times?
09/05/2018
33
Bibliografia
65
David Patterson e John Hennessy,
Arquitetura e Organização de
Computadores – uma abordagem
quantitativa, 5ª Edição, ed. Campus.