Está en la página 1de 123

Paralelismo en

monoprocesadores
Procesadores Superescalares

Profesor: Mag. Marcelo Tosini


Ctedra: Arquitectura de Computadoras y tcnicas Digitales
Carrera: Ingeniera de Sistemas
Ciclo: 4 ao
1

Procesadores Superescalares
Descripcin estructural: Arquitectura y componentes de las
distintas etapas de un procesador superescalar

Descripcin funcional: Funcionamiento de un procesador


superescalar y descripcin de las estructuras que permiten
la normal ejecucin del flujo de instrucciones de un programa

t
Es
c
ru
ra
tu
l

Introduccin

La tcnica de segmentacin de circuitos aplicada a la microarquitectura


de un procesador es efectiva pero presenta algunas limitaciones que
degradan el rendimiento.
Una solucin superescalar permite obtener rendimientos mucho
mayores que la solucin puramente escalar a costa de un compromiso
de diseo mas grande
Los pipelines superescalares traspasan los limites de la emisin simple
de instrucciones de un pipeline escalar con rutas de datos mas
elaboradas que trabajan con varias instrucciones a la vez
Para lograr lo anterior incorporan mltiples unidades funcionales que
aumentan la concurrencia de ejecucin de instrucciones
Adems, los pipelines superescalares permiten la ejecucin de
instrucciones en un orden distinto al impuesto por el programa original
3

t
Es
c
ru
ra
tu
l

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 excepcin de las instrucciones frenadas por cuestiones de conflictos
todas las instrucciones permanecen en cada etapa por un ciclo de reloj
Estos pipelines rgidos tienen 3 limitaciones destacadas:
1.

El mximo rendimiento esta limitado a una instruccin por ciclo

2.

La unificacin de todos los tipos en un solo pipeline genera


un diseo ineficiente

3.

El frenado de un pipeline rgido induce burbujas innecesarias con


la consiguiente perdida de ciclos de reloj
4

t
Es
c
ru
ra
tu

rendimiento de los pipelines escalares

(limitacin 1)
El rendimiento de un pipeline escalar
Re n dim iento =

1
inst
1
IPC * frecuencia
*
*
=
recuento _ inst ciclo tiempo _ ciclo
recuento _ inst

puede incrementarse aumentando el nmero de instrucciones por ciclo o la


frecuencia o decrementando el nmero de instrucciones ejecutadas

consideraciones:
La frecuencia puede aumentarse incrementando la profundidad del
pipeline reduciendo, en consecuencia el tiempo de ciclo
Un aumento en la profundidad tiene la desventaja adicional de
perdida excesiva de ciclos ante dependencias
Un pipeline escalar solo puede iniciar la ejecucin de (como mximo)
una sola instruccin por ciclo de reloj: IPC=1
5

t
Es
c
ru
ra
tu
l

Pipelines paralelos
Lograr un IPC > 1 requiere que el procesador sea capaz de iniciar el
proceso de ms de una instruccin en cada ciclo

Esto requiere incrementar el ancho del pipeline de modo que sea capaz
de tener mas de una instruccin en cada etapa a cada instante

sin paralelismo

paralelismo espacial
(multiprocesadores)

paralelismo temporal
(pipeline escalar)

pipeline paralelo
6

t
Es
c
ru
ra
tu

Pipelines diversificados (especializados)

(limitacin 2)

IF

ID

1 ciclo

1 ciclo

EX

Mem

WB

> ciclo >> ciclo 1 ciclo

El concepto de pipeline paralelo remite a la


simple replicacin espacial del hardware
de un pipeline escalar
Un pipeline escalar clsico se compone de
etapas con funcionalidad y tiempos de
clculo diferentes

Una mejora al diseo es la separacin


de las operaciones diferentes en
distintas unidades funcionales
especializadas, de modo que entonces
cada unidad funcional es ahora mas
simple y mas rpida

IF
ID
Fx
.
.

IF
ID
Fp
.
.

IF
ID
Mem
.
.

pipeline diversificado

t
Es
c
ru
ra
tu

Pipelines estticos y dinmicos

(limitacin 3)
Un pipeline escalar es rgido 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 esttico una instruccin frenada en una etapa i frena la ejecucin de todas las instrucciones
en etapas previas (1, 2,, i-1)
Una solucin es permitir que las instrucciones frenadas que no tengan ningn tipo de dependencia puedan
adelantarse a la instruccin frenada. Este tipo de pipeline se denomina pipeline dinmico y pueden
realizar ejecucin fuera de orden

frenada

pipeline esttico

X
X
X

cadena de
instrucciones
frenadas

adelantamiento
de instrucciones
independientes

frenada

pipeline dinmico
8

t
Es
c
ru
ra
tu
l

Paso de un pipeline escalar a


superescalar

Los 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 ejecucin de varias
instrucciones en cada ciclo de reloj
son pipelines diversificados:
ya que emplean mltiples unidades
funcionales heterogneas
son pipelines dinmicos:
poseen la capacidad de reordenar la
secuencia de instrucciones impuesta
por el compilador a fin de aumentar
la eficiencia
9

t
Es
c
ru
ra
tu
l

pipelines superescalares
un pipeline escalar de k etapas puede procesar hasta k instrucciones
simultneamente
Su rendimiento se compara con procesadores sin paralelismo y se
espera que la mejor aceleracin obtenible sea del orden de k

un pipeline superescalar usualmente se compara con la versin escalar


y es determinado por el ancho del mismo o grado de paralelismo
espacial
Un pipeline de ancho s puede procesar hasta s instrucciones
simultneas en cada una de sus etapas, alcanzando, en el mejor caso,
una aceleracin de s

IF

ID

EX

MEM

WB

Pipeline paralelo de ancho s = 3


10

t
Es
c
ru
ra
tu
l

pipelines diversificados
Los recursos de hardware necesarios para la ejecucin de diferentes
operaciones pueden variar significativamente
Tipos de operaciones: Punto fijo, Punto flotante, acceso a memoria

Pipelines diversificados: implemetacin de las diferentes operaciones en


distintas unidades funcionales
Ventajas:

IF

cada pipe puede ser especializado en


un tipo particular de operacin

ID

cada sub-pipe de ejecucin puede


tener el nmero justo de etapas

EX

RD
ALU

MEM1

FP1

MEM2

FP2

BR

FP3

instrucciones de un sub-pipe no se
frenan por dependencias en otros
pipes

WB

11

t
Es
c
ru

fadd
Int unit
mul
mul
divide
shift
boolean

Bit unit
Mul 1/3

Mul 2/3

Mul 3/3

fadd 1/3

fadd 2/3

fadd 3/3

Divider unit

Writeback buses

Int unit

Source buses

8 reg de pto fte


8 reg indice
8 reg de direccion

24 registros de uso general

memoria central

ra
tu

pipelines diversificados (ejemplos)

add
Graph add
increment
Graph pack
increment
Load/store unit
branch

CDC 6600 (1964)

Motorola 88110 (1982)


12

t
Es
c
ru
ra
tu
l

pipelines dinmicos
Pipeline rgido:
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

Etapa i

Etapa i
(en orden)

Buffer (1)

Buffer (n)
(en orden)

Etapa i+1

Etapa i+1

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 con
buffer simple

Pipeline con
buffer mltiple

Etapa i
(en orden)

Buffer ( n)
(fuera de orden)

Pipeline superescalar:
Uso de buffers multientrada complejos
Las instr. entran al buffer a cualquier posicin del mismo
Las instr. salen del buffer en cualquier orden con la nica
condicin de tener todos sus operandos completos

Etapa i+1
Pipeline con
buffer con reordenamiento
13

t
Es
c
ru
ra
tu

Pipeline segmentado de entre 5 y 8


etapas (segn tipo de instruccin)

pipeline paralelo diversificado


IF

ID

las primeras 3 etapas de ancho s = 3


y ejecucin en orden
La etapa de ejecucin soporta hasta
4 rutas independientes (Fx, Fp, Mem
y Branch)

RD
(en orden)
dispatch
buffer
(fuera de orden)
EX

En la etapa de ejecucin puede haber


hasta 7 instrucciones ejecutndose
La ejecucin es en desorden, por lo
tanto es necesario un buffer adicional
para volver a ordenar las instrucciones
segn el orden original del programa

ALU

MEM1

FP1

MEM2

FP2

BR

FP3
(fuera de orden)
Reorder
buffer
(en orden)
WB

14

t
Es
c
ru

Fetch: lectura de mltiples instrucciones

Fetch
Fetch
Instruction buffer

Decode
Decode

Decode: decodificacin de mltiples instrucciones


Dispatch: distribuye instrucciones a las

Dispatch buffer

Dispatch
Dispatch
Issuing buffer

diferentes unidades funcionales

Execute:

incluye mltiples unidades funcionales


especializadas de latencia variable

Complete: reordena las instrucciones y asegura


la actualizacin en orden del estado
de la mquina

Retire: salida de la instruccin del procesador

Organizacin genrica de un pipeline


Superescalar de 6 etapas:

ra
tu

Organizacin bsica de un superescalar

Execute
Execute
Completion buffer

Complete
Complete
Store buffer

Retire
Retire

15

t
Es
c
ru
ra
tu
l

Captura de instrucciones (fetching)


Un pipeline superescalar de grado s debe ser capaz de leer s instrucciones
de 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

Address

Row decoder

Problemas potenciales:
fetch group y Cach row desalineadas
Presencia de instrucciones de salto en el fetch group
} cache
line

Tag
Tag

Branch

Tag
Tag

fetch group

Branch en el fectch group

16

t
Es
c
ru
ra
tu
l

fetch group desalineado (fetching)


Problema: El comienzo del fecth group y la
cache row no son coincidentes

fetch group
cache row

