1
Paralelismo en monoprocesadores
Procesadores Superescalares
Profesor: Mag. Marcelo TosiniCátedra: Arquitectura de Computadoras y técnicas DigitalesCarrera: Ingeniería de SistemasCiclo: 4º año
2
Procesadores Superescalares
• Descripción estructural: Arquitectura y componentes de las distintas etapas de un procesador superescalar
• Descripción funcional: Funcionamiento de un procesadorsuperescalar y descripción de las estructuras que permitenla normal ejecución del flujo de instrucciones de un programa
3
Introducción
La técnica de segmentación de circuitos aplicada a la microarquitecturade un procesador es efectiva pero presenta algunas limitaciones que degradan el rendimiento.
Una solución superescalar permite obtener rendimientos muchomayores que la solución puramente escalar a costa de un compromisode diseño mas grande
Los pipelines superescalares traspasan los limites de la emisión simplede instrucciones de un pipeline escalar con rutas de datos maselaboradas que trabajan con varias instrucciones a la vez
Para lograr lo anterior incorporan múltiples unidades funcionales queaumentan la concurrencia de ejecución de instrucciones
Además, los pipelines superescalares permiten la ejecución de instrucciones en un orden distinto al impuesto por el programa original
4
Limitaciones de los pipelines escalares
Un procesador escalar se caracteriza por un pipeline lineal de k etapas
Todas las instrucciones, sin importar su tipo, atraviesan las mismas etapas del pipeline.
A excepción de las instrucciones frenadas por cuestiones de conflictostodas las instrucciones permanecen en cada etapa por un ciclo de reloj
Estos pipelines rígidos tienen 3 limitaciones destacadas:
1. El máximo rendimiento esta limitado a una instrucción por ciclo
2. La unificación de todos los tipos en un solo pipeline genera un diseño ineficiente
3. El frenado de un pipeline rígido induce burbujas innecesarias con la consiguiente perdida de ciclos de reloj
5
rendimiento de los pipelines escalares (limitación 1)
El rendimiento de un pipeline escalar
instrecuento
frecuenciaIPC
ciclotiempociclo
inst
instrecuentoienton
_*
_1
**_
1dimRe ==
puede incrementarse aumentando el número de instrucciones por ciclo o la frecuencia o decrementando el número de instrucciones ejecutadas
consideraciones:
• La frecuencia puede aumentarse incrementando la profundidad delpipeline reduciendo, en consecuencia el tiempo de ciclo
• Un aumento en la profundidad tiene la desventaja adicional deperdida excesiva de ciclos ante dependencias
• Un pipeline escalar solo puede iniciar la ejecución de (como máximo)una sola instrucción por ciclo de reloj: IPC=1
6
Pipelines paralelosLograr un IPC > 1 requiere que el procesador sea capaz de iniciar elproceso de más de una instrucción en cada ciclo
Esto requiere incrementar el ancho del pipeline de modo que sea capazde tener mas de una instrucción en cada etapa a cada instante
sin paralelismo
paralelismo temporal(pipeline escalar)
paralelismo espacial(multiprocesadores)
pipeline paralelo
7
Pipelines diversificados (especializados)(limitación 2)
El concepto de pipeline paralelo remite a la simple replicación espacial del hardware de un pipeline escalar
Un pipeline escalar clásico se compone de etapas con funcionalidad y tiempos de cálculo diferentes
IF ID EX Mem WB
1 ciclo 1 ciclo > ciclo >> ciclo 1 ciclo
Una mejora al diseño es la separación de las operaciones diferentes en distintas unidades funcionales especializadas, de modo que entonces cada unidad funcional es ahora mas simple y mas rápida
pipeline diversificado
IF IF IFID ID IDFx Fp Mem….….
….…. ….
….
8
Pipelines estáticos y dinámicos (limitación 3)
Un pipeline escalar es rígido ya que las instrucciones entran y avanzan en él paso a paso y atravesando todas las etapas
Las instrucciones entran al pipeline de acuerdo al orden impuesto por el programa (en orden)
En un pipeline estáticouna instrucción frenada en una etapa i frena la ejecución de todas las instruccionesen etapas previas (1, 2,…, i-1)
Una solución es permitir que las instrucciones frenadas que no tengan ningún tipo de dependencia puedanadelantarse a la instrucción frenada. Este tipo de pipeline se denomina pipeline dinámicoy puedenrealizar ejecución fuera de orden
pipeline estático
frenada
XXX
cadena de instrucciones frenadas
pipeline dinámico
frenada Xadelantamientode instruccionesindependientes
9
Paso de un pipeline escalar a
superescalarLos pipelines superescalares son descendientes naturales de los escalares
que solucionan en mayor o menor medida las 3 limitaciones de estos
Los pipelines superescalares…
• son pipelines paralelos:pueden iniciar la ejecución de varias instrucciones en cada ciclo de reloj
• son pipelines diversificados:ya que emplean múltiples unidades funcionales heterogéneas
•son pipelines dinámicos:poseen la capacidad de reordenar lasecuencia de instrucciones impuesta por el compilador a fin de aumentar la eficiencia
10
pipelines superescalaresun pipeline escalar de k etapas puede procesar hasta k instrucciones simultáneamenteSu rendimiento se compara con procesadores sin paralelismo y seespera que la mejor aceleración obtenible sea del orden de k
un pipeline superescalar usualmente se compara con la versión escalary es determinado por el ancho del mismo o grado de paralelismo espacialUn pipeline de ancho s puede procesar hasta s instrucciones simultáneas en cada una de sus etapas, alcanzando, en el mejor caso,una aceleración de s
IF ID EX MEM WB
Pipeline paralelo de ancho s = 3
11
pipelines diversificadosLos recursos de hardware necesarios para la ejecución de diferentes operaciones pueden variar significativamenteTipos de operaciones: Punto fijo, Punto flotante, acceso a memoria
Pipelines diversificados: implemetación de las diferentes operaciones en distintas unidades funcionales
Ventajas:
• cada pipe puede ser especializado en un tipo particular de operación
• cada sub-pipe de ejecución puede tener el número justo de etapas
• instrucciones de un sub-pipe no sefrenan por dependencias en otros pipes
MEM1 FP1 BRALU
MEM2 FP2
FP3
WB
EX
RD
ID
IF
12
pipelines diversificados (ejemplos)m
emoria
centr
al
24 r
egis
tros
de
uso
gen
eral
8 r
eg d
e direc
cion
8 r
eg indic
e
8 r
eg d
e pto
fte
fadd
mul
mul
divide
shift
boolean
add
increment
increment
branch
CDC 6600 (1964)
Int unit
Int unit
Bit unit
Mul 1/3
fadd 1/3
Divider unit
Graph add
Graph pack
Load/store unit
Mul 2/3 Mul 3/3
fadd 2/3 fadd 3/3
Sourc
e buse
s
Write
bac
k buse
s
Motorola 88110 (1982)
13
pipelines dinámicos
Etapa i
Etapa i+1
Buffer (1)
Pipeline conbuffer simple
Etapa i
Etapa i+1
Buffer (n)
Pipeline conbuffer múltiple
(en orden)
(en orden)
Etapa i
Etapa i+1
Buffer (≥ n)
Pipeline conbuffer con reordenamiento
(en orden)
(fuera de orden)
Pipeline rígido:
• 2 etapas i e i+1 se separan y conectan por medio de un buffer simple (1 instr.)
• el buffer se activa en cada ciclo de reloj• En caso de conflictos (stall de etapa i+1) el buffer no
se actualiza• En caso de frenado todas las etapas 1, …, i+1 se frenan• Las instr. entran y salen del buffer en el orden del programa
Pipeline paralelo:
• 2 etapas i e i+1 se separan y conectan por medio de un buffer de n instr
•En caso de conflicto de 1 sola instr. el buffer no se actualiza• En caso de frenado todas las etapas 1, …, i+1 se frenan• Las instr. entran y salen del buffer en el orden del
programa• Cada entrada del buffer esta conectada a cada etapa i y
cada salida a una etapa i+1
Pipeline superescalar:
• Uso de buffers multientrada complejos• Las instr. entran al buffer a cualquier posición del mismo• Las instr. salen del buffer en cualquier orden con la única
condición de tener todos sus operandos completos
14
pipeline paralelo diversificado
MEM1 FP1 BRALU
MEM2 FP2
FP3
WB
EX
RD
ID
IF
dispatch buffer
(en orden)
(fuera de orden)
Reorderbuffer
(fuera de orden)
(en orden)
Pipeline segmentado de entre 5 y 8etapas (según tipo de instrucción)
las primeras 3 etapas de ancho s = 3y ejecución en orden
La etapa de ejecución soporta hasta4 rutas independientes (Fx, Fp, Memy Branch)
En la etapa de ejecución puede haberhasta 7 instrucciones ejecutándose
La ejecución es en desorden, por lo tanto es necesario un buffer adicionalpara volver a ordenar las instruccionessegún el orden original del programa
15
Organización básica de un superescalar
Fetch
Decode
Dispatch
Execute
Complete
Retire
Instruction buffer
Dispatch buffer
Issuing buffer
Completion buffer
Store buffer
Organización genérica de un pipelineSuperescalar de 6 etapas:
• Fetch: lectura de múltiples instrucciones
• Decode: decodificación de múltiples instrucciones
• Dispatch: distribuye instrucciones a lasdiferentes unidades funcionales
• Execute: incluye múltiples unidades funcionalesespecializadas de latencia variable
• Complete: reordena las instrucciones y asegurala actualización en orden del estadode la máquina
• Retire: salida de la instrucción del procesador
16
Captura de instrucciones (fetching)
TagTag
TagTag
Row
dec
oder
Address
} cache line
fetch group
Un pipeline superescalar de grado s debe ser capaz de leer s instruccionesde la I-cache (Instruction caché) en cada ciclo de reloj (fetch group).
Para mayor rendimiento la caché debe organizarse de modo que * cada fila de caché tenga s instrucciones y* cada fila pueda leerse en un solo ciclo de reloj
Problemas potenciales:• fetch group y Caché row desalineadas• Presencia de instrucciones de salto en el fetch group
Branch
Branch en el fectch group
17
fetch group desalineado (fetching)
Problema: El comienzo del fecth group y lacache row no son coincidentes
cache rowfetch group
2 soluciones factibles:
1.- ordenamiento estático en tiempo de compilación:
• El compilador conoce la organización de la I-cache y genera las direcciones de salto de las instrucciones alineadas al comienzo de las filas de la cache.
• 2 desventajas:• desperdicio de espacios de memoria de código • código objeto generado dependiente de una organización de cache particular
2.- Uso de hardware especializado que resuelve el pr oblema en tiempo de ejecución
18
Ejemplo IBM RS/6000
La RS/6000 usa una I-cache
• Asociativa por conjuntos de 2 vías
• Con un ancho de línea de 16 instrucciones (64 bytes)
• Cada fila de la caché almacena 4 conjuntos asociativos de 2 instr c/u
• Cada línea de cache se compone de 4 filas de cache
• El arreglo físico de la I-cache esta realmente formado de 4 sub-arreglos(0, 1, 2, 3) accesibles en paralelo
• 1 instrucción puede ser accedida de cada sub-arreglo en cada acceso ala I-cache
• Las direcciones de instrucción están distribuidas con un interleave de 2
19
Ejemplo IBM RS/6000
A0 B0
A4 B4
A8 B8
A12B12
0
1
2
3
255
A1 B1
A5 B5
A9 B9
A13B13
0
1
2
3
255
A2 B2
A6 B6
A10B10
A14B14
0
1
2
3
255
A3 B3
A7 B7
A11B11
A15B15
0
1
2
3
255
TLogic
TLogic
TLogic
TLogic
PC address
Mux Mux Mux Mux
Instruction buffer (with shift capabilites)Instruction n Instruction n + 1 Instruction n + 2 Instruction n + 3
Branchdetecting
logic
DD
DD
una líneaigual a4 filas dela I-cache
20
Decodificación de instrucciones
(decoding)
Tareas:• Identificación de las instrucciones individuales
• Determinación de los tipos de instrucción
• Detección de dependencias entre las instrucciones dentro del fetch group
dependiente de:• El juego de instrucciones del procesador
(Instruction Set Architecture (ISA))
• El ancho (s) del pipeline paralelo
21
Decodificación de instrucciones
(decoding)
• Decodificación RISC• Clases de instrucciones• Tipos de recursos requeridos (registros)• Branch target address• añade hasta 4 bits por instrucción
• Decodificación CISC• Más complejidad. Puede usar varias etapas del pipeline • Separación entre instrucciones• Localización de códigos de operación y operandos
22
Decodificación de instrucciones
(decoding)
Unidad de decodificación del Pentium P6
• la I-cache entrega 16 bytes a la cola de instrucciones• 3 decodificadores trabajan en paralelo para decodificar instr del buffer• Decoder 0 puede decodificar todas las instrucciones IA32• Decoder 1 y 2 sólo decodifican instrucciones IA32 simples (reg to reg)
Decoder0
Decoder1
Decoder2
Instruction buffer (16 bytes)
Branchaddress
calculation
µop queue (6 RISC instructions)
4 µops 1 µop 1 µop
µROM
to nextaddresscalculation
Macro instruction bytes from IFU
23
Decodificación de instrucciones
(decoding)Problemas:
• Para muchos superescalares con juego de instr CISC, el HW dedecodificación puede ser muy complejo y requiere varias etapasde pipeline.
• Cuando el número de etapas de decodificación se incrementa, aumenta también la penalización de salto en términos de ciclosde reloj perdidos.
Solución:
• Uso de técnica de Predecodificación, que mueve parte de la tarea dedecodificación antes de la I-cache.
• Cuando ocurre un fallo de la I-cache, una nueva línea de cache es traída desde la memoria. Las instrucciones en esta línea son parcialmente decodificadas antes de almacenar la línea en la I-cache.
• A la línea original se le agrega cierta información adicional que ayuda a la decodificación posterior
24
Ejemplo
Predecode Logic
I-cache
Decode, translate& dispatch
From memory
8 instruction bytes
8 instruction bytes + predecode bits
16 instruction bytes + predecode bits
64
64 + 40
128 + 80
ROP1 ROP2 ROP3 ROP4
ROP: RISC Operation enterminología AMD
Mecanismo de predecodificación del AMD K5
• Predecodificación agresiva del set IA32 antesde guardar las instrucciones leídas en I-cache
• 8 bytes de instrucciones en cada ciclo de bus
• la predecodificación agrega 5 bits por byte
• inicio/fin de la instrucción• número de ROPs de la instrucción• ubicación de Codop y operandos
• Cada ciclo de predecodificación almacena104 (64+40) bits en la I-cache
• el tamaño de línea de la I-cache es de 16bytes de instrucciones + 80 bits
25
Despacho de instrucciones (dispatch)
Instructionfetching
Instructiondecoding
FU1 FU2 FU3 FU4……
from I-cache
instruction execution
instruction dispatching
• En un procesador escalar todas las instr atraviesan el único pipeline sin importar el tipo de instrucción
• Un procesador superescalar es un pipeline diversificadocon varias unidades funcionales heterogéneas
• Distintas unidades funcionales ejecutan diferentes tiposde instrucciones (punto fijo, punto flotante, memoria)
• La unidad de despacho se encarga de enviar instruccionesa la unidad funcional correspondiente según su tipo
26
Despacho de instrucciones (dispatch)Modo centralizado:• Todas las instrucciones avanzan juntas
entre etapas
Fetch
Decode
Instruction buffer
Ld add sub mul div I-cache
Fetch
Decode
Instruction bufferLd add sub mul div
I-cache
Ciclo i
Ciclo i+1
Modo distribuido:• Las instrucciones se distribuyen en
diferentes unidades funcionales segúnsu tipo
• Se necesita una unidad encargada deldespacho
Dispatch
Dispatch buffer
Decode
27
Despacho de instrucciones
(acceso a operandos)En pipeline escalar:• El acceso a operandos se realiza en la etapa de decodificación.• Si algún operando no está actualizado, se frena la instrucción dependiente hasta que el
operando este disponible.• El frenado de una instrucción frena las siguientes en el pipeline• El uso de técnicas como bypassing combinadas con estrategias de compilación elimina el
frenado
En pipeline superescalar:• Algunos operandos pueden no estar disponibles al momento de decodificación de una instr.• Una instrucción puede depender de instrucciones previas que aún no han terminado su
ejecución.• No es posible aplicar técnicas de bypassing.
Solución:
• Agregado de un buffer entre la decodificación y ejecución de instrucciones• Las instrucciones decodificadas se almacenan en el buffer hasta que tengan todos
sus operandos• Cuando una instrucción tiene todos sus operandos se extrae del buffer y se ejecuta• Dicho buffer actúa como una estación de reserva (reservation station – Tomasulo,1967)
Políticas de emisión
28
�Tres políticas mas usuales Emisión en orden y finalización en orden
⌧Las instrucciones se emiten en orden secuencial y los resultados se escriben en ese mismo orden
Emisión en orden y finalización desordenada
⌧Se decodifican instr. hasta el punto de dependencia o conflicto
⌧Usada en los RISC escalares con instr. que necesitan varios ciclos
⌧Maximiza el grado de paralelismo del procesador
⌧Sensible a las dependencias de salida (WAR y WAW)
Emisión desordenada y finalización desordenada
⌧Desacopla etapas de decodificación-ejecución: ventana de instrucciones (Shelving units)
⌧La emisión para ejecución se hace desde la ventana de ejecución
⌧Sensible a las depedencias WAR y WAW
Ejemplo de políticas de emisión
29
Cauce superescalarCapaz de captar y decodificar 2 instrucciones a la vezcon 3 unidades funcionales independientes2 copias de la etapa de escritura (bancos de registros auxiliares)
Fragmento de programa de 6 instrucciones con las siguientes restricciones:
• I1 necesita 2 ciclos de ejecución• I3 e I4 compiten por la misma unidad funcional• I5 depende del resultado de I4• I5 e I6 compiten por la misma unidad funcional
Emisión y finalización en orden
30
Emisión en orden y finalización
desordenada
31
Al terminar la ejecución de I2 se puede ejecutar I3, aún antes de que acabe I1
Emisión desordenada y finalización
desordenada
32
La instrucción I6 puede emitirse para ejecución antes que I5,ya que I6 no depende del resultado de I4 (aún no finalizada)
33
Estaciones de reserva2 tipos de estaciones de reserva:
• Estación de reserva centralizada• Un buffer simple a la entrada de la unidad de despacho
• Estación de reserva distribuida• Varios buffer individuales a la salida de la unidad de
despacho
Issuing
Centralized reservation station
Dispatch(Issue)
Completion buffer
Dispatch bufferDispatch
Completion buffer
from Decode unit
from Decode unit
Distributed reservation stationIssue
Execute
Finish
Dispatch
34
Notas sobre estaciones de reserva• Algunas arquitecturas presentan híbridos de los dos casos extremos
(Clustered reservation station)
• En una arquitectura híbrida hay varias estaciones de reserva y cadauna de ellas alimenta a varias unidades funcionales
• Ventajas y desventajas de una estación centralizada:• Todos los tipos de instr comparten la misma estación• Mejor utilización de las entradas de la estación• Diseño de hardware más complejo• Control centralizado y acceso multipuerto
• Ventajas y desventajas de una estación distribuida:• Puertos de salida de un solo puerto• Fragmentación interna• Utilización mas baja que las centralizadas• Si se llenan producen frenados de las instrucciones del
tipo que manejan• Diseño y manejo mas simple
35
Ejecución de instrucciones (Execute)
Tendencia actual: pipelines mas paralelos y diversificados(mas unidades funcionales mas especializadas)
Fx Fp
Primeros procesadores superescalares
Shift ALU 2 ALU 0
ALU C
A x BA x B
(A x B) + C(A x B) + C
(A x B) + C(A x B) + C
Unidad de enterosT1 super SPARC
Unidad de punto flotanteIBM RS/6000
36
Ejecución de instrucciones (Execute)¿Qué tipos de unidades funcionales debe usarse en un superescalar?
¿Cuál es la mejor combinación de tipos de unidades funcionales?
Estadísticamente un programa tiene:
• 40% de instrucciones aritméticas• 20% de instrucciones de salto• 40% de instrucciones de acceso a memoria (load/store)
Procesadores actuales:
• 4 unidades aritméticas (Fx y Fp)• 1 unidad de salto• 1 unidad de acceso a memoria (load/store)
El desbalanceo es preferible ya que 4 unidades de memoriarequieren que la cache de datos sea multipuerto (+ costo)
Solución: Uso de múltiples bancos de memoria simulando una cachémultipuerto real
37
Finalización y retiro de instrucciones
(completion and retiring)Una instrucción se considera completa cuando
• Termina su ejecución y • Actualiza el estado de la máquina
Una instrucción se considera completa cuando • Termina su ejecución y • Actualiza el estado de la máquina
Execution
Completionbuffer
Term
inación
de ejecu
ción
2 casos alternativos:
• Instrucciones aritmético-lógicas o Load de memoria
• Cuando una instrucción termina su ejecución sus resultados se almacenan en buffers temporales
• Cuando una instrucción es completada sus resultados se escriben en los registros de la arquitectura
• Instrucción Store en memoria (D-cache)
• En instrucciones de memoria (Store) el dato no necesariamente se escribe en la D-cache al salir del Completion buffer sino que se almacena en unbuffer temporal de memoria y se escribe en laD-cache en el siguiente periodo libre de bus
Complete
Storebuffer
Retire
Buffer
auxiliar d
eescritu
ra
Escritu
ra enban
co de
registros
(arit -lóg
icas)
Buffer
auxiliar d
em
emoria
Escritu
raen
D-cach
e
Instruction Completion
Actualiza el estado de la máquina
Instruction Retiring
Actualiza el estado de la memoria
38
Estructura del buffer de reordenamiento� Buffer circular con punteros head y tail
� Las instrucciones se escriben en el ROB estríctamente en el orden del programa� Cada vez que se despacha una instrucción se crea una nueva
entrada en el ROB
� Estado de la instrucción� Emitida, en ejecución, terminada
� Una instrucción puede retirarse (Completion) si y solo si� Ha terminado� Todas las instrucciones previas han sido retiradas� No se ha ejecutado de forma especulativa
39
Estructura del buffer de reordenamiento
Codop op1, op2reg-destvaluestatus
Status:• Issued (I)
• En espera en alguna estación de reserva• Execution (X)
• En ejecución en alguna unidad funcional• Finished (F)
• En ROB a la espera de su Completion
InstrucciónCodop op1, op2
Reg-destregistro de escritura de la inst.
Valuevalor del resultado de la inst.
Tail: próxima instrucción para retirar
Head: primera entrada libre
40
¿Para qué sirve el ROB?El despacho y las diferentes latencias de las instrucciones generanejecución fuera de orden.
Desde el punto de vista de las dependencias de datos no importa quelas instrucciones terminen fuera de orden
Si es importante la consistencia secuencial para las dependencias decontrol
• Saltos condicionales especulativos• En un salto especulativo se cargan instrucciones de una vía de ejecución
que puede no ser la correcta, entonces, algunas instrucciones deben anularse
• Interrupciones• Rupturas de secuencia de ejecución normal causadas por eventos externos
como dispositivos de I/O• Cuando ocurre una INT, el programa debe suspenderse para atenderla• Se detiene el Fetching y se termina de ejecutar las instr aun en el pipeline
• Excepciones• Inducidas por la ejecución de alguna inst del programa (evento anormal)• La ejecución del programa debe suspenderse en el estado de la inst
anterior a la que produce la excepción.• se debe asegurar que las inst anteriores en la secuencia del programa se
terminen y las posteriores se anulen
41
Arquitectura completa de un pipeline
superescalar
Fetc
h
Dec
ode
Dis
pat
ch
Inst
ruct
ion/
Dec
ode
buffe
r
Dis
patc
h bu
ffer
Com
ple
te
Ret
ire
Reo
rder
/Com
plet
ion
buffe
r
Sto
re b
uffe
r
Issu
e
Fin
ish
Exe
cute
In order In orderOut of order
Inst
ruct
ion
cach
é
Pre
fetc
h
Mem
ory caché
fault
Res
erv.
Sta
tions
42
Procesadores Superescalares
• Descripción estructural: Arquitectura y componentes de las distintas etapas de un procesador superescalar
• Descripción funcional: Funcionamiento de un procesadorsuperescalar y descripción de las estructuras que permitenla normal ejecución del flujo de instrucciones de un programa
43
Funcionamiento de un superescalar
3 flujos principales:
• Flujo de instrucciones• Flujo de datos• Flujo de memoria
Asociados con los 3 grandes tiposde instrucciones: saltos, ALU, memoria
Objetivo: maximizar el volumende instrucciones procesadas en los3 flujos
fetch
decode
registeraccessregisteraccess
dispatch
ALUbranch load/store
mem
ory
Flujo
de
inst
rucc
iones
Flujo
de
dat
os
Flujo de memoria
reorder
WB
44
Manejo del flujo de instrucciones
45
Manejo del flujo de instrucciones
Uso de los ciclos perdidos
Saltoretrasado
Procesamiento de saltocondicional no resuelto
EspeculaciónBloqueo Multivía
eliminaciónde saltos
Instruccionespredicadas
Reordenamientode instrucciones
Procesamientode saltos
46
Manejo del flujo de instruccionesEn flujo secuencial:
• máximo rendimiento• todas las etapas llenas
Cuando hay salto:• se pierden 3 (n) ciclos• penalización de
3 * ancho pipeline
fetch
decode
dispatch
branchbranch
complete
retire
decode buffer
dispatch buffer
reserv.stations
completion buffer
store buffer
issue
finishex
ecute
En saltos incondicionales• se debe esperar el cálculo deltarget
En saltos condicionales• se debe calcular target• se debe calcular condición
47
Manejo del flujo de instruccionesEn saltos incondicionales los ciclos defrenado dependen del modo de direccionamiento utilizado
• target = Registro + offset
• target = registro
• relativo al PC
fetch
decode
dispatch
branchbranch
complete
retire
decode buffer
dispatch buffer
reserv.stations
completion buffer
store buffer
issue
finishex
ecute
48
Manejo del flujo de instruccionesEn saltos condicionales los ciclos defrenado también dependen de laforma de cálculo de la condición
• Comparación de registros en lapropia instrucción de salto
Beq r1, r2, dir_salto
• testeo de bits de estado
Beqz dir_salto
Desventajas del testeo de estado:Es un concepto secuencial, entoncessurgen problemas al paralelizar las instrucciones
fetch
decode
dispatch
branchbranch
complete
retire
decode buffer
dispatch buffer
reserv.stations
completion buffer
store buffer
issue
finishex
ecute
49
Salto retrasado
Migración de código en tiempo de compilación a fin de rellenar las etapas frenadas por la ejecución de una posible vía de salto tomado
add r3, r2, r6div r5, r4, r1add r8, r9, r10beq dir_saltoNOPNOP……
dir_salto: …………
add r3, r2, r6div r5, r4, r1add r8, r9, r10beq dir_saltoNOPNOP……
dir_salto: …………
….….add r3, r2, r6br dir_saltodiv r5, r4, r1add r8, r9, r10……
dir_salto: …………
….….add r3, r2, r6br dir_saltodiv r5, r4, r1add r8, r9, r10……
dir_salto: …………
La migración de código debe ser incondicional. Esto es, la condición a ser testeada por el salto no debe ser generada por las instrucciones
migradas
50
Técnicas de predicción de saltos
Algunos estudios experimentales demostraron que las instrucciones desalto condicional son bastante predecibles
Cuando se encuentra una instrucción de salto:• PREDICCIÓN: Se especula cual es la siguiente instrucción a ejecutar• Comienzan a ejecutarse instrucciones especulativamente• En algún momento se chequea la condición de salto
Si se acierta en la especulación:• Se continúa la ejecución
Si no se acierta en la especulación:• Se eliminan las instrucciones ejecutadas especulativamente• Se buscan las instrucciones correctas
51
Técnicas de predicción de saltos
Las técnicas de predicción de saltos involucran 2 aspectos:
• Especulación de la dirección de salto:se presupone una dirección de salto durante la fase de fetcha fin de poder cargar la nueva instrucción en el ciclo siguiente(sin perdida de ciclos).Usualmente la dirección predicha es la anterior dirección desalto
• Especulación de la condición de salto:se presupone un resultado de la condición de salto.
• Salto no tomado (SNT): continuar por la vía secuencial• Salto tomado (ST): ir a la instrucción de la dirección
de destino del salto
52
Especulación de la dirección de saltoUso de un buffer de direcciones de salto (BTB – Branch Target Buffer)
BIA BTA
branch instructionaddress field
branch targetaddress field
PC
acceso ala I-cache
1. Se usa el PC para acceder a la I-caché a buscar la siguiente instrucción2. Al mismo tiempo con el PC se accede al BTB. Si la dirección del PC corresponde
a una instrucción de salto (campo BIA), el buffer devuelve la dirección de saltoa la que previamente salto la instrucción branch (BTA).
3. la dirección BTA se carga en el PC para que en el siguiente ciclo se acceda a lainstrucción a la que salta el branch (si se predijo como ST)
4. Paralelamente la instrucción branch leída desde la I-caché se ejecuta para validaro no la dirección especulada vía BTB
53
Especulación en la condición de salto
• Predicción fija• Siempre se hace la misma predicción: Salto tomado o salto no
tomado (vía secuencial)(LA MAS SIMPLE PERO POCO EFECTIVA!!)
• Predicción verdadera• La predicción cambia para diferentes saltos o diferentes
ejecuciones del mismo salto
• Dos tipos:
• Predicción estática: basada en el análisis del código(EN TIEMPO DE COMPILACIÓN!!)
•Predicción dinámica: basada en la historia del salto(EN TIEMPO DE EJECUCIÓN!!)
54
Predicción estática
� Predicción basada en el código de operacióno Para algunas instrucciones de salto se predice como ST y para
otras como SNTo MC88110 , PowerPC 603 – con saltos relativos a ciertos registros
� Predicción basada en el desplazamientoo Si desplazamiento <0, ST, si >=0, SNT
� Predicción dirigida por el compiladoro Se usa un bit adicional en el código de operación de la instruccióno El compilador analiza el código para determinar si el salto en
cuestión debe realizar predicción de ST o SNTo Ejemplo:
� branch relacionado con loops : ST� branch relacionado con IF : SNT
55
Predicción dinámica
• La predicción se hace según la historia del salto
La historia es una buena guía para predecir el futuro
• Esquema básico: un salto tomado en las últimas ejecuciones se predice como verdadero en la siguiente
• Mayor rendimiento que la predicción estática• Mas complejo para implementar
• Mejor comportamiento en la predicción de saltos asociados a loops
56
Predicción dinámica
2 técnicas principales:
• Explicita: Bits de historia
• La historia del salto se marca explícitamente usando cierta cantidad de bits de historia
• Usualmente 2 bits (UltraSparc, R10000, Pentium, PowerPC)• Los bits de historia representan la probabilidad de que el
salto se efectúe en la siguiente ejecución
• Implícita
• La historia del salto se indica implícitamente mediante la presencia de una entrada en un buffer de destino de saltos
• Si el salto fue tomado la última vez, se agrega al buffer• Si el salto NO fue tomado la última vez, se quita del buffer
57
Predicción dinámica de 1 bit
Se usa 1 bit para cada salto indicando si en la última ejecución fue tomado o no tomado
ST SNTST
SNT
ST
SNT
1 0
registro1 bit
Resultadodel salto
Prediccióndel salto
estadoactual
resultadodel salto
nuevo estado
0 0 0
0 1 1
1 0 0
1 1 1
1-bit saturation counter
58
Predicción dinámica de 1 bit
Comportamiento en loops anidados: cuando el salto no es efectivo sepredice incorrectamente 2 veces
lazo_1: …..…..
lazo_2: …..
……
beqz r1, lazo_2beqz r2, lazo_1
lazo_1 lazo_2 predicho realnueva
predicción
1
1 SNT ST ST
2 ST ST ST
3 ST ST ST
…..
última ST SNT SNT
2
1 SNT ST ST
2 ST ST ST
…..
59
Predicción dinámica de 2 bits
Con dos bits se puede almacenar la historia de las 2 últimas ejecuciones del salto
TT NTST
SNT
ST
SNT
11 10
TN NN
SNT
ST01 00
SNT
ST
ST ST SNT SNT
Se puede implementar con un contador ascendente/descendentede 2 bits con saturación en 11 y 00 (2-bit saturation counter)
1X : predecir salto tomado0X : predecir salto NO tomado
TT: Tomado/TomadoNT: No tomado/TomadoTN: Tomado/No tomadoNN: No tomado/No tomado
60
Predicción dinámica de 2 bits
Comportamiento en loops anidados: cuando el salto no es efectivo sepredice incorrectamente 1 vez
lazo_1: …..…..
lazo_2: …..
……
beqz r1, lazo_2beqz r2, lazo_1
lazo_1 lazo_2 predicho realnueva
predicción
1
1 SNT ST SNT
2 SNT ST ST
3 ST ST ST
…..
última ST SNT ST
2
1 ST ST ST
2 ST ST ST
…..
61
Implementación de la predicción con
bits de historia
BIA BTA
branch instructionaddress field
branch targetaddress field
PC
acceso ala I-cache
history bits
branch history
FSMPredicciónST ó SNT
+1
• Por SNT se continúa la ejecución secuencial y se carga PC con PC + 1• Por ST se carga en PC la BTA
62
Efectividad de la predicción con bits de
historia
1 bit de historia Recuerda la dirección tomada la última vez (ST ó SNT) 82,5% a 96,2
2 bits de historia Predice la dirección a partir de las últimas 2 veces (ST ó SNT) 86% a 97%
3 bits de historia Predice la dirección a partir de las últimas 3 veces (ST ó SNT) 88,3% a 97%
El incremento de efectividad en las predicciones empieza a ser mínimoa partir de 2 bits de historia. Por lo tanto, el uso de contadores de 2 bitses la mejor opción con relación costo/rendimiento.
63
Predicción dinámica Implícita
• 2 esquemas:• BTAC (Branch Target Address Cache):• BTIC (Branch Target Instruction Cache):
• Se basan en el uso de una caché adicional que contiene:• Entradas para los saltos más recientes (idealmente para todos)• Entradas sólo para los saltos tomados (ST)• Si el salto tiene una entrada en la caché entonces se predice
como tomado• Los saltos no tomados (SNT) no están en la cache o se sacan si
es que estaban
•Similar a un predictor de 1 bit
64
Implementación de BTAC y BTIC
caché BTAC: almacena dirección del salto y dirección de la instrucción de destino
branchaddress
1000
targetaddress
2000
branchaddress
1000
targetinstruction
Load r1,
Beqz r5, 2000
Load r1, r2, r3
1000
2000caché BTIC: almacena dirección del salto y
la instrucción de destino
65
Recuperación de predicciones erróneas
Cualquier técnica especulativa de salto requiere de un mecanismo derecuperación ante fallos en la predicción:
• Eliminación de las instrucciones de la ruta errónea• carga y ejecución de las instrucciones de la ruta correcta
La ejecución de instrucciones de una ruta especulativa puede darlugar a la aparición de nuevas instrucciones de salto que serán especulados como el primero aún antes de que la condición de estese haya resuelto
En un momento dado puede haber en el procesador instrucciones ejecutadas NO especulativamente mezcladas con varios niveles deinstrucciones ejecutadas especulativamente
66
Recuperación de predicciones erróneas
Para identificar las instrucciones en ejecución especulativa de diferentes saltos se usan rótulos (Tags) asociados a cada salto
Br 1
Br 2
Br 3
SNT
SNT
ST
Tag 1
Tag 2
Tag 3
Una instrucción rotulada indica que es especulativa y el rótulo la asocia a un nivel de salto especulativo
Cuando se especula, la dirección de todas las instrucciones de salto, al igual que las direcciones de salto tomado y salto no tomado se deben almacenar para el caso de que sea necesaria una recuperación
67
Recuperación de predicciones erróneas
Cuando se termina la ejecución real del salto, se puede validar el mismo:• Si la predicción coincide con el resultado evaluado, se puede
eliminar el tag de ese salto de las instrucciones correspondientes• Si la prediccion no coincide, se elimina las instrucciones
asociadas a ese tag (tag n) y las de los tags subsiguientes (tag n+i)
Br 1
Br 2
Br 4 Br 3
NT
NT
T
Tag 2
Tag 3
• branch 1 termina su ejecución y sepredijo correctamente, por lo que eltag 1 de las instrucciones asociadas se elimina
• Branch 2 se predijo incorrectamentepor lo que se eliminan de la ruta de ejecución todas las instrucciones con tag 2 y 3
• Un nuevo branch (4) se predice y a partir de ese punto las instruccionesse rotularán con un tag 4….
Las instrucciones erróneas que están aún en los buffers de decodificación, despacho y estaciones de reserva se invalidan. Las instrucciones erróneas en el ROB se retiran
68
Ejemplo: PowerPC 604
I-caché
decode buffer
Decode
dispatch buffer
Dispatch
branch
reservation stations
completion buffer
FAR
branch historytable (BHT)
branch targetaddress caché
(BTAC)
FA FA
FA
+4
BHT prediction
BTAC prediction
BTAC updateBHT
update
69
Ejemplo: PowerPC 604
• Superescalar de grado 4 capaz de recuperar, decodificar y despachar hasta 4 instruccionessimultáneas en cada ciclo de máquina
• 2 buffers separados para soporte de predicciones de salto:
• BTAC: caché asociativa de 64 entradas que almacena las direcciones de salto
• BHT: caché de acceso directo de 512 entradas que almacena un predictor de2 bits de historia para cada salto
• Ambas tablas se acceden durante la etapa de fetching (ciclo i).• BTAC responde en 1 ciclo si existe un salto en la dirección aportada por el PC• BHT responde en 2 ciclos para la misma búsqueda• Si BTAC responde positivamente, se carga el PC con la dirección BTAC (en ciclo i+1)• En ciclo i+2 BHT dispone de la predicción por bits de historia para la dirección:
• Si predice salto tomado (igual que BTAC) se continúa tal como predijo BTAC• Si predice SNT, entonces se anula la predicción de BTAC y se carga el PC con
la dirección secuencial
70
Técnicas avanzadas de predicción:
Predicción en 2 niveles
Técnicas anteriores tienen limitaciones:• Porcentaje de fallas cercano al 10%. NO aceptable para altas
prestaciones• La predicción se hace en función de una historia limitada del
salto que se está analizando• NO tiene en cuenta la dinámica de saltos globales que se están
ejecutando en un momento dado
Predicción de 2 niveles• Supera en teoría el 95% de aciertos• Adaptable a contextos dinámicos (saltos por loop, if, etc)• Usa un conjunto de tablas de historia (Pattern history Table –
PHT)• El contexto de salto es determinado por un patrón de saltos
recientemente ejecutados (Branch History Shift Register –BHSR)
• El BHSR se usa para indexar la PHT y obtener una entrada que contiene cierto número de bits de historia (Ej. saturation counter)
71
Predicción en 2 niveles
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
Prediction
equivalent to2-bit BHT
Branch addressj bits
Global branch historyshift register
(BHSR)
k bits
PHT of 2k x 2j x 2 bits
Tipo I:• 1 único registro: Global BHSR de k bits• Shared PHT: puesto que no se usan los n bits de la dirección de salto sino sólo j puede
haber aliasing• Memoriza un único contexto de k saltos anteriores
11
00
2-bit saturatingcounter FSM
n bits
72
Predicción en 2 niveles
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
11
00
Prediction
equivalent to2-bit BHT
Branch addressj bits
Individualbranch historyshift register
(BHSRs)2j x k bits
k bits
PHT of 2k x 2j x 2 bits
Tipo II:• 2i registros individuales: Individual BHSRs de k bits• Shared PHT: puesto que no se usan los n bits de la dirección de salto sino sólo j puede
haber aliasing• Memoriza 2i contextos de k saltos anteriores
11
00
2-bit saturatingcounter FSM
n bits
i bits
73
Predicción en 2 niveles
11
00
11
00
11
00
11
00
Prediction
Branch address
j bits
Globalbranch historyshift register
(BHSRs)
k bits
PHT of 2max(k , j) x 2 bits
Tipo III (gshare correlated branch predictor – McFarling, 1993):• j bits de la dirección de salto se usan como función de hashing (bitwise XOR) con k bitsdel Global-BHSR. Los max(k,j) bits resultantes se usan para indexar una PHT de predictores de 2 bits de historia
11
00
2-bit saturatingcounter FSM
n bits
+max(k , j) bits
74
Manejo del flujo de datos(entre registros)
75
Flujo de datos entre registros• Técnicas tendientes a optimizar la ejecución de instrucciones del
tipo aritmético-lógicas (ALU) en el núcleo superescalar del procesador• Las instrucciones tipo ALU realizan las tareas “reales” del programa.
Las instrucciones de salto y de memoria cumplen los roles de proveernuevas instrucciones o datos (respectivamente) a este flujo detrabajo
• En una arquitectura tipo load/store las instrucciones tipo ALU especi-fican operaciones a ser realizadas entre operandos almacenados enregistros
Formato típico de operación:
Ri = F(Rj , Rk)con
Ri: registro destinoRj y Rk: operandos fuenteF: operación a realizar
Si Rj ó Rk no están disponiblesDependencia de datos (RAW)
Si F no está disponibleDependencia estructural (recursos)
Si Ri no está disponibleDependencias falsas (WAR o WAW)
76
Tratamiento de dependencias falsas
Dependencias de salida y anti-dependencias debidas a reuso de registros
Generadas por el compilador al asignar registros del procesador a variables del programa
Escritura de un registro: DEFINICIÓNLectura de un registro: USO
Luego de una definición puede haber varios usos de un registro
RANGO DE VIDA de un valor: duración entre la definición y el último usode un registro
Dependencias WAR y WAW se producen cuando se redefine un registrodurante un rango de vida previo
77
Tratamiento de dependencias falsasTécnicas para tratar dependencias falsas:
• Frenado: detener la instrucción que redefine el registro hasta quefinalice el rango de vida previo
• Renombre de registros: Asignación dinámica de distintos nombresa las múltiples definiciones de un registrode la arquitectura
• Uso de banco de renombre (Rename Register File - RRF)separado del banco de registros de la arquitectura(Architected Register File - ARF)
• Banco de renombre (RRF) implementado como parte delbuffer de reordenamiento (ROB)
• Pooled Registers: Implementa el RRF y el ARFjuntos en un mismo banco
• Map Table: Usada en la FPU del IBM RS/6000
78
Renombre de registrosRRF separado del ARF
Data Busy 1 Tag
1
ARF
Data Busy 2
1
RRF
referencia aregistro
operando
Valid-entry
10
Busy = 1 : El registro está ocupado y no puede ser utilizado ya que alguna instrucción en ejecución cambiará su valor
0 : El valor de registro está disponible y puede ser leído como operando
79
Renombre de registrosRRF dentro del ROB
Data Busy 1 Tag
1
ARF
referencia aregistro
operandoCodop op1, op2reg-destDataBusy 2status
ROB
80
Renombre de registrosComparación de las técnicas ARF-RRF y RRF-ROB
• Ambas técnicas requieren el agregado al ARF de una columna adicionalpara direccionar (Tag)
• En ARF-RRF ambas tablas pueden estar juntas dentro del chip
•En RRF-ROB la tabla RRF está al final del pipeline (en ROB) y ARF al principio (en Decode o dispatch)
• En RRF-ROB todas las entradas del ROB tienen soporte para renombreaunque no siempre se usan (Ej: saltos, Stores, etc)
• En ARF-RRF son necesarios puertos adicionales desde las ALUs hastala tabla RRF. En ROB ya existe la conexión de datos entre ALUs y ROB
81
Funcionamiento del renombre de
registrosEl renombre de registros involucra 3 tareas:
1. Lectura de operandos• En etapa de Decode o Dispatch• Lectura de operandos fuente de la instrucción• Procedimiento:
se lee Reg desde ARFSi Busy 1 = 0, entonces se lee el Data desde ARFSi Busy 1 = 1, el valor Data de ARF no es válido, entonces
con Tag se accede al RRF:Si Busy 2 = 0, entonces se lee el Data
(instr terminó Execute pero aúnestá en el ROB)
Si Busy 2 = 1, la instr aún no ha sido ejecutada, entonces se guardael Tag en la estación de reserva
2. Alocación de registro destino3. Actualización de registro
82
Valid-entry
1
Funcionamiento del renombre de
registrosAlocación de registro destino:
• Se realiza en etapa de Decode o dispatch• 3 pasos:
1. Poner Busy 1 = 1 para el registro que escribirá la instrucción2. Obtener un registro libre de la RRF y marcarlo como usado
(Valid-entry = 1)• Poner su bit Busy 2 = 1 (no executed yet)• Obtener el Tag correspondiente (índice en RRF)
• Actualizar el campo Tag de la ARF
Data Busy 1 Tag
0
ARF
Data Busy 2
0
RRF
registrode
escritura
Paso 1 Paso 2.1Paso 2.2Paso 3 Paso 2
83
Funcionamiento del renombre de
registrosActualización de registro (Update):
• Se realiza en etapa Complete• 2 pasos:
1. Cuando la instr termina (finish), 1.1 Actualizar resultado en RRF[Tag]1.2 Poner Busy 2 = 0
2. Cuando la instr se completa (Complete),2.1 Actualizar Data RRF[Tag] al ARF correspondiente2.2 Poner Busy 1 = 02.3 Poner Busy 2 = 1
Data Busy 1 Tag
new data 0
ARF
Datanew data
Busy 2
0 / 1
RRF
registrode
escritura
Paso 2.1
Paso 1.1
Paso 2.2 Paso 1.2 Paso 2.3
84
Renombre de registrosPooled Registers:
• Una única estructura física de registros que sirven como ARF y RRF• Cualquier entrada se designa como RRF o ARF con un bit adicional• Ventaja: En la fase de Update no se necesita realizar copia desde
RRF a ARF, basta con cambiar el bit de tipo y eliminar instancias anteriores del registro
• Desventaja: Extrema complejidad de Hardware• Desventaja: Al momento de Swaping de tarea, cuesta identificar los
registros ARF a fin de salvar el estado del procesador
85
Renombre de registrosMap Table (IBM RS/6000):
Map Table32 x 6 bits
Op T S1 S2 S3
Op T S1 S2 S3
32
33
34
35
36
37
38
39
Free
Lis
t (F
L)
Pendin
g T
arget
Ret
urn
Queu
e (P
TRQ
)
• 40 registros físicos que incluyen 32 de arquitectura• La tabla de mapeo tiene 32 entradas de 6 bits c/u• Cada entrada representa a un reg. de la arquitectura
y referencia un registro físico• FL es una cola que contiene los reg. físicos NO usados• PTRQ contiene la lista de registros que fueron usados
para renombrar registros de la arquitectura y han sidoposteriormente re-renombrados en la tabla de mapeo
• Registros físicos en la PTQR son devueltos a la FL luegode su último uso por parte de una instrucción
• 40 registros físicos que incluyen 32 de arquitectura• La tabla de mapeo tiene 32 entradas de 6 bits c/u• Cada entrada representa a un reg. de la arquitectura
y referencia un registro físico• FL es una cola que contiene los reg. físicos NO usados• PTRQ contiene la lista de registros que fueron usados
para renombrar registros de la arquitectura y han sidoposteriormente re-renombrados en la tabla de mapeo
• Registros físicos en la PTQR son devueltos a la FL luegode su último uso por parte de una instrucción
• Forma más agresiva de renombre de registros
• Alta complejidad de hardware
• Es difícil detectar cuando un registro de la PTQR se usapor última vez
• No necesita actualización de los registros de arquitecturaal final del ciclo de una instrucción (Complete stage)
• Detección simple de los registros físicos asignados a registros de la arquitectura en caso de excepciones (Map Table)
86
Renombre de registrosOtra variante de tabla de mapeo
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 0 4 0 . . . . . . . 0
• Banco de M registros físicos quemapean N registros de arq (M>N)
• Funciona como buffer circular
• Valid: 0 : entrada sin uso1 : entrada usada
• Reg des: registro de arq al cual se asignó el registro físico
• value : el valor del registro
• Busy :validación del dato
0 : valor disponible1 : valor no actualizado
• Last : indica la última definición de un registro de arq
87
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 0 4 0 . . . . . . . 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 0 . . . . . . . 0
mul r2, r0, r1
88
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 0 . . . . . . . 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 0 . . . . . . . 0
mul r2, r0, r1
r0=0 r1=10
89
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 1 3 0 1 5 . . . . . . 0
add r3, r1, r2
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 0 . . . . . . . 0
90
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 0 . . . . . . . 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 1 3 0 1 5 . . . . . . 0
add r3, r1, r2
¿r2? r1=10
91
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 4 1 3 0 1 5 . . . . . . 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 0 4 1 3 0 1 5 1 2 0 1 . . . . . 0
sub r2, r0, r1
92
Renombre de registros
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 0 4 1 3 0 1 5 1 2 0 1 . . . . . 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 0 4 1 3 0 1 5 1 2 0 1 . . . . . 0
mul r2, r0, r1termina
93
Renombre de registros
Se retira instrucción conresultado en posición 0
valid reg. des.
value busy last
0 1 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 0 4 1 3 0 1 5 1 2 0 1 . . . . . 0
valid reg. des.
value busy last
0 0 4 40 1 1 1 1 0 0 1 1 2 1 1 10 1 1 3 1 2 0 1 0 4 1 3 0 1 5 1 2 0 1 . . . . . 0
94
Dependencias verdaderas de datos
Las dependencias de datos verdaderas (RAW) obligan a serializar la ejecución de instrucciones debido a la relación “productor-consumidor”entre instrucciones que pruducen resultados y otras que los usan como
operandos de entrada
Aún cuando estas dependencias no se pueden eliminar, es necesarioproveer al procesador de mecanismos para detectar las mismas y
serializar las instrucciones que tienen este tipo de conflicto
r1 = r2 * r3
r5 = r1 + r8
95
Dependencias verdaderas de datosUn poco de historia… Algoritmo de Tomasulo
• Técnica precursora de los algoritmos modernos de detección dedependencias de datos verdaderas (RAW)
• Propuesto por Tomasulo en 1967 para la FPU del IBM 360/91
• No sólo detecta dependencias RAW sino que elimina dependenciasfalsas (WAR y WAW) como efecto colateral
• Se basa en la adición de tres mecanismos a la ALU clásica:
• Unidades de reserva (reservation stations)• Bus de datos común (common data bus - CDB)• etiquetas de registros (register tags)
• La versión original no soporta tratamiento de excepciones conmantenimiento de la consistencia secuencial
96
Dependencias verdaderas de datosAlgoritmo de Tomasulo
FU 1 FU 2
DispatchBusybits
RegisterBank
instr
Rs1, Rs2Rd
ALU clásica
FU 1FU 2
DispatchBusybits
RegisterBank
instr
Rs1, Rs2Rd
ALU de Tomasulo
Tagbits
ReservationStations
ReservationStations
Common Data Bus
97
Dependencias verdaderas de datosAlgoritmo de Tomasulo
• Las estaciones de reserva se pueden ver como unidades funcionales virtuales que reciben una instrucción para ejecutar y al cabo de cierto número de ciclos se genera un resultado (en realidad el resultado lo generará la unidad funcional asociada a la estación)
• Cada generador de futuros resultados se identifica con un Tag (cada estación de reserva)
• Si un registro no está disponible (está no-valid), su valor se reemplaza por el tag del generador de dicho valor
• Cuando una unidad funcional genera un resultado, lo almacena en la ER de lainstrucción y ésta lo envía por el CDB a todos los posibles receptores (banco de registros, estaciones de reserva, etc) que tengan dicho tag
Tag op1 Tag op2 destCopentrada Estación de reserva
Tag DataBusyentrada Banco de registros
ID Tag
98
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Implementación
FU 1FU 2
DispatchBusybits
RegisterBank
instr
Rs1, Rs2Rd
Tagbits
ReservationStations
ReservationStations
Common Data Bus
Tag 1Tag 2Tag 3
Tag 4Tag 5
Una entrada de estación de reserva con Tag = 0 para algún operando seasume que contiene el valor del dato.
Si el Tag es <> 0, el valor lo generarála instrucción que está en la estaciónde reserva identificada con dicho Tag
0 500 2 --- r4add
El op1 tiene Tag 0 por lo que su valores 500.
El op2 tiene Tag 2, por lo que elresultado lo generará la instrucciónen la estación de reserva 2
op1 op2
99
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo
• Suponer una etapa de ejecución con soporte para instrucciones de 2operandos fuente y una referencia a registro destino
• La unidad de despacho emite 2 instrucciones por ciclo
• Hay 2 unidades funcionales:
• Adder : Con una estación de reserva de 3 entradas (con Tags 1, 2 y 3)2 ciclos de reloj de latencia
• Mult : Con una estación de reserva de 2 entradas (con Tags 4 y 5)3 ciclos de reloj de latencia
• Una instrucción puede iniciar su ejecución en el mismo cicloen que es despachada a la estación de reserva
• Las unidades funcionales pueden adelantar sus resultados en su últimociclo de ejecución a los distintos destinos que los necesiten
• Cualquier unidad que recibe un operando puede iniciar su ejecución en el siguiente ciclo de reloj
100
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
0 6,0 0 7,81
2
3
S1
Adder
--
S1
Tag Op 1 Tag Op 2
0 6,0 1 ---4
5S2
Mult-
Tag Op 1 Tag Op 2
6,01 4 3,51 1 10,0
0
2
4
Busy Tag Data
7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 1 Despacho de S1 y S2
• Se despachan las instrucciones S1 y S2 a las estaciones de reserva 1 y 4• Los registros destino de esas instrucciones son r4 y r2• Se setean a “1” los bits Busy de r4 y r2• Como S1 es despachada a la estación 1, el Tag de r4 se pone en 1• Como S2 es despachada a la estación 4, el Tag de r2 se pone en 4• S1 tiene sus 2 operandos entonces comienza a ejecutarse en este ciclo• S2 debe esperar el resultado de S1 (r4) entonces op 2 se setea con Tag 1
101
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
0 6,0 0 7,81 ---
1
2
3
S1
Adder
S3-
S1
Tag Op 1 Tag Op 2
0 6,0 1 ---2 --- 4 ---
4
5S2
MultS4
Tag Op 1 Tag Op 2
6,01 4 3,51 2 10,0
0
2
4
Busy Tag Data
1 5 7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 2 Despacho de S3 y S4
0 7,8
• Se despachan las instrucciones S3 y S4 a las estaciones de reserva 2 y 5• S3 necesita del resultado de S1 así que se almacena con un Tag = 1• S4 depende de S3 y de S2, entonces se almacena con Tags 2 y 4• S3 actualiza r4 por lo que su Tag en el banco de registros se actualiza a 2• S4 actualiza r8 por lo que su Tag en el banco de registros se pone a 5 y
su bit Busy se pone a 1• S1 en su último ciclo de ejecución, manda el token <r4,13,8> por el CDB
102
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
0 13,8 0 7,81
2
3
-
Adder
S3-
S3
Tag Op 1 Tag Op 2
4
5S2
MultS4
S2
Tag Op 1 Tag Op 2
6,01 4 3,51 2 10,0
0
2
4
Busy Tag Data
1 5 7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 3
0 6,0 0 13,82 --- 4 ---
• Se actualizó el operando 1 de S3 y el operando 2 de S2 ambos a 13,8• Se libera la estación de reserva 1• Comienza la ejecución de S3 en el Adder y de S2 en el Mult
103
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
0 13,8 0 7,81
2
3
-
Adder
S3-
S3
Tag Op 1 Tag Op 2
4
5S2
MultS4
S2
Tag Op 1 Tag Op 2
6,01 4 3,51 2 10,0
0
2
4
Busy Tag Data
1 5 7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 4
0 6,0 0 13,82 --- 4 ---
• Último ciclo de ejecución de S3 en el Adder por lo que envía el token<r4, 21,6> al CDB
104
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
1
2
3
-
Adder
--
Tag Op 1 Tag Op 2
4
5S2
MultS4
S2
Tag Op 1 Tag Op 2
6,01 4 3,5
21,6
0
2
4
Busy Tag Data
1 5 7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 5
0 6,0 0 13,80 21,6 4 ---
• El token <r4, 21,6> del CDB actualizó el operando 1 de la estación dereserva 5
• El token <r4, 21,6> del CDB actualizó el registro 4 del banco de registrosde modo que su bit Busy se pone en 0 (resultado actualizado)
• Último ciclo de ejecución de S2 en el Mult por lo que envía el token<r2, 82,8> al CDB
105
Dependencias verdaderas de datosAlgoritmo de Tomasulo: Ejemplo S1 : add r4, r0, r8
S2 : mul r2, r0, r4S3 : add r4, r4, r8S4 : mul r8, r4, r2
1
2
3
-
Adder
--
Tag Op 1 Tag Op 2
4
5-
MultS4
S4
Tag Op 1 Tag Op 2
6,082,821,6
0
2
4
Busy Tag Data
1 5 7,88Functional unit 1 Functional unit 2 Register Bank
Ciclo 6
0 21,6 0 82,8
•El token <r2, 82,8> del CDB actualizó el registro 2 del banco de registrosde modo que su bit Busy se pone en 0 (resultado actualizado)
• Comienza la ejecución de S4 en el Mult
106
Dependencias verdaderas de datosAlgoritmo de Tomasulo
Tratamiento de RAW
Eliminación de WAR
Eliminación de WAW
Mediante el uso de Tags que permiten visualizarmas registros virtuales:
banco de registros + estaciones de reserva
Mediante el uso de Tags que permiten visualizarmas registros virtuales:
banco de registros + estaciones de reserva
Mediante la capacidad de almacenar el resultado de laejecución en la estación de reserva de la instrucciónque lo generó para ser usado por las instrucciones dependientes
Mediante la capacidad de almacenar el resultado de laejecución en la estación de reserva de la instrucciónque lo generó para ser usado por las instrucciones dependientes
Solamente la última instrucción en orden del programaescribe en el banco de registrosSolamente la última instrucción en orden del programaescribe en el banco de registros
107
Dependencias verdaderas de datosAlgoritmo de Tomasulo
Desventajas: Desperdicio de las estaciones de reserva ya que sonusadas como buffers temporales para almacenar el resultado de la instrucción hasta el final del rango devida del valor
Desperdicio de las estaciones de reserva ya que sonusadas como buffers temporales para almacenar el resultado de la instrucción hasta el final del rango devida del valor
No soporta tratamiento preciso de excepcionesNo soporta tratamiento preciso de excepciones
1
2
108
Dependencias verdaderas de datosAlgoritmo de Tomasulo
Solución de desventaja 1: Agregado de un buffer temporal de salida que almacena los resultados liberando la estación de reserva correspondiente
Solución de desventaja 1: Agregado de un buffer temporal de salida que almacena los resultados liberando la estación de reserva correspondiente
FU 1FU 2
DispatchBusybits
RegisterBank
instr
Rs1, Rs2Rd
Tagbits
ReservationStations
ReservationStations
Common Data Bus
Buffer de salida
Tag Rd value
109
Dependencias verdaderas de datosAlgoritmo de Tomasulo
Desventaja 2: El algoritmo no soporta tratamiento preciso de excepciones
Al final del segundo ciclo S1 debería haber actualizado el contenido de r4pero cuando se despachó S3 al principio del segundo ciclo cambió el Tagde r4 de 1 a 2
Si se produce una excepción (por ejemplo de S2 en el ciclo 3) no podrá ser posible recuperar el estado exacto del procesador ya que r4no representa el resultado de haber ejecutado S1
Al final del segundo ciclo S1 debería haber actualizado el contenido de r4pero cuando se despachó S3 al principio del segundo ciclo cambió el Tagde r4 de 1 a 2
Si se produce una excepción (por ejemplo de S2 en el ciclo 3) no podrá ser posible recuperar el estado exacto del procesador ya que r4no representa el resultado de haber ejecutado S1
6,01 4 3,51 2 10,0
0
2
4
Busy Tag Data
1 5 7,88Register Bank
6,01 4 3,51 2 13,8
0
2
4
Busy Tag Data
1 5 7,88Register Bank
Estado del bancode registros según
Tomasulo
Estado del bancode registros con
consistenciasecuencial
Erroneo Correcto
110
Dependencias verdaderas de datosAlgoritmo de TomasuloSolución 2
Uso del buffer temporal de salida para almacenar el orden de emisión delas instrucciones, a fin de actualizar el banco de registros en orden delprograma cuando termina cada instrucción
Uso del buffer temporal de salida para almacenar el orden de emisión delas instrucciones, a fin de actualizar el banco de registros en orden delprograma cuando termina cada instrucción
Precursor del buffer de reordenamiento de los actuales procesadoresPrecursor del buffer de reordenamiento de los actuales procesadores
Soluciona la inconsistencia temporal del banco de registros ante excepciones a costa de introducir una inconsistencia potencial dentro del mismo banco entre el tag y el valor
Soluciona la inconsistencia temporal del banco de registros ante excepciones a costa de introducir una inconsistencia potencial dentro del mismo banco entre el tag y el valor
6,01 4 3,51 2 13,8
0
2
4
Busy Tag Data
1 5 7,88Register Bank
Estado del bancode registros con
consistenciasecuencial
13,8 es el resultado de la instrucción de tag 1 (S1)pero en el registro 4 el campo Tag tiene un 2 (S3)13,8 es el resultado de la instrucción de tag 1 (S1)pero en el registro 4 el campo Tag tiene un 2 (S3)
111
Núcleo dinámico de ejecución
dispatch buffer
Dispatch
branch integer integer FPU FPU Load/storeLoad/store
reservation stations
completion buffer (ROB)
Architected RF Rename RF
Register writeback
Complete
Common Data Bus (CDB)
ROB entries
Segmento de ejecución “fuera de orden” de un procesador superescalar
112
Busy Operand 1 Valid Operand 2 Valid Ready
Busy Operand 1 Valid Operand 2 Valid Ready
Estaciones de reserva
Dispatchslots
Tag logic
Busy Operand 1 Valid Operand 2 Valid Ready
Busy Operand 1 Valid Operand 2 Valid Ready
Forwardingbuses
Dispatchslots
Forwardingbuses
Tag 1
matchTag logic
Tag 2
match
Tag buses Tag buses
Allocateunit
Issuingunit
Issuing
Dispatching
Entryto be
allocated
Entryto beissued
113
B 0 0 0 0 0
Buffer de reordenamiento (ROB)
1 1 1 1 1 1 1 1 1
I
F
IA
RR
S
V
Next entry tobe allocated
Next instructionto complete
Circular queue buffer
• Busy (B): La entrada correspondiente del ROB está siendo usada
• Issued (I): La instrucción está en ejecución en alguna unidad funcional
• Finished (F): La instrucción terminó la ejecución y espera a ser completada
Issued = Finished = 0: la instrucción está en espera en alguna estación de reserva
• Instruction address (IA): Dirección de la instrucción en el I-buffer
• Rename register (RR): Registro de renombre (si se usa RRF-ROB)
• Speculative (S): Indicador de ejecución especulativa de la instrucción (Puede contener además bits indicando el nivel de salto especulativo )
• Valid (V): En caso de instrucción especulativa cuya rama resulte incorrecta la instrucción se marca como NO válida
114
Estrategias de acceso a operandosEl administrador de instrucciones (dinamic instruction scheduler) maneja
el flujo de operandos hacia las instrucciones en espera, el flujo de resultados desde las unidades funcionales y la activación (wake-up) de
instrucciones en las estaciones de reserva
Según la política de acceso a los operandos hay 2 alternativas de implementación
Acceso a operandos durante el despacho a las estaciones de reserva(Data captured Scheduling)
• Primeros procesadores superescalares• Los operandos disponibles en el despacho se almacenan en la estación de reserva• Si el operando no esta disponible, se almacena un Tag
Acceso a los operandos durante la emisión a las unidades funcionales(Non data captured Scheduling)
• Política más moderna, adoptada por algunos procesadores actuales• Todos los operandos son accedidos durante la emisión a las unidades de ejecución
Acceso a operandos durante el despacho a las estaciones de reserva(Data captured Scheduling)
• Primeros procesadores superescalares• Los operandos disponibles en el despacho se almacenan en la estación de reserva• Si el operando no esta disponible, se almacena un Tag
Acceso a los operandos durante la emisión a las unidades funcionales(Non data captured Scheduling)
• Política más moderna, adoptada por algunos procesadores actuales• Todos los operandos son accedidos durante la emisión a las unidades de ejecución
115
Data captured Scheduling
Dispatch
Data capturedScheduling
Reservation Station
RegisterFile
Functional units
Operand coping
Reg
iste
r updat
ing
Forwardingand wake-up
• Durante el despacho a las estaciones de reserva se accedeal banco de registros para recuperar operandosSi el operando no está disponible se utiliza un Tag
• Las instrucciones permanecen en la estación de reservahasta tener todos sus operandos
• Al finalizar la ejecución de una instrucción el resultado seusa para actualizar el banco de registros y ademásse envía un token (<Tag, Data>) a las estaciones dereserva para actualizar los campos de Tag faltantes
• La Issuing Unit analiza todas las instrucciones y despiertaaquellas que tienen todos sus operandos
116
Non data captured scheduling
Dispatch
Non data capturedScheduling
Reservation Station
RegisterFile
Functional units
Wak
e-up
Forwarding
• Durante el despacho a las estaciones de reserva NO se accedeal banco de registros para recuperar operandosPara todos los operandos se utilizan Tags
• Al finalizar la ejecución de una instrucción el resultado seusa para actualizar el banco de registros (fordwarding)y además se envía el Tag a las estaciones dereserva para actualizar la disponibilidad de operandos
• La Issuing Unit analiza todas las instrucciones y despiertaaquellas que tienen todos sus Tags actualizados
• La instrucción activa accede al banco de registros durantela emisión a una unidad funcional para recuperar losoperandos (que ya están disponibles)
Ventaja:
• El dato se actualiza en un solo lugar• Los buses hacia las estaciones de reserva
son mas chicos (sólo el Tag)
Ventaja:
• El dato se actualiza en un solo lugar• Los buses hacia las estaciones de reserva
son mas chicos (sólo el Tag)
117
Manejo del flujo de memoria
118
La ejecución de las instrucciones de acceso a memoria involucra tresetapas:
• Generación de dirección: La dirección completa de memoriano está en la instrucción. Usualmente hay que calcularla a partirde otros valores (inmediato + registro, etc)
• Traslación de dirección: Usualmente la dirección se expresaen un entorno de memoria virtual. La traslación realiza un mapeoentre memoria virtual y memoria física. Usualmente se usa unaTLB (traslation Lookaside Buffer)
• Acceso a memoria: Acceso a una palabra de la memoria
• LOADs: Se lee una palabra de memoria y se almacenaen un registro
• STOREs: Una palabra contenida en registro se escribe enla dirección calculada de memoria
Etapas del acceso a memoria
119
Etapas del acceso a memoria
dispatch buffer
Dispatch
branch integer integer FPU Load/
Store
reservation stations
ROB
Architected RF Rename RF
Register writeback
Complete
Store buffer
Address Generation
Address Traslation
Memory Access
Data
Memory
Retire
120
Ciclos de acceso para lectura
Load/
Store
ROB
Complete
Store buffer
Address Generation
Address Traslation
Memory Access
Data
Memory
Retire
• 1º ciclo: Address Generation
• 2º ciclo: Address traslation
• 3º ciclo: Memory access- Acceso a una cache de datos- Si el acceso es un hit, la
lectura se realiza en un ciclode reloj
- Si el acceso es un miss,se produce un fallo dememoria y se frena el pipe de memoria
Una instrucción Load se consideraterminada (finished) cuando
finaliza el 3º ciclo, aún cuandono haya sido completada
121
Ciclos de acceso para escritura
Load/
Store
ROB
Complete
Store buffer
Address Generation
Address Traslation
Data
Memory
Retire
• 1º y 2º ciclos iguales al Load
• 3º ciclo: - El registro origen se almacena en
el ROB junto con la instrucción Store- Cuando la instrucción se completa
se realiza la escritura real en la memoria- Lo anterior previene de escrituras
anticipadas si ocurre una excepción oun salto mal predicho
- En caso de que no deba ejecutarsese borra del ROB sin efectoscolaterales
Una instrucción Store se consideraterminada (finished) cuando
finaliza el 2º ciclo, luego de quese realice una traslación exitosa
fromDispatch
122
Mantenimiento de la consistencia
de memoriaLecturas fuera de orden no perjudican la consistencia de memoria
Escrituras fuera de orden producen dependencias WAW y WAR al acceder a las mismas posiciones de memoria
A fin de mantener la consistencia de memoria se debe secuencializar los Store. Al menos no necesariamente su ejecución pero si su finalización
La serialización de escrituras asegura:
• Recuperación segura de excepciones y otras rupturas de secuencia• Consistencia en modelos multiprocesador
123
Mantenimiento de la consistencia
de memoria¿Cómo asegurar la serialización de los Store sin comprometer la
extracción de paralelismo?
Buffer de escritura (Store Buffer):
• Almacena secuencialmente (orden de programa) los requerimientosde escritura a memoria
• La unidad de retiro lee operaciones de escritura a memoria y las lleva adelante cuando el bus de memoria está libre
• La prioridad en el uso del bus es siempre para las lecturas
• Una instrucción Store puede haber terminado su ejecución y puedeestar completada, pero aún su escritura a memoria puede no habersido realizada si está en el Store buffer
• Si ocurre una excepción los requerimientos de escritura en el Storebuffer no son eliminados pues corresponden a Stores ya completos
124
Otras técnicas avanzadas de manejo
de memoriaLa ejecución fuera de orden de las instrucciones Load es la principalfuente de aumento de rendimiento
Las instrucciones Load son, frecuentemente, el inicio de las cadenas dedependencias
La ejecución prematura de las instrucciones Load permitirá el adelantode ejecución de todas las demás instrucciones del programa
Meta principal: Adelantar la ejecución de las instrucciones Load
sin violar dependencias de datos
125
Otras técnicas avanzadas de manejo
de memoria
SW r10, 100(r0)
SW r11, 200(r0)
LW r12, 300(r0)
…..
…..
…..Load Bypassing
Permite la ejecución de un Load antes los Storeque la preceden siempre y cuando no haya dependencias entre las direcciones de memoriadel Load con las de los Store que adelanta
SW r10, 100(r0)
SW r11, 200(r0)
LW r12, 100(r0)
…..
…..
…..Load Forwarding
Si un Load tiene la misma dirección de memoriaque un Store previo (dependencia RAW), el loadpuede cargarse con el valor que almacenará elstore
126
Etapa Load/Store estándar
Load
Reservation Station
unit
Store
unit
Data
Cache
Address Traslation
Memory Access
Address Generation
Data Address
Address Traslation
Address Generation
FinishedStore Buffer
CompletedStore Buffer
Memory Update
Store buffer de 2 partes:• Finished: Stores que terminaron su ejecución pero que aún no están arquitecturalmente
completas• Completed: Stores completos arquitecturalmente esperando actualizar la memoria
Un Store en la parte finished del buffer puede ser especulativo y ser eliminado en caso de malapredicción
Un Store en la parte Completed del buffer no es eliminable y se completa siempre
127
Load Bypassing
Load
Reservation Station
unit
Store
unit
Data
Cache
Address Traslation
Memory Access
Address Generation
Data Address
Address Traslation
Address Generation
DataFinished
Store Buffer
CompletedStore Buffer
Memory Update
Address
Tag Match
Match/no match
If no match,update
destinationregister
Se compara la dirección del Load con las direcciones del Store buffer.Si no hay coincidencias, el Load no entra en conflicto con ningún Store y puede ser adelantadoSi hay conflicto, el Load es frenado y devuelto a la estación de reserva
Desventaja: La parte de dirección del Store Buffer debe implementarse como una memoriaasociativa para una búsqueda rápida de coincidencias
128
Load Forwarding
Load
Reservation Station
unit
Store
unit
Data
Cache
Address Traslation
Memory Access
Address Generation
Data Address
Address Traslation
Address Generation
DataFinished
Store Buffer
CompletedStore Buffer
Memory Update
Address
Tag Match
Match/no match
If match,forward to destination
register
Match
Se compara la dirección del Load con las direcciones del Store buffer.Si hay coincidencia con alguna dirección, se copia el dato del Store en el registro de renombre del Load
Desventaja: De haber varias coincidencias se debe usar la del Store mas reciente (el últimoque actualizará la posición de memoria que leerá el Load)