Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Leonardo Giovanini
Microarquitectura
segmentada
Contenidos
Dispositivos Transistores
Componentes Máscaras
físicos Semiconductores
Reg
PC
Lógica combinacional acíclica
de instrucciones
Registro de
combinacional
Decodificador
banco reg
memoria
Instruc
Entrada
Entrada
programa
Escritura
Memoria
Memoria
registros
Entrada
Lectura
registro
Salida
Reg
Lógica
ALU
ALU
datos
PC
de
de
de
de
Reloj
Tiempo
Clk MU Por lo que las instrucciones
requerido rápidas desperdician tiempo
Tiempo
de ejecución.
asignado
1 PCJUMP
y almacenamiento de datos 4 0
2
1
PCk+1 PCk
A RD
INST(k)
rs1
rs2
A1 RD1
Op1
(tipo S).
0 A2 RD2
1 + Memoria rd
ALU
de A3 Op2 A RD
PCNEXT 0
Dirección Programa
Estas instrucciones involucran WD1 1 Memoria
de reset
Banco de
Gen M2 Datos
de
las todas las etapas de la Imm
Immediato
Registros
Data_R
WD
memoria de datos. 2
1
0
ALU_R
Reloj
PC
Las instrucciones más rápidas son las instrucciones son las
Memoria instrucciones de salto (tipo S) y operación con datos en
de Programa registros (tipo U). Estas instrucciones sólo involucran las
Banco
de Registros
etapas de la decodificación y ejecución.
ALU Con un periodo fijo, las instrucciones rápidas desaprovechan
Memoria tiempo.
de Datos
En los repertorios reales existen coexisten instrucciones
Organización de las Computadoras lentas con muy rápidas. L. Giovanini © 2022
8 - 72 Unidad 2
Implementación segmentada
Clk MO
Reg
PC
combinacional
Registro de
Decodificador
banco reg
memoria
Instruc
Entrada
Entrada
programa
Escritura
Memoria
Memoria
registros
Entrada
Lectura
registro
Salida
Reg
Lógica
ALU
datos
ALU
PC
de
de
de
de
Organización de Clk
las MU
Computadoras L. Giovanini © 2022
11 - 72 Unidad 2
La microarquitectura del procesador
Implementación segmentada
De manera de aprovechar la diferencia de tiempos de ejecución de las instrucciones. Por
ejemplo,
Una instrucción tipo R sólo utilizará 3 ciclos (Fech, Decode y Execute),
Una instrucción tipo S utilizará 5 ciclos (Fech, Decode, Execute, Data Memory y
Writeback) y
Una instrucción tipo B sólo utilizará 3 ciclos (Fech, Decode y Execute).
andi r3, r3, 011 sw r3, r6, B000 addi r2, r2, -1 bneq r2, r0, -24
Reloj
Tiempo
Monociclo requerido
Tiempo
asignado
Reloj
Tiempo Tiempo
Segmentada requerido ahorrado
PCNEXT
3
2
1
0
ALU_R
Como cada bloque del procesador queda libre una vez finalizada cada etapa de la
instrucción, este puede utilizarse para iniciar la ejecución de la próxima instrucción.
La idea detrás de la implementación segmentada es aprovechar los recursos del
procesador disponibles para paralelizar la ejecución de las instrucciones.
Ciclos de 0 1 2 3 4 5 6 7 8
procesador (k)
Orden de ejecución
Write
K=1 add r5, r5, +4 Fetch Decode Execute
Back
Write
K=2 lw r2, r5, 000 4 ciclos Fetch Decode Execute
Back
Write
K=1 add r5, r5, +4 Fetch Decode Execute Tiempo
Back
Write ahorrado
K=2 lw r2, r5, 000 Fetch Decode Execute
Back
1 ciclo
Write
K=3 addi r3, r3, -1 2 ciclos Fetch Decode Execute
Back
1 PCJUMP
+ opcode,
funct3, funct7 RD2 [0:4] Banderas
3 shamt
PCk+1 PCk rs1 Op1
2
1
A RD A1 RD1
4 0
INST(k) rs2
0 A2 RD2
1 + Memoria rd
ALU
de A3 Op2
A RD
PCNEXT 0
Dirección Programa Memoria
WD1 1
de reset
Banco de
Gen M2 Datos
Immediato
de
Data_R
Registros WD
Imm
Data_JR Gen
Datos
Data_M
Mem_W
Mem_R
ALU_Op
Data_T PCNEXT
Clock Unidad ALU_S 3
Reg_W
de Reg_W 2
Reset Control Dato_S 1
S
0
B
Reg ALU_R
Jump
S
Jump CLK CLK CLK CLK CLK CLK CLK
ALU_Op
B
shamt shamt
Sel
Reg_W
Mem_W
Data_T
SHAMT Mem_R
RD2 [0:4]
3 INST(k)
PCk rs1 ALU_R
2
1
A RD A1 RD1
rs2 Cond
0 A2 RD2
Memoria rd rd
ALU
ALU_R Gen
de A3 0 A RD Datos
Programa 1 Memoria
Dirección WD1
de reset Banco Reg Branch de
Gen Datos
Immediato
de
Registros Gen
Datos
WD
rd
Data_JR
1
PCJUMP
0
+ Dato_S
Imm Imm
PCk+1
+
PCNEXT
+1 0 PCBRAN
+
1
3
2
1
0
Búsqueda de instrucción Decodificación Búsqueda de operando Operación en ALU Operaciones en memoria Escritura de registro
(Instruction Fetch) (Decode) (Operand Fetch) (Execute) (Data Memory) (Write Back)
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 4 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 5 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Inst 2
Mem Mem
de Reg ALU de Reg
Inst Dato
Inst 3
Mem Mem
de Reg ALU de Reg
Inst Dato
Inst 4
Mem Mem
de Reg ALU de Reg
Inst Dato
Inst 5
Implementación segmentada
Mem Mem
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Inst 4
Inst 5
Implementación segmentada
Mem Mem
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Inst 3
Inst 4
Inst 5
Implementación segmentada
Mem Mem
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Inst 2
Inst 3
Inst 4
Inst 5
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 4 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 5
de Reg ALU de Reg
Inst Dato
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Inst 3
Mem Mem
de Reg ALU de Reg
Inst Dato
Inst 4
Mem Mem
de Reg ALU de Reg
Inst Dato
Mem Mem
Inst 5 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 4 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
de Reg ALU de Reg
Inst 5 Inst Dato
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 4
de Reg ALU de Reg
Inst Dato
Mem Mem
de Reg ALU de Reg
Mem Mem
Inst 1 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 2 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 3 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
Inst 4 de
Inst
Reg ALU de
Dato
Reg
Mem Mem
de Reg de Reg
Inst 5
ALU
Inst Dato
Mem_W
Mem_R
ALU_Op
Data_T
Clock ALU_S
Reg_W
Reg_W
Reset Dato_S
S
B
Reg
Jump
Jump CLK CLK
CLK S
ALU_Op
Unidad B
shamt
de shamt
Sel
Control Reg_W
Mem_W
Data_T
SHAMT Mem_R
RD2 [0:4]
3
PCk rs1 ALU_R
2
A RD A1 RD1
1 rs2
0 Cond
A2 RD2
Memoria
rd
ALU
de A3
ALU_R Gen
0 A RD Datos
Programa
Dirección WD1 1 Memoria
de reset Banco de
Reg Branch
de Datos
Registros Gen
Datos
WD
rd rd
Data_JR
1
PCJUMP
0
+ Dato_S
+1 PCNEXT
0 PCBRAN
+
1
3
2
1
0
Organización de las Computadoras L. Giovanini © 2022
26 - 72 Unidad 2
La microarquitectura del procesador
Implementación segmentada - Supersegmentación
Cada etapa del pipeline realiza 1/n del trabajo total necesario. Por lo tanto
Cada etapa solo requiere un tiempo t/n suponiendo que la microarquitectura esta
perfectamente balanceada.
Por balanceado se entiende que cada1 etapa requiere el mismo tiempo para su
ejecucion. 2
3
4
5
Instrucciones
La frecuencia de reloj del procesador
es fpipe = 1/(t/n) = n/t 1
2
3
¿Si incrementamos n, incrementamos 4
la potencia del procesador? 5
0 1 2 3 4 5 6 7 8 9
Organización de las Computadoras Ciclos de máquina L. Giovanini © 2022
27 - 72 Unidad 2
La microarquitectura del procesador
Implementación segmentada - Supersegmentación
Incrementar la longitud del pipeline puede conducir a deterioros del desempeño global del
procesador por que
0.0
1 2 4 8 16
Organización de las Computadoras Profundidad del Pipeline
L. Giovanini © 2022
28 - 72 Unidad 2
Riesgos de datos
Riegos de Control: La decision sobre una acción de control de flujo de programa
depende de una instrucción previa. Por ejemplo
En estas situaciones, las instrucciones muestran la dependencia de los datos que modifican
los datos en diferentes etapas del datapath.
Hay tres situaciones en las que puede ocurrir un peligro de datos:
* Lectura despues de una escritura (Read-After-Write) refiere a una situación en la que una
instrucción se refiere a un resultado que aún no se ha calculado o recuperado. Esto puede
ocurrir porque aunque una instrucción se ejecuta después de una instrucción anterior que ha
sido procesado parcialmente por el dataph (Dependencias de datos).
* Escritura despues de una lectura (Write-After-Read) refiere a una situación en la que una
instrucción escribe antes de que otra la lea (Dependencias de nombre).
* Escritura despues de una escritura (Write-After-Write) refiere a una situación en la que dos
instrucciones sucesivas escriben el mismo registro, presentando una dependencia de nombre
(Reutilización de registros).
Los mecanismos de ejecución deben preservar el orden del programa.
Organización de las Computadoras Mismo resultado que en ejecución secuencial. L. Giovanini © 2022
31 - 72 Unidad 2
La microarquitectura del procesador
Riesgos de datos
1 2 3 4 5 6 7 8
Orden de
ejecución
x1
Mem sub Mem x2
sub x2, x1, x3 de Reg
x3
ALU de C Reg
Inst Dato
x12
Mem and Mem x5
and x12, x2, x5 de
Inst
Reg
x2
ALU de Reg
Dato
x6
Mem or Mem x13
or x13, x6, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
x2
Mem add Mem x14
add x14, x2, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
x12
Mem and Mem x5
and x12, x2, x5 de
Inst
Reg
x2
ALU de
Dato
Reg
x6
Mem or Mem x13
or x13, x6, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
x2
Mem add Mem x14
add x14, x2, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
Operando 1 Operando 2
Reset
ALU_Op
S
CLK ALU_S
Unidad CLK
shamt
de shamt Reg_W ME Reg_W WB
Sel
Control Reg_W RD2 [0:4]
Mem_W
Data_T
SHAMT Mem_R
rs1 0
A1 RD1 1
rs2 2
A2 RD2
ALU ALU_R
0 Gen
A3 A RD
1 0 Datos
WD1 2 1 Memoria
Banco de
de Datos
0
Registros Gen
1 WD
Datos
rd 2
ALU_R
Dato_S
INST(k) Gen Imm Imm
Immediat
o
FOp1 FOp2
rd rd MEM
rs1
rs2 FMem
rd MEM
Unidad de rd WB
Adelanto
3
rd WB
2
1
0
Organización de las Computadoras L. Giovanini © 2022
35 - 72 Unidad 2
La microarquitectura del procesador
Riesgos de datos – Adelanto de los datos
CLK CLK CLK CLK
Reg_W
Dato_S
Mem_W
Mem_R
Clock Data_T
ALU_Op
Reset S Reg_W
ALU_S
Jump
B
Jump CLK CLK Reg
Reg_W
Unidad shamt shamt
de Sel Reg_W
CLK RD2 [0:4]
Control Mem_W
SHAMT Data_T
Mem_R
ALU_Op B
3
PCk rs1 0
2
A RD A1 RD1 1
1
rs2 2 Cond
0 A2 RD2
Memoria rd
ALU ALU_R
0 Gen
de A3 A RD
1 0 Datos
Programa 2
Dirección WD1 1 Memoria
de reset Banco Reg de
Branch
de 0
Datos
Registros Gen
1
Datos
WD
rd 2 ALU_R
Data_JR
1
0 PCJUMP
+ Dato_S
+1 PCNEXT
0 PCBRAN
+
1
rd rd
rs1
FOp1 FOp2
rs2
FMem
rd rd 3
2
1
0
Unidad de
Adelanto
Los riesgos generados por una lectura antes de una escritura no pueden ser solucionados
con adelanto de datos por que el dato no está disponible.
1 2 3 4 5 6 7 8
Orden de
ejecución
x0
Mem lw Mem x2
C
lw x2, 40(x0) de
Inst
Reg
40
ALU de
Dato
Reg
x12
Mem and Mem x5
and x12, x2, x5 de
Inst
Reg
x2
ALU de
Dato
Reg
x6
Mem or Mem x13
or x13, x6, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
x2
Mem add Mem x14
sub x14, x5, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
Vacíado: todas las instrucciones del datapath son sustituidas con instrucciones NOP.
Resetea los bits de control para la instrucciones que deben ser eliminadas
1 2 3 4 5 6 7 8
Orden de
ejecución
x0
Mem lw Mem x2
C
lw x2, 40(x0) de
Inst
Reg
40
ALU de
Dato
Reg
x12 x12
Mem and Mem x5
and x12, x2, x5 de
Inst
Reg
x2
Reg
x2
ALU de
Dato
Reg
x6
Mem or Mem or Mem x13
or x13, x6, x2 de
Inst
de
Inst
Reg
x2
ALU de
Dato
Reg
Burbuja x2
Mem add Mem x14
sub x14, x5, x2 de
Inst
Reg
x2
ALU de
Dato
Reg
x6
Mem or Mem x13
and x4, x2, x5 de
Inst
Reg
x2
ALU de
Dato
Reg
x2
Mem add Mem x14
1 2 3 de 4 5
Reg 6ALU 7de 8 Reg
or x8, x2, x6 Inst x2 Dato
Orden de
C
ejecución
x1
Mem sub 20(x1) Mem x2
de Reg de Reg
lw x2, 20(x1) Inst x3
ALU
Dato
x4
Mem and Mem x5
de Reg de Reg
and se transforma en nop Inst x2
ALU
Dato
x4
x5
and x4, x2, x5 detenida Mem
de
and
Reg
x2
ALU
Mem
de Reg
Inst Dato
en Decode
C
x2
Mem or
add Mem x14
or x8, x2, x6 detenida de Reg
x2
ALU de Reg
Inst Dato
en Fetch
C
IF Mem_R = 1
IF rd = rs1 OR rd = rs1 THEN En = 0
ELSE
En = 1
END
FOp1 FOp2
FMem
rs1 rd
Unidad de
rs2 Adelanto
En En INST(k) En
rd
Unidad de Detención
Mem_R DF
Reset
Programa 2
Riesgo
lw $x1, 40($x10)
lw $x2, 44($x10)
lw $x4, 48($x10)
Mientras que el programa 2 solo necesita 11 ciclos, en
add $x3, $x1, $x2
coincidencia con los ciclos teoricos requeridos, debido a que el
sw $x3, 52($x10)
programa ha sido reordenado para evitar los riesgos de datos
add $x5, $x1, $x4
originados por las intrucciones de carga (lw).
sw $x5, 56($x10)
Reg_W
Dato_S
Mem_W
Mem_R
Clock
Data_T
ALU_Op
Reset
S
ALU_S
Jump
B
Jump CLK CLK Reg
Unidad shamt Reg_W shamt
de Sel Reg_W
Dirección CLK RD2 [0:4]
de reset Control Mem_W
SHAMT Data_T
Mem_R
ALU_Op
3
PCk rs1 0
2
A RD A1 RD1 1
1
rs2 2 Cond
0 A2 RD2
Memoria
rd
ALU ALU_R
0 Gen
de A3 A RD
1 0 Datos
Programa 2
WD1 1 Memoria
Banco Reg Branch de
de Datos
0
Registros Gen
1
Datos
WD
rd 2
Data_JR 1
ALU_R
0
+ PCJUMP
Dato_S
PCNEXT
+1 0
FOp2 PCBRAN
+
FMem 1
rd FOp1 rd
rs1 rd
rs2
3
Flash E 2
1
0
ALU_R
Stall FI Stall D INST(k) Stall FD rs2 E rs1 E rd Reg_W ME rd ME rd WB Reg_W WB
Riesgos de control
Dependencias de control
Cada instrucción depende de un conjunto de saltos y esta dependencia, orden de ejecución,
debe preservarse para preservar el orden del programa;
Las dependencias de control pueden violarse si no afectan los resultados del programa.
1 2 3 4 5 6 7 8
Orden de
ejecución
x2
Mem beq Mem
20 beq x2, x1, 30 de Reg
x1
ALU de Reg
Inst Dato
x12
Mem and Mem x5
21 and x12, x4, x5 de Reg
x4
ALU de Reg
Inst Dato
x13
Mem sub Mem x12
23 sub x13, x6, x12 de
Inst
Reg
x6
ALU de
Dato
Reg
• •
• •
• •
x2
Mem add Mem x14
30 add x14, x2, x2 de
Inst
Reg
x2
ALU de Reg
Dato
Riesgos de control
CLK CLK CLK
Reg_W Reg_W
Dato_S
Mem_W
Mem_R
Clock Data_T
ALU_Op
Reset S
ALU_S
Jump
B
Jump CLK CLK Reg
CLK
Unidad shamt shamt
B
de Sel
Reg_W
Control Mem_W
SHAMT
Mem_R
RD2 [0:4] ALU_Op
3 AL
PCk rs1 Jump
2
1
A RD A1 RD1
rs2 Cond
0 A2 RD2
Memoria
rd
ALU
de ALU_R
A3 0 A RD
Programa
WD1 1 Memoria
Dirección
de reset Banco Reg de
Branch Datos
de
Registros Gen
Datos
WD
rd
Data_JR
1
PCJR
0
+
INST(k) Gen Imm
+ PCk+1 Immediato
+1
0 PCBRAN
+
1
PCJR
A partir de un análisis estadístico del uso de intrucciones de saltos en programas surge que
En promedio
Saltos
Instrucciones de salto: 1 de cada 5
Saltos condicionales: 2 de cada 3
Saltos incondicionales:1 de cada 3 Incondicionales Condicionales
Saltos tomados: 5 de cada 6
Saltos condicionales: 3 de cada 4
Saltos incondicionales:Todos Incondicional Retorno de Cerrando
Otros
Simple Subrutina bucles
Conclusión A
Subrutina 1/3 1/3
1 de cada 6 instrucciones es un Tomado
1/3 para n-1
salto tomado; iteraciones
1 de cada 8 instrucciones es un 1/6 1/6
salto condicional;
1 de cada 10 instrucciones es un No
salto condicional y tomado; Tomados
tomados
JR ALU_Op
Unidad de Reset S
JN ALU_S
Salto
Jump
B
J
CLK CLK
CLK
Unidad shamt shamt
Dirección de
excepciones
de
Reg_W
Control B
0
1 RD2 [0:4]
3
PCk INST(k) rs1
2
A RD A1 RD1
1
rs2
0 A2
0 RD2
Memoria
rd
1 de A3 0
Dirección de
Programa 1
WD1
reset Banco
de - Cond
Registros G
Da
rd
Gen
Immediato Data_JR
PCJR
+
Imm Imm
+1 +
PCk+1
+ PCBRAN
+
Branch
PCJUMP
PCNEXT
PCBRAN
PCJR
Flush D Flush DF
x12
Mem and Mem x5 Flush esta
21 and x12, x4, x5 de Reg ALU de Reg
Inst x4 Dato instrucción
C
22 or x13, x6, x2
•
x2
Mem add Mem x14
30 add x14, x2, x2 de Reg
x2
ALU de Reg
Inst Dato
etapa de decodificación; y
No Ejecución normal
Escribe los bits de predicción = PC k+1 = PC k +1
Sin la predicción de saltos, el procesador tendría que esperar hasta que la instrucción de
salto condicional haya pasado la etapa de ejecución antes de que la siguiente instrucción
pueda ingresar a la etapa de búsqueda. El predictor de salto intenta evitar esta pérdida de
tiempo al tratar de predecir si es más probable que se tome o no el salto condicional.
El tiempo que se pierde en el caso de una predicción errónea es igual al número de etapas
en el procesador desde la etapa de búsqueda hasta la ejecución. Los microprocesadores
modernos tienden a tener arquitecturas bastante largas lo que aumenta la necesidad de un
predictor de saltos más avanzado.
Las tecnicas de prediccion de saltos se clasifican en
Predicción de saltos
Estática Dinámica
Los algoritmos de predicción de saltos funcionan porque los algoritmos, y los datos utilizados
por los mismos, presentan regularidades que pueden ser detectadas por los algoritmos de
predicción.
A partir de un análisis estadístico del uso de intrucciones de saltos en programas surge que
En promedio
Saltos
Instrucciones de salto: 1 de cada 5
Saltos condicionales: 2 de cada 3
Saltos incondicionales:1 de cada 3 Incondicionales Condicionales
Saltos tomados: 5 de cada 6
Saltos condicionales: 3 de cada 4
Saltos incondicionales:Todos Incondicional Retorno de Cerrando
Otros
Simple Subrutina bucles
Conclusión A
Subrutina 1/3 1/3
1 de cada 6 instrucciones es un Tomado
1/3 para n-1
salto tomado; iteraciones
1 de cada 8 instrucciones es un 1/6 1/6
salto condicional;
1 de cada 10 instrucciones es un No
salto condicional y tomado; Tomados
tomados
La predicción estática es la técnica más sencilla que no utiliza información sobre el historial
dinámico de ejecución del código, sino que predice el resultado basándose sólo en la
instrucción.
Hay dos posibilidades:
Se ejecuta Cada instrucción de salto se ejecuta;
Tiene un número mayor de aciertos; pero
El hardware necesario para implementarlo es más complejo.
Un predictor de un bit solo registra el resultado del último salto, indicando el comportamiento
de la última ejecución de la instrucción de salto.
Dado que en un bit sólo almacena el estado del salto anterior, su actualización es muy
violenta, cambiando la predicción de un salto sólo por un comportamiento puntual.
Predicción
Un predictor de dos bits solo registra el resultado de los últimos cuatro saltos a través de ua
máquina de estados, indicando el comportamiento de las últimas instrucciones de salto.
Dado que almacena el estado de varios saltos, su actualización es suave y consigue mayor
número de aciertos.
Predicción
Una posible implementación integra el buffer de destino de saltos (BTB) con los bits de
predicción en una única tabla.
Los campos de la tabla dirección de
destino y bits de historia se actualizan
después de la ejecución de los saltos.
Su principal desventaja es que solo se
pueden predecir los saltos que están en
la tabla
Contador de
Dirección de destino Bit de
programa - PC k Tag
del salto predicción
Dirección de programa 1 Dirección de salto 1 Bit pred 1
Dirección de programa 2 Dirección de salto 2 Bit pred 2
Dirección de programa 3 Dirección de salto 3 Bit pred 3
Lógica de
predicción
1 Próxima dirección
+ de programa -
0 PC k+1
Organización de las Computadoras +1 L. Giovanini © 2022
66 - 72 Unidad 2
La microarquitectura del procesador
Riesgos de control – Predicción dinámica
Los errores de predicción del salto se detectan en la etapa de búsqueda de datos por lo
que se be vaciar las etapas anteriores (decodificación y búsqueda de instrucción) y corregir
el contador de programa utilizando la dirección calculada en esta etapa y la tabla de
historia de saltos (BHT) .
Reg_W
Jump Branch Dato_S
Mem_W
Mem_R
Clock Data_T
JR ALU_Op
Unidad de Reset S
JN ALU_S
Salto
J
Jump
B
CLK JP CLK
Tabla de CLK
Historia de Unidad shamt shamt
Dirección de
excepciones Saltos de
Reg_W
3 Control B Branch
2
1 RD2 [0:4]
0 3
PCk INST(k)
2 rs1
A RD A1 RD1
1
rs2
0 A2 RD2
0
rd
1 A3 0
- Cond
Dirección de PC Upd Memoria WD1 1
reset Banco
de
Programa Gen de PCJR
PCk Immediato Registros + Gen
Datos
rd
Imm Imm
Tabla de PCPRED
Historia de PCPRED
Saltos + +
Detector
+1 +
Upd_TD PCNEXT PCNEXT P
PCBRAN
PCPRED
PCJUMP
PCNEXT
PCBRAN PCBRAN
PCJR PCJR Branch
PCk+1 Mis_P
PC Upd Upd_TD Flush D Flush DF
Branch
CLK CLK CLK CLK
Reg_W
Jump Reg_W
Dato_S
Mem_W
Mem_R
Clock
Clock
Data_T
JR ALU_Op
Unidad de Reset
Reset
S
Data_T
JN
Salto ALU_S Dato_S
J
Jump
CLK JP CLK
CLK B
Tabla de Reg_W
Historia de Unidad shamt shamt
Dirección de
excepciones Saltos de Sel Reg_W Mem_W
CLK RD2 [0:4] Mem_R
3 Control
2 SHAMT
1 ALU_Op
3 PCk
0 PCk RD1
2 INST(k) rs1 0 ALU_R
A RD A1 RD2 1
1
rs2 2
0 A2
0 0
rd
ALU ALU_R
1 1 0 Gen
A3 A RD
1 0
Dirección de PC Upd WD1
- Cond
2 1 Memoria
Datos
Memoria 0
reset de
de Banco 1
Gen
Programa de 0
Datos
Immedia
PCk Registros Gen
to 1
Datos
WD
rd PCJR 2
+
Imm
Tabla de Imm Imm Imm
Historia de PCPRED PCPRED
Saltos +1 +
PCNEXT PCNEXT PCNEXT
+ Detect
Upd_TD
+ or
rd
rd rd
rs1
rs2
PCPRED 3
2
PCJUMP 1
PCNEXT rd 0
PCBRAN PCBRAN Flash E ALU_R
PCJR PCJR
Mis_P rs2 E FDM
PCNEXT
Flush D INST(k) Branch rs1 E
Stall FI PC Upd Upd_TD Stall D Stall FD Flush DF FS1 FS2 FD1 FD2 Reg_W ME rd ME rd WB Reg_W WB