2 soluciones factibles:
1.- ordenamiento esttico en tiempo de compilacin:
El compilador conoce la organizacin 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 cdigo
cdigo objeto generado dependiente de una organizacin de cache particular
2.- Uso de hardware especializado que resuelve el problema en tiempo de ejecucin
17

t
Es
c
ru
ra
tu
l

Ejemplo IBM RS/6000


La RS/6000 usa una I-cache
Asociativa por conjuntos de 2 vas
Con un ancho de lnea de 16 instrucciones (64 bytes)

Cada fila de la cach almacena 4 conjuntos asociativos de 2 instr c/u


Cada lnea de cache se compone de 4 filas de cache
El arreglo fsico de la I-cache esta realmente formado de 4 sub-arreglos
(0, 1, 2, 3) accesibles en paralelo
1 instruccin puede ser accedida de cada sub-arreglo en cada acceso a
la I-cache
Las direcciones de instruccin estn distribuidas con un interleave de 2
18

t
Es
c
ru
ra
tu
l

Ejemplo IBM RS/6000


PC address

T
Logic

T
Logic

T
Logic

T
Logic

A0 B0

A1 B1

A2 B2

A3 B3

A4 B4

A5 B5

A6 B6

A7 B7

A8 B8

A9 B9

A10B10

A11B11

A12B12

A13B13

A14B14

A15B15

255

255

255

Mux

una lnea
igual a
4 filas de
la I-cache

255

Mux

Mux

Mux

Instruction buffer (with shift capabilites)


Instruction n
Branch
detecting
logic

Instruction n + 1

Instruction n + 2

Instruction n + 3

D
19

t
Es
c
ru
ra
tu
l

Decodificacin de instrucciones
(decoding)
Tareas:
Identificacin de las instrucciones individuales
Determinacin de los tipos de instruccin
Deteccin 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

20

t
Es
c
ru
ra
tu
l

Decodificacin de instrucciones
(decoding)
Decodificacin RISC

Clases de instrucciones
Tipos de recursos requeridos (registros)
Branch target address
aade hasta 4 bits por instruccin

Decodificacin CISC
Ms complejidad. Puede usar varias etapas del pipeline
Separacin entre instrucciones
Localizacin de cdigos de operacin y operandos

21

t
Es
c
ru
ra
tu
l

Decodificacin de instrucciones
(decoding)
Unidad de decodificacin 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 slo decodifican instrucciones IA32 simples (reg to reg)
Macro instruction bytes from IFU

Instruction
Instructionbuffer
buffer(16
(16bytes)
bytes)

ROM
ROM

Decoder
Decoder
00

Decoder
Decoder
11

Decoder
Decoder
22

4 ops

1 op

1 op

to next
address
calculation

Branch
Branch
address
address
calculation
calculation

op
opqueue
queue(6
(6RISC
RISCinstructions)
instructions)
22

t
Es
c
ru
ra
tu
l

Decodificacin de instrucciones
(decoding)
Problemas:

Para muchos superescalares con juego de instr CISC, el HW de


decodificacin puede ser muy complejo y requiere varias etapas
de pipeline.
Cuando el nmero de etapas de decodificacin se incrementa,
aumenta tambin la penalizacin de salto en trminos de ciclos
de reloj perdidos.
Solucin:
Uso de tcnica de Predecodificacin, que mueve parte de la tarea de
decodificacin antes de la I-cache.
Cuando ocurre un fallo de la I-cache, una nueva lnea de cache es
trada desde la memoria. Las instrucciones en esta lnea son
parcialmente decodificadas antes de almacenar la lnea en la I-cache.
A la lnea original se le agrega cierta informacin adicional que
ayuda a la decodificacin posterior
23

t
Es
c
ru
ra
tu
l

Ejemplo
Mecanismo de predecodificacin del AMD K5
From memory

te
by
8

128 + 80

te
by
8
5
ts
bi

Decode,
Decode,translate
translate
&&dispatch
dispatch

16 instruction bytes
+ predecode bits

ts
bi

I-cache

el tamao de lnea de la I-cache es de 16


bytes de instrucciones + 80 bits

64 + 40

Cada ciclo de predecodificacin almacena


104 (64+40) bits en la I-cache

8 instruction bytes
+ predecode bits

inicio/fin de la instruccin
nmero de ROPs de la instruccin
ubicacin de Codop y operandos

Predecode
PredecodeLogic
Logic

te
by

la predecodificacin agrega 5 bits por byte

64

8 bytes de instrucciones en cada ciclo de bus

8 instruction bytes

te
by

Predecodificacin agresiva del set IA32 antes


de guardar las instrucciones ledas en I-cache

ROP1 ROP2 ROP3 ROP4


ROP: RISC Operation en
terminologa AMD
24

t
Es
c
ru
l

En un procesador escalar todas las instr atraviesan el


nico pipeline sin importar el tipo de instruccin

ra
tu

Despacho de instrucciones (dispatch)


from I-cache

Un procesador superescalar es un pipeline diversificado


con varias unidades funcionales heterogneas

Instruction
Instruction
fetching
fetching

Distintas unidades funcionales ejecutan diferentes tipos


de instrucciones (punto fijo, punto flotante, memoria)

Instruction
Instruction
decoding
decoding

La unidad de despacho se encarga de enviar instrucciones


a la unidad funcional correspondiente segn su tipo

instruction dispatching

FU1

FU1

FU1

FU1

instruction execution

25

t
Es
c
ru
ra
tu
l

Despacho de instrucciones (dispatch)


Modo centralizado:

Modo distribuido:

Todas las instrucciones avanzan juntas


entre etapas

Las instrucciones se distribuyen en


diferentes unidades funcionales segn
su tipo
Se necesita una unidad encargada del
despacho

Ld add sub mul div

I-cache

Fetch
Fetch
Instruction buffer

Decode
Decode

Decode
Decode

Ciclo i

Dispatch buffer

Dispatch
Dispatch
I-cache

Fetch
Fetch
Ld add sub mul div

Ciclo i+1

Instruction buffer

Decode
Decode

26

t
Es
c
ru
ra
tu
l

Despacho de instrucciones
(acceso a operandos)
En pipeline escalar:

El acceso a operandos se realiza en la etapa de decodificacin.


Si algn operando no est actualizado, se frena la instruccin dependiente hasta que el
operando este disponible.
El frenado de una instruccin frena las siguientes en el pipeline
El uso de tcnicas como bypassing combinadas con estrategias de compilacin elimina el
frenado

En pipeline superescalar:
Algunos operandos pueden no estar disponibles al momento de decodificacin de una instr.
Una instruccin puede depender de instrucciones previas que an no han terminado su
ejecucin.
No es posible aplicar tcnicas de bypassing.

Solucin:
Agregado de un buffer entre la decodificacin y ejecucin de instrucciones
Las instrucciones decodificadas se almacenan en el buffer hasta que tengan todos
sus operandos
Cuando una instruccin tiene todos sus operandos se extrae del buffer y se ejecuta
Dicho buffer acta como una estacin de reserva (reservation station Tomasulo,1967)
27

t
Es
c
ru
ra
tu
l

Estaciones de reserva

2 tipos de estaciones de reserva:


Estacin de reserva centralizada
Un buffer simple a la entrada de la unidad de despacho
Estacin de reserva distribuida
Varios buffer individuales a la salida de la unidad de
despacho
from Decode unit
Centralized
reservation
station
Dispatch
(Issue)

Dispatch buffer

Dispatch

from Decode unit

Dispatch
Dispatch

Issuing
Issuing
Issue

Distributed
reservation
station

Execute

Completion
buffer

Finish

Completion
buffer
28

t
Es
c
ru
ra
tu
l

Notas sobre estaciones de reserva


Algunas arquitecturas presentan hbridos de los dos casos extremos
(Clustered reservation station)
En una arquitectura hbrida hay varias estaciones de reserva y cada
una de ellas alimenta a varias unidades funcionales
Ventajas y desventajas de una estacin centralizada:
Todos los tipos de instr comparten la misma estacin
Mejor utilizacin de las entradas de la estacin
Diseo de hardware ms complejo
Control centralizado y acceso multipuerto
Ventajas y desventajas de una estacin distribuida:
Puertos de salida de un solo puerto
Fragmentacin interna
Utilizacin mas baja que las centralizadas
Si se llenan producen frenados de las instrucciones del
tipo que manejan
Diseo y manejo mas simple

29

t
Es
c
ru
ra
tu
l

Ejecucin de instrucciones (Execute)


Tendencia actual: pipelines mas paralelos y diversificados
(mas unidades funcionales mas especializadas)

Fx
Fx

Fp
Fp

Shift
Shift

ALU
ALU22

ALU
ALU00

AAxxBB
(A
(AxxB)
B)++CC

Primeros procesadores
superescalares

ALU
ALUCC

Unidad de enteros
T1 super SPARC

(A
(AxxB)
B)++CC

Unidad de punto flotante


IBM RS/6000

30

t
Es
c
ru
ra
tu
l

Ejecucin de instrucciones (Execute)


Qu tipos de unidades funcionales debe usarse en un superescalar?
Cul es la mejor combinacin de tipos de unidades funcionales?
Estadsticamente un programa tiene:
40% de instrucciones aritmticas
20% de instrucciones de salto
40% de instrucciones de acceso a memoria (load/store)
Procesadores actuales:
4 unidades aritmticas (Fx y Fp)
1 unidad de salto
1 unidad de acceso a memoria (load/store)
El desbalanceo es preferible ya que 4 unidades de memoria
requieren que la cache de datos sea multipuerto (+ costo)
Solucin: Uso de mltiples bancos de memoria simulando una cache
multipuerto real

31

Instruction Retiring

Actualiza el estado de la mquina

Actualiza el estado de la memoria

Retire
Retire

