Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquitetura de Computadores
Emilio Francesquini
e.francesquini@ufabc.edu.br
2021.Q1
Centro de Matemática, Computação e Cognição
Universidade Federal do ABC
Disclaimer
1
Lógica combinacional
Basicão de design lógico
2
A lógica combinacional
3
Portas lógicas
A A
A NOT A A OR B A AND B
B B
4
Portas lógicas
A A
B B
Pergunta
Que expressão lógica os circuitos acima representam?
5
Decoders
Inputs Outputs
Out0
12 11 10 Out7 Out6 Out5 Out4 Out3 Out2 Out1 Out0
Out1
0 0 0 0 0 0 0 0 0 0 1
Out2 0 0 1 0 0 0 0 0 0 1 0
3 Out3 0 1 0 0 0 0 0 0 1 0 0
Decoder 0 1 1 0 0 0 0 1 0 0 0
Out4
1 0 0 0 0 0 1 0 0 0 0
Out5
1 0 1 0 0 1 0 0 0 0 0
Out6 1 1 0 0 1 0 0 0 0 0 0
Out7 1 1 1 1 0 0 0 0 0 0 0
6
Multiplexadores
A
A 0
M
u C C
x
B 1
B
S S
7
Multiplexadores de 1 bit
A B S C
A 0
M 0 0 0 0
u C 0 0 1 0
x 0 1 0 0
B 1
0 1 1 1
1 0 0 1
1 0 1 0
S
1 1 0 1
1 1 1 1
Como montar um?
Usamos uma tabela verdade! Como transformar em um circuito?
8
Multiplexadores de 1 bit
32
A A31
M M
u 32 u
C C31
32 x x
B B31
A30
M
u C30
x ..
B30 .
..
.
A0
M
u C0
x
B0
Se queremos chegar até um MIPS, temos várias instruções que precisam ser
implementadas
Vamos começar com as mais básicas
I AND, OR, ADD, SUB, SLT, BEQ, …
Para as duas primeiras já temos as portas lógicas prontas! Vamos começar
por elas.
11
ULA de 1 bit para AND e OR
Operation
a
0
Result
1
b
12
Um somador de 1 bit
CarryIn
+ Sum
CarryOut
Operation
CarryIn
a
0
1 Result
⫹ 2
b
CarryOut
Pergunta
Como fazemos para criar uma ULA de 32 bits?
14
ULA de 32 bits com AND, OR e ADD
Operation
CarryIn
a0 CarryIn
ALU0 Result0
b0
CarryOut
a1 CarryIn
ALU1 Result1
b1
CarryOut
a2 CarryIn
ALU2 Result2
b2
CarryOut
.. .. ..
. . .
a31 CarryIn
ALU31 Result31
b31
15
Incluindo a operação SUB
a
0
📝 Note
Conseguimos adaptar o que já temos pronto 1 Result
16
CarryOut
Incluindo a operação SUB
Binvert Operation
CarryIn
a
0
1 Result
b 0
⫹ 2
CarryOut
a
0
1 Result
b 0
⫹ 2
CarryOut
Pergunta
Como alteramos o circuito acima para fazer isso? 18
Incluindo a operação NOR
Ainvert Operation
Binvert CarryIn
a 0
0
1
1 Result
b 0
⫹ 2
CarryOut
Pergunta
Quais são os sinais de controle para cada uma das operações que já
19
implementamos (AND OR ADD SUB NOR)?
Sinais de controle
💡 Tip
Conseguimos implementar diretamente mais uma operação só com o hardware
que temos? Se sim, qual?
20
Mas ainda está faltando algo…
Para criarmos o nosso processador MIPS, ainda temos 2 operações que são
essenciais: slt e beq
A ALU tem que ser capaz de verificar se A < B e se A = B
O que dá para fazer com que já temos?
Ainvert Operation Operation
Binvert CarryIn
CarryIn
a 0 a0 CarryIn
ALU0 Result0
b0
CarryOut
0
1
a1 CarryIn
ALU1 Result1
b1
1 Result CarryOut
a2 CarryIn
b 0 ALU2 Result2
2 b2
⫹ CarryOut
1 .. .. ..
. . .
a31 CarryIn
CarryOut
b31
ALU31 Result31
21
Implementando o slt
Binvert Operation
Ainvert
Ainvert Operation
CarryIn
Binvert CarryIn
a0 CarryIn Result0
b0 ALU0
a 0 Less
0 CarryOut
1
a1 CarryIn Result1
b1 ALU1
1 0 Less
CarryOut
Result
b 0 a2 CarryIn Result2
⫹ 2 b2 ALU2
0 Less
CarryOut
1
.. . .. .. ..
. . .. . . CarryIn .
..
Less 3
a31 CarryIn Result31
b31 ALU31 Set
0 Less
22
CarryOut Set
beq
23
beq
Voltando ao beq…
24
beq
Bnegate Operation
Ainvert
a0 CarryIn
Result0
b0 ALU0
Less Criamos uma nova
CarryOut
saída da ALU, chamada
a1 CarryIn
Result1
Zero
b1 ALU1
0 Less
CarryOut ..
.
Zero Quando Zero for 1, A e
B são iguais.
a2 CarryIn
Result2
b2
0
ALU2
Less
📝 Note
Quais são os bits de
CarryOut
.. . .. .. .. ..
. .. ..
.
. . CarryIn . .
controle para beq?
Result31
a31 CarryIn
b31 ALU31 Set
0 Less
25
Finalmente temos uma ALU
ALU operation
Zero
ALU Result
Overflow
CarryOut
26
O Processador
Introdução
27
Execução de instruções
28
Uma visão geral do processador
Add Add
Data
Register #
PC Address Instruction Registers ALU Address
Register #
Data
Instruction
memory
memory Register #
Data
Add Add
Data
Register #
PC Address Instruction Registers ALU Address
Register #
Data
Instruction
memory
memory Register #
Data
M
u
x
Add M
Add
u
x
ALU operation
Data
MemWrite
Register #
PC Address Instruction Registers ALU Address
Register # M Zero
u Data
Instruction
x memory
memory Register # RegWrite
Data
MemRead
Control
31
Clocking methodology
State State
element Combinational logic element
1 2 State
Combinational logic
element
Clock cycle
32
Datapath Monociclo
Construindo um Datapath
Datapath
I Elementos que processam os dados e endereços na CPU.
Registradores, ALUs, muxes, memórias, …
Vamos construir um datapath de MIPS de maneira incremental.
I Refinaremos pouco a pouco o design geral que vimos.
33
Intruction Fetch
Add
Read
PC
address
Instruction
Instruction
memory
PC é um registrador de 32 bits.
ALU soma 4 no PC para pular para a próxima instrução.
34
Instruções R-Format
a. Registers b. ALU
35
Instruções de Load/Store
MemWrite
Read
Address
data
16 32
Sign-
Data extend
Write memory
data
MemRead
36
a. Data memory unit b. Sign extension unit
Instruções de Branch
37
Instruções de Branch
Branch
Add Sum target
Shift
left 2
Read ALU operation
register 1 4
Instruction Read
Read data 1
register 2 To branch
Registers ALU Zero control logic
Write
register Read
data 2
Write
data
RegWrite
16 32
Sign-
extend
38
Juntando tudo
39
R-type/Load/Store Datapath
16 32 MemRead
Sign-
extend
40
O Datapath completo
PCSrc
M
Add u
x
ALU
4 Add result
Shift
left 2
16 32 MemRead
Sign-
extend
41
Controle da ALU
43
A unidade de controle principal
Load/
35 or 43 rs rt address
Store
31:26 25:21 20:16 15:0
Branch 4 rs rt address
31:26 25:21 20:16 15:0
PCSrc
0
M
Add u
x
ALU
4 Addresult 1
RegWrite Shift
left 2
Instruction [5:0]
ALUOp 45
Instruções R-Type
0
M
Add u
x
ALU 1
4 Add result
Shift
RegDst left 2
Branch
MemRead
Instruction [31–26] MemtoReg
Control
ALUOp
MemWrite
ALUSrc
RegWrite
Instruction [5–0] 46
Instruções Load
0
M
Add u
x
ALU 1
4 Add result
Shift
RegDst left 2
Branch
MemRead
Instruction [31–26] MemtoReg
Control
ALUOp
MemWrite
ALUSrc
RegWrite
Instruction [5–0] 47
Instrução Branch-on-Equal
0
M
Add u
x
ALU 1
4 Add result
Shift
RegDst left 2
Branch
MemRead
Instruction [31–26] MemtoReg
Control
ALUOp
MemWrite
ALUSrc
RegWrite
Instruction [5–0] 48
Implementando Jumps
49
Datapath com Jumps
Instruction [5–0] 50
Porque este tipo de Datapath não é usado hoje em dia?
51
Pipelining
O Datapath com a unidade de Controle
PCSrc
0
M
Add u
x
ALU
4 Addresult 1
RegWrite Shift
left 2
Instruction [5:0]
ALUOp 52
Porque este tipo de Datapath não é usado hoje em dia?
53
Uma analogia com lavar roupas
Execuções paralelas de tarefas para aumento de
desempenho
6 PM 7 8 9 10 11 12 1 2 AM
Time
Task
order
A
4 cargas na máquina
B Tempo total: 8 horas
C Versão com pipeline
D
I Tempo total: 3.5h, ou 2.3x
Time
6 PM 7 8 9 10 11 12 1 2 AM + rápido
I Speedup =
Task
order
2n/0.5n + 1.5 ≈ 4 =
A número de estágios!
B
D
54
O Pipeline no MIPS
55
Desempenho do pipeline
56
Desempenho do pipeline
Program
execution 200 400 600 800 1000 1200 1400 1600 1800
Time
order
(in instructions)
Instruction Data
lw $1, 100($0) fetch
Reg ALU
access
Reg
Instruction Data
lw $2, 200($0) 800 ps fetch
Reg ALU
access
Reg
Instruction Data
lw $2, 200($0) 200 ps fetch
Reg ALU
access
Reg
Instruction Data
lw $3, 300($0) 200 ps fetch
Reg ALU
access
Reg
58
Pipelining e o Design da ISA
59
Pipeline Hazards
Hazards
60
Structure hazards
61
Structure hazards
Program
execution 200 400 600 800 1000 1200 1400
Time
order
(in instructions)
Instruction Data
lw $1, 100($0) fetch
Reg ALU
access
Reg
Instruction Data
lw $2, 200($0) 200 ps fetch
Reg ALU
access
Reg
Instruction Data
lw $3, 300($0) 200 ps fetch
Reg ALU
access
Reg
Instruction Data
Reg ALU Reg
fetch access
62
Representando uma instrução
63
Data hazards
64
Data hazard
Program
execution 200 400 600 800 1000
order Time
(in instructions)
add $s0, $t0, $t1 IF ID EX MEM WB
65
Data hazard
Program
execution 200 400 600 800 1000
order Time
(in instructions)
add $s0, $t0, $t1 IF ID EX MEM WB Escrita de $s0
Leitura de $s0
66
Data hazard - Solução 1
67
Data hazard - Solução 2
68
Load-Use Data Hazard
1 lw $s0, 20($t1)
2 sub $t2, $s0, $t3
69
Load-Use Data Hazard - Solução 3
Program
execution
200 400 600 800 1000 1200 1400
order Time
(in instructions)
lw $s0, 20($t1) IF ID EX MEM WB
70
Reordenando instruções para evitar bolhas
Código em C:
1 a = b + e;
2 c = b + f;
1 lw $t1, 0($t0)
2 lw $t2, 4($t0)
3 add $t3, $t1, $t2
4 sw $t3, 12($t0)
5 lw $t4, 8($t0)
6 add $t5, $t1, $t4
7 sw $t5, 16($t0)
Código em C:
1 a = b + e;
2 c = b + f;
73
Control hazards - Solução 1
Program
execution Time 200 400 600 800 1000 1200 1400
order
(in instructions)
Instruction Data
add $4, $5, $6 fetch
Reg ALU
access
Reg
Instruction Data
beq $1, $2, 40 fetch
Reg ALU
access
Reg
200 ps
bubble bubble bubble bubble bubble
74
Branch Prediction
75
Branch Predictor no MIPS (Not Taken)
Program
execution Time 200 400 600 800 1000 1200 1400
order
(in instructions)
Instruction Data
add $4, $5, $6 Reg ALU Reg
Predição fetch access
Instruction Data
beq $1, $2, 40 Reg ALU Reg
correta 200 ps fetch access
Instruction Data
lw $3, 300($0) 200 ps fetch
Reg ALU
access
Reg
Program
execution Time 200 400 600 800 1000 1200 1400
order
(in instructions)
Predição Instruction Data
add $4, $5, $6 Reg ALU Reg
incorreta fetch access
Instruction Data
beq $1, $2, 40 fetch
Reg ALU
access
Reg
200 ps
bubble bubble bubble bubble bubble
78
Pipelining no MIPS
MIPS Pipelined Datapath
IF: Instruction fetch ID: Instruction decode/ EX: Execute/ MEM: Memory access WB: Write back
register file read address calculation
Add
4 Add
ADD
result
Shift
left 2
Fluxo direita →
0
esquerda pode
Read Read
M register 1
Address data 1
u PC Zero
x Read ALU ALU
causar hazards
1 register 2 Address
Instruction result Read
Registers 0 1
M data
Write Read Data M
Instruction register data 2 u u
memory
memory x x
Write 1
0
data Write
data
16 32
Sign-
extend
79
Registradores de pipeline
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU ALU
Registers Read Read
memory result Address data 1
Write 0
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
80
Operação do pipeline
81
IF para load e store
lw
Instruction fetch
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 0
Write 0
data 2 M
register M
Data u
u
Write memory x
x 1
data 1
Write
data
16 Sign- 32
extend
82
ID para load e store
lw
Instruction decode
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 1
Write 0
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
83
EX para load
Iw
Execution
Add
4 Add Add
Shift result
left 2
0
M
u PC Address Read
Instruction
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU ALU Read
memory Registers Address 1
Write Read 0 result data M
register data 2 M u
u Data
Write memory x
data 1x 0
Write
data
16 Sign- 32
extend
84
MEM para load
Iw
Memory
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 0
Write 0
data 2 M
register M
Data u
u
Write memory x
x 1
data 1
Write
data
16 Sign- 32
extend
85
WB para load
Iw
Write-back
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 1
Write 0
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
86
Possível número de registrador incorreto
Datapath corrigido para load
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 1
Write 0
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
87
EX para store
sw
Execution
Add
4 Add Add
Shift result
left 2
0
M
u PC Address Read
Instruction
register 1 Read
x
1 data 1
Read Zero
Instruction register 2 ALU ALU Read
memory Registers result Address 1
Read 0 data M
Write
M
register data 2 Data u
u
memory x
Write x 0
data 1
Write
data
16 Sign- 32
extend
88
MEM para store
sw
Memory
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 0
Write 0
data 2 M
register M
Data u
u
Write memory x
x 1
data 1
Write
data
16 Sign- 32
extend
89
WB para store
sw
Write-back
Add
4 Add Add
result
Shift
left 2
0
M
Instruction
u PC Address Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory result Address data 1
Write 0
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
90
Multi-cycle pipeline diagram
Program
execution
order
(in instructions)
92
Single-cycle pipeline diagram
Add
Add
4 Add
result
Shift
left 2
0
M
u PC Address Read
Read
Instruction
x register 1
1 data 1
Read Zero
Instruction register 2 ALU
Registers Read ALU Read
memory Address 1
Write 0 result data
data 2 M
register M
Data u
u
Write memory x
x 0
data 1
Write
data
16 Sign- 32
extend
93
Controle do pipeline (simplificado)
PCSrc
Add
4 Add Add
result Branch
Shift
left 2
0 RegWrite
M
Instruction
u PC Address Read
x register 1 Read MemWrite
1 data 1
Read Zero MemtoReg
ALUSrc
Instruction register 2 Add ALU
Registers Read
memory result Address 1
Write Read 0 data
data 2 M M
register u
u Data
x memory x
Write 0
data 1
Write
data
Instruction
(15–0) 16 Sign- 32 6
ALU
extend control MemRead
Instruction
(20–16)
0 ALUOp
M
Instruction u
x
(15–11) 1
RegDst
94
Controle do pipeline
WB
Instruction
Control M WB
EX M WB
ID/EX
WB
EX/MEM
Control M WB
MEM/WB
EX M WB
IF/ID
Add
4 Add Add
Shift result
Branch
RegWrite
left 2
ALUSrc
MemWrite
0
MemtoReg
M
Address
Instruction
u PC Read
x register 1 Read
1 data 1
Read Zero
Instruction register 2 ALU ALU Read
memory Registers Read Address 1
Write 0 result data
data 2 M M
register u
u Data
Write x memory x
data 1 0
Write
data
Instruction
[15–0] 16 Sign- 32 6
ALU
extend control MemRead
Instruction
[20–16] ALUOp
0
M
Instruction u
[15–11] x
1
RegDst
96
Para saber mais sobre pipeline e hazards de dados, controle e exceções
O livro traz na sua seção 4.7 como o pipeline deve ser alterado para levar em
consideração os hazards e fazer o forwarding/bypassing.
A seção 4.9 descreve o tratamento de interrupções e exceções.
Aqui não vamos entrar nestes detalhes, mas caso queira ainda mais detalhes
do que no livro [PH] vejam o livro [HP] disponível na bibliografia da
disciplina.
Vamos dar apenas uma rápida olhada sobre o branch predictor.
97
Dynamic branch predictor
98
Preditores de 1 bit
1 outer: ...
2 ...
3 inner: ...
4 beq ..., ..., inner
5 ...
6 beq ..., ..., outer
99
Preditores de 2 bits
Taken
Not taken
Predict taken Predict taken
Taken
Not taken
Predict not taken Predict not taken
Taken
Not taken
100
Preditores mais elaborados
Correlating predictors
I Mantem 2 automatos, um para quando um branch foi tomado pela última vez e
outro para quando não foi tomado. Mostra-se que isso traz um aumento
significativo do acerto.
Tournament predictors
I Mantém 2 preditores para cada branch. Conforme o branch vai executando, os
preditores são atualizados e a cada momento o que teve mais acertos
históricos é utilizado para prever o resultado. Alguns processadores recentes
usam este esquema.
101
Paralelismo de instruções
102
Multiple issue
Issue slots são cada uma das posições nas quais as instruções podem ser
selecionadas para execução em um único ciclo.
Issue packet é o conjunto de instruções que será selecionada para execução
em um único ciclo
Estático
I As decisões de quais instruções serão executadas ao mesmo tempo é definida
em tempo de compilação.
I Em arquiteturas VLIW (very long instruction word) as diversas instruções
independentes são empacotadas em uma única instrução (tipicamente com
diversos campos opcode diferentes)
Dinâmico
I As decisões de quais instruções serão executadas ao mesmo tempo é definida
pelo processador em tempo de execução.
I Normalmente o compilador já fez um primeiro passo de otimização.
103
Escalonamento estático de instruções
104
MIPS com dual-issue estático
105
MIPS com dual-issue estático
⫹ M
u
4 x
ALU
M
Registers u
M x
80000180 u PC Instruction
x memory
Write
data
Data
Sign- ALU
extend memory
Sign-
extend
Address
106
Hazards no MIPS com dual-issue
Queremos escalonar:
Loop: lw $t0, 0($s1) # $t0=array element
addu $t0,$t0,$s2# add scalar in $s2
sw $t0, 0($s1)# store result
addi $s1,$s1,–4# decrement pointer
bne $s1,$zero,Loop# branch $s1!=0
Versão otimizada:
109
Desenrolando laços - Exemplo
110
Processadores superescalares
111
Para que fazer escalonamento dinâmico?
112
Multiple-issue funciona?
113
Eficiência energética
114
Arm Cortex-A8 e Intel i7