mc542_A_07_2s07

Download Report

Transcript mc542_A_07_2s07

MC542
Organização de Computadores
Teoria e Prática
2007
Prof. Paulo Cesar Centoducatte
[email protected]
www.ic.unicamp.br/~ducatte
MC542
7.1
MC542
Arquitetura de Computadores
Exceções
Micro-Arquitetura Avançadas
“DDCA” - (Capítulo 7)
“COD” - (Capítulo #)
MC542
7.2
Sumário
•
•
Exceções
Micro-Arquiteturas Avançadas
–
–
–
–
–
–
–
–
Deep Pipelining
Branch Prediction
Superscalar Processors
Out of Order Processors
Register Renaming
SIMD
Multithreading
Multiprocessors
MC542
7.3
Exceções
• Chamada de procedimento não “prevista” para
tratamento de uma exceção
• Causado por:
– Hardware, também chamado de interrupção (keyboard, …)
– Software, também chamado de traps (instrução indefinida, …)
• Quando uma exceção ocorre, o processador (MIPS):
– Registra a causa da exceção (Cause register)
– Salta para a rotina de tratamento da exceção no endereço
de instrução 0x80000180
– Retorna ao programa (EPC register)
MC542
7.4
Exemplo de Exceções
MC542
7.5
Registradores de Exceção
• Não faz parte do register file.
– Cause
» Registra a causa da exceção
» Coprocessor 0 register 13
– EPC (Exception PC)
» Registra o PC onde ocorreu a exceção
» Coprocessor 0 register 14
• Move from Coprocessor 0
– mfc0 $t0, EPC
– Move o conteúdo de EPC para $t0
MC542
7.6
Causa de Exceções
Exception
Cause
Hardware Interrupt
0x00000000
System Call
0x00000020
Breakpoint / Divide by 0
0x00000024
Undefined Instruction
0x00000028
Arithmetic Overflow
0x00000030
Modificar o MIPS multiciclos para tratar
as duas últimas exceções.
MC542
7.7
1. O Processador salva a causa e o PC em Cause e EPC
2. Processador desvia para o exception handler
(0x80000180)
3. Exception handler:
–
–
–
–
–
Salva os registradores na pilha
Lê o registrador Cause
mfc0 Cause, $t0
Trata a exceção
Restaura os registradores
Retorna ao programa
mfc0 EPC, $k0
jr $k0
MC542
7.8
Exceções: passos 1 e 2
EPCWrite
1.
2.
IntCause CauseWrite
O Processador salva a causa e o PC em Cause e EPC
Processador desvia para 0x80000180
CLK
CLK
0
1
0x30
0x28
Cause
EN
EPC
EN
PCEn
CLK
CLK
PC'
PC
EN
MemWrite IRWrite
RegDst MemtoReg RegWrite
WE
RD
0 Adr
A
1
Instr / Data
Memory
WD
Instr
25:21
A1
A2
20:16
EN
20:16
CLK
15:11
A3
0
1
Data
WE3
RD1
RD2
A
B
0
1
31:28
4
0
1
WD3
PCSrc1:0
CLK
CLK
CLK
ALUSrcA ALUSrcB1:0 ALUControl2:0BranchPCWrite
Register
File
<<2
SrcA
00
01
10
11
SrcB
CLK
Zero
ALU
IorD
ALUResult
ALUOut
Overflow
PCJump
00
01
10
11
0x8000 0180
<<2
27:0
SignImm
15:0
Sign Extend
25:0 (jump)
MC542
7.9
Exceções: passo 3 (mfc0)
Exception handler
• mfc0 $t0, Cause
mfc0
op
00000
$t0 (8) Cause (13)
31:26
25:21
20:16
15:11
00000000000
10:0
MC542
7.10
Exceções: passo 3 (mfc0)
EPCWrite
IntCause CauseWrite
CLK
CLK 0x30
0
0x28
1
Cause
EN
EPC
...
01101
C0
01110
...
EN
15:11
MemWrite IRWrite
CLK
CLK
RegDst MemtoReg1:0 RegWrite
WE
PC'
PC
EN
0
1
Adr
A
Instr
RD
EN
Instr / Data
Memory
WD
25:21
A1
20:16
A2
20:16
15:11
CLK
1
Data
WE3
0
RD1
RD2
A
31:28
A3
10
00
01
WD3
SrcA
1
B
00
4
0
PCSrc1:0
CLK
CLK
CLK
ALUSrcA ALUSrcB1:0 ALUControl2:0 Branch PCWrite
01
10
Register
File
11
<<2
SrcB
CLK
Zero
ALU
IorD
PCEn
00
ALUResult
ALUOut
Overflow
01
10
PCJump
11
0x8000 0180
<<2
27:0
SignImm
15:0
Sign Extend
25:0 (jump)
MC542
7.11
Exceções: FSM de Controle
S12: Undefined
S14: MFC0
PCSrc = 11
PCWrite
IntCause = 1
CauseWrite
EPCWrite
RegDst = 0
Memtoreg = 10
RegWrite
Op = others
S0: Fetch
IorD = 0
AluSrcA = 0
ALUSrcB = 01
ALUOp = 00
PCSrc = 00
IRWrite
PCWrite
Reset
S2: MemAdr
S1: Decode
Op = mfc0
S11: Jump
ALUSrcA = 0
ALUSrcB = 11
ALUOp = 00
Op = J
PCSrc = 10
PCWrite
Op = BEQ
Op = LW
or
Op = SW
Op = ADDI
Op = R-type
S6: Execute
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 10
S8: Branch
ALUSrcA = 1
ALUSrcB = 00
ALUOp = 01
PCSrc = 01
Branch
S9: ADDI
Execute
ALUSrcA = 1
ALUSrcB = 10
ALUOp = 00
Op = SW
Op = LW
S5: MemWrite
S3: MemRead
IorD = 1
IorD = 1
MemWrite
Overflow
Overflow
S13:
Overflow
PCSrc = 11
RegDst = 1
PCWrite
MemtoReg = 00
IntCause = 0
RegWrite
CauseWrite
EPCWrite
S7: ALU
Writeback
S10: ADDI
Writeback
RegDst = 0
MemtoReg = 00
RegWrite
S4: Mem
Writeback
RegDst = 0
MemtoReg = 01
RegWrite
MC542
7.12
Micro-Arquiteturas Avançadas
•
•
•
•
•
•
•
•
Deep Pipelining
Branch Prediction
Superscalar Processors
Out of Order Processors
Register Renaming
SIMD
Multithreading
Multiprocessors
MC542
7.13
Deep Pipelining
• Tipicamente 10 a 20 estágios
• O Número de estágios é limitado por:
– Pipeline hazards
– Sequencing overhead
– Cost
MC542
7.14
Branch Prediction
• Processador pepilined Ideal: CPI = 1
• Branch misprediction aumenta o CPI
• Static branch prediction:
– Avalia a direção do branch (forward ou backward)
– se backward: predict taken
– Caso contrário: predict not taken
• Dynamic branch prediction:
– Mantém histórico dos últimos (centenas) branches em um
branch target buffer (Branch History Table) que mantém:
» Destino do Branch
» E se o branch foi taken
MC542
7.15
Branch Prediction: Exemplo
add
add
addi
for:
beq
add
addi
j
……
done:
$s1, $0, $0
$s0, $0, $0
$t0, $0, 10
# sum = 0
# i
= 0
# $t0 = 10
$t0, $t0, done
$s1, $s1, $s0
$s0, $s0, 1
for
# if i == 10, branch
# sum = sum + i
# increment i
MC542
7.16
1-Bit Branch Predictor
• Desempenho = ƒ(precisão, custo do misprediction)
• Branch History Table: Bits menos significativos do PC
usados como índice de uma tabela de valores de 1 bit
– Informa se o branch foi tomado ou não na última vez
– Não há comparação do endereço (menos HW, mas pode não
ser o branch correto)
0
0
1
2
3
4
1
1
0
0
0xaaa00028
5
1
6
1
7 8
1
Addi
Beq
Add
0
9
A
B
0
0
0
C
0
D E
1
0
F
1
Branch
History
Table
$t0, $s0, 10
$t0, $t0, 0xfff00002
$s1, $s1, $s0
MC542
7.17
1-Bit Branch Prediction
• Quando descobre que errou, atualiza a entrada
correta, elimina as instruções erradas do pipeline e
recomeça o fetch de 0xfff00002
• Problema: em um loop, 1-bit BHT irá causar
2 mispredictions (em média nos loops – na entrada e na
saída):
– No fim do loop quando ele termina
– Na entrada do loop quando ele preve exit no lugar de looping
– Em um loop com 10 iterações
» somente 80% de precisão
» mesmo que os Taken sejam 90% do tempo
MC542
7.18
2-Bit Branch Predictor
• Solução: esquema com 2-bit onde só há troca na
previsão se houver duas misprediction:
T
NT
Predict Taken
Predict Taken
T
T
NT
NT
Predict Not
Taken
T
Predict Not
Taken
NT
• Vermelho: not taken
• Verde: taken
• Adicionado uma Histerese (inércia) para tomar a
decisão
MC542
7.19
Branch Predictor
Vários outros esquemas:
•
•
•
•
•
Correlating Branches
Execução Predicada
Tournament Predictors
Branch Target Buffer (BTB)
Return Addresses stack
MC542
7.20
Superscalar
• Múltiplas copias do datapath executando múltiplas instruções
• Dependências dificultam o despacho (Issue) de múltiplas
instruções por vez
CLK
CLK
CLK
CLK
PC
A
RD
Instruction
Memory
A1
A2
A3
A4
A5
A6
WD3
WD6
RD1
RD4
Register
RD2
File
RD5
ALUs
CLK
A1
A2
RD1
RD2
Data
Memory
WD1
WD2
MC542
7.21
Superscalar: Exemplo
lw
add
sub
and
or
sw
$t0,
$t1,
$t2,
$t3,
$t4,
$s5,
40($s0)
$s1, $s2
$s1, $s3
$s3, $s4
$s1, $s5
80($s0)
IPC Ideal: 2
IPC:
2
1
2
3
4
5
6
7
8
Time (cycles)
lw
lw
$t0, 40($s0)
IM
add $t1, $s1, $s2
add
$s0
40
RF $s1
+
$s2
+
sub
sub $t2, $s1, $s3
IM
and $t3, $s3, $s4
or
and
DM
$s3
RF $s3
-
$s4
&
or
$t4, $s1, $s5
RF
sw
$t2
DM
$t3
RF
$s1
$s5
RF $s0
80
$t4
|
+
$s5, 80($s0)
$t1
$s1
IM
sw
$t0
DM
$s5
RF
MC542
7.22
Superscalar Exemplo com Dependências
lw
add
sub
and
or
sw
$t0,
$t1,
$t0,
$t2,
$t3,
$s7,
40($s0)
$t0, $s1
$s2, $s3
$s4, $t0
$s5, $s6
80($t3)
IPC Ideal: 2
IPC:
6/5 = 1.17
1
2
3
4
5
6
7
8
9
Time (cycles)
lw
$s0
lw
$t0, 40($s0)
IM
40
DM
RF
$t0
$t0
$s1
$s1
RF $s2
RF $s2
$s3
$s3
add
add $t1, $t0, $s1
IM
sub $t0, $s2, $s3
$t0
+
sub
RF
DM
and
IM
or
$t3, $s5, $s6
sw
$s7, 80($t3)
or
and
IM
or
$t0
-
Stall
and $t2, $s4, $t0
$t1
+
RF
$s4
$t0
RF $s5
&
$s6
|
$t3
$t3
sw
IM
$t2
DM
80
RF
+
RF
$s7
DM
RF
MC542
7.23
Processador Out of Order
• Avaliar múltiplas instruções para despachar o máximo
possível por vez
• Executar instruções out of order se não tem dependências
• Dependências:
– RAW (read after write): one instruction writes, and later
instruction reads a register
– WAR (write after read): one instruction reads, and a later
instruction writes a register (also called an antidependence)
– WAW (write after write): one instruction writes, and a later
instruction writes a register (also called an output dependence)
• Instruction level parallelism: número de instruções que
podem ser despachadas simultaneamente
MC542
7.24
Processador Out of Order
• Instruction level parallelism: número de instruções
que podem ser despachadas simultaneamente
• Scoreboard: tabela que mantém:
– Instruções esperando para serem despachadas e
executadas
– Unidades funcionais disponíveis
– Dependências
• Tomasulo:
– Instruções esperando para serem despachadas e
executadas
– Unidades funcionais disponíveis
– Dependências
– Register Rename
MC542
7.25
Processador Out of Order: Exemplo
lw
add
sub
and
or
sw
$t0,
$t1,
$t0,
$t2,
$t3,
$s7,
40($s0)
$t0, $s1
$s2, $s3
$s4, $t0
$s5, $s6
80($t3)
IPC Ideal:
IPC:
1
2
3
2
6/4 = 1.5
4
5
6
7
8
Time (cycles)
lw
lw
$t0, 40($s0)
IM
or
$t3, $s5, $s6
$s0
or
40
DM
RF $s5
$s6
add $t1, $t0, $s1
WAR
sub $t0, $s2, $s3
$t3
sw
IM
80
$s7
+
DM
RF
sub
RF
$t0
add
IM
RF
$t3
|
RAW
sw $s7, 80($t3)
two cycle latency
between load and RAW
use of $t0
$t0
+
$s1
$t1
+
DM
RF $s2
$s3
-
RAW
$s4
and
and $t2, $s4, $t0
IM
RF
$t0
$t0
RF
$t2
&
DM
RF
MC542
7.26
Register Renaming
lw
add
sub
and
or
sw
$t0,
$t1,
$t0,
$t2,
$t3,
$s7,
40($s0)
$t0, $s1
$s2, $s3
$s4, $t0
$s5, $s6
80($t3)
IPC Ideal:
IPC:
1
2
3
2
6/3 = 2
4
5
6
7
Time (cycles)
lw
IM
sub $r0, $s2, $s3
$s0
lw
$t0, 40($s0)
sub
40
$s3
or
$s4
$r0
$s6
add
IM
$s7, 80($t3)
$t2
&
DM
RF $s5
RAW
add $t1, $t0, $s1
sw
RF
$r0
-
and
IM
$t3, $s5, $s6
DM
RF $s2
RAW
2-cycle RAW
and $t2, $s4, $r0
or
$t0
+
sw
$t3
|
RF
$t0
$s1
RF $t3
80
$t1
+
+
DM
$s7
RF
MC542
7.27
Algoritmo de Tomasulo
Exemplo
• Foco: Unidades de ponto-flutuante e load-store
• Cada estágio pode ter um número arbitrário de ciclos
• Múltiplas unidades funcionais
• Diferentes instruções possuem tempos diferentes no
estágio EX
• Unidades disponíveis: load-store; mult e adder
MC542
7.28
Scheduling Dinâmico
Implementação - MIPS
EX
Inteira
M1
IF
M2
M3
M5
M4
M6
ID
M7
MEM WB
A1
A2
A3
A4
DIV
MC542
7.29
Estrutura Básica de uma Implementação do
Algoritmo de Tomasulo (para o MIPS)
FP Registers
From Mem
FP Op
Queue
Load Buffers
Load1
Load2
Load3
Load4
Load5
Load6
Store
Buffers
Add1
Add2
Add3
Mult1
Mult2
FP adders
Reservation
Stations
To Mem
FP multipliers
Common Data Bus (CDB)
MC542
7.30
Reservation Station
Load/Store
Imediato/Endereço Efetivo
Busy
Op
Vj
Vk
Qj
Qk
A
0/1
Valores a serem calculados
0 – já foi calculado ou não usado
Operação
Valores já conhecidos
OBS.: Register File
Qi = N0. RS
OBS.: Terminologia do Screboard
Do CDC (ver apêndice A)
MC542
7.31
Reservation Station
Op: Operação a ser executada na unidade (e.g., + or –)
Vj, Vk: Valores dos operantos Fontes
– Store buffers tem campos V, resultados devem ser
armazenados
Qj, Qk: Reservation Stations produzirá os operandos
correspondentes (valores a serem escritos)
– Qj,Qk = 0 => ready
– Store buffers tem somente Qi para RS producing result
Busy: Indica que a Reservation Station e sua FU estão
ocupadas
A: Mantém informação sobre o end. de memória
calculado para load ou store
Register result status (campo Qi no register file) — Indica
para cada registrador a unidade funcional (reservation
station) que irá escreve-lo. Em branco se não há
instruções pendentes que escreve no registrador. MC542
7.32
3 estágios do algoritmo de Tomasulo
1. Issue— pega a instrução na “FP Op Queue”
Se a reservation station está livre (não há hazard
estrutural),
issues instr & envia operandos (renames registers)
2. Execute —executa a operação sobre os operandos (EX)
Se os dois operandos estão prontos executa a
operação;
Se não, monitora o Common Data Bus (espera pelo
cálculo do
operando, essa espera resolve RAW)
(quando um operando está pronto -> reservation
table)
MC542
7.33
3 estágios do algoritmo de Tomasulo
• data bus normal: dado + destino (“go to” bus)
• Common data bus: dado + source (“come from” bus)
– 64 bits de dados + 4 bits para endereço da
Functional Unit
– Escreve se há casamento com a Functional Unit
(produz resultado)
– broadcast
MC542
7.34
SIMD
• Single Instruction Multiple Data (SIMD)
– Uma única instrução aplicada a múltiplos (pedaços de)
dados
– Aplicação Comum: computação gráfica
– Executa operações aritméticas curtas (também
denominadas de packed arithmetic)
• Exemplo, quatro add de elementos de 8-bit
• ALU deve ser modificada para eliminar os carries entre
os valores de 8-bit
padd8 $s2, $s0, $s1
32
+
24 23
16 15
8 7
0
Bit position
a3
a2
a1
a0
$s0
b3
b2
b1
b0
$s1
a3 + b3
a2 + b2
a1 + b1
a0 + b0
$s2
MC542
7.35
Técnicas Avançadas
• Multithreading
– Wordprocessor: thread para typing, spell checking, printing
• Multiprocessors
– Múltiplos processadores (cores) em um único chip
MC542
7.36
Multithreading: Algumas Definições
• Processo: programa executando em um computador
• Múltiplos processos podem estar em execução ao mesmo
tempo: navegando na Web, ouvindo musica, escrevendo um
artigo etc
• Thread: parte de um programa
• Cada processo possue múltiplas threads: em processador de
texto tem threads para typing, spell checking, printing …
• Em um computador convencional:
– Uma thread está em execução por vez
– Quando uma thread para (por exemplo, devido a um page fault):
» O estado da thread é guardado (registradores, ….)
» O estado da thread em espera é carregado no processador
e inicia-se sua execução
» Chamado de context switching
– Para o usuário parece que todas as threads executam
simultaneamente (existem outras condições que provocam
mudança da thread em execução: acesso a disco, time-out, …)
MC542
7.37
Multithreading
• Múltiplas cópias de status da arquitetura (uma por thread)
• Múltiplas threads activas por vez:
– Quando uma thread para, outra inicia sua execução imediatamente
(não é necessário armazenar e restaurar o status)
– Se uma thread não tem todas as unidades de execução necessárias,
outra thread pode ser executada
• Não aumenta o ILP de uma única of thread, porém aumenta o
throughput
MC542
7.38
Multiprocessors
• Multiple processors (cores) com alguma forma de comunicação
entre eles
• Tipos de multiprocessamento:
– Symmetric multiprocessing (SMT): múltiplos cores com
memória compartilhada
– Asymmetric multiprocessing: cores separados para diferentes
tarefas (por examplo, DSP e CPU em um telefone celular)
– Clusters: cada core possue seu próprio sistema de memória
MC542
7.39
Outras Fontes para Leitura
• Patterson & Hennessy’s: Computer Architecture: A
Quantitative Approach 3ª e 4ª Edições
• Conferências:
– www.cs.wisc.edu/~arch/www/
– ISCA (International Symposium on Computer Architecture)
– HPCA (International Symposium on High Performance
Computer Architecture)
MC542
7.40