Escritura
en D-cache

Instruction Completion

Store
buffer

Buffer
auxiliar de
memoria

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 un
buffer temporal de memoria y se escribe en la
D-cache en el siguiente periodo libre de bus

Instruccin Store en memoria (D-cache)

ra
tu

Complete
Complete

Escritura en
banco de
registros
(arit - lgicas)

Cuando una instruccin termina su ejecucin sus


resultados se almacenan en buffers temporales
Cuando una instruccin es completada sus resultados
se escriben en los registros de la arquitectura

Buffer
auxiliar de
escritura

Instrucciones aritmtico-lgicas o Load de memoria

Completion
buffer

Terminacin
de ejecucin

2 casos alternativos:

Execution
Execution

c
ru

Una
Unainstruccin
instruccinse
seconsidera
consideracompleta
completacuando
cuando
Termina
su
ejecucin
y
Termina su ejecucin y
Actualiza
Actualizaelelestado
estadode
delalamquina
mquina

t
Es

Finalizacin y retiro de instrucciones


(completion and retiring)

32

t
Es
c
ru

Buffer circular con punteros head y tail

Las instrucciones se escriben en el ROB estrctamente en el orden


del programa
 Cada vez que se emite una instruccin se crea una nueva
entrada en el ROB

Estado de la instruccin
 Emitida, en ejecucin, terminada

Una instruccin puede retirarse (Completion) si y solo si


 Ha terminado
 Todas las instrucciones previas han sido retiradas
 No se ha ejecutado de forma especulativa

ra
tu

Estructura del buffer de reordenamiento

33

t
Es
c
ru
ra
tu
l

Estructura del buffer de reordenamiento


Status:
Issued (I)
En espera en alguna estacin de reserva

Execution (X)
En ejecucin en alguna unidad funcional

Finished (F)
En ROB a la espera de su Completion

Tail:

prxima instruccin para retirar

Instruccin
Codop op1, op2
Codop op1, op2
reg-dest
value
status

Reg-dest
registro de escritura de la inst.

Value
valor del resultado de la inst.

Head:

primera entrada libre

34

t
Es
c
ru
ra
tu
l

Para qu sirve el ROB?


El despacho y las diferentes latencias de las instrucciones generan
ejecucin fuera de orden.
Desde el punto de vista de las dependencias de datos no importa que
las instrucciones terminen fuera de orden
Si es importante la consistencia secuencial para las dependencias de
control
Saltos condicionales especulativos

En un salto especulativo se cargan instrucciones de una va de ejecucin


que puede no ser la correcta, entonces, algunas instrucciones deben
anularse

Interrupciones
Rupturas de secuencia de ejecucin 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 ejecucin de alguna inst del programa (evento anormal)
La ejecucin del programa debe suspenderse en el estado de la inst
anterior a la que produce la excepcin.
se debe asegurar que las inst anteriores en la secuencia del programa se
terminen y las posteriores se anulen

35

Instruction cach

Fetch
Instruction/Decode buffer

Decode
In order

Dispatch buffer

Dispatch

Reserv.
Stations
Issue
Out of order

Execute

Finish
Reorder/Completion buffer

Store buffer

ra
tu

36

Retire

c
ru

In order

Complete

t
Es

cach
fault

Prefetch

Arquitectura completa de un pipeline


superescalar

Memory

Procesadores Superescalares
Descripcin estructural: Arquitectura y componentes de las
distintas etapas de un procesador superescalar

Descripcin funcional: Funcionamiento de un procesador


superescalar y descripcin de las estructuras que permiten
la normal ejecucin del flujo de instrucciones de un programa

37

n
Fu
cio

fetch
fetch

3 flujos principales:

register
register
access
access

dispatch
dispatch

branch
branch

ALU
ALU

Flujo de memoria

load/store
load/store

memory
memory

Flujo de datos

Asociados con los 3 grandes tipos


de instrucciones:
saltos, ALU, memoria

de instrucciones procesadas en los


3 flujos

decode
decode

Flujo de instrucciones

Flujo de instrucciones
Flujo de datos
Flujo de memoria

Objetivo: maximizar el volumen

l
na

Funcionamiento de un superescalar

reorder
reorder
WB
WB

38

Manejo del flujo de instrucciones

39

n
Fu
cio

Uso de los
ciclos perdidos

Procesamiento de salto
condicional no resuelto

eliminacin
de saltos

Salto
retrasado

Bloqueo Especulacin Multiva

Instrucciones
predicadas

Reordenamiento
de instrucciones

Procesamiento
de saltos

l
na

Manejo del flujo de instrucciones

40

n
Fu
cio

En flujo secuencial:
mximo rendimiento
todas las etapas llenas

l
na

Manejo del flujo de instrucciones


fetch
fetch
decode buffer

decode
decode

Cuando hay salto:


se pierden 3 (n) ciclos
penalizacin de
3 * ancho pipeline

dispatch buffer

dispatch
dispatch

En saltos incondicionales
se debe esperar el clculo del
target
En saltos condicionales
se debe calcular target
se debe calcular condicin

execute

issue

reserv.
stations

branch
branch

completion buffer

finish

complete
complete
store buffer

retire
retire
41

n
Fu
cio

En saltos incondicionales los ciclos de


frenado dependen del modo de
direccionamiento utilizado

l
na

Manejo del flujo de instrucciones


fetch
fetch
decode buffer

decode
decode

target = Registro + offset

dispatch buffer

target = registro
dispatch
dispatch

relativo al PC

execute

issue

reserv.
stations

branch
branch

completion buffer

finish

complete
complete
store buffer

retire
retire
42

n
Fu
cio

En saltos condicionales los ciclos de


frenado tambin dependen de la
forma de clculo de la condicin

l
na

Manejo del flujo de instrucciones


fetch
fetch
decode buffer

decode
decode

Comparacin de registros en la
propia instruccin de salto

dispatch buffer

Beq r1, r2, dir_salto

dispatch
dispatch

testeo de bits de estado


issue

reserv.
stations

Desventajas del testeo de estado:


Es un concepto secuencial, entonces
surgen problemas al paralelizar
las instrucciones

execute

Beqz dir_salto
branch
branch

completion buffer

finish

complete
complete
store buffer

retire
retire
43

n
Fu
cio
l
na

Salto retrasado
Migracin de cdigo en tiempo de compilacin a fin de rellenar las
etapas frenadas por la ejecucin de una posible va de salto tomado

dir_salto:
dir_salto:

add
add
div
div
add
add
beq
beq
NOP
NOP
NOP
NOP

r3,
r3,r2,
r2,r6
r6
r5,
r5,r4,
r4,r1
r1
r8,
r8,r9,
r9,r10
r10
dir_salto
dir_salto

dir_salto:
dir_salto:

.
.
.
.
add
add
br
br
div
div
add
add

r3,
r3,r2,
r2,r6
r6
dir_salto
dir_salto
r5,
r5,r4,
r4,r1
r1
r8,
r8,r9,
r9,r10
r10

La migracin de cdigo debe ser incondicional. Esto es, la condicin a


ser testeada por el salto no debe ser generada por las instrucciones
migradas
44

n
Fu
cio
l
na

Tcnicas de prediccin de saltos

Algunos estudios experimentales demostraron que las instrucciones de


salto condicional son bastante predecibles
Cuando se encuentra una instruccin de salto:
PREDICCIN: Se especula cual es la siguiente instruccin a ejecutar
Comienzan a ejecutarse instrucciones especulativamente
En algn momento se chequea la condicin de salto
Si se acierta en la especulacin:
Se contina la ejecucin
Si no se acierta en la especulacin:
Se eliminan las instrucciones ejecutadas especulativamente
Se buscan las instrucciones correctas

45

n
Fu
cio
l
na

Tcnicas de prediccin de saltos


Las tcnicas de prediccin de saltos involucran 2 aspectos:

Especulacin de la direccin de salto:


se presupone una direccin de salto durante la fase de fetch
a fin de poder cargar la nueva instruccin en el ciclo siguiente
(sin perdida de ciclos).
Usualmente la direccin predicha es la anterior direccin de
salto
Especulacin de la condicin de salto:
se presupone un resultado de la condicin de salto.
Salto no tomado (SNT): continuar por la va secuencial
Salto tomado (ST): ir a la instruccin de la direccin
de destino del salto

46

n
Fu
cio
l
na

Especulacin de la direccin de salto

Uso de un buffer de direcciones de salto (BTB Branch Target Buffer)


1.
2.

3.
4.

Se usa el PC para acceder a la I-cach a buscar la siguiente instruccin


Al mismo tiempo con el PC se accede al BTB. Si la direccin del PC corresponde
a una instruccin de salto (campo BIA), el buffer devuelve la direccin de salto
a la que previamente salto la instruccin branch (BTA).
la direccin BTA se carga en el PC para que en el siguiente ciclo se acceda a la
instruccin a la que salta el branch (si se predijo como ST)
Paralelamente la instruccin branch leda desde la I-cach se ejecuta para validar
o no la direccin especulada va BTB
acceso a
la I-cache
branch instruction
address field

PC

BIA

branch target
address field

BTA

47

n
Fu
cio
l
na

Especulacin en la condicin de salto


Prediccin fija
Siempre se hace la misma prediccin: Salto tomado o salto no
tomado (va secuencial)
(LA MAS SIMPLE PERO POCO EFECTIVA!!)
Prediccin verdadera
La prediccin cambia para diferentes saltos o diferentes
ejecuciones del mismo salto
Dos tipos:
Prediccin esttica: basada en el anlisis del cdigo
(EN TIEMPO DE COMPILACIN!!)
Prediccin dinmica: basada en la historia del salto
(EN TIEMPO DE EJECUCIN!!)

48

n
Fu
cio
l
na

