Escolar Documentos
Profissional Documentos
Cultura Documentos
Pipelining
3 May, 2021
Desenho do processador
Suporte para o conjunto de instruções
Desenho do processador
Suporte para o ISA do RISC-V
3
Arquitetura de Ciclo Único 4
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
+ (R0-R31) Xb ALU FPD
BA
Descodificação da instrução
PC NextPC Address
MUX
PC IMM
Xb DATA
MUX
SelB Din
Address Fb MEM
Instrução
MEMD
IntOp
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel WBSel
FPOp
SelA
Xa
MUX
MUX
Fa
FAA FP FP FPD
RF Unit
(F0-F31) Fb, Fc
FBA, FCA
FDA
FWE
Arquitetura de Ciclo Único 5
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
+ (R0-R31) Xb ALU FPD
BA
Descodificação da instrução
PC NextPC Address
MUX
PC IMM
Xb DATA
MUX
SelB Din
Address Fb MEM
Instrução
MEMD
IntOp
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel WBSel
FPOp
SelA
Xa
MUX
MUX
Fa
FAA FP FP FPD
RF Unit
(F0-F31) Fb, Fc
FBA, FCA
Fusão entre a fase
de ID e a fase de OF FDA
FWE
Arquitetura de Ciclo Único 6
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
+ (R0-R31) Xb ALU FPD
BA
Descodificação da instrução
PC NextPC Address
MUX
PC IMM
Xb DATA
MUX
SelB Din
Address Fb MEM
Instrução
MEMD
IntOp
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel WBSel
FPOp
Exercise: SelA
Xa
What is the control MUX
MUX
Fa
word for the FAA FP FP FPD
instructions: RF Unit
(F0-F31) Fb, Fc
FBA, FCA
flw f7,8(x12)
mul x10,x11,x10
FDA
jalr x1,x5,8 FWE
Arquitetura de Ciclo Único 7
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
- Jsel, BRSel NoBranch BRSel
Jsel,BRSel JSel PCSel
0 WE
- DA Flags
4 AA Xa Branch Control NextPC
12
INT INTD
INT INTD
RF
MUX
+ (R0-R31) Xb ALU FPD
- BA
Descodificação da instrução
PC NextPC Address
MUX
PC 8 IMM
Xb DATA
MUX
IMM SelB Fb
Din
MEM
Address
Instrução
MEMD
+ IntOp
INST. MEM - SelM
0 MW WE Dout
Data Word MLen WordLen
Memory WBSel WBSel
- FPOp
Exercise: - SelA Xa
What is the control MUX
MUX
Fa
word for the - FAA FP FP FPD
instructions: RF Unit
(F0-F31) Fb, Fc
- FBA, FCA
flw f7,8(x12)
mul x10,x11,x10 7 FDA
jalr x1,x5,8
1 FWE
Arquitetura de Ciclo Único 8
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
- Jsel, BRSel NoBranch BRSel
Jsel,BRSel JSel PCSel
1 WE
10 DA Flags
Xa Branch Control
4 11 AA NextPC
INT INTD
INT INTD
RF
MUX
+ (R0-R31) Xb ALU FPD
10 BA
Descodificação da instrução
PC NextPC Address
MUX
PC - IMM
Xb DATA
MUX
Xb SelB Fb
Din
MEM
Address
Instrução
MEMD
x IntOp
INST. MEM - SelM
0 MW WE Dout
Data - MLen WordLen
INTD WBSel WBSel
- FPOp
- SelA Xa
Exercise: MUX
MUX
What is the control word - FAA
Fa
for the instructions: FP FP FPD
RF Unit
(F0-F31) Fb, Fc
flw f7,8(x12) - FBA, FCA
mul x10,x11,x10
jalr x1,x5,8 - FDA
0 FWE
Arquitetura de Ciclo Único 9
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
Xa Jsel, BRSel JumpAlways BRSel
Jsel,BRSel JSel PCSel
1 WE
1 DA Flags
Xa Branch Control
4 5 AA NextPC
INT INTD
INT INTD
RF
MUX
+ (R0-R31) Xb ALU FPD
- BA
Descodificação da instrução
PC NextPC Address
MUX
PC 8 IMM
Xb DATA
MUX
- SelB Fb
Din
MEM
Address
Instrução
MEMD
- IntOp
INST. MEM - SelM
0 MW WE Dout
Data - MLen WordLen
NextPC WBSel WBSel
- FPOp
- SelA Xa
Exercise: MUX
MUX
What is the control word - FAA
Fa
for the instructions: FP FP FPD
RF Unit
(F0-F31) Fb, Fc
flw f7,8(x12) - FBA, FCA
Mul x10,x11,x10
jalr x1,x5,8 - FDA
0 FWE
Determinação da palavra de controlo
▪ Observações:
10
Desempenho do processador
Análise
Desempenho do processador
#FPOps
▫ 𝐹𝐿𝑂𝑃𝑆 (Floating Point Operations Per Second) =
𝑡
12
Desempenho do processador
Noção de caminho crítico
13
Desempenho do processador
Determinação da frequência de relógio
Nota: os pressupostos para a memória (considerando processadores comuns encontrados em portáteis ou telemóveis)
são pouco realistas, como se verá em capítulos posteriores. Contudo, estes pressupostos são suficientes para ilustrar
porque razão esta arquitectura simplista é pouco eficiente.
14
Potenciais caminhos críticos 15
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
RF
+ ALU
Descodificação da instrução
BA (R0-R31) Xb FPD
NextPC
MUX
PC Address
PC IMM
Ex:
Xb DATA
MUX
SelB Din
Fb MEM
MEMD
Address
Instrução
IntOp
add,
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel
FPOp
WBSel
sub,
mul,
SelA
Xa
MUX
MUX
Fa
FAA
div,
FP FP FPD
RF Unit
(F0-F31) Fb, Fc
…
FBA, FCA
FDA
FWE
Potenciais caminhos críticos 16
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
RF
+ ALU
Descodificação da instrução
BA (R0-R31) Xb FPD
NextPC
MUX
PC Address
PC IMM
Ex:
Xb DATA
MUX
SelB Din
Fb MEM
MEMD
Address
Instrução
IntOp
fadd,
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel
FPOp
WBSel
fmul,
fdiv,
SelA
Xa
MUX
MUX
Fa
FAA
…
FP FP FPD
RF Unit
(F0-F31) Fb, Fc
FBA, FCA
FDA
FWE
Potenciais caminhos críticos 17
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
RF
+ ALU
Descodificação da instrução
BA (R0-R31) Xb FPD
NextPC
MUX
PC Address
PC IMM
Ex:
Xb DATA
MUX
SelB Din
Fb MEM
MEMD
Address
Instrução
IntOp
sw
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel WBSel
FPOp
SelA
Xa
MUX
MUX
Fa
FAA FP FP FPD
RF Unit
(F0-F31) Fb, Fc
FBA, FCA
FDA
FWE
Potenciais caminhos críticos 18
IMM
JumpPC
PC
+
MUX
MUX
Xa NextPC
MUX
RF
+ ALU
Descodificação da instrução
BA (R0-R31) Xb FPD
NextPC
MUX
PC Address
PC IMM
Ex:
Xb DATA
MUX
SelB Din
Fb MEM
MEMD
Address
Instrução
IntOp
lw,
SelM
INST. MEM MW WE Dout
Data MLen WordLen
WBSel
FPOp
WBSel
flw
…
SelA
Xa
MUX
MUX
Fa
FAA FP FP FPD
RF Unit
(F0-F31) Fb, Fc
FBA, FCA
FDA
FWE
Desempenho do processador
Determinação da frequência de relógio
21
Desempenho do processador
Analogia da lavandaria
22
Desempenho do processador
Analogia da lavandaria
23
Desempenho do processador
Analogia da lavandaria
24
Desempenho do processador
Analogia da lavandaria
25
Desempenho do processador
Como aumentar a frequência de relógio
26
Desempenho do processador
Como aumentar a frequência de relógio
Nota: a existência do estágio de MEM prende-se com a necessidade de suportar instruções de LD/ST com endereço indexado, i.e.,
[Rx+IMM]. Se o ISA só definir instruções com endereçamento direto, [IMM], ou só com endereçamento indireto por registo, [Rx], a
27 memória de dados pode ser colocada em paralelo com a ALU, passando a haver apenas 4 estágios: IF, ID, EX/MEM, WB
Arquitetura Pipeline
Principais alterações
28
Arquitetura Pipeline 29
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline
Principais alterações
30
Arquitetura Pipeline 31
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel WB_DA,
MUX
MEM_JumpPC
WB_WE
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
ID_DA, ID_WE EX_DA, EX_WE MEM_DA, MEM_WE
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline 32
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline
Principais alterações
33
Arquitetura Pipeline
Principais alterações
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline
Execução de código
PC Instrução
10h: addi x10,x0,vector
14h: ori x11,x0,100
18h: ori x12,x0,1
1Ch: ori x13,x0,8
20h: lw x14,0(x10)
24h: lw x15,8(x10)
37
Arquitetura Pipeline
Execução de código
Ciclo de relógio #1
PC Instrução
(IF) 10h: addi x10,x0,vector addi x10,x0,vector
14h: ori x11,x0,100
18h: ori x12,x0,1
1Ch: ori x13,x0,8
20h: lw x14,0(x10)
24h: lw x15,8(x10)
38
Arquitetura Pipeline
Execução de código
Ciclo de relógio #2
PC Instrução
(ID) 10h: addi x10,x0,vector addi x10,x0,…
(IF) 14h: ori x11,x0,100 ori x11,x0,100
18h: ori x12,x0,1
1Ch: ori x13,x0,8
20h: lw x14,0(x10)
24h: lw x15,8(x10)
39
Arquitetura Pipeline
Execução de código
Ciclo de relógio #3
PC Instrução
(EX) 10h: addi x10,x0,vector addi x10,x0,…
(ID) 14h: ori x11,x0,100 ori x11,x0,100
(IF) 18h: ori x12,x0,1 ori x12,x0,1
1Ch: ori x13,x0,8
20h: lw x14,0(x10)
24h: lw x15,8(x10)
40
Arquitetura Pipeline
Execução de código
Ciclo de relógio #4
PC Instrução
(MEM) 10h: addi x10,x0,vector addi x10,x0,…
(EX) 14h: ori x11,x0,100 ori x11,x0,100
(ID) 18h: ori x12,x0,1 ori x12,x0,1
(IF) 1Ch:ori x13,x0,8 ori x13,x0,8
20h: lw x14,0(x10)
24h: lw x15,8(x10)
41
Arquitetura Pipeline
Execução de código
Ciclo de relógio #5
PC Instrução
(WB) 10h: addi x10,x0,vector addi x10,x0,…
(MEM) 14h: ori x11,x0,100 ori x11,x0,100
(EX) 18h: ori x12,x0,1 ori x12,x0,1
42
Arquitetura Pipeline
Execução de código
Ciclo de relógio #6
PC Instrução
✓ 10h: addi x10,x0,vector
(WB) 14h: ori x11,x0,100 ori x11,x0,100
(MEM) 18h: ori x12,x0,1 ori x12,x0,1
(EX) 1Ch: ori x13,x0,8 ori x13,x0,8
(ID) 20h: lw x14,0(x10) lw x14,0(x10)
43
Arquitetura Pipeline
Execução de código
Ciclo de relógio #7
PC Instrução
✓ 10h: addi x10,x0,vector
✓ 14h: ori x11,x0,100
(WB) 18h: ori x12,x0,1 Ori x12,x0,1
(MEM) 1Ch: ori x13,x0,8 Ori x13,x0,8
(EX) 20h: lw x14,0(x10) lw x14,0(x10)
(ID) 24h: lw x15,8(x10) lw x15,8(x10)
44
Arquitetura Pipeline
Execução de código
Ciclo de relógio #8
PC Instrução
✓ 10h: addi x10,x0,vector
✓ 14h: ori x11,x0,100
✓ 18h: ori x12,x0,1
(WB) 1Ch: ori x13,x0,8 ori x13,x0,8
PC Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10
10h: addi x10,x0,vector IF ID EX MEM WB
14h: ori x11,x0,100 IF ID EX MEM WB
18h: ori x12,x0,1 IF ID EX MEM WB
1Ch: ori x13,x0,8 IF ID EX MEM WB
20h: lw x14,0(x10) IF ID EX MEM WB
24h: lw x15,8(x10) IF ID EX MEM WB
46
Arquitetura Pipeline
Execução de código: visão alternativa
PC Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10
10h: addi x10,x0,vector IF ID EX MEM WB
14h: ori x11,x0,100 IF ID EX MEM WB
18h: ori x12,x0,1 IF ID EX MEM WB
1Ch: ori x13,x0,8 IF ID EX MEM WB
20h: lw x14,0(x10) IF ID EX MEM WB
24h: lw x15,8(x10) IF ID EX MEM WB
Pipeline do processador
47
Arquitetura Pipeline
Execução de código: visão alternativa
PC Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10
10h: addi x10,x0,vector IF ID EX MEM WB
14h: ori x11,x0,100 IF ID EX MEM WB
18h: ori x12,x0,1 IF ID EX MEM WB
1Ch: ori x13,x0,8 IF ID EX MEM WB
20h: lw x14,0(x10) IF ID EX MEM WB
24h: lw x15,8(x10) IF ID EX MEM WB
Nota: no cálculo do período de relógio, deve-se somar o tempo de propagação e setup dos flip-flops ao tempo de propagação da lógica
49
(combinatória) do processador
Desempenho
Arquitetura Pipeline vs Arquitetura de Ciclo Único
Admitindo que o tempo de setup e hold dos flip-flops é desprezável e que a divisão do pipeline em
estágios é feita de forma perfeitamente equitativa,
TCLK
#Ciclos para executar N instruções: N T
CLK ≈ #Ciclos para
⇒
Speedup = S executar N instruções: (S-1) + N
𝑆
Periodo de relógio (𝐓𝐂𝐋𝐊): limitado pelo maior Periodo de relógio (𝐓 CLK): limitado pelo maior
caminho
Assim, crítico, que deve
o desempenho docorresponder
processador,aem condições ideais,caminho crítico,
aumenta que deverá ou ao ao
proporcionalmente acesso
númeroà memória
de
uma instrução de load:
estágios de pipeline. Contudo, na prática: ou à execução de uma instrução de FP (mais provável):
TCLK =TPC+TINSTR +TDECODER+TREAD o tempo de CLK = TP FFs + TFP UNIT + TSU FFs
+ propagação
T
1. Quando o número de estágios aumenta muito,OPERANDS
. MEM e setup dos flip-flops deixa de serTdesprezável
PIPE > TCU / S
TINT ALU+TDATA MEM+TWRITE RF
2. A divisão do processador em estágios nunca é totalmente equilibrada
Tempo de execução:
3. Esta T = as
estimative ignora N dependências
× TCLK entre instruções! Tempo de execução (para N>>S): T
=N×T
CLK
Nota: no cálculo do periodo de relógio deve-se somar o tempo de propogação e setup dos flip-flops ao tempo de propogação através da
50
lógica (combinatória) do processador
Arquitetura Pipeline
Novo exemplo de código
i=N-1;
do{
C[i]=A[i]+k;
i--;
} while (i>=0);
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB X13
addi x13,x13,-1
sll x14,x13,3
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
52
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x13 (operando),
contudo o valor correto ainda não foi escrito no RF
53
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x13 (operando),
contudo o valor correto ainda não foi escrito no RF
54
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x14 (operando),
contudo o valor correto ainda não foi escrito no RF
55
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x14 (operando),
contudo o valor correto ainda não foi escrito no RF
56
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x10 (operando),
contudo o valor correto ainda não foi escrito no RF
57
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor do registo x15 (operando),
contudo o valor correto ainda não foi escrito no RF
58
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12) IF ID EX MEM -
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
Conflito de dados:
Lê o valor dos registos x12 e x15 (operandos),
contudo o valor correto ainda não foi escrito no RF
59
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12) IF ID EX MEM -
addi x10,x10,-8 IF ID EX MEM WB x10
addi x12,x12,-8 IF ID EX MEM WB x12
addi x13,x13,-1 IF ID EX MEM WB x13
bge x13,x0,-9
60
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12) IF ID EX MEM -
addi x10,x10,-8 IF ID EX MEM WB x10
addi x12,x12,-8 IF ID EX MEM WB x12
addi x13,x13,-1 IF ID EX MEM WB x13
bge x13,x0,-9 IF ID EX MEM WB
Conflito de controlo:
→ Qual o valor do PC da próxima instrução?
→ O estágio de IF não sabe que a instrução
61 corresponde a um branch!!!
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12) IF ID EX MEM -
addi x10,x10,-8 IF ID EX MEM WB x10
addi x12,x12,-8 IF ID EX MEM WB x12
addi x13,x13,-1 IF ID EX MEM WB x13
bge x13,x0,-9 IF ID EX MEM WB
Conflito de dados:
Lê o valor dos registos x13 e x0
(operandos), contudo o valor correto
62 de x13 ainda não foi escrito no RF
Arquitetura Pipeline
Novo exemplo de código
CLK
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID EX MEM WB x15
sw x15,0(x12) IF ID EX MEM -
addi x10,x10,-8 IF ID EX MEM WB x10
addi x12,x12,-8 IF ID EX MEM WB x12
addi x13,x13,-1 IF ID EX MEM WB x13
bge x13,x0,-9 IF ID EX MEM WB
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Conflitos
▪ Conflito (Hazard)
▫ Designa-se de conflito (hazard) toda e qualquer situação em que não
seja possível executar uma determinada instrução no instante em que
ela é processada pelo processador.
66
Tipos de conflitos
▪ Conflitos de dados
▫ Os operandos da instrução ainda não estão disponíveis para serem lidos
▪ Conflitos de controlo
▫ Originados por uma instrução de controlo de fluxo (beq, bne, bge, blt, bgeu, bltu, jal, jalr). A
arquitectura não sabe qual a próxima instrução a executar!
▪ Conflitos estruturais
▫ Falta de recursos em hardware para executar uma dada instrução. Considere-se por
exemplo a adição da nova instrução:
mul x15,x13,x12
A existência de um conflito depende do
… número de instruções no meio
add x17,x15,x12
68
Conflitos de dados
Identificação de dependências e de conflitos de dados
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
mul x5,x3,x2 IF ID EX MEM WB x5
add x7,x5,x2 IF ID EX MEM WB x7
+3 ciclos
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
mul x5,x3,x2 IF ID EX MEM WB x5
Inst #1 … … … … …
Inst #2 … … … … …
Inst #3 … … … … …
add x7,x5,x2 IF ID EX MEM WB X7
☺
69
Conflitos de dados
Identificação de dependências e de conflitos de dados
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
sw x5,0(x10) IF ID EX MEM WB
lw x3,-8(x4) IF ID EX MEM WB x3
Admitindo que X10=X4-8, ☺
i.e., a instrução de load lê o
valor escrito pela instrução Como a leitura da memória é realizada no estágio de MEM (ciclo
de store. k+4) e a escrita do valor também é realizada no mesmo estágio
(mas no ciclo k+3), esta dependência nunca gera um conflito (com
esta arquitetura)
70
Conflitos de controlo
Identificação de conflitos de controlo
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7
mul x5,x7,x8 IF ID EX MEM WB x5 mul x5,x7,x8 IF ID EX MEM WB x5
mul x6,x2,x3 IF ID EX MEM WB x6 mul x6,x2,x3 IF ID EX MEM WB x6
add x4,x5,x6 IF ID EX MEM WB x4 nop IF ID EX MEM WB
nop IF ID EX MEM WB
nop IF ID EX MEM WB
add x4,x5,x6 IF ID EX MEM
73
Resolução de conflitos por software
Conflitos de controlo
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
jal x0,label IF ID EX MEM WB
Wrong Inst1 IF ID EX MEM WB
Wrong Inst2 IF ID EX MEM WB
Wrong Inst3 IF ID EX MEM WB
label: add x4,x2,x1 IF ID EX MEM WB
O PC é atualizado com o resultado
da instrução “jal x0,label”
74
Resolução de conflitos por software
Conflitos de controlo
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
jal x0,label IF ID EX MEM WB
Delay Slot #1 IF ID EX MEM WB
Delay Slot #2 IF ID EX MEM WB
Delay Slot #3 IF ID EX MEM WB
75 label: add x4,x2,x1 IF ID EX MEM WB
Resolução de conflitos por software
Conflitos de controlo
76
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
subi x13,x13,1
sll x14,x13,3
add x10,x10,x14
add x12,x12,x14
loop: lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
77
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3 NOPs
subi x13,x13,1
sll x14,x13,3
Nota: não há nenhuma instrução em baixo que se possa mover
add x10,x10,x14
para aqui sem quebrar uma dependência de dados
add x12,x12,x14
loop: lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
78
Resolução de conflitos por software
Exemplo de resolução de conflitos
79
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3 NOPs
sll x14,x13,3
add x10,x10,x14 Nota: não há nenhuma instrução em baixo que se possa mover
add x12,x12,x14 para aqui sem quebrar uma dependência de dados
loop: lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
80
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3 NOPs
add x10,x10,x14
add x12,x12,x14 Nota: não há nenhuma instrução em baixo que se possa mover
loop: lw x15,0(x10) para aqui sem quebrar uma dependência de dados
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
81
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14 Esta dependência já não gera conflitos
loop: lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
82
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
loop: lw x15,0(x10) 2 NOPs
add x15,x15,x11
Nota: há uma instrução no meio que ajuda a resolver o conflito
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
83
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10) Podemos mover duas instruções para ajudar na resolução…
add x15,x15,x11 Mas ainda precisamos de 1 NOP
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,loop
84
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
nop
add x15,x15,x11
sw x15,0(x12) Podemos adiar o store para os slots do bge
addi x12,x12,-8 Para respeitar a dependência do addi, teremos de o mover também
bge x13,x0,loop
85
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
nop
add x15,x15,x11
nop Resta um NOP para garantir a distância entre o add e o sw
bge x13,x0,loop (dependência de x15)
nop
sw x15,0(x12)
86
addi x12,x12,-8
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
nop
add x15,x15,x11 Podemos mover o addi, desde que alteremos o offset do sw:
nop para que o endereço escrito pelo sw não se altere (por via da
bge x13,x0,loop antecipação do addi, o endereço deve ser obtido por (R2 + 8), dado que
nop na altura em que o sw é realizado, o R2 já foi subtraído de 8 unidades
sw x15,0(x12) (ver próximo slide).
87
addi x12,x12,-8
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
addi x12,x12,-8
add x15,x15,x11
nop Podemos eliminar o nop, desde que o sw mova para baixo
bge x13,x0,loop
nop
sw x15,8(x12)
88
nop
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
addi x12,x12,-8
add x15,x15,x11
bge x13,x0,loop
nop
nop
sw x15,8(x12)
89
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori x13,zero,N
3x nop
subi x13,x13,1
3x nop
sll x14,x13,3
3x nop
add x10,x10,x14
add x12,x12,x14
2x nop
loop: lw x15,0(x10)
addi x10,x10,-8
addi x13,x13,-1
addi x12,x12,-8
add x15,x15,x11
bge x13,x0,loop
nop Porque não aproveitamos estes 2 ciclos para antecipar
nop o início da próxima iteração (i.e. a instrução lw) ?
sw x15,8(x12)
90
Resolução de conflitos por software
Exemplo de resolução de conflitos
ori
3x nop
x13,zero,N ▪ Para N iterações, é necessário executar:
subi x13,x13,1 ▫ Preâmbulo: 5 instruções + 11 NOPs
3x nop
▫ Ciclo: (7 instruções + 2 NOPs) x N iterações
sll x14,x13,3
▫ Total: 16 + 9N instruções
94
sw x15,8(x12) ▫ Speedup =
5(5+7𝑁)
20+9𝑁
5(5+7𝑁)
lim
𝑁→+∞ 20+9𝑁
=
35
9
= 3.9
Resolução de conflitos por software
Exemplo de resolução de conflitos
2.0
TCLK ORIGINAL=2TCLK PIPE
1.5
1.0
0.5
0.0
0 5 10 15 20 25 30 35 40 45 50
Número de iterações
95
Resolução de conflitos por software
96
Arquitetura Pipeline (Resolução das instruções de controlo no estágio de MEM) 97
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp A resolução das
SelA
ID_Xa
instruções de
EX_FPD
controlo no
MUX
MUX
ID_Fa
FAA
FP FP estágio de MEM
RF Unit obriga à
Delay FBA, FCA Delay ID_Fb, ID_Fc
(F0-F31) Delay
slot #1 slot #2 slot #3 existência de 3
FDA,FWE delay slots
SOLUÇÃO: Antecipar a resolução das instruções de controlo 98
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline (Resolução das instruções de controlo no estágio de EX) 99
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
O impacto no caminho
+ crítico é mínimo já que
MUX
MEM_JumpPC
as flags dizem
MEM_PCSel
ID_Xa
Jsel respeito ao somador e
BRSel Branch Control
DA,WE o caminho crítico é
EX_Flags ditado pelas unidades
ID_Xa
IF_NextPC AA mais complexas
INT
4 RF INT (cálculo em FP ou
MUX
ALU EX_INTD divisão inteira)
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp A resolução das
SelA
ID_Xa
instruções de
controlo no
MUX
MUX
ID_Fa
FAA
FP estágio
FP deEX_FPD
EX
RF Unit
obriga à
Delay FBA, FCA Delay ID_Fb, ID_Fc
(F0-F31)
slot #1 slot #2 existência de 2
FDA,FWE delay slots
Arquitetura Pipeline (figura repetida do slide anterior) 100
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch Control
DA,WE
EX_Flags
AA ID_Xa
IF_NextPC
INT
4 RF INT
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
MUX
MUX
ID_Fa
FAA
FP FP EX_FPD
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
SOLUÇÃO: Antecipar a resolução das instruções de controlo 101
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+ MEM_JumpPC MEM_PCSel
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel
DA,WE
?
EX_Flags
IF_NextPC AA ID_Xa Branch
INT Control
4 RF INT
MUX
ALU
EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
EX_FPD
MUX
MUX
ID_Fa
FAA
FP FP
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline (figura repetida dos slides anteriores) 102
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM +
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch CTRL
DA,WE
ID_Flags -
IF_NextPC AA
INT ID_Xa
4 RF INT
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp 1. Precisamos de um somador adicional para calcular a
Address DATA MEM
ID_Xb subtração entre os operandos (para o caso de
IF_Instrução
MUX
Din
INST. ID_Fb instruções condicionais)
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel 2. O somador para calculo do endereço efetivo de salto
FPOp também tem de passar para o estágio de ID
SelA
ID_Xa
3. Aumenta consideravelmente o caminho crítico do
MUX
MUX
ID_Fa
FAA
FP FP EX_FPD estágio de ID. Pode ou não levar a uma alteração de
RF Unit frequência de relógio dependendo do caminho
FBA, FCA (F0-F31) ID_Fb, ID_Fc
crítico dos restantes estágios.
FDA,FWE
Arquitetura Pipeline (figura repetida dos slides anteriores) 103
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM +
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch CTRL
DA,WE
ID_Flags -
IF_NextPC AA
INT ID_Xa
4 RF INT
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp A resolução das
SelA instruçõesID_Xa
de
controlo no
MUX
MUX
ID_Fa
FAA
FP
estágio de ID FP EX_FPD
obriga RFà existência Unit
Delay FBA, FCA (F0-F31) ID_Fb, ID_Fc
slot #1 de apenas 1 delay
FDA,FWE slot
Arquitetura Pipeline (figura repetida dos slides anteriores) 104
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch CTRL
DA,WE
ID_Flags -
IF_NextPC AA
INT ID_Xa
4 RF INT
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
MUX
MUX
ID_Fa
FAA
FP FP EX_FPD
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Resolução de conflitos por software
105
Arquitetura Pipeline
Resolução de conflitos por hardware
Resolução de conflitos por hardware
▪ Conflitos de controlo:
1. Identificação dos conflitos de controlo (sempre após a descodificação da instrução)
2. Antecipação da resolução dos conflitos de controlo
3. Previsão do resultado da instrução
107
Resolução de conflitos por hardware
Identificação dos conflitos de dados
Instrução i+1 add X13,X11,X12 Instrução i-1 Instrução i-2 Instrução i-3
Exemplo: ADD X3,X1,X2
Instrução i-3
Instrução i-2
Instrução i-1
add x13,x11,x12
Instrução i+1
Operandos:
X11,X12
Escrevem em x11 ou x12? Se sim, existe
108 um conflito
Resolução de conflitos por hardware
Identificação dos conflitos de dados
Ciclo k: Instrução i+1 add X13,X11,X12 Instrução i-1 Instrução i-2 Instrução i-3
Ciclo k+1: Instrução i+1 add X13,X11,X12 NOP Instrução i-1 Instrução i-2
Instrução i-3
Instrução i-2
Instrução i-1
add x13,x11,x12
Instrução i+1
109
Resolução de conflitos por hardware
Identificação dos conflitos de dados
Instrução i-3
Instrução i-2
Instrução i-1
add x13,x11,x12
Instrução i+1
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID ID ID ID EX MEM WB x13
sll x14,x13,3 IF IF IF IF ID ID ID ID EX MEM WB x14
add x10,x10,x14 IF IF IF IF ID ID ID ID EX MEM
add x12,x12,x14 ID Stalls: IF IF IF IF ID EX
lw x15,0(x10) O valor de x13 ID Stalls: IF ID
add x15,x15,x11 ainda não O valor de x13 ID Stalls: IF
sw x15,0(x12) está no ainda não O valor de x14
addi x10,x10,-8 ainda não ID Stalls:
registo está no
addi x12,x12,-8
está no O valor de x10
addi x13,x13,-1 registo ainda não
bge x13,x0,-9 registo
está no
registo
Resolve o problema para o programador, mas a arquitetura é igualmente ineficiente!
111
Resolução de conflitos de dados por hardware
▪ Solução alternativa…
FORWARDING / BYPASSING
112
Arquitetura Pipeline (figura repetida dos slides anteriores) 113
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch CTRL
DA,WE
ID_Flags -
IF_NextPC AA
INT ID_Xa
4 RF INT
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
MUX
Din
INST. ID_Fb
Dout
MEM SelM
MW,MLen WE,WordLen
Data WBSel
FPOp
SelA
ID_Xa
MUX
MUX
ID_Fa
FAA
FP FP EX_FPD
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Arquitetura Pipeline (figura repetida dos slides anteriores) 114
Instruction Instruction Execute Memory Access Write Back
Fetch (IF) Decode (ID) (EX) (MEM) (WB)
ID_IMM
+
MUX
MEM_JumpPC
MEM_PCSel
ID_Xa
Jsel
BRSel Branch CTRL
DA,WE
IF_NextPC AA
VERSÃO SIMPLIFICADA
ID_Flags - (mesmo esquema, mas omitindo a maioria dos sinais de controlo):
INT ID_Xa
INT
4 RF
IF ID EX MEM WB
MUX
ALU EX_INTD
Descodificação da instrução
MUX
IF_PC
PC IMM
Address
MEM_MEMD
SelB
IntOp
Address ID_Xb
DATA MEM
IF_Instrução
BR CTRL
MUX
Din
ID_Fb ID_Xa WB_NextPC
INST. INT Dout
SelM INT WB_INTD
MEM RF
MW,MLen ALU
WE,WordLen
Address
WB_FPD
Data WBSel
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
FPOp INST IF/ID ID_Xb
PC
MEM ID_Fb
Data
MEM
SelA
ID_Xa ID_Xa
MUX
MUX
ID_Fa FP FP
FAA
FP FP EX_FPD UNIT WB_FPD
RF ID_Fb
RF Unit
FBA, FCA (F0-F31) ID_Fb, ID_Fc
FDA,FWE
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF Leitura da instrução da memória: IM[PC]
addi x13,x13,-1
sll x14,x13,3
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
115
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID Descodificação e leitura dos operandos do RF: x130+N
addi x13,x13,-1 IF Leitura da instrução da memória : IM[PC]
sll x14,x13,3
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9
116
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX Soma o resultado: x13N
addi x13,x13,-1 IF ID Descodificação e leitura dos operandos do RF : x13x13? - 1
sll x14,x13,3 IF Leitura da instrução da memória : IM[PC]
add x10,x10,x14
add x12,x12,x14
lw x15,0(x10) O valor calculado pela instrução ori ainda
add x15,x15,x11 não foi escrito em x13… contudo:
sw x15,0(x12) - Esse valor já foi determinado (no estágio
addi x10,x10,-8 de EX, pela instrução ori;
addi x12,x12,-8 - O addi só precisa desse valor quando
addi x13,x13,-1 chegar ao estágio de EX de forma a
bge x13,x0,-9 realizar a operação!
117
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM -
addi x13,x13,-1 IF ID EX Subtrai…
sll x14,x13,3 IF ID x14 x13? << 2
add x10,x10,x14 IF IM[PC]
add x12,x12,x14
lw x15,0(x10) O valor de x13 ainda não está no
add x15,x15,x11 RF….
sw x15,0(x12) mas já foi calculado… corresponde
CAMINHOS DE
addi
FORWARDINGx10,x10,-8 ao sinal MEM_DALU
addi x12,x12,-8
addi x13,x13,-1 Nesse caso, porque não lemos esse
bge x13,x0,-9 valor directamente?
Na gíria de arquitetura de
computadores, este processo é
denominado de forwarding ou
bypassing.
118
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB
addi x13,x13,-1 IF ID EX MEM
sll x14,x13,3 IF ID x14 x13? << 2
add x10,x10,x14 IF IM[PC]
add x12,x12,x14
lw x15,0(x10)
add x15,x15,x11 O mesmo caso que anteriormente…
sw x15,0(x12) vamos deixar a instrução avançar e
addi x10,x10,-8 depois vamos fazer forwarding
addi x12,x12,-8 MEM → EX.
addi x13,x13,-1
bge x13,x0,-9
119
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB Write on x13
addi x13,x13,-1 IF ID EX MEM -
sll x14,x13,3 IF ID EX LSL com forwarding de OpA
add x10,x10,x14 IF ID x10 x10 + x14?
add x12,x12,x14 IF IM[PC]
lw x15,0(x10)
add x15,x15,x11 O mesmo caso que anteriormente…
sw x15,0(x12) vamos deixar a instrução avançar e
addi x10,x10,-8 depois vamos fazer forwarding
addi x12,x12,-8 MEM → EX.
addi x13,x13,-1
bge x13,x0,-9
120
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB Write on x13
sll x14,x13,3 IF ID EX MEM -
add x10,x10,x14 IF ID EX ADD com forwarding de OpB
add x12,x12,x14 IF ID x12 x12 + x14?
lw x15,0(x10) IF IM[PC]
add x15,x15,x11
sw x15,0(x12) Neste caso o valor também já foi
addi x10,x10,-8 calculado, vamos novamente deixar
addi x12,x12,-8 a instrução avançar…
addi x13,x13,-1
bge x13,x0,-9
121
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB Write on x14
add x10,x10,x14 IF ID EX MEM -
add x12,x12,x14 IF ID EX ADD com forwarding do OpB (WB→EX)
lw x15,0(x10) IF ID x15 M[x10? + 0]
IFadd ID
x15,x15,x11 EX MEM IF WB
IM[PC]
sw x15,0(x12)
addi x10,x10,-8
addi x12,x12,-8 BR CTRL
addi x13,x13,-1
INT
ID_Xa WB_NextPC
INT MEM_INTD WB_INTD
bge x13,x0,-9
RF ALU WB_FPD
Address
MEM/ WB
EX/ MEM
ID_IMM
DECODE
ID/ EX
DATA
IF/ ID
INST ID_Xb
PC
Data
MEM ID_Fb MEM
ID_Xa
FP FP
MEM_FPD WB_FPD
RF ID_Fb UNIT
122
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB Write on x14
add x10,x10,x14 IF ID EX MEM -
add x12,x12,x14 IF ID EX ADD com forwarding do OpB (WB→EX)
lw x15,0(x10) IF ID x15 M[x10? + 0]
add x15,x15,x11 IF IM[PC]
sw x15,0(x12)
addi x10,x10,-8
Neste caso o valor também já foi
addi x12,x12,-8
calculado, vamos novamente deixar
addi x13,x13,-1
a instrução avançar e depois fazer
bge x13,x0,-9
forwarding WB→EX
123
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB Write on x10
add x12,x12,x14 IF ID EX MEM -
lw x15,0(x10) IF ID EX ADD com forwarding do OpA (WB→EX)
add x15,x15,x11 IF ID x15 x15? + x11
sw x15,0(x12) IF IM[PC]
addi x10,x10,-8
addi x12,x12,-8 Não podemos deixar avançar, já que o valor do x15 é lido
addi x13,x13,-1 da memória no estágio de MEM, e portanto só podemos
bge x13,x0,-9 fazer forwarding no estágio de WB, i.e., WB→EX.
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB
lw x15,0(x10) IF ID EX MEM
add x15,x15,x11 IF ID ID
sw x15,0(x12) IF IF
addi x10,x10,-8
addi x12,x12,-8 Stall
addi x13,x13,-1 Agora já podemos deixar a instrução
bge x13,x0,-9 avançar!
125
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB
add x15,x15,x11 IF ID ID EX
sw x15,0(x12) IF IF ID
addi x10,x10,-8 IF
addi x12,x12,-8
addi x13,x13,-1
bge x13,x0,-9 Conflito em x15: deixamos avançar o
pipeline e fazemos forwarding
(MEM→EX)
126
Resolução dos conflitos por hardware
Revisão dos passos de execução!
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15
add x15,x15,x11 IF ID ID EX MEM WB x15
sw x15,0(x12) IF IF ID EX MEM WB
addi x10,x10,-8 IF ID EX MEM
addi x12,x12,-8 IF ID EX
addi x13,x13,-1 IF ID
bge x13,x0,-9
127
Resolução dos O valor do operando x13 já está a ser calculado
e está disponível no ciclo seguinte… podemos
conflitos por fazer forwarding MEM→EX
hardware
128
Resolução dos Não é possível fazer forwarding porque o valor
conflitos por só vai ser calculado no estágio de MEM ➔ Stall
hardware
129
Resolução dos O valor do operando x13 já está calculado e
está disponível no ciclo seguinte… podemos
conflitos por fazer forwarding WB→EX
hardware
CAMINHOS DE
lw x13,0(x11) FORWARDING
Instrução
add x14,x13,x15
130
De forma equivalente é necessário acrescentar caminhos de
forwarding para o store.
CAMINHOS DE
lw x13,0(x1) FORWARDING
Instrução
sw x13,0(x2)
131
O valor do operando x13 já está no
processo de escrita, pelo que não é
Resolução dos possível fazer forwarding para o EX.
Alternativa: implementar um banco de
conflitos por registos transparente
hardware
CAMINHOS DE
lw x13,0(x11) FORWARDING
Instrução
Instrução
add x14,x13,x15
132
Na prática um banco de registos transparente
aplica um processo de forwarding entre a
Resolução dos entrada e a saída, i.e., fazendo bypass aos
registos.
conflitos por
hardware
Dependências para
a instrução k-3
lw x13,0(x11)
x31 x30 x29 x2 x1
Instrução
Instrução
add x14,x13,x15
133
▪ Alternativa:
▫ Em processadores simples (como este), o caminho crítico do estágio de WB
é mais curto que o dos outros estágios
Resolução dos ▫ Podemos realizar a escrita (WB) em meio-ciclo, i.e., se a escrita nos flip-flops
conflitos por é ativada no flanco ascendente, então a escrita nos bancos de registos é
realizada no flanco descendente.
hardware Nota: Nem sempre o caminho crítico no WB é suficientemente curto para implementar
esta técnica
Dependências para
a instrução k-3 CLK
IF ID EX MEM WB
lw x13,0(x11)
BR CTRL
Instrução ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
Instrução RF ALU WB_FPD
Address
add x14,x13,x15 ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
CLK
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
134
Resolução dos conflitos de dados por hardware
Impacto na frequência de operação
IF ID EX MEM WB
ID_Xa
BR CTRL WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
135
▪ Controlo dos multiplexers de forwarding do estágio de
EX (sinais produzidos durante o estágio de ID):
Resolução dos - Sinal 0x (no forwarding) se não existir uma dependência entre o operando e
um dos resultados que se encontra no pipeline
conflitos por - Sinal 10 (forwarding MEM→EX) se existir uma instrução no estágio de EX que
hardware -
gera o valor do operando pretendido
Sinal 11 (forwarding WB→EX) se existir uma instrução no estágio de MEM que
gera o valor do operando pretendido, e a instrução no estádio de EX não
Sinais de controlo escreve no registo pretendido
hardware
138
▪ Indicação de STALL por dependência de dados:
Existe uma dependência do operando A ou do operando B por uma
Resolução dos instrução no estágio de EX que corresponde a um load
conflitos por
hardware STALL = (ID_AA!=0 &&
ID_Xa
BR CTRL WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
139
Resolução de conflitos por hardware (resumo)
140
Resolução de conflitos de controlo por hardware
▪ Solução alternativa…
EXECUÇÃO ESPECULATIVA
(escolhe uma opção, preferencialmente a correta, e corrige
se necessário)
141
Execução especulativa
Predição de salto
Implementação
do Branch, no
estágio MEM
IF ID EX MEM WB
ID_Xa
BR CTRL WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
143
Resolução dos conflitos de controlo por hardware
Aplicação de um preditor de salto estático do tipo Not Taken
Ciclo de relógio: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
ori x13,x0,N IF ID EX MEM WB x13
addi x13,x13,-1 IF ID EX MEM WB x13
sll x14,x13,3 IF ID EX MEM WB x14
add x10,x10,x14 IF ID EX MEM WB x10
add x12,x12,x14 IF ID EX MEM WB x12
lw x15,0(x10) IF ID EX MEM WB x15 IF ID
add x15,x15,x11 IF ID ID EX MEM WB x15 IF
sw x15,0(x12) IF IF ID EX MEM WB x15
addi x10,x10,-8 IF ID EX MEM WB x10
addi x12,x12,-8 IF ID EX MEM WB x12
addi x13,x13,-1 IF ID EX MEM WB x13
bge x13,x0,-9 IF ID EX MEM WB
Instrução k+1 IF ID EX Eliminada
Instrução k+2 IF ID Eliminada
Instrução k+3 IF Eliminada
▪ INVALIDATE ➔ transforma a instrução carregada nos registos de pipeline num NOP, colocando
todos os enables de escrita (WE) a 0.
▫ Na prática funciona de forma semelhante a um sinal de reset, mas atuando apenas nos bits de enable de escrita
(inclui a indicação de que a instrução não é um branch).
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
ID_Xa
BR CTRL WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
145
Resolução dos conflitos de controlo por hardware
Eliminação de instruções inválidas (miss-speculation)
146
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
147
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
BR CTRL
ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
148
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
149
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
BR CTRL
ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
INST
ID/EX DATA
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
150
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
BR CTRL
ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
INST
ID/EX DATA
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
151
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
152
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
BR
CTRL
ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
153
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 k+9 …
beq x5,x6,label IF ID EX MEM WB
154
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC BR CTRL
INVALIDATE
SUB
WB_NextPC
INT ID_Xa INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
155
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
▪ Soluções…
▫ Adicionar ainda mais caminhos de forwarding?
Maior caminho crítico / Mais prático para o programador ☺
156
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
IF ID EX MEM WB
CORRECT_PC BR CTRL
INVALIDATE
SUB
WB_NextPC
INT ID_Xa INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
DATA
ID/EX
INST
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
157
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
▪ Soluções…
▫ Adicionar ainda mais caminhos de forwarding?
Maior caminho crítico / Mais prático para o programador ☺
▫ Indicar que as instruções de branch não podem ser usadas quando os registos dependentes
(x5,x6) forem produzidos por uma instrução recente….
Menor caminho crítico ☺ / Menos hardware ☺ / Obriga o programador a conhecer os detalhes da arquitectura
158
Resolução dos conflitos de controlo por hardware
Redução do impacto de uma predição de salto errada
▪ Soluções…
▫ Adicionar ainda mais caminhos de forwarding?
Maior caminho crítico / Mais prático para o programador ☺
▫ Indicar que as instruções de branch não podem ser usadas quando os registos dependentes
(x5,x6) forem produzidos por uma instrução recente….
Menor caminho crítico ☺ / Menos hardware ☺ / Obriga o programador a conhecer os detalhes da arquitectura
▫ Fazer stall quando ocorrer um conflito de dados
Caminho crítico inalterado ☺ / Pouco hardware adicional ☺ / Prático para o programador ☺ / Leva a ocorrência de stalls que
podem ser limitados se o programador (ou o compilador) conhecer a arquitetura.
159
Resolução dos conflitos de controlo por hardware
Soluções típicas
Processadores simples/low-power
➔Unidade de controlo de salto no estágio de ID
160
Resolução dos conflitos de controlo por hardware
Predição dinâmica de salto
IF ID EX MEM WB
CORRECT_PC
INVALIDATE
BR CTRL
BRANCH
PREDICT ID_Xa WB_NextPC
INT INT MEM_INTD WB_INTD
RF ALU WB_FPD
Address
ID_IMM
MEM/WB
EX/MEM
DECODE
INST
ID/EX DATA
IF/ID
ID_Xb
PC
MEM ID_Fb
Data
MEM
ID_Xa
FP FP
MEM_FPD
RF ID_Fb UNIT WB_FPD
161
Resolução dos conflitos de controlo por hardware
Predição dinâmica de salto
Branch taken
▪ Sempre que o resultado do salto for not taken, colocar a predição em BPB=0
▪ Sempre que o resultado do salto for taken, colocar a predição em BPB=1
162
Resolução dos conflitos de controlo por hardware
Predição dinâmica de salto
Branch taken
Branch Strong predict Weak Predict
not taken Not Taken Not Taken
Atendimento de interrupções e
exceções
164
Atendimento de interrupções e exceções
165
Atendimento de interrupções e exceções
▪ Contudo…
▫ As exceções podem ocorrer em pontos diferentes do pipeline
▫ Podem ocorrer múltiplas exceções e interrupções ao mesmo tempo ou fora de ordem
External
interrupt
166
Atendimento de interrupções e exceções
3. Anular todas as instruções no pipeline entre a instrução que gera a exceção e a instrução de
inicio da rotina de tratamento de interrupções/excepções
167
Atendimento de interrupções e exceções
Ciclo de relógio: k k+1 k+2 k+3 k+4 k+5 k+6 k+7 k+8 …
lw x7,0(x2) IF ID EX MEM WB
Instrução k+1 IF ID EX Anulada…
Instrução k+2 IF ID Anulada…
Instrução k+3 IF Anulada…
1ª instr. da rotina interrupção/excepção IF ID EX MEM WB
168
Arquiteturas de elevado
desempenho
Arquiteturas de elevado desempenho
Arquiteturas superescalares
▪ As instruções são
lidas da memória
e colocadas em
buffers
(Reservation
stations)
▪ Quando todos os
conflitos
estiverem
resolvidos, são
executadas
171
Arquiteturas de elevado desempenho
Arquiteturas superescalares com execução fora de ordem
172
Intel pipeline
Arquiteturas de
elevado
desempenho
Arquiteturas
superescalares com
execução fora de
ordem
173