Documentos de Académico
Documentos de Profesional
Documentos de Cultura
©Julio Sahuquillo
Contenido
1. Introducción
2. Ventana de instrucciones distribuida
3. Ventana de instrucciones centralizada
4. Complejidad etapa de issue
5. Ejecución de instrucciones de acceso a memoria
6. Desambiguación
7. Ejecución en orden
8. Load forwarding y load bypassing
9. Desambiguación parcial
10. Caso de estudio
• Bibliografía
– Jean-Loup Baer
Microprocessor Microarchitecture, Cambridge 2010
– J.P. Shen, and M.H. Lipasti,
Modern Processor Design: Fundamentals of Superscalar Processors,
McGraw Hill 2005
– J. Smith, and G. Sohi
The Microarchitecture of Superscalar Processors
Proceedings of the IEEE, December, 1995
– Alpha 21264 Microprocessor Hardware Reference Manual
– R10000 Microprocessor User Manual
• Estaciones de reserva
– Tras decodificar una instrucción se prepara una ER para su ejecución,
donde están hasta que no haya dependencias y
el operador requerido se encuentre libre.
• Ventana de instrucciones
– Conjunto de instrucciones ya decodificadas entre las que deben
resolverse las dependencias
• Sistema base:
– ROB de 16 entradas
– ALU enteros 4 entradas
– Unidad de saltos 4 entradas
– Unidad de almacenamiento 8 entradas
– Unidad de carga 8 entradas
– Sumador de c.f. 2 entradas
– Multiplicador de c.f. 4 entradas
– Sumador de c.f. 2 entradas
– Sumador de c.f. 2 entradas
Cache de
Instrucciones
Decoder
Código Vj Qj Vk Qk
Los campos variarán
según implementación
Bus de
operandos
Loads Stores
Cache de
Datos
Bus común
Implementación
• Ventajas:
– Gestiona peticiones para todos los operadores y necesita menos ER
que una distribuida
• Inconvenientes:
– Concentra toda la lógica de lanzamiento ! lógica más compleja
• Debe seleccionar entre más instrucciones
• Debe seleccionar más instrucciones: una para cada operador
• Puede liberar más de una entrada por ciclo
! lógica de asignación y liberación de entradas más compleja
• Una entrada puede ubicar instrucciones de cualquier tipo
• Implementaciones
– La pila de dispatch de Torng
– El RUU de Sohi and Vajapeyan
– Cola de instrucciones + ROB
Ejemplo
Decodificador Decodificador
i11 --
i10 --
i9 --
i8 --
Decodificador Decodificador
i11 --
i10 --
i9 --
i8 --
= =
Bus de etiquetas
Destino
Registro Busy Op Ready Tag Ready Tag Ready
= =
Bus de etiquetas
Dispatching
Lógica de Lógica de issue
asignación
Busy Ready
Issuing
! ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 !
L.D F6,32(R2) IF! ID D I L1 L2 WB C!
L.D F2,48(R2) IF!ID D i I L1 L2 WB C!
MULT.D F0,F2,F6 !
IF ID D i i i I M1 M2 M3 WB C!
ADD.D F8,F6,F10!
F8,F6,F10 IF ID D I A1 A2 WB - - - - C !
ADD.D F4,F10,F10!
F4,F10,F10 IF ID D I A1 A2 WB - - - - C !
!
©Julio Sahuquillo -21-
Contenido
1. Introducción
2. Ventana de instrucciones distribuida
3. Ventana de instrucciones centralizada
4. Complejidad etapa de issue
5. Ejecución de instrucciones de acceso a memoria
6. Desambiguación
7. Ejecución en orden
8. Load forwarding y load bypassing
9. Desambiguación parcial
10. Caso de estudio
Cache de
Instrucciones
Decoder
Cola de Instrucciones
Bus de
operandos
Loads Stores
Cache de
Datos
Bus común
©Julio Sahuquillo 23
Repaso ejecución
• Características procesador
– Etapas: IF, ID, Rn, I, En ejecución, WB, C
– Unidad de carga/alm. Latencia=2 IR=1/2
– Suma/resta. Latencia=2 IR=1
– Mult/div. Latencia=3 IR=1
• Se pide
– Realiza el diagrama de instrucción/tiempo del siguiente código asumiendo que en
I se pone la dirección de la instrucción de acceso a memoria en los buffers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
L.D F6,32(R2) IF ID Rn I L1 L2 WB C
L.D F2,48(R2) IF ID Rn - I L1 L2 WB C
MULT.D F0,F2,F6 IF ID Rn - - - I M1 M2 M3 WB C
S.D F6,60(R4) IF ID Rn - - - - - - - - C L1 L2
ADD.D F8,F6,F10 IF ID Rn I A1 A2 WB - - - - C
ADD.D F4,F10,F10 IF ID Rn I A1 A2 WB - - - - C
©Julio Sahuquillo 24
Cadenas de dependencia
©Julio Sahuquillo 25
©Julio Sahuquillo 26
Ejecución instrucción: etapas
• Dispatch
– Se prepara una entrada en el ROB y otra en la LSQ
• Issue, ejecución y WB
– Instrucción encargada del cálculo de la dirección:
• Se lanza, ejecuta y hace WB como las instrucciones aritméticas
• Se lanza cuando tiene los operandos y el operador preparados
– Loads
• Se puede lanzar cuando la dirección está lista
SI NO hay dependencias con stores previas
• Commit
– Stores: acceso a la cache tras el commit (no tienen etapa de issue)
• Recover: se activa si hay fallo de especulación
– Recover on commit
• Se liberan todas las entradas del ROB y de la LSQ,
excepto stores confirmadas (stores pendientes)
– Recover en writeback
Se liberan las correspondientes entradas del ROB y sus asociadas en la LSQ
©Julio Sahuquillo 27
6. Desambiguación: el problema
• Características procesador
– Etapas: IF, ID, Rn, I, En ejecución, WB, C
– Unidad de carga. Latencia=2 IR=1
– Suma/resta. Latencia=2 IR=1
– Mult/div. Latencia=3 IR=1
• Diagrama de instrucción/tiempo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
L.D F6,32(R2) IF ID Rn I L1 L2 WB C
S.D F6,60(R4) IF ID Rn - - - - C L1 L2
L.D F2,48(R2) IF ID Rn ¿Memoria libre, ¿puedo acceder?
MULT.D F0,F2,F6 IF ID Rn …
©Julio Sahuquillo 28
Desambiguación: el problema
• El orden de las loads/stores en el acceso a memoria se puede alterar
si se respetan las dependencias
• Tipos de dependencias:
sw X
RAW
lw X WAW
WAR
sw X
©Julio Sahuquillo 29
Desambiguación: el problema
• Esquemas de desambiguación
– Orden total de loads y stores
– Orden de loads / Orden de stores
– Orden Parcial
– Desambigüación especulativa
©Julio Sahuquillo 30
7. Ejecución en orden de loads/stores
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
L.D F6,32(R2) IF ID Rn I L1 L2 WB C
S.D F6,60(R4) IF ID Rn - - - - C L1 L2
L.D F2,48(R2) IF ID Rn - - - - I L1 L2 WB C
MULT.D F0,F2,F6 IF ID Rn - - - - - - I M1
©Julio Sahuquillo 31
©Julio Sahuquillo 32
Adelantamiento de loads
©Julio Sahuquillo 33
• Load bypassing
– La load adelanta a la store en el acceso a la cache si
dirección load ≠ dirección stores previas
(no hay dependencias RAW )
Store X
Store y
…
Load Z
©Julio Sahuquillo 34
8. Load bypassing y load forwarding
• Load forwarding
– Si dirección load = dirección alguna store previa
(dependencia RAW)
! la store anticipa el dato a la load desde la cola
! la load no realiza el acceso a cache/memoria
Store X
Store y
Load X
©Julio Sahuquillo
Committed
Completadas Retiradas
©Julio Sahuquillo 36
Load bypassing y load forwarding
• Esquema base
SQ
Completadas Retiradas
dato Dato
Unidad
de stores
@ Al
Dato registro
Dirección
Unidad
de loads D cache
©Julio Sahuquillo 37
SQ Acierto o no (relanzamiento)
Completadas Retiradas
Dato
Unidad
de stores
@ Dato
Al
registro
Comparación Direción
Unidad
de loads D cache
©Julio Sahuquillo 38
Load bypassing con SQ (cont)
• Problema de load bypassing: complejidad búsqueda asociativa
– Lentitud: su latencia debe ser menor que el acceso a la cache
• Soluciones:
– Solución 1: Reducir el tiempo con comparadores con un subconjunto de bits
• Problema: pueden detectarse falsos alias ! la load espera a leer en la cache
por una store de la cuál no depende ! pérdida de prestaciones
– Solución 2: Utilizar todos los bits en la comparación, pero acceder en paralelo al
buffer y a la cache
Acierto
-relanzamiento
-espera escritura en Mem
SQ Fallo
Completadas Retiradas -el dato leído de la cache
es correcto
Dato
Unidad
Al
de stores
@ registro
Dato
Comparación Direción
Unidad
de loads D cache
©Julio Sahuquillo 39
Comparación Direción
Unidad
de loads D cache
©Julio Sahuquillo 40
Load forwarding: complejidad y prestaciones
• Load forwarding:
– Lógica compleja
• Múltiples alias ! se requiere lógica prioritaria para seleccionar del dato de la
store más joven
– Prestaciones
• Load bypassing: mejora de 11 a 19%
• Load forwarding: añade 1 a 4%
©Julio Sahuquillo 41
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
L.D F6,32(R2) IF ID Rn I L1 L2 WB C
S.D F6,60(R4) IF ID Rn - - - - C L1 L2
L.D F2,48(R2) IF ID Rn - - - - - I L1 L2 WB C
MULT.D F0,F2,F6 IF ID Rn - - - - - - - I M1 …..
L.D F2,52(R2) IF ID Rn - - - - - I L1 L2
©Julio Sahuquillo 42
Caso de estudio: AMD K6
Orden de loads/Orden de stores
– Esquemático AMD K6
©Julio Sahuquillo 43
Esquemático AMD K6
– Load queue y store queue:
• Almacenan las instrucciones (loads/stores) en orden.
• Se reserva entrada tras el renombrado y permanecen hasta que son
las más viejas y tienen los operando listos.
– Store buffer
• Almacena la dirección y dato de las stores en orden hasta que son las
más viejas del procesador y pueden actualizar la memoria.
• Las stores no esperan por el dato para hacer issue. El dato se lee en
la etapa de cálculo de la dirección, sino está se bloquea el pipeline de
las stores.
– Etapa de desambiguación
• Loads: comparan su dirección con
– la de las stores más viejas que ella en el store buffer.
– con la de la store que está calculando su dirección. Es una
comparación parcial porque no le da tiempo a calcularla toda.
– Comprueba el planificador para asegurarse que no queda ninguna
store más vieja sin haber calculado su dirección.
– El AMD K8 mejora esta implementación permitiendo que las loads
se adelanten entre ellas
©Julio Sahuquillo 44
9. Desambiguación especulativa
• Desambiguación total (PESIMISTA)
– No hay especulación
– Cuando se accede a la SQ, las direcciones de las stores son todas
conocidas, sino la load no debe lanzarse (asumida hasta ahora)
• Penalización de prestaciones
– Ej. PowerPC 604
• Desambiguación especulativa (OPTIMISTA)
– Las loads acceden a memoria aunque haya stores con dirección
desconocida ! ejecución especulativa
– Ej. Alpha 21264, Power 4, Itanium SQ
sw sw sw Operación
lw reg, M(100)
@
200 ? 300
4 dato
4 2
©Julio Sahuquillo 45
Desambiguación especulativa
– Ejecución de la load
• Busqueda asociativa en la SQ y acceso a la cache tan pronto como
haya un puerto libre
• Si hay direcciones no resueltas ! las loads se guardan en un buffer
especial (finished load buffer) y se ejecutan especulativamente
• Cuando una store llega a etapa commit
– Búsqueda asociativa en el finished load buffer
– Si acierto = fallo de especulación. Alguna load más joven que accede a la
misma dirección se ha ejecutado de manera especulativa
• Debe cancelarse la ejecución de la load y las instrucciones
posteriores
Completadas Retiradas
Dato
Unidad Dato
1
Al
registro
de stores @ D cache
Dirección Dato
0
Unidad
de loads @
Acierto:
vaciar el ROB a partir de la load
dato
Loads
©Julio Sahuquillo 46
Desambiguación especulativa
©Julio Sahuquillo 48
Esquemático Alpha 21264
– Load/store queue
• Las instrucciones esperan hasta que sus operandos fuente están
listos.
• Las stores esperan tanto al registro para el cálculo de la dirección
como al dato.
– Load queue y Store queue
• Almacena las direcciones físicas de loads / direcciones físicas y datos
stores en orden, aunque en la cola entran o-o-o
• Se reserva entrada tras el renombrado (en orden)
• Las loads permanecen hasta que se retiran.
• Las stores debe esperarse a la escritura en la cache.
• Se implementa con una CAM de 32 entradas.
– Wait queue
• 1024 entradas de 1 bit indexadas por PC
• Cuando una load adelanta a una store más joven
! se genera una store-load trap
! se pone un 1 en la entrada de la tabla asociada al PC de la load
• En posteriores ejecuciones de la load, si su entrada está a 1
! no se vuelve a lanzar especulativamente.
©Julio Sahuquillo 49
– LECTURAS
– A. Moshovos, “A memory dependence prediction,” Phd Thesis, U. Wisconsin, 1998
– G,Chrysos and J. Emer, “Memory dependence prediction using store sets,” Proc. of the ISCA 1998
©Julio Sahuquillo 51
Predicción de dependencias
©Julio Sahuquillo 52
Predicción de dependencias
©Julio Sahuquillo 53
Predicción de dependencias
Dato SDQ
Dispatch
@
Nº Registro
especulativa
LRQ (32 entradas)
©Julio Sahuquillo 55
Dato SDQ
Dispatch
@
Nº Registro
especulativa
LRQ (32 entradas)
©Julio Sahuquillo 56
Caso de estudio 3: Power 4 (cont.)
• Ejecución de loads (cont.)
– Bit snoop: la LRQ incluye el bit snoop que la lógica del controlador pone a 1
cuando se produce un snoop (acción de coherencia) a la línea que contiene
el dato para dicha entrada.
– Cuando la load se ejecuta, compara su dirección con las direcciones de la
LRQ. Si hay acierto con una load más joven (load hit load) que tiene el bit
snoop = 1 ! problema de consistencia secuencial y la load más joven debe
relanzarse.
SRQ (32 entradas)
@
Dato SDQ
Dispatch
@
Nº Registro
especulativa
LRQ (32 entradas)
©Julio Sahuquillo 57
Dato
Dispatch
@
Nº Registro
especulativa
LRQ (32 entradas)
©Julio Sahuquillo 58
Problema
• Un procesador aplica la técnica de store forwarding con las siguientes características
para las instrucciones de acceso a memoria:
– Etapas: Load: IF, ID, I, AC, L1, L2, WB, C Store: IF, ID, I. AC, C, L1, L2
– Issue load/stores: lanzamiento desde IQ y lectura registro de dirección base
– AC: cálcula la dirección y la pone en la LQ o SQ sin hacer uso del bus común
desde donde se lanzará a memoria
– L1 L2: acceso a memoria en 2 ciclos, segmentado
• En el primer ciclo (L1) las loads acceden a la cache y a la SQ en paralelo, para buscar
dependencias con stores previas
• Si hay dependencia, L1 se repite hasta que esté el dato, aunque ya no se busca en la
cache, solo en la SQ
• Cuando las stores tienen el dato y la dirección ponen el bit completed a 1 en la SQ,
y es accesible por las lodas en el siguiente ciclo
• Si se encuentra el dato en la SQ cuando se está accediendo en paralelo a la cache, la
load lee el dato y realiza WB al siguiente ciclo.
• Para iniciar el acceso a la cache debe encontrarse libre tanto la cache como la SQ
– WB: las loads escribe en el bus común
• Operador de multiplicación: latencia 3 ciclos, M1, M2, M3.
• Operadores enteros: latencia un ciclo, EX
• Hay una IQ compartida para enteros y reales (solo una puede hacer issue)
©Julio Sahuquillo
Problema
• Realizar el diagrama de instrucciones/ciclos para el siguiente
fragmento de código hasta la segunda load de la segunda iteración
del bucle
• Indica en que ciclo se escribe/lee el dato en/desde la SQ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18!
L:! IF ID
L.D F2,8(R2)! I AC L1 L2 WB C!
L.D F3,0(R2)! IF ID I AC L1 L2 WB C!
MUL.D F4,F3,F2! IF ID - - - I M1 M2 M3 WB C!
S.D F4,0(R2)! IF ID I AC - - - - cp - C L1 L2!
DSUB R2,R2,#8! IF ID I EX WB C!
BNEZ R2,L! IF ID - I EX WB C!
L.D F2,8(R2)! IF ID - I AC L1 SQ WB C !
L.D F3,0(R2)! IF ID - I AC - L1 L2 WB C!
!
!
!
!
©Julio Sahuquillo
Problema
• Realiza de nuevo el diagrama asumiendo que el procesador es
superescalar de 2 vías con las siguientes características
– Si la load detecta una dependencia con una store en la SQ la load se
relanza 3 ciclos después
– La cache tiene 1 puerto de R/W
– Puertos de issue: se pueden lanzar 2 de reales y 2 de enteros en el
mismo ciclo, o 2 loads y una de enteros.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15!
L:!
L.D F2,8(R2)! IF ID I AC L1 L2 WB C!
L.D F3,0(R2)! IF ID I AC -- L1 L2 WB C!
MUL.D F4,F3,F2! IF ID - - - - I M1 M2 M3 WB C!
S.D F4,0(R2)! IF ID I AC - - - - - - cp C L1 L2!
DSUB R2,R2,#8! IF ID I EX WB C!
BNEZ R2,L! IF ID - - I EX WB C!
L.D F2,8(R2)! IF ID - I AC L1 - - L1 SQ WB C !
L.D F3,0(R2)! IF ID - I AC - L1 L2 WB C!
!
!
©Julio Sahuquillo
!
!
Lectura
Productor Wake-Up Select Registros Execution WriteBack akeu
p
l de w
Seña
Lectura
Wake-Up Select Registros Execution
Consumidor
3 ciclos de burbuja
©Julio Sahuquillo 62
Implementación eficiente del wakeup
• Solución 2. Objetivo: que el dato se pueda consumir en el ciclo
posterior al que se produce.
– Generar la señal antes de que el valor se produzca para minimizar la
distancia entre el productor y el consumido.
• La señal se puede generar antes porque una instrucción no necesita el
dato hasta que llega a su etapa de ejecución.
• Ejemplo:
– Asumiendo latencia del operador de 1 ciclo, la señal se puede enviar en la
etapa que se selecciona el productor porque se sabe la latencia de lectura
(1 ciclo) y la del operador.
– En este caso nos hace falta un cortocircuito desde la salida del operador
del productor al operador del consumidor.
Lectura
Productor Wake-Up Select Registros Execution WriteBack
Señal de wakeup Data Bypass
Lectura
Wake-Up Select Registros Execution
Consumidor
©Julio Sahuquillo 63
2 ciclos de burbuja
©Julio Sahuquillo 64
Wakeup especulativo de loads
• Wakeup especulativo:
– Objetivo: que el consumidor pueda usar el dato (bypass) justo después de
la lectura en la cache.
– Ejemplo procesador supersegmentado
• La señal wakeup se debe enviar en la etapa del cálculo de la dirección, antes
de saber si hay acierto o no en la cache ! wakeup especulativo,
ya que si hay fallo de cache, la ejecución será incorrecta y deberá recuperarse
el estado del procesador.
©Julio Sahuquillo 65
©Julio Sahuquillo 66
FIN
©Julio Sahuquillo 67
Desambiguación: el problema
• Esquemas de desambiguación
– Orden total de loads y stores
• Todas las instrucciones de acceso a memoria se ejecutan en orden
– Orden de loads / Orden de stores
• Ejecución o-o-o entre loads y stores pero
las loads y las stores se ejecutan en orden entre ellas
• Ej. AMD K6
– Orden Parcial
• Las loads se ejecutan o-o-o entre ellas
si las direcciones de todas las stores previas son conocidas
• Las stores se ejecutan en orden
• Ej. R10000, AMD K8
– Desambiguación especulativa
• Las loads se ejecutan completamente o-o-o aunque la dirección de las stores
previas no sea conocida
• Las stores se ejecutan en orden
• Ej. Intel core y Alpha 21264
©Julio Sahuquillo 68
Implementación con 1 única cola
• Load bypassing
LSQ
sw sw sw Operación
lw reg, M(100)
@
200 250 300
dato
4 4 2
• Load forwarding
LSQ
sw sw sw Operación
lw reg, M(100)
200 @
100 300
dato
4 4 2
©Julio Sahuquillo 69
ROB
lw A add sub sw B …
dispatch
Address Queue
lw A sw B …
©Julio Sahuquillo 70
Caso de estudio: MIPS R10000
©Julio Sahuquillo 71
• Loads:
– Si Dcache accesible se accede al
mismo tiempo que la TLB cuando
se lanza
©Julio Sahuquillo 72
Caso de estudio: MIPS R10000
• Ejecución loads
– Ejecución en cualquier orden si no hay dependencias con stores previas
pendientes
• Ejecución stores
– Stores: orden estricto
• La memoria se actualiza en orden - 1store/ciclo
• Mantiene valores de memoria precisos ante cualquier excepción
ROB
… lw A add sub sw B
… … sw B
head
©Julio Sahuquillo 73