Prediccin esttica

 Prediccin basada en el cdigo de operacin


o Para algunas instrucciones de salto se predice como ST y para
otras como SNT
o MC88110 , PowerPC 603 con saltos relativos a ciertos registros
 Prediccin basada en el desplazamiento
o Si desplazamiento <0, ST, si >=0, SNT
 Prediccin dirigida por el compilador
o Se usa un bit adicional en el cdigo de operacin de la instruccin
o El compilador analiza el cdigo para determinar si el salto en
cuestin debe realizar prediccin de ST o SNT
o Ejemplo:
 branch relacionado con loops : ST
 branch relacionado con IF : SNT
49

n
Fu
cio
l
na

Prediccin dinmica
La prediccin se hace segn la historia del salto
La historia es una buena gua para predecir el futuro
Esquema bsico: un salto tomado en las ltimas ejecuciones se
predice como verdadero en la siguiente
Mayor rendimiento que la prediccin esttica
Mas complejo para implementar
Mejor comportamiento en la prediccin de saltos asociados a loops

50

n
Fu
cio
l
na

Prediccin dinmica
2 tcnicas principales:
Explicita: Bits de historia

La historia del salto se marca explcitamente 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 efecte en la siguiente ejecucin
Implcita
La historia del salto se indica implcitamente 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
51

n
Fu
cio
l
na

Prediccin dinmica de 1 bit


Se usa 1 bit para cada salto indicando si en la ltima ejecucin fue
tomado o no tomado
SNT

ST

ST
ST

SNT
SNT

ST

SNT

Resultado
del salto

estado
actual

resultado
del salto

nuevo
estado

Prediccin
del salto

registro
1 bit
1-bit saturation counter

52

n
Fu
cio
l
na

Prediccin dinmica de 1 bit


Comportamiento en loops anidados: cuando el salto no es efectivo se
predice incorrectamente 2 veces
lazo_1: ..
..
lazo_2: ..

lazo_1

lazo_2

predicho

real

nueva
prediccin

SNT

ST

ST

ST

ST

ST

ST

ST

ST

..

beqz r1, lazo_2


beqz r2, lazo_1
2

ltima

ST

SNT

SNT

SNT

ST

ST

ST

ST

ST

..
53

n
Fu
cio
l
na

Prediccin dinmica de 2 bits


Con dos bits se puede almacenar la historia de las 2 ltimas
ejecuciones del salto
SNT

ST

SNT

SNT

TT
TT

NT
NT

TN
TN

NN
NN

11

10

01

00

ST

ST

ST

ST

SNT

ST

SNT

SNT

Se puede implementar con un contador ascendente/descendente


de 2 bits con saturacin en 11 y 00 (2-bit saturation counter)
TT: Tomado/Tomado
NT: No tomado/Tomado
TN: Tomado/No tomado
NN: No tomado/No tomado

1X : predecir salto tomado


0X : predecir salto NO tomado
54

n
Fu
cio
l
na

Prediccin dinmica de 2 bits


Comportamiento en loops anidados: cuando el salto no es efectivo se
predice incorrectamente 1 vez
lazo_1: ..
..
lazo_2: ..

lazo_1

lazo_2

predicho

real

nueva
prediccin

SNT

ST

SNT

SNT

ST

ST

ST

ST

ST

..

beqz r1, lazo_2


beqz r2, lazo_1
2

ltima

ST

SNT

ST

ST

ST

ST

ST

ST

ST

..
55

n
Fu
cio
l
na

Implementacin de la prediccin con


bits de historia
acceso a
la I-cache
branch instruction
address field

+1

PC

BIA

branch target
address field

BTA

Prediccin
ST SNT

branch
history

history bits

FSM

Por SNT se contina la ejecucin secuencial y se carga PC con PC + 1


Por ST se carga en PC la BTA

56

n
Fu

Efectividad de la prediccin con bits de


historia
82,5% a 96,2

2 bits de historia

Predice la direccin a partir de


las ltimas 2 veces (ST SNT)

86% a 97%

3 bits de historia

Predice la direccin a partir de


las ltimas 3 veces (ST SNT)

88,3% a 97%

l
na

Recuerda la direccin tomada la


ltima vez (ST SNT)

cio

1 bit de historia

El incremento de efectividad en las predicciones empieza a ser mnimo


a partir de 2 bits de historia. Por lo tanto, el uso de contadores de 2 bits
es la mejor opcin con relacin costo/rendimiento.

57

n
Fu
cio
l
na

Prediccin dinmica Implcita


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 ms recientes (idealmente para todos)
Entradas slo 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 estn en la cache o se sacan si
es que estaban
Similar a un predictor de 1 bit

58

n
Fu
cio
l
na

Implementacin de BTAC y BTIC


cach BTAC: almacena direccin del salto y
direccin de la instruccin de
destino
branch
address

target
address

1000

2000

cach BTIC: almacena direccin del salto y


la instruccin de destino
branch
address

target
instruction

1000

Load r1,

1000 Beqz r5, 2000

2000 Load r1, r2, r3

59

n
Fu
cio
l
na

Recuperacin de predicciones errneas


Cualquier tcnica especulativa de salto requiere de un mecanismo de
recuperacin ante fallos en la prediccin:
Eliminacin de las instrucciones de la ruta errnea
carga y ejecucin de las instrucciones de la ruta correcta
La ejecucin de instrucciones de una ruta especulativa puede dar
lugar a la aparicin de nuevas instrucciones de salto que sern
especulados como el primero an antes de que la condicin de este
se haya resuelto
En un momento dado puede haber en el procesador instrucciones
ejecutadas NO especulativamente mezcladas con varios niveles de
instrucciones ejecutadas especulativamente

60

n
Fu
cio
l
na

Recuperacin de predicciones errneas


Para identificar las instrucciones en ejecucin especulativa de
diferentes saltos se usan rtulos (Tags) asociados a cada salto
SNT

Tag 1

Br 2
Br 2
SNT

Br
Br11

ST

Tag 2

Br
Br33

Tag 3

Una instruccin rotulada indica que es especulativa y el rtulo la


asocia a un nivel de salto especulativo
Cuando se especula, la direccin 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
recuperacin
61

n
Fu
cio
l
na

Recuperacin de predicciones errneas


Cuando se termina la ejecucin real del salto, se puede validar el mismo:
Si la prediccin 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)
NT

Br 2
Br 2
Br
Br44

NT

Tag 3

Tag 2

Br
Br33

Br
Br11

branch 1 termina su ejecucin y se


predijo correctamente, por lo que el
tag 1 de las instrucciones asociadas
se elimina
Branch 2 se predijo incorrectamente
por lo que se eliminan de la ruta de
ejecucin todas las instrucciones con
tag 2 y 3
Un nuevo branch (4) se predice y a
partir de ese punto las instrucciones
se rotularn con un tag 4.

Las instrucciones errneas que estn an en los buffers de decodificacin,


despacho y estaciones de reserva se invalidan. Las instrucciones errneas en el
ROB se retiran
62

n
Fu
cio
l
na

Ejemplo: PowerPC 604


FAR

FA
FA

I-cach

FA
decode buffer

+4
branch history
table (BHT)
BHT prediction

branch target
address cach
(BTAC)

BHT
update

Decode

BTAC
update

dispatch buffer
Dispatch

BTAC prediction

reservation stations

branch

completion buffer

63

n
Fu
cio
l
na

Ejemplo: PowerPC 604

Superescalar
Superescalarde
degrado
grado44capaz
capazde
derecuperar,
recuperar,decodificar
decodificaryydespachar
despacharhasta
hasta44instrucciones
instrucciones
simultneas
en
cada
ciclo
de
mquina
simultneas en cada ciclo de mquina
22buffers
buffersseparados
separadospara
parasoporte
soportede
depredicciones
prediccionesde
desalto:
salto:
BTAC:
BTAC:cach
cachasociativa
asociativade
de64
64entradas
entradasque
quealmacena
almacenalas
lasdirecciones
direccionesde
desalto
salto
BHT:
BHT:cach
cachde
deacceso
accesodirecto
directode
de512
512entradas
entradasque
quealmacena
almacenaun
unpredictor
predictorde
de
22bits
de
historia
para
cada
salto
bits de historia para cada salto
Ambas
Ambastablas
tablasse
seacceden
accedendurante
durantelalaetapa
etapade
defetching
fetching(ciclo
(cicloi).
i).
BTAC
responde
en
1
ciclo
si
existe
un
salto
en
la
direccin
aportada
BTAC responde en 1 ciclo si existe un salto en la direccin aportadapor
porelelPC
PC
BHT
responde
en
2
ciclos
para
la
misma
bsqueda
BHT responde en 2 ciclos para la misma bsqueda
Si
SiBTAC
BTACresponde
respondepositivamente,
positivamente,se
secarga
cargaelelPC
PCcon
conlaladireccin
direccinBTAC
BTAC(en
(enciclo
cicloi+1)
i+1)
En
ciclo
i+2
BHT
dispone
de
la
prediccin
por
bits
de
historia
para
la
direccin:
En ciclo i+2 BHT dispone de la prediccin por bits de historia para la direccin:
Si
Sipredice
predicesalto
saltotomado
tomado(igual
(igualque
queBTAC)
BTAC)se
secontina
continatal
talcomo
comopredijo
predijoBTAC
BTAC
Si
predice
SNT,
entonces
se
anula
la
prediccin
de
BTAC
y
se
carga
el
PC
Si predice SNT, entonces se anula la prediccin de BTAC y se carga el PCcon
con
laladireccin
secuencial
direccin secuencial

64

n
Fu
cio
l
na

Tcnicas avanzadas de prediccin:


Prediccin en 2 niveles

Tcnicas anteriores tienen limitaciones:


Porcentaje de fallas cercano al 10%. NO aceptable para altas
prestaciones
La prediccin se hace en funcin de una historia limitada del
salto que se est analizando
NO tiene en cuenta la dinmica de saltos globales que se estn
ejecutando en un momento dado
Prediccin de 2 niveles
Supera en teora el 95% de aciertos
Adaptable a contextos dinmicos (saltos por loop, if, etc)
Usa un conjunto de tablas de historia (Pattern history Table
PHT)
El contexto de salto es determinado por un patrn de saltos
recientemente ejecutados (Branch History Shift Register
BHSR)
El BHSR se usa para indexar la PHT y obtener una entrada que
contiene cierto nmero de bits de historia (Ej. saturation counter)
65

n
Fu
cio
l
na

Prediccin en 2 niveles
Tipo I:

1 nico registro: Global BHSR de k bits


Shared PHT: puesto que no se usan los n bits de la direccin de salto sino slo j puede
haber aliasing
Memoriza un nico contexto de k saltos anteriores
n bits

Branch address

equivalent to
2-bit BHT

j bits

Global branch history


shift register
(BHSR)

k bits

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

PHT of 2k x 2j x 2 bits

Prediction

11
00

2-bit saturating
counter FSM
66

n
Fu
cio
l
na

Prediccin en 2 niveles
Tipo II:

2i registros individuales: Individual BHSRs de k bits


Shared PHT: puesto que no se usan los n bits de la direccin de salto sino slo j puede
haber aliasing
Memoriza 2i contextos de k saltos anteriores
n bits

Branch address

k bits

Individual
branch history
shift register
(BHSRs)
2j x k bits

equivalent to
2-bit BHT

j bits

i bits

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

11

11

11

11

00

00

00

00

PHT of 2k x 2j x 2 bits

Prediction

11
00

2-bit saturating
counter FSM
67

n
Fu
cio
l
na

Prediccin en 2 niveles
Tipo III (gshare correlated branch predictor McFarling, 1993):

j bits de la direccin de salto se usan como funcin de hashing (bitwise XOR) con k bits
del Global-BHSR. Los max(k,j) bits resultantes se usan para indexar una PHT de
predictores de 2 bits de historia
n bits

Branch address
Global
branch history
shift register
(BHSRs)

11

j bits

00
11

k bits

00

max(k , j) bits

Prediction

11
00
11
00

11

PHT of 2max(k , j) x 2 bits

00

2-bit saturating
counter FSM
68

n
Fu
cio
l
na

Manejo del flujo de datos


(entre registros)

69

n
Fu
cio
l
na

Flujo de datos entre registros

Tcnicas tendientes a optimizar la ejecucin de instrucciones del


tipo aritmtico-lgicas (ALU) en el ncleo superescalar del procesador
Las instrucciones tipo ALU realizan las tareas reales del programa.
Las instrucciones de salto y de memoria cumplen los roles de proveer
nuevas instrucciones o datos (respectivamente) a este flujo de
trabajo
En una arquitectura tipo load/store las instrucciones tipo ALU especifican operaciones a ser realizadas entre operandos almacenados en
registros
Formato tpico de operacin:

con

Ri = F(Rj , Rk)
Ri: registro destino
Rj y Rk: operandos fuente
F: operacin a realizar

Si Rj Rk no estn disponibles
Dependencia de datos (RAW)
Si F no est disponible
Dependencia estructural (recursos)
Si Ri no est disponible
Dependencias falsas (WAR o WAW)
70

n
Fu
cio
l
na

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: DEFINICIN
Lectura de un registro: USO
Luego de una definicin puede haber varios usos de un registro
RANGO DE VIDA de un valor: duracin entre la definicin y el ltimo uso
de un registro
Dependencias WAR y WAW se producen cuando se redefine un registro
durante un rango de vida previo

71

n
Fu
cio
l
na

Tratamiento de dependencias falsas


Tcnicas para tratar dependencias falsas:

Frenado: detener la instruccin que redefine el registro hasta que


finalice el rango de vida previo
Renombre de registros: Asignacin dinmica de distintos nombres
a las mltiples definiciones de un registro
de 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 del
buffer de reordenamiento (ROB)
Pooled Registers: Implementa el RRF y el ARF
juntos en un mismo banco
Map Table: Usada en la FPU del IBM RS/6000

72

n
Fu
cio
l
na

Renombre de registros
RRF separado del ARF

ARF
Data

referencia a
registro

RRF

Busy 1

Tag

Data

Busy 2

Valid-entry

1
0

operando

Busy = 1 : El registro est ocupado y no puede ser utilizado ya que alguna instruccin en ejecucin
cambiar su valor
0 : El valor de registro est disponible y puede ser ledo como operando

73

n
Fu
cio
l
na

Renombre de registros
RRF dentro del ROB

ARF
Data

referencia a
registro

Busy 1

Tag

ROB

Codop op1, op2


reg-dest
Data
Busy 2
status

operando

74

n
Fu
cio
l
na

Renombre de registros
Comparacin de las tcnicas ARF-RRF y RRF-ROB

Ambas tcnicas requieren el agregado al ARF de una columna adicional


para 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 renombre
aunque no siempre se usan (Ej: saltos, Stores, etc)
En ARF-RRF son necesarios puertos adicionales desde las ALUs hasta
la tabla RRF. En ROB ya existe la conexin de datos entre ALUs y ROB

75

n
Fu
cio
l
na

Funcionamiento del renombre de


registros
El renombre de registros involucra 3 tareas:
1.

Lectura de operandos

2.
3.

En etapa de Decode o Dispatch


Lectura de operandos fuente de la instruccin
Procedimiento:
se lee Reg desde ARF
Si Busy 1 = 0, entonces se lee el Data desde ARF
Si Busy 1 = 1, el valor Data de ARF no es vlido, entonces
con Tag se accede al RRF:
Si Busy 2 = 0, entonces se lee el Data
(instr termin Execute pero an
est en el ROB)
Si Busy 2 = 1, la instr an no ha sido
ejecutada, entonces se guarda
el Tag en la estacin de reserva

Alocacin de registro destino


Actualizacin de registro
76

n
Fu

Funcionamiento del renombre de


registros

cio
l
na

Alocacin de registro destino:

Se realiza en etapa de Decode o dispatch


3 pasos:
1. Poner Busy 1 = 1 para el registro que escribir la instruccin
2. 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


Paso 1

ARF
Data

registro
de
escritura

Paso 3

Busy 1

Tag

Paso 2.1

Paso 2.2

Paso 2

RRF
Data

Busy 2

Valid-entry

77

n
Fu

Funcionamiento del renombre de


registros

cio
l
na

Actualizacin de registro (Update):

Se realiza en etapa Complete


2 pasos:
1.

2.

Paso 2.1

Cuando la instr termina (finish),


1.1 Actualizar resultado en RRF[Tag]
1.2 Poner Busy 2 = 0
Cuando la instr se completa (Complete),
2.1 Actualizar Data RRF[Tag] al ARF correspondiente
2.2 Poner Busy 1 = 0
2.3 Poner Busy 2 = 1
Paso 1.2

Paso 2.2

ARF
Data
registro
de
escritura

new data

RRF

Paso 1.1

Busy 1

Tag

Paso 2.3

Data

Busy 2

new data

0 / 1

78

n
Fu
cio
l
na

Renombre de registros
Pooled Registers:

Una nica estructura fsica 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

79

n
Fu
cio
l
na

Renombre de registros
Map Table (IBM RS/6000):

Op T

S1 S2 S3

Alta complejidad de hardware


Es difcil detectar cuando un registro de la PTQR se usa
por ltima vez
No necesita actualizacin de los registros de arquitectura
al final del ciclo de una instruccin (Complete stage)
Deteccin simple de los registros fsicos asignados a
registros de la arquitectura en caso de excepciones
(Map Table)

33
33
34
34
35
35
36
36

Free List (FL)

Forma ms agresiva de renombre de registros

Pending Target Return Queue (PTRQ)

40
40registros
registrosfsicos
fsicosque
queincluyen
incluyen32
32de
dearquitectura
arquitectura
La
tabla
de
mapeo
tiene
32
entradas
de
Op T S1 S2 S3
La tabla de mapeo tiene 32 entradas de66bits
bitsc/u
c/u
Cada
Cadaentrada
entradarepresenta
representaaaun
unreg.
reg.de
delalaarquitectura
arquitectura
yyreferencia
un
registro
fsico
referencia un registro fsico
FL
es
FL esuna
unacola
colaque
quecontiene
contienelos
losreg.
reg.fsicos
fsicosNO
NOusados
usados
PTRQ
contiene
la
lista
de
registros
que
fueron
usados
Map
PTRQ contiene la lista de registros que fueron usados
MapTable
Table
para
renombrar
registros
de
la
arquitectura
y
han
sido
32
x
6
para renombrar registros de la arquitectura y han sido
32 x 6bits
bits
posteriormente
re-renombrados
en
la
tabla
de
mapeo
posteriormente re-renombrados en la tabla de mapeo
Registros
Registrosfsicos
fsicosen
enlalaPTQR
PTQRson
sondevueltos
devueltosaalalaFL
FLluego
luego
de
su
ltimo
uso
por
parte
de
una
instruccin
de su ltimo uso por parte de una instruccin
32
32

37
37
38
38
39
39

80

n
Fu
cio
l
na

Renombre de registros
Otra variante de tabla de mapeo
Banco de M registros fsicos que
mapean N registros de arq (M>N)
Funciona como buffer circular
Valid:
0 : entrada sin uso
1 : entrada usada
Reg des:
registro de arq al cual se asign
el registro fsico
value :
el valor del registro
Busy :
validacin del dato
0 : valor disponible
1 : valor no actualizado
Last :
indica la ltima definicin de
un registro de arq

valid
0
1
2
3
4
.
.
.
.

1
1
1
0
0
.
.
.
0

reg.
des.
4
0
1

value busy last


40
0
10

1
1
1

1
1
1

81

n
Fu
cio
l
na

Renombre de registros
mul r2, r0, r1

valid
0
1
2
3
4
.
.
.
.

1
1
1
0
0
.
.
.
0

reg.
des.
4
0
1

valid

value busy last


40
0
10

1
1
1

1
1
1

0
1
2
3
4
.
.
.
.

1
1
1
1
0
.
.
.
0

reg.
des.
4
0
1
2

value busy last


40
0
10

1
1
1
0

1
1
1
1

82

n
Fu
cio
l
na

Renombre de registros
mul r2, r0, r1

valid
0
1
2
3
4
.
.
.
.

1
1
1
1
0
.
.
.
0

reg.
des.
4
0
1
2

value busy last


40
0
10

1
1
1
0

1
1
1
1

valid
0
1
2
3
4
.
.
.
.

1
1
1
1
0
.
.
.
0

reg.
des.
4
0
1
2

value busy last


40
0
10

1
1
1
0

1
1
1
1

r0=0 r1=10
83

n
Fu
cio
l
na

Renombre de registros
add r3, r1, r2

valid
0
1
2
3
4
.
.
.
.

1
1
1
1
0
.
.
.
0

reg.
des.
4
0
1
2

valid

value busy last


40
0
10

1
1
1
0

1
1
1
1

0
1
2
3
4
5
.
.
.

1
1
1
1
1
.
.
.
0

reg.
des.
4
0
1
2
3

value busy last


40
0
10

1
1
1
0
0

1
1
1
1
1

84

n
Fu
cio
l
na

Renombre de registros
add r3, r1, r2

valid
0
1
2
3
4
.
.
.
.

1
1
1
1
0
.
.
.
0

reg.
des.
4
0
1
2

valid

value busy last


40
0
10

1
1
1
0

1
1
1
1

0
1
2
3
4
5
.
.
.

1
1
1
1
1
.
.
.
0

reg.
des.
4
0
1
2
3

value busy last


40
0
10

1
1
1
0
0

1
1
1
1
1

r2? r1=10
85

n
Fu
cio
l
na

Renombre de registros
sub r2, r0, r1

valid
0
1
2
3
4
5
.
.
.

1
1
1
1
1
.
.
.
0

reg.
des.
4
0
1
2
3

value busy last


40
0
10

1
1
1
0
0

1
1
1
1
1

valid
0
1
2
3
4
5
.
.
.

1
1
1
1
1
1
.
.
0

reg.
des.
4
0
1
2
3
2

value busy last


40
0
10

1
1
1
0
0
0

1
1
1
0
1
1

86

n
Fu
cio
l
na

Renombre de registros
termina mul r2, r0, r1

valid
0
1
2
3
4
5
.
.
.

1
1
1
1
1
1
.
.
0

reg.
des.
4
0
1
2
3
2

value busy last


40
0
10

1
1
1
0
0
0

1
1
1
0
1
1

valid
0
1
2
3
4
5
.
.
.

1
1
1
1
1
1
.
.
0

reg.
des.
4
0
1
2
3
2

value busy last


40
0
10
0

1
1
1
1
0
0

1
1
1
0
1
1

87

n
Fu
cio
l
na

Renombre de registros
Se retira instruccin con
resultado en posicin 0
valid
0
1
2
3
4
5
.
.
.

1
1
1
1
1
1
.
.
0

reg.
des.
4
0
1
2
3
2

value busy last


40
0
10
0

1
1
1
1
0
0

1
1
1
0
1
1

valid
0
1
2
3
4
5
.
.
.

0
1
1
1
1
1
.
.
0

reg.
des.
4
0
1
2
3
2

value busy last


40
0
10
0

1
1
1
1
0
0

1
1
1
0
1
1

88

n
Fu
cio
l
na

Dependencias verdaderas de datos

Las dependencias de datos verdaderas (RAW) obligan a serializar la


ejecucin de instrucciones debido a la relacin productor-consumidor
entre instrucciones que pruducen resultados y otras que los usan como
operandos de entrada
An cuando estas dependencias no se pueden eliminar, es necesario
proveer al procesador de mecanismos para detectar las mismas y
serializar las instrucciones que tienen este tipo de conflicto

r1 = r2 * r3
r5 = r1 + r8

89

n
Fu
cio
l
na

Dependencias verdaderas de datos


Un poco de historia Algoritmo de Tomasulo
Tcnica precursora de los algoritmos modernos de deteccin de
dependencias de datos verdaderas (RAW)
Propuesto por Tomasulo en 1967 para la FPU del IBM 360/91

No slo detecta y dependencias RAW sino que elimina dependencias


falsas (WAR y WAW) como efecto colateral
Se basa en la adicin de tres mecanismos a la ALU clsica:
Unidades de reserva (reservation stations)
Bus de datos comn (common data bus - CDB)
etiquetas de registros (register tags)
La versin original no soporta tratamiento de excepciones con
mantenimiento de la consistencia secuencial
90

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo

Rs1, Rs2

Rs1, Rs2

Dispatch Rd

Dispatch Rd
Busy
bits

Register
Bank

Busy
bits

instr

FU 1

Tag
bits

Register
Bank

instr

FU 2

Reservation
Stations

Reservation
Stations

FU 2

FU 1

Common Data Bus

ALU clsica

ALU de Tomasulo
91

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo

Las estaciones de reserva se pueden ver como unidades funcionales virtuales


que reciben una instruccin para ejecutar y al cabo de cierto nmero de ciclos
se genera un resultado (en realidad el resultado lo generar la unidad funcional
asociada a la estacin)
Cada generador de futuros resultados se identifica con un Tag (cada estacin
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 la
instruccin y sta lo enva por el CDB a todos los posibles receptores (banco de
registros, estaciones de reserva, etc) que tengan dicho tag
ID Tag

Cop Tag op1 Tag op2 dest


entrada Estacin de reserva

Busy Tag

Data

entrada Banco de registros

92

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo: Implementacin
Una entrada de estacin de reserva
con Tag = 0 para algn operando se
asume que contiene el valor del dato.
Si el Tag es <> 0, el valor lo generar
la instruccin que est en la estacin
de reserva identificada con dicho Tag

Rs1, Rs2
Dispatch Rd
Busy
bits

op1
add

500

Tag
bits

Register
Bank

op2
2

---

instr

r4

El op1 tiene Tag 0 por lo que su valor


es 500.
El op2 tiene Tag 2, por lo que el
resultado lo generar la instruccin
en la estacin de reserva 2

Tag 1
Tag 2
Tag 3

Reservation
Stations

Reservation
Stations

Tag 4
Tag 5

FU 2

FU 1

Common Data Bus


93

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo: Ejemplo
Suponer una etapa de ejecucin con soporte para instrucciones de 2
operandos fuente y una referencia a registro destino
La unidad de despacho emite 2 instrucciones por ciclo
Hay 2 unidades funcionales:

Adder : Con una estacin de reserva de 3 entradas (con Tags 1, 2 y 3)


2 ciclos de reloj de latencia
Mult

: Con una estacin de reserva de 2 entradas (con Tags 4 y 5)


3 ciclos de reloj de latencia

Una instruccin puede iniciar su ejecucin en el mismo ciclo


en que es despachada a la estacin de reserva
Las unidades funcionales pueden adelantar sus resultados en su ltimo
ciclo de ejecucin a los distintos destinos que los necesiten
Cualquier unidad que recibe un operando puede iniciar su ejecucin en
el siguiente ciclo de reloj
94

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 1 Despacho de S1 y S2
S1
-

Tag

Op 1

Tag

Op 2

6,0

7,8

Op 1

Tag

Op 2

6,0

---

Adder

Functional unit 1

Busy

0
2

Mult

S1

S2
-

Tag

4
8

Functional unit 2

1
1

Tag

Data

6,0
4 3,5
1 10,0
7,8

Register Bank

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 estacin 1, el Tag de r4 se pone en 1
Como S2 es despachada a la estacin 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
95

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 2 Despacho de S3 y S4
S1
S3
-

1
2

Tag

Op 1

Tag

Op 2

0
1

6,0
---

0
0

7,8
7,8

S1

Se
S3
S4
S3
S4
su
S1

4
5

Op 1

0
2

6,0
---

Tag

Op 2

1 --4 --Mult

Adder

Functional unit 1

S2
S4

Tag

Busy

0
2
4
8

Functional unit 2

1
1
1

Tag

Data

6,0
4 3,5
2 10,0
5 7,8

Register Bank

despachan las instrucciones S3 y S4 a las estaciones de reserva 2 y 5


necesita del resultado de S1 as que se almacena con un Tag = 1
depende de S3 y de S2, entonces se almacena con Tags 2 y 4
actualiza r4 por lo que su Tag en el banco de registros se actualiza a 2
actualiza r8 por lo que su Tag en el banco de registros se pone a 5 y
bit Busy se pone a 1
en su ltimo ciclo de ejecucin, manda el token <r4,13,8> por el CDB
96

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 3
Tag

S3
-

Op 1

Tag

Op 2

1
2

0 13,8 0

7,8

S3

Tag

S2
S4

4
5

0
2

Op 1

Tag

Op 2

6,0 0 13,8
--- 4 --S2 Mult

Adder

Functional unit 1

Busy

0
2
4
8

Functional unit 2

1
1
1

Tag

Data

6,0
4 3,5
2 10,0
5 7,8

Register Bank

Se actualiz el operando 1 de S3 y el operando 2 de S2 ambos a 13,8


Se libera la estacin de reserva 1
Comienza la ejecucin de S3 en el Adder y de S2 en el Mult

97

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 4
Tag

S3
-

Op 1

Tag

Op 2

1
2

0 13,8 0

7,8

S3

Tag

S2
S4

4
5

0
2

Op 1

Tag

Op 2

6,0 0 13,8
--- 4 --S2 Mult

Adder

Functional unit 1

Busy

0
2
4
8

Functional unit 2

1
1
1

Tag

Data

6,0
4 3,5
2 10,0
5 7,8

Register Bank

ltimo ciclo de ejecucin de S3 en el Adder por lo que enva el token


<r4, 21,6> al CDB

98

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 5
Tag

Op 1

Tag

Op 2

Tag

S2
S4

1
2
3

4
5

Op 1

Tag

Op 2

0 6,0 0 13,8
0 21,6 4 --S2 Mult

Adder
Functional unit 1

Busy

0
2
4
8

Functional unit 2

1
1

Tag

Data

6,0
4 3,5
21,6
5 7,8

Register Bank

El token <r4, 21,6> del CDB actualiz el operando 1 de la estacin de


reserva 5
El token <r4, 21,6> del CDB actualiz el registro 4 del banco de registros
de modo que su bit Busy se pone en 0 (resultado actualizado)
ltimo ciclo de ejecucin de S2 en el Mult por lo que enva el token
<r2, 82,8> al CDB
99

n
Fu
cio
l
na

Dependencias verdaderas de datos


S1
S2
S3
S4

Algoritmo de Tomasulo: Ejemplo

:
:
:
:

add
mul
add
mul

r4,
r2,
r4,
r8,

r0,
r0,
r4,
r4,

r8
r4
r8
r2

Ciclo 6
Tag

Op 1

Tag

Op 2

Tag

S4

1
2
3

Op 1

Tag

Op 2

4
5

0 21,6 0 82,8
S4 Mult

Adder
Functional unit 1

Busy

2
4
8

Functional unit 2

Tag

Data

6,0
82,8
21,6
5 7,8

Register Bank

El token <r2, 82,8> del CDB actualiz el registro 2 del banco de registros
de modo que su bit Busy se pone en 0 (resultado actualizado)
Comienza la ejecucin de S4 en el Mult

100

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo
Tratamiento de RAW Mediante
Medianteeleluso
usode
deTags
Tagsque
quepermiten
permitenvisualizar
visualizar
mas
masregistros
registrosvirtuales:
virtuales:
banco
bancode
deregistros
registros++estaciones
estacionesde
dereserva
reserva

Eliminacin de WAR

Mediante
Mediantelalacapacidad
capacidadde
dealmacenar
almacenarelelresultado
resultadolala
ejecucin
ejecucinen
enlalaestacin
estacinde
dereserva
reservade
dela
lainstruccin
instruccin
que
quelo
logener
generpara
paraser
serusado
usadopor
porlas
lasinstrucciones
instrucciones
dependientes
dependientes

Eliminacin de WAW Solamente


Solamentelalaltima
ltimainstruccin
instruccinen
enorden
ordendel
delprograma
programa
escribe
escribeen
enelelbanco
bancode
deregistros
registros

101

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo
Desventajas:

1 Desperdicio
Desperdiciode
delas
lasestaciones
estacionesde
dereserva
reservaya
yaque
queson
son

usadas
usadascomo
comobuffers
bufferstemporales
temporalespara
paraalmacenar
almacenarelel
resultado
resultadode
delalainstruccin
instruccinhasta
hastaelelfinal
finaldel
delrango
rangode
de
vida
del
valor
vida del valor

2 No
Nosoporta
soportatratamiento
tratamientopreciso
precisode
deexcepciones
excepciones

102

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo
Solucin
Solucinde
dedesventaja
desventaja1:
1:Agregado
Agregado
de
deun
unbuffer
buffertemporal
temporalde
desalida
salidaque
que
almacena
almacenalos
losresultados
resultadosliberando
liberando
la
laestacin
estacinde
dereserva
reserva
correspondiente
correspondiente

Rs1, Rs2

Dispatch Rd

Busy
bits

Tag
bits

Register
Bank

instr

Reservation
Stations

Reservation
Stations

FU 2

FU 1
Tag

Rd

value

Buffer
Bufferde
de
salida
salida
Common Data Bus

103

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo

Desventaja 2: El algoritmo no soporta tratamiento preciso de excepciones


Al
Alfinal
finaldel
delsegundo
segundociclo
cicloS1
S1debera
deberahaber
haberactualizado
actualizadoel
elcontenido
contenidode
der4
r4
pero
perocuando
cuandose
sedespach
despachS3
S3al
alprincipio
principiodel
delsegundo
segundociclo
ciclocambi
cambiel
elTag
Tag
de
der4
r4de
de11aa22
Si
Sise
seproduce
produceuna
unaexcepcin
excepcin(por
(porejemplo
ejemplode
deS2
S2en
enel
elciclo
ciclo3)
3)
no
nopodr
podrser
serposible
posiblerecuperar
recuperarel
elestado
estadoexacto
exactodel
delprocesador
procesadorya
yaque
quer4
r4
no
representa
el
resultado
de
haber
ejecutado
S1
no representa el resultado de haber ejecutado S1
Busy

0
Estado del banco
2
de registros segn
4
Tomasulo
8

1
1
1

Tag

Data

6,0
4 3,5
2 10,0
5 7,8

Register Bank

Busy

Estado del banco 0


de registros con 2
consistencia
4
secuencial
8
Erroneo

1
1
1

Tag

Data

6,0
4 3,5
2 13,8
5 7,8

Register Bank

Correcto
104

n
Fu
cio
l
na

Dependencias verdaderas de datos


Algoritmo de Tomasulo
Solucin 2

Uso
Usodel
delbuffer
buffertemporal
temporalde
desalida
salidapara
paraalmacenar
almacenarel
elorden
ordende
deemisin
emisinde
de
las
lasinstrucciones,
instrucciones,aafin
finde
deactualizar
actualizarel
elbanco
bancode
deregistros
registrosen
enorden
ordendel
del
programa
programacuando
cuandotermina
terminacada
cadainstruccin
instruccin
Precursor
Precursordel
del buffer
bufferde
dereordenamiento
reordenamientode
delos
losactuales
actualesprocesadores
procesadores
Soluciona
Solucionala
lainconsistencia
inconsistenciatemporal
temporaldel
delbanco
bancode
deregistros
registrosante
ante
excepciones
excepcionesaacosta
costade
deintroducir
introduciruna
unainconsistencia
inconsistenciapotencial
potencialdentro
dentrodel
del
mismo
mismobanco
bancoentre
entreel
eltag
tagyyel
elvalor
valor
Busy

Estado del banco 0


de registros con 2
consistencia
4
secuencial
8

1
1
1

Tag

Data

6,0
4 3,5
2 13,8
5 7,8

Register Bank

13,8
13,8es
eselelresultado
resultadode
delalainstruccin
instruccinde
detag
tag11(S1)
(S1)
pero
en
el
registro
4
el
campo
Tag
tiene
un
2
(S3)
pero en el registro 4 el campo Tag tiene un 2 (S3)

105

n
Fu
cio
l
na

Ncleo dinmico de ejecucin

Segmento de ejecucin fuera de orden de un procesador superescalar

dispatch buffer

Dispatch
Dispatch

Register writeback

Architected RF
Architected RF

Rename RF
Rename RF

reservation stations

ROB entries

branch
branch

integer
integer

integer
integer

FPU
FPU

FPU
FPU

Load/
Load/
store
store
Common Data Bus (CDB)

completion buffer (ROB)

Complete
Complete

106

n
Fu
cio
l
na

Estaciones de reserva
Dispatching
Dispatch Forwarding Dispatch Forwarding
slots
buses
slots
buses
Allocate
Allocate
unit
unit

Entry
to be
allocated

Issuing
Issuing
unit
unit

Busy
Busy

Operand 1
Operand 1

Valid
Valid

Operand 2
Operand 2

Valid Ready
Valid Ready

Busy
Busy

Operand 1
Operand 1

Valid
Valid

Operand 2
Operand 2

Valid Ready
Valid Ready

Busy
Busy

Operand 1
Operand 1

Valid
Valid

Operand 2
Operand 2

Valid Ready
Valid Ready

Busy
Busy

Operand 1
Operand 1

Valid
Valid

Operand 2
Operand 2

Valid Ready
Valid Ready

Tag 1
match

Entry
to be
issued

Tag 2
Tag logic
Tag logic

Tag buses

Tag logic
Tag logic

match

Tag buses

Issuing

107

n
Fu
cio
l
na

Buffer de reordenamiento (ROB)


Busy (B): La entrada correspondiente del ROB est siendo usada
Issued (I): La instruccin est en ejecucin en alguna unidad funcional
Finished (F): La instruccin termin la ejecucin y espera a ser completada
Issued = Finished = 0: la instruccin est en espera en alguna estacin de reserva
Instruction address (IA): Direccin de la instruccin en el I-buffer
Rename register (RR): Registro de renombre (si se usa RRF-ROB)
Speculative (S): Indicador de ejecucin
especulativa de la
instruccin (Puede
contener adems bits
indicando el nivel de
salto especulativo )
Valid (V): En caso de instruccin
especulativa cuya rama resulte
incorrecta la instruccin se
marca como NO vlida

Next entry to
be allocated

Next instruction
to complete

B 0 0 0 0 0
1 1 1 1 1
1 1 1 1
B 0 0 0 0 0
1 1 1 1 1
1 1 1 1
I
F

I
F

IA
IA
RR
RR
S
S
V
V

Circular queue buffer

108

n
Fu
cio
l
na

Estrategias de acceso a operandos

El 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 activacin (wake-up) de
instrucciones en las estaciones de reserva
Segn la poltica de acceso a los operandos hay 2 alternativas de
implementacin
Acceso
Accesoaaoperandos
operandosdurante
duranteel
eldespacho
despachoaalas
lasestaciones
estacionesde
dereserva
reserva
(Data
(Datacaptured
capturedScheduling)
Scheduling)
Primeros
Primerosprocesadores
procesadoressuperescalares
superescalares
Los
operandos
disponibles
Los operandos disponiblesen
eneleldespacho
despachose
sealmacenan
almacenanen
enlalaestacin
estacinde
dereserva
reserva
Si
el
operando
no
esta
disponible,
se
almacena
un
Tag
Si el operando no esta disponible, se almacena un Tag

Acceso
Accesoaalos
losoperandos
operandosdurante
durantela
laemisin
emisinaalas
lasunidades
unidadesfuncionales
funcionales
(Non
(Nondata
datacaptured
capturedScheduling)
Scheduling)
Poltica
Polticams
msmoderna,
moderna,adoptada
adoptadapor
poralgunos
algunosprocesadores
procesadoresactuales
actuales
Todos
los
operandos
son
accedidos
durante
la
emisin
a
las
Todos los operandos son accedidos durante la emisin a lasunidades
unidadesde
deejecucin
ejecucin
109

n
Fu
l
na

Durante el despacho a las estaciones de reserva se accede


al banco de registros para recuperar operandos
Si el operando no est disponible se utiliza un Tag

cio

Data captured Scheduling


Dispatch
Dispatch

Register
Al finalizar la ejecucin de una instruccin el resultado se
File
usa para actualizar el banco de registros y adems
se enva un token (<Tag, Data>) a las estaciones de
Operand coping
reserva para actualizar los campos de Tag faltantes
La Issuing Unit analiza todas las instrucciones y despierta
aquellas que tienen todos sus operandos

Forwarding
Data
Datacaptured
captured
and wake-up
Scheduling
Scheduling
Reservation
ReservationStation
Station

Register updating

Las instrucciones permanecen en la estacin de reserva


hasta tener todos sus operandos

Functional
Functionalunits
units

110

n
Fu

Dispatch
Dispatch

Non
Nondata
datacaptured
captured
Scheduling
Scheduling
Reservation
ReservationStation
Station

La Issuing Unit analiza todas las instrucciones y despierta


aquellas que tienen todos sus Tags actualizados
La instruccin activa accede al banco de registros durante
la emisin a una unidad funcional para recuperar los
operandos (que ya estn disponibles)

Ventaja:
Ventaja:

Register
File

Forwarding

Wake-up

Al finalizar la ejecucin de una instruccin el resultado se


usa para actualizar el banco de registros (fordwarding)
y adems se enva el Tag a las estaciones de
reserva para actualizar la disponibilidad de operandos

l
na

Durante el despacho a las estaciones de reserva NO se accede


al banco de registros para recuperar operandos
Para todos los operandos se utilizan Tags

cio

Non data captured scheduling

Functional
Functionalunits
units

El
Eldato
datose
seactualiza
actualizaen
enun
unsolo
sololugar
lugar
Los
Losbuses
buseshacia
hacialas
lasestaciones
estacionesde
dereserva
reserva
son
sonmas
maschicos
chicos(slo
(sloel
elTag)
Tag)
111

n
Fu
cio
l
na

Manejo del flujo de memoria

112

n
Fu
cio
l
na

Etapas del acceso a memoria

La ejecucin de las instrucciones de acceso a memoria involucra tres


etapas:
Generacin de direccin: La direccin completa de memoria
no est en la instruccin. Usualmente hay que calcularla a partir
de otros valores (inmediato + registro, etc)
Traslacin de direccin: Usualmente la direccin se expresa
en un entorno de memoria virtual. La traslacin realiza un mapeo
entre memoria virtual y memoria fsica. Usualmente se usa una
TLB (traslation Lookaside Buffer)
Acceso a memoria: Acceso a una palabra de la memoria
LOADs: Se lee una palabra de memoria y se almacena
en un registro
STOREs: Una palabra contenida en registro se escribe en
la direccin calculada de memoria
113

n
Fu
l
na

dispatch buffer

cio

Etapas del acceso a memoria


Register writeback
Dispatch
Dispatch

Architected RF
Architected RF

Rename RF
Rename RF

reservation stations

branch
branch

integer
integer

integer
integer

FPU
FPU

Load/
Load/
Store
Store

Address Generation
Address Traslation
Memory Access

ROB

Complete
Complete

Data
Data
Memory
Memory

Store buffer

Retire
Retire

114

n
Fu
cio
l
na

Ciclos de acceso para lectura


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 ciclo
de reloj
- Si el acceso es un miss,
se produce un fallo de
memoria y se frena
el pipe de memoria
Una instruccin Load se considera
terminada (finished) cuando
finaliza el 3 ciclo, an cuando
no haya sido completada

Load/
Load/
Store
Store

Address Generation
Address Traslation
Memory Access

ROB

Complete
Complete

Data
Data
Memory
Memory

Store buffer

Retire
Retire
115

n
Fu
cio
l
na

Ciclos de acceso para escritura


1 y 2 ciclos iguales al Load
3 ciclo:
- El registro origen se almacena en
el ROB junto con la instruccin Store
- Cuando la instruccin se completa
se realiza la escritura real en la memoria
- Lo anterior previene de escrituras
anticipadas si ocurre una excepcin o
un salto mal predicho
- En caso de que no deba ejecutarse
se borra del ROB sin efectos
ROB
colaterales
Una instruccin Store se considera
terminada (finished) cuando
finaliza el 2 ciclo, luego de que
se realice una traslacin exitosa

from
Dispatch

Load/
Load/
Store
Store

Complete
Complete

Address Generation
Address Traslation

Data
Data
Memory
Memory

Store buffer

Retire
Retire
116

n
Fu
cio
l
na

Mantenimiento de la consistencia
de memoria
Lecturas 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 ejecucin pero si su finalizacin
La serializacin de escrituras asegura:
Recuperacin segura de excepciones y otras rupturas de secuencia
Consistencia en modelos multiprocesador

117

n
Fu
cio
l
na

Mantenimiento de la consistencia
de memoria

Cmo asegurar la serializacin de los Store sin comprometer la


extraccin de paralelismo?
Buffer de escritura (Store Buffer):
Almacena secuencialmente (orden de programa) los requerimientos
de 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 instruccin Store puede haber terminado su ejecucin y puede
estar completada, pero an su escritura a memoria puede no haber
sido realizada si est en el Store buffer
Si ocurre una excepcin los requerimientos de escritura en el Store
buffer no son eliminados pues corresponden a Stores ya completos
118

n
Fu
cio
l
na

Otras tcnicas avanzadas de manejo


de memoria

La ejecucin fuera de orden de las instrucciones Load es la principal


fuente de aumento de rendimiento
Las instrucciones Load son, frecuentemente, el inicio de las cadenas de
dependencias
La ejecucin prematura de las instrucciones Load permitir el adelanto
de ejecucin de todas las dems instrucciones del programa

Meta principal:
Adelantar la ejecucin de las instrucciones Load
sin violar dependencias de datos

119

..
SW

r10, 100(r0)
..

SW

r11, 200(r0)
..

LW

Load Forwarding
Si un Load tiene la misma direccin de memoria
que un Store previo (dependencia RAW), el load
puede cargarse con el valor que almacenar el
store

l
na

Permite la ejecucin de un Load antes los Store


que la preceden siempre y cuando no haya
dependencias entre las direcciones de memoria
del Load con las de los Store que adelanta

cio

Load Bypassing

n
Fu

Otras tcnicas avanzadas de manejo


de memoria

r12, 300(r0)

..
SW

r10, 100(r0)
..

SW

r11, 200(r0)
..

LW

r12, 100(r0)
120

n
Fu
cio
l
na

Etapa Load/Store estndar

Store buffer de 2 partes:


Finished: Stores que terminaron su ejecucin pero que an no estn 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 mala
prediccin
Un Store en la parte Completed del buffer no es eliminable y se completa siempre
Reservation Station

Address Generation
Address Traslation

Store
Store

Load
Load

unit
unit

unit
unit

Finished
Store Buffer

Address Generation
Address Traslation
Memory Access

Data

Address

Data
Data
Cache
Cache

Completed
Store Buffer
Memory Update

121

n
Fu
cio
l
na

Load Bypassing

Se compara la direccin del Load con las direcciones del Store buffer.
Si no hay coincidencias, el Load no entra en conflicto con ningn Store y puede ser adelantado
Si hay conflicto, el Load es frenado y devuelto a la estacin de reserva
Desventaja: La parte de direccin del Store Buffer debe implementarse como una memoria
asociativa para una bsqueda rpida de coincidencias

Reservation Station

Address Generation
Address Traslation

Finished
Store Buffer

Store
Store
unit
unit

Data
Data

Tag Match

Address
Address

Load
Load
unit
unit

If no match,
update
destination
register

Completed
Store Buffer

Address Generation
Address Traslation
Memory Access

Data

Address

Data
Data
Cache
Cache

Memory Update
Match/no match
122

n
Fu
cio
l
na

Load Forwarding

Se compara la direccin del Load con las direcciones del Store buffer.
Si hay coincidencia con alguna direccin, 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 ltimo
que actualizar la posicin de memoria que leer el Load)

Reservation Station

Address Generation
Address Traslation

Finished
Store Buffer

Store
Store
unit
unit

Data
Data

Tag Match

Load
Load
unit
unit

Address
Address

Address Generation
Address Traslation
Memory Access

Data
If match,
forward to
destination
register

Match
Match

Completed
Store Buffer

Address

Data
Data
Cache
Cache

Memory Update
Match/no match
123

También podría gustarte