Está en la página 1de 143

CAPÍTULO 3

PROCESADORES
SUPERESCALARES (I):
MICROARQUITECTURAS
Y PRINCIPIOS DE
FUNCIONAMIENTO
INTEGRANTES:
● Bejar Diaz Wilar Paul
● Sahuanay Pilco, Frank Paul
● Cari Salas Ivan Ismael
● Velasquez Choque, Ronald Gustavo
● Ticona Conza Ademir Alfred
● Torres Condori Jhon Bryan
1
TABLA DE CONTENIDOS
3.1. INTRODUCCIÓN: DEFINICIÓN Y NOTAS HISTÓRICAS
3.2. PARALELISMO ENTRE INSTRUCCIONES (ILP) Y PARALELISMO DE LA
MÁQUINA
3.3. PROCESAMIENTO SUPERESCALAR DE INSTRUCCIONES
3.3.1. Decodificación paralela y predecodificación
3.3.2. Emisión de instrucciones
3.3.3. Renombramiento de registros
3.3.4. Mantenimiento de la consistencia. Buffer de reordenamiento
3.4. PROCESAMIENTO DE LAS INSTRUCCIONES DE SALTO
3.4.1. Alternativas para la gestión de los saltos condicionales
3.4.2. Instrucciones de ejecución condicional
3.5. INTERRUPCIONES EN UN PROCESADOR SUPERESCALAR

2
3.1.
INTRODUCCIÓN:
DEFINICIÓN Y
NOTAS
HISTÓRICAS

3
Procesadores Superescalares
- Los procesadores superescalares son procesadores segmentados
cuyas etapas se han diseñado de forma que puedan procesar más
de una instrucción por ciclo.
- Los procesadores supersegmentados mejoran las prestaciones
respecto a un procesador segmentado.
- El cauce puede funcionar a frecuencias mayores al reducir el tiempo
de etapa.
- La diferencia entre un procesador superescalar y un procesador
VLIW radica en si las técnicas que permiten el procesamiento
simultáneo de instrucciones en cada etapa se implementan en
hardware

4
Ejecución de una secuencia de código DLX

Para poder aumentar las prestaciones de los procesadores segmentados consiste


en utilizar varias unidades funcionales que trabajan con instrucciones distintas.

5
Ejecución de una secuencia de código DLX

Hay instrucciones que terminan de procesarse antes de instrucciones que la


preceden, como las instrucciones addir10, r0, 0xb.

6
Distintas organizaciones para la microarquitectura de un
procesador superescalar

- Organizar el procesador en varios cauces que


funcionen en paralelo y de forma casi
independiente, sería una forma de mejorar el
número de instrucciones procesadas por ciclo.

7
Distintas organizaciones para la microarquitectura de un
procesador superescalar

8
Distintas organizaciones para la microarquitectura de un
procesador superescalar

9
Notas históricas sobre los procesadores superescalares

- Los primeros prototipos fueron estudiados por


IBM a través de dos proyectos: Cheetah (1982-83)
y América (desde 1985).
- El proyecto Cheetah sirvió de base al proyecto
America y a la línea RS/6000 o Porwer 1 (1990).
- El término superescalar surgió en un documento
interno de IBM.

10
Notas históricas sobre los procesadores superescalares

11
Notas históricas sobre los procesadores superescalares

- El proyecto Multitian de DEC no llegó a materializarse en un


producto final.
- En Stanford (EEUU) se estudiaron dos proyectos de máquinas
superescalares (Torch y Match) en 1988 y 1989.
- En la universidad de Kyushu (Japón) otros dos (SIMP y DSNS)
- El primer procesador superescalar comercial fue el
procesador RISC de Intel 960CA en 1989.
- Las arquitecturas RISC fueron las primeras implementadas en
microarquitecturas superescalares.

12
3.2.
PARALELISMO ENTRE
LAS INSTRUCCIONES (ILP)
Y PARALELISMO DE LA
MÁQUINA

13
- La mayor o menor facilidad para encontrar en un programa
instrucciones que puedan procesarse, depende de la frecuencia con
que aparecen dependencias de datos de control, que determinan la
disponibilidad del resultado para iniciar las instrucciones como
operando o como condición de un salto condicional.

14
- En este ejemplo, las instrucciones deben procesarse
secuencialmente, respetando el orden establecido por las
dependencias RAW.

- Esta secuencia de instrucciones tiene un grado de paralelismo igual


a 1.
- Esta capacidad se puede denominar paralelismo del procesador.

15
Resultados de estudios de paralelismo para distintos programas

- En la segunda columna se obtiene paralelismo sin limitaciones en el


hardware y sin errores.
- En la tercera columna los programas pueden variar mientras se
obtiene determinadas limitaciones en recursos o en prestaciones.

16
3.3.
PROCESAMIENTO
SUPERESCALAR DE
INSTRUCCIONES

17
- Esquema de la organización de las
etapas de un procesador
superescalar.
- La ejecución de las instrucción es
cuando la instrucción está en su
etapa de ejecución.
- El procesamiento de la instrucción
indica que la instrucción está en
algunas de las etapas del cauce.

18
Comparación del comportamiento de emisión ordenada y
desordenada
- Primero se emitirán las dos
primeras instrucciones y luego las
dos siguientes.
- La instrucción 4 debe esperar a que
se concluya la instrucción 3.
- En emisión desordenada, la
instrucción 4 puede emitirse
cuando termine la instrucción 1.
- Si solo hubiera una unidad para
realizar las operaciones, se
reduciría el tiempo con la emisión
desordenada.

19
- El procesador es capaz de captar cuatro
instrucciones por ciclo y decodificar dos
instrucciones por ciclo.
- Pueden emitir y finalizar tantas
instrucciones por ciclo como sea posible.
- En emisión desordenada proporciona
mejores tiempos.
- Las flechas indican algunas de las
dependencias RAW entre las instrucciones.
- Al finalizar desordenadamente y escribir los
resultados en un orden distintos al que
aparecen en el código, podrian dar lugar a
problemas.

20
3.3.1.
DECODIFICACIÓN
PARALELA Y
PREDECODIFICACIÓN

21
Problemas que se abordan en el estudio de un procesador
superescalar y su ubicación en las distintas etapas del
procesador

22
Comparación entre las primeras etapas de un procesador
escalar y un procesador superescalar

23
Ubicación de la unidad de predecodificación y efecto en cuanto
a ancho de banda.
- En la etapa de predecodificación se añaden a la instrucción una serie de bits que permiten
acelerar la decodificación completa de las instrucciones en la etapa.
- La etapa de predecodificación incrementa el ancho de banda necesario hacia la caché L1.

24
25
3.3.2 Emisión de
instrucciones

26
Una vez captadas las instrucciones, se almacenan en una cola de
instrucciones en el mismo orden en que se han captado en el
código. La etapa de decodificaciones toma varias instrucciones por
ciclo según en el orden en que se encuentran en la cola de
instrucciones del programa. Luego de ser decodificadas se escriben
en una serie de estructuras cuyas características se describirán a
continuación.

27
Ventana de instrucciones o de
emisión:
Esta estructura se implementa a través de una cola de registros donde se
almacenan las instrucciones que han sido decodificadas, y que están a la
espera de ser emitidas a las unidades funcionales donde se ejecuta la
operación que codifican.

28
ETAPA DE EMISIÓN
Determina qué instrucciones pueden emitirse a disponer de sus operandos
y existir unidades funcionales libres para su ejecución. En el caso de que un
ciclo determinado, haya varias instrucciones disponibles y existan colisiones
entre ellas debido a limitaciones en el número de unidades funcionales
disponibles, o en los buses y puertos que permiten enviar instrucciones a la
correspondiente unidad.

29
30
Estructura de las líneas de la ventana
de instrucciones usada por la etapa de
emisión.

31
Políticas de
emisión

32
Emisión ordenada y desordenada

33
Emisión alineada y no alineada

En cuanto al orden, la emisión es ordenada. En la emisión alineada, hasta que no se han emitido todas las
instrucciones que se encuentran en la ventana de instrucciones no se pueden introducir nuevas instrucciones
en la ventana. En la emisión no alineada es posible emitir hasta 3 instrucciones por ciclo mientras que en la
emisión alienada máximo dos instrucciones por ciclo.

34
35
Ejemplo de ejecución de una
secuencia de instrucciones
Venus has a beautiful name and is the
second planet from the Sun. It’s hot and has
a poisonous atmosphere

Venus Mercury

Mercury is the closest planet to the Sun and


the smallest one in the Solar System—it’s
only a bit larger than the Moon

36
Venus
Venus has a beautiful name and
Mars is the second planet from the
Sun

37
Comparación entre emisión ordenada y desordenada (1
unidad de suma/resta y 1 de multiplicación)

38
Estaciones
de reserva

39
Microarquitectura con estaciones de reserva

40
Ejemplo de emisión de instrucciones a las
estaciones de reserva

41
Envío de
Instrucciones

42
Alternativas para
organizar las
estaciones de reserva

43
Captación y
comprobación de
validez de
operandos
44
Organizaciones de la microarquitectura para la política de
captación de operandos en la emisión

45
Organizaciones de la microarquitectura para la política
de captación de operandos en el envío

46
Evolución de la emisión y envío de las instrucciones del
ejemplo (situación inicial)

47
Evolución de la emisión y envío de las
instrucciones del ejemplo (tras el ciclo)

48
Evolución de la emisión y envío de las instrucciones del
ejemplo (tras el ciclo i+1)

49
Evolución de la emisión y envío de las instrucciones del
ejemplo (al finalizar la multiplicación)

50
3.3.3 RENOMBRAMIENTO
DE REGISTROS

51
● En un procesador superescalar se pueden emitir varias instrucciones por ciclo a
distintas unidades funcionales, con tiempos de ejecución diferentes.

● Esto ocasiona que la ejecución de las operaciones codificadas sea de forma


desordenada.

● El renombramiento evita los problemas de los riegos o dependencias WAW y WAR


usando los registros de la microarquitectura.

● A continuación en la figura se ilustra el orden de las lecturas y escrituras en los riegos


RAW, WAR y WAW.
52
53
Para realizar el renombramiento :

1. La escritura se hace siempre en un registro diferente de los que usan los operandos y
de los que se usan en otras escrituras.
2. Para mantener la dependencia RAW toda lectura que se haga de un registro que se
escribe previamente debe seguir haciéndose de dicho registro.

54
● El renombramiento se puede implementar a través del compilador, que pueden
utilizar los registros visibles, propios de la arquitectura, para ubicar los
operandos y resultados de las instrucciones de forma que no se tengan
dependencias de tipo WAR Y WAW.

● También se puede implementar esta técnica mediante hardware, incluyendo una


serie de registros adicionales, que pueden servir como almacenamiento temporal
para realizar los re-nombramientos y que se liberan cuando la instrucción cuyos
operando y resultados hayan sido renombrados finaliza su procesamiento

55
● El renombramiento puede ser estático si se realiza durante la compilación o
dinámico si se realiza durante la ejecución del programa utilizando registros y
hardware de control extra.

● En el caso del renombramiento dinámico, las prestaciones del procesador se


verán afectadas por la velocidad de renombramiento, es decir, el número máximo
de asignaciones de registros por ciclo que se pueden realizar.

● La velocidad de renombramiento y el coste del mismo vendrán determinadas por


características como el número y tipo de buffers que se utilizan y por los
mecanismos (indexados o asociativos) para acceder a los mismos.
56
EJEMPLO DE DISTINTAS ORGANIZACIONES PARA BUFFERS
Existen dos alternativas para el acceso a los buffers de reordenamiento:

Acceso Asociativo: Cada línea del buffer tiene 5 Campos: Asignación valida, Registro de destino, Contenido,
contenido valido, bit de asignación valida, se dice asociativo porque se busca línea por línea y se ve el registro de
destino, y si la asignación es valida

Acceso Indexado: Para cada registro existe un índice que apunta a la línea del buffer que renombro ese registro,
con un campo de asignación valida que indica si se hizo o no el renombramiento.
A) BUFFER DE RENOMBRAMIENTO CON ACCESO ASOCIATIVO

Es 1 si se ha Indica el Datos “0” si una “1” si se hizo la última


renombrado algún registro que actualizados instrucción(emitida o asignación al registro,
registro y la se ha del registro enviada) va a escribir se tomará este valor
información de los aquí su resultado (no
renombrado hay dato)
para la siguiente
otros campos es
valida instrucción

Bit de
Asignación Registro Contenido
Contenido asignación
valida de destino valido
última
0 0 5 35 1 1

1 1 4 14 1 1
2 1 2 22 1 0
3 1 2 32 0 1
… … … … … …
60

Búsqueda asociativa de r4 14
B) BUFFER DE RENOMBRAMIENTO CON ACCESO INDEXADO
Indica si se ha Apunta al último renombramiento
hecho o no el para el registro, es por eso que no Apunta a la línea del
renombramiento hay bit de asignación última buffer que renombra
ese registro
registros
Índice en el Contenido
Asignación Contenido
buffer de Valido
valida
renombramiento
33 1
0 0 2 0
14 1
1
1 0 4
26 1
2
2 1 3
3 32 0
3 0 2
4
4 1 1 5
5 0 0
Tabla de índices : una línea por registro Buffers de
de la arquitectura renombramiento
14
Búsqueda en la línea de la tabla de índices
correspondiente al registro r4 61
MICROARQUITECTURA CON BUFFER DE REORDENAMIENTO Y ESTACIONES DE RESERVA CON
CAPTACIÓN DE OPERANDOS EN EL ENVÍO

62
Funcionamiento del renombramiento de registros , la emisión y el envió en una
microarquitectura con buffer de renombramiento de acceso asociativo y estaciones de
reserva.
Se utilizarán las instrucciones:
Mult r2,r0,r1 demora 5 ciclos
Add r3,r1,r2 demora 2 ciclos
Sub r2,r0,r1 demora 2 ciclos
La captación de operandos se produce en la emisión
El envío de instrucciones desde las estaciones de reserva a las unidades funcionales es
desordenado
Cuando las instrucciones vayan finalizando, los contenidos de las líneas donde se
renombraron los registros se actualizan en el banco de registros y se invalidan las líneas
correspondientes del buffer (EV=0), para poder ser utilizadas por otras instrucciones 63
64
65
Los campos de línea del buffer de renombramiento que se indican

-EV : asignación valida

-Dest : registro de destino

-Valor : contenido

-Valid : contenido valido

-Ult : bit de asignación última

En la figura se considera que solo la línea 0 del buffer tiene una asignación válida, esta línea se utiliza para el
renombramiento del registro r4 y su valor válido es igual a 40.

En la parte (b) se muestran los cambios que se producen en el buffer de renombramiento y en las estaciones de reserva al
emitir la instrucción de multiplicación mult.

En primer lugar se busca si los operandos r0 y r1 están en buffer de renombramiento, como no es así, se llevan desde el
banco de registros y se utilizan en las líneas 1 y 2 del buffer para renombrar al registro r0 y r1 y se pone sus valores en el
campo de contenido y en los campos de contenido válido se ponen a 1

También se usan la línea 3 del buffer para renombrar al registro r2, el campo de contenido válido de esa línea de pone a 0
para indicar que el campo de contenido no es válido, sino que allí se escribirá el resultado de la instrucción. Finalmente en
la línea correspondiente de la estación de reserva de la que cuelga el multiplicador se introducen los valores de los registros
66
r0 y r1 (líneas 1 y 2 del buffer) y el código de la línea del buffer de renombramiento donde se escribirá el resultado de la
multiplicación (línea 3).
FUNCIONAMIENTO DEL RENOMBRAMIENTO DE REGISTROS , LA EMISIÓN Y EL ENVIÓ DE EN UNA
MICROARQUITECTURA CON BUFFER DE RENOMBRAMIENTO DE ACCESO ASOCIATIVO Y ESTACIONES DE RESERVA

Cola de Banco de Son los mismos bit :Asignación valida, Registro de destino,
instrucciones registros Contenido ,Contenido valido, Bit de asignación ultima
r0 0 Buffer de renombramiento
Mult r2,r0,r1
r1 10 # EV Dest Valor Valid Ult.
Add r3,r1,r2 a
r2 20
0 1 4 40 1 1
Sub r2,r0,r1 1 0
r3 30
2 0
r4 40 3 0
Campo de Campo
4 0
operando de Bit de
r5 50 Línea del buffer
operando valide
z del registro de
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin destino
o

mult

OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin


o
Add/s
ub
Unidades funcionales
Estaciones de reserva(3 líneas c/u)
2.- Se renombran 1.- Esta r0 y r1 en
r0, r1 y r2 el buffer ? No
Buffer de renombrado
Cola de Banco de Valid
instrucciones # EV Dest Valor Ult.
registros a
Mult r2,r0,r1 r0 0 0 1 4 40 1 1

Add r3,r1,r2 r1 10 1 1 0 0 1 1

Sub r2,r0,r1 r2 20 2 1 1 10 1 1

r3 30 3 1 2 0 1
Emision r4 40 4 0
mult r5 50
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin
o
mult 0 1 10 1 3
mult

OC
3.- r0 y r1
OS1/iS1 VS1
y la OS2/IS2 VS2 Rdestin
operación van a la o
estación Add/s
ub

Unidades funcionales
Estaciones de reserva
1.- Están r1,r2 en el
Envió mult buffer? Buffer de renombrado
Emisión add,
sub # EV Dest Valor Valid Ult.
Cola de a
instrucciones Banco de r0 0 0 1 4 40 1 1
registros r1 10 1 1 0 0 1 1
Add r3,r1,r2
r2 20 2 1 1 10 1 1
Sub r2,r0,r1
r3 30 3 1 2 0 0
Se guarda el código de la r4 40 4 1 3 0 1
línea 3 del buffer r5 50 5 1 2 0 1

OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestino Mult 0*10, dest(3)

mult

2.-ro,r1,r2, Add, Sub


van a la Estación de
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestino
reserva
Add 10 1 3 (apunta 0 4 (apunta a
al la linea 4)
registro 3) Add/s UF
Sub 0 1 10 1 5(apunta a la ub
linea 5)
Estaciones de reserva
mult continúa ejecutándose
(5 ciclos), se empieza a
Envio ejecutar sub Buffer de renombrado
Sub Banco de
registros # EV Dest Valor Valid Ult.
Cola de a
instrucciones r0 0
0 1 4 40 1 1
r1 10
1 1 0 0 1 1
r2 20
2 1 1 10 1 1
r3 30
3 1 2 0 0
r4 40
4 1 3 0 1
r5 50
5 1 2 0 1
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestino
Mult 0*10, dest(3)
Se permite el envío desordenado de
sub (por tener datos), add espera dato
de mult
mult

OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin Sub 0-10 dest(5)


o
add 10 1 3 apunta 0 4 Add/s
al registro ub
3

UF
Estaciones de reserva
Otras instrucciones ya
pueden usar este valor
Buffer de renombrado
valido
Cola de Banco de
instrucciones registros # EV Dest Valor Valid Ult.
a
r0 0
0 1 4 40 1 1
r1 10
1 1 0 0 1 1
r2 20
2 1 1 10 1 1
r3 30
3 1 2 0 0
Termina r4 40
4 1 3 0 1
Sub r5 50
5 1 2 -10 1 1
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestino Mult 0*10, dest(3)

mult

Sub 0-10 dest(5)


OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestino
Add/s
add 10 1 3 (apunta 0 4
al registro ub
3)

Primero debe terminar


Estaciones de reserva mult , luego se envía add
Buffer de renombrado

Cola de # EV Dest Valor Valid Ult.


Banco de
instrucciones a
registros
r0 0 0 1 4 40 1 1

r1 10 1 1 0 0 1 1

r2 20 2 1 1 10 1 1

r3 30 3 1 2 0 1 0
Termin r4 40 4 1 3 0 1
a Mult r5 50 5 1 2 -10 1 1

OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin Mult 0*10, dest(3)


o
mult

OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin Add/s


o ub
add 10 1 0 1 4

Termino de ejecutarse Mult y entrega


Estaciones de reserva su resultado , el cual lo usara Add
Cuando las instrucciones vayan finalizando, los contenidos de las líneas donde se renombraban los
registros se actualizan en el banco de registros y se invalidan las líneas correspondientes del buffer
(EV=0), para poder ser utilizadas por otras instrucciones

Cola de Banco de Buffer de renombrado


instrucciones registros
r0 0 # EV Dest Valor Valid Ult.
a
r1 10
0 1 4 40 1 1
r2 20
1 1 0 0 1 1
r3 30
2 1 1 10 1 1
Envío r4 40
add 3 1 2 0 1 0
r5 50
4 1 3 10 1 1
OC OS1/iS1 VS1 OS2/IS2 VS2 5 1
Rdestin 2 -10 1 1
Cuando tienen que retirarse se actualizan o

los registros marcados con el bit de mult


ultimo, al banco de registros
Add 0+10, dest(4)
OC OS1/iS1 VS1 OS2/IS2 VS2 Rdestin
o Add/s
ub

Se envía la
Estaciones de reserva
suma
3.3.4
Mantenimiento de la
consistencia

74
Buffer de reordenamiento
La ejecución de instrucciones en procesadores superescalares introduce un desafío intrigante: las instrucciones
se ejecutan en un orden que puede diferir significativamente del orden en que se emitieron originalmente. Este
enfoque se adopta para maximizar el paralelismo de instrucciones y mejorar drásticamente el rendimiento del
procesador. Para comprender mejor este fenómeno, es fundamental explorar dos conceptos fundamentales: el
procesamiento de una instrucción y la ejecución de una instrucción.

Procesamiento de una Instrucción: El procesamiento de una instrucción en un procesador superescalar implica


su paso por cada una de las etapas del cauce de ejecución, desde que se captura hasta que se retira del cauce.
Dentro de este proceso, dos momentos importantes son:
Final de la ejecución de la operación codificada de la instrucción: En este punto, se dispone de los
resultados de las unidades funcionales que realizaron la operación especificada por la instrucción. Esto
significa que los resultados están listos para ser utilizados en instrucciones posteriores, pero aún no se
han escrito en los registros.
Final del Procesamiento de una instrucción: Aquí, se completa la instrucción, lo que se conoce como
"commit" o "completado". En este punto, los resultados de la operación se escriben en los registros, lo
que significa que la instrucción ha terminado su ejecución y su resultado final se ha almacenado de
manera permanente.

75
Ejecución de Instrucciones en Procesadores Superescalares:
Cuando una instrucción se ejecuta en un procesador superescalar, pasa por varias etapas:
● Ejecución de una Instrucción: En esta etapa, la unidad funcional correspondiente realiza la
operación especificada por la instrucción.
● Renombramiento y Estaciones de Reserva: Para evitar conflictos de datos y permitir la
ejecución desordenada de instrucciones, se usan técnicas como el renombramiento de
registros y las estaciones de reserva. Esto permite ejecutar instrucciones en el orden en que
están listas, en lugar de esperar su turno según su orden de emisión.
● Finalización de Instrucciones: La última etapa se llama finalización o retirada de
instrucciones. Aquí, los resultados se copian desde registros internos (donde se
almacenaron temporalmente) a los registros de la arquitectura, completando la instrucción.
En relación con la consistencia secuencial de un programa en procesadores superescalares, esto
se refiere a dos aspectos:
● Orden de Completado de Instrucciones: Se asegura de que las instrucciones se completen
en el orden en que se emitieron originalmente, a pesar de que se ejecuten fuera de orden.
● Orden de Acceso a la Memoria (LOAD y STORE): Garantiza que las lecturas y escrituras en
memoria ocurran en el orden correcto, siguiendo el flujo lógico del programa,
independientemente del orden de ejecución de las instrucciones.

76
La consistencia secuencial es
• El orden en que las instrucciones se completan
• El orden en que se accede a la memoria para leer (LOAD) o escribir (STORE)
• Debe existir consistencia entre el orden en que se completan las instrucciones y el
orden secuencial que tiene en el código de programa

77
Tipos de consistencia en el procesamiento de instrucciones

Consistencia del Débil: Las instrucciones se pueden Deben detectarse y Power1(1990)


procesador completar desordenadamente siempre resolverse las MC88110(1993
que no se vean afectadas las dependencias )
Es el orden en dependencias
que se
Fuerte: Las instrucciones deben Se consigue Power PC
completan las
completarse estrictamente en el orden mediante el uso de 620(1996)
instrucciones
en que están en el programa un ROB R10000(1995)

Consistencia de Débil: Los accesos a memoria Deben detectarse y MC88110(1993


la memoria (Load/Store) pueden realizarse resolverse las )
desordenadamente siempre que no dependencias de R10000(1996)
Es el orden de afecten a las dependencias acceso a memoria
los accesos a
Fuerte: Los accesos a memoria deben Se consigue Power
memoria
realizarse estrictamente en el orden en mediante el uso de PC(1993)
que están en el programa un ROB E/S 9000(1992)

78
CONSISTENCIA DE MEMORIA :
UN ACCESO A MEMORIA , ES LEER LA MEMORIA, OSEA QUE LOS DATOS PASEN DE
MEMORIA A REGISTROS DEL PROCESADOR (LOAD) O ESCRIBIR EN LA MEMORIA DATOS
DEL REGISTRO DEL PROCESADOR (STORE), EL ACCESO A MEMORIA PUEDE SER
CONSIDERABLE SI LA DIRECCIÓN A LA QUE SE ACCEDE NO ESTÁ EN CACHÉ Y HAY QUE
ACCEDER A LA MEMORIA PRINCIPAL.
Desventajas de la consistencia fuerte seria que el
Loop: Ld r1,0x1C(r2) STORE esperaría a la multiplicación , la 2da
multiplicación también , etc.
Mul r1,r1,r6
La consistencia débil hace que el 2do load adelante al
St r1,0x1C(r2) primer store, mientras que se ejecute mult, se usan los
Ld r3,0x2D(r2) buses de acceso a memoria para el load, dado que
store espera a mult.
Mul r3,r3,r6
En el caso que no se sepa si las direcciones son iguales,
St r3,0x2D(r2) y se hace un acceso a memoria se le llama Adelanto
Addi r2,r2,#1 Especulativo
En el caso que se confirme que son iguales se debe
Subi r4,r4,#1 deshacer lo hecho, esto implica un coste o
Bnz r4,loop empeoramiento. La clave esta en que sea capaz de
acertar con la especulación en la mayor parte de los
casos 79
Distintas opciones de reordenamiento de instrucciones de acceso a
memoria (LOADs y STOREs) para mejorar las prestaciones del
procesador.

80
CONSISTENCIA DE PROCESADOR Y BUFFER DE
REORDENAMIENTO(ROB)
● Consistencia de Procesador:

○ La consistencia de procesador se refiere al orden en que se completan las instrucciones en un


procesador superscalar. Una vez que la operación codificada por una instrucción se ha ejecutado, la
instrucción concluye su procesamiento actualizando el registro correspondiente de la arquitectura y
abandona el cauce de ejecución.
● Renombramiento de Registros:

○ Para evitar los efectos de los riesgos WAW (Write After Write) y WAR (Write After Read) y aprovechar
al máximo el paralelismo entre instrucciones, se utiliza el renombramiento de registros. Esto implica
asignar registros físicos temporales a las instrucciones, permitiendo que múltiples instrucciones
escriban en registros aparentemente iguales sin conflictos.

81
CARACTERÍSTICAS DE UN ROB
> El ROB es una estructura con un comportamiento sencillo, aunque no son simples los recursos hardware que
precisaría su implementación eficaz.
> El ROB permite ejecutar correctamente el procesamiento especulativo de las instrucciones de salto y las
interrupciones, el ROB también se puede utilizar para implementar el renombramiento
> Un ROB es un buffer circular en que, en cada uno de sus elementos o líneas, se va introduciendo información
de las instrucciones con el mismo orden con el que dichas instrucciones han sido decodificadas.
> Las instrucciones se introducen en el ROB en orden de programa estricto, marcándose como emitidas (i), en
ejecución (x), o finalizada su ejecución (f), utilizando una de los campos de las líneas del ROB.
> Una instrucción solo se pude retirar del ROB (y al retirarse se produce la actualización de los resultados que
genera la instrucción en los registros, finalizando su procesamiento) si ha terminado la ejecución de la operación
que codificaba (pasa a estar marcada con f).
En el siguiente ejemplo se muestra
> Como el puntero de cabecera del buffer señala la siguiente posición libre y el puntero de cola a la siguiente
instrucción que se retiraría del ROB cuando termine su procesamiento.

82
Descripción esquemática de un ROB

83
Evolución del ROB en el procesamiento de la secuencia de instrucciones
> Líneas del ROB :
- Resg. dest: contiene el registro de la arquitectura en el que se va a escribir el resultado
de la instrucción cuando se retire.
- Unidad: codifica la unidad funcional donde se va a ejecutar la instrucción y se genera el
resultado que se almacena en el campo resultado
- ok: es el campo de bit de validez que indica si el contenido del campo resultado es
valido o no.
- Marca: permite determinar si la instrucción ha finalizado su ejecución y podría retirarse
escribiendo sus resultados cuando todas las instrucciones que le anteceden en el ROB se
hayan retirado

84
SECUENCIA DE INSTRUCCIONES PARA ILUSTRAR CON UN EJEMPLO EL
USO DEL ROB
Secuencia de 4 instrucciones, se
muestra el estado de las líneas
de las estaciones de reserva en
las que esperan las
instrucciones I2 e I4 a que sus
operandos estén disponibles.
Estos operandos serán
generados por las instrucciones
I1 e I3, respectivamente. Que en
el ciclo 7 se están ejecutando.
Como se puede observar en la
líneas correspondientes de las
estaciones de reserva, los
campos de operando cuyo bit
de validez esta a 0 (es decir que
no tienen datos validos)
apuntan a las líneas del ROB
donde se ha almacenado la
instrucción I1, es decir
85 la línea 3
(para I2), y la instrucción I3, es
decir la línea 5 (para I4)
>La figura muestra varios ciclos de en la
evolución del ROB, se supone que se pueden
retirar del ROB 2 instrucciones por ciclo.

>Esta característica determina el número 1


máximo de instrucciones por ciclo que
puede terminar el procesador (la velocidad 2
pico del procesador podría estimarse a partir
de este numero máximo de instrucciones 3
multiplicado por la frecuencia del 4
procesador) y depende de los recursos
hardware que se disponga.

>Es necesario que haya tantos puertos de


escritura en el banco de registros como
instrucciones pueden retirarse, y que cada
una de esas instrucciones puede necesitar 1
realizar una escritura en uno de los registros
de la arquitectura. 2

3
86
4
3.4
Procesamiento de las
instrucciones de salto

87
> Hasta el momento se estudio problemas planteados por dependencia de datos
RAW, WAR y WAW en procesamiento superescalar de instrucciones, donde cada
etapa del cauce puede trabajar con mas de una instrucción por ciclo.

> Esta sección se dedica al estudio del procesamiento eficiente de las


instrucciones de salto de un procesador superescalar.

> Un procesador superescalar, al ser un procesador segmentado también sufre


una reducción de prestaciones considerable como consecuencia de los cambios en
la secuencia de instrucciones que debe introducirse en el cauce cuando se
produce un salto. Si cabe, el efecto de salto en los superescalares es todavía mas
grave, dado que al captarse, decodificarse y emitirse varias instrucciones por ciclo
puede ocurrir que, en determinados códigos, prácticamente en cada ciclo haya
una instrucción de salto.
88
Detección de la instrucción de salto: cuanto antes se detecte que una instrucción
es de salto antes puede empezar a procesarse como tal, por ejemplo iniciándose
el calculo de la dirección de destino del salto lo mas pronto posible. De esta
forma se puede reducir la posible penalización que ocasionan estas instrucciones
si se produjese el salto.

> Así si se identifica que una instrucción es de salto condicional en el momento de


la captación, en lugar de esperar a la etapa de decodificación (procesador como el
80386 y el 60830) y se determina o se conoce la dirección de destino de salto en
ese mismo ciclo de captación, en el siguiente ciclo se pueden empezar a captar
instrucciones a partir de la dirección adecuada sin que exista penalización.

> La etapa de pre-decodificación es útil para la detección rápida de la instrucción


de salto. 89
1. Detección paralela: hay una etapa especifica para detectar instrucciones de salto que opera en paralelo con
una etapa común de decodificación. Esta alternativa se usa en los procesadores alpha.

2. Detección anticipada: además de utilizarse la decodificación paralela, se usan las ultimas líneas de la cola de
instrucciones captadas antes de que pasen a la unidad de decodificación. Lo usa el PowerPC 603.

3. Detección integrada en la captación: en el momento en que se captan las instrucciones se detecta si la


instrucción es de salto o no (para eso pueden usa los bits de predecodificacion, como se indico antes), esta
opción se usa en el PowerPC 640
Gestión de saltos condicionales no resueltos: si en el momento en que la instrucción de salto evalúa la condición
de salto, esta no se ha terminado de evaluar todavía, se dice que el salto o la condición de salto no se ha
resuelto. Para resolver este problema los procesadores superescalares suelen usar el procesamiento especulativo
de salto.

90
Alternativas para la detección
temprana de instrucciones de salto

Gestión de saltos condicionales no resueltos: si en el momento en que la instrucción de salto evalúa la condición de salto,
esta no se ha terminado de evaluar todavía, se dice que el salto o la condición de salto no se ha resuelto. Para resolver este
problema los procesadores superescalares suelen usar el procesamiento especulativo de salto. 91
3.4.1 Alternativas
para la gestión
de los saltos
condicionales

92
Alternativas para la gestión de
los saltos condicionales
Los saltos condicionales son instrucciones que permiten que el flujo de ejecución de un programa se desvíe a una
ubicación diferente en función de una condición específica. Estas instrucciones son esenciales para la
implementación de estructuras de control de flujo, como las estructuras de decisión (if-else) y los bucles (for,
while).

Las alternativas para la gestión de los saltos condicionales en procesadores escalares se refieren a diferentes
técnicas y estrategias utilizadas para manejar de manera eficiente estas instrucciones.

93
Alternativas para la gestión de
los saltos condicionales
Puntos que podemos destacar de las alternativas de saltos condicionales:

● Predicción de saltos: Los procesadores modernos a menudo emplean unidades de predicción de saltos para
anticipar si una instrucción condicional se tomará o no. Esto permite que el procesador especule sobre el flujo
de ejecución y continúe ejecutando instrucciones antes de que se conozca el resultado del salto condicional. Si
la predicción es correcta, se ahorra tiempo de ejecución. Si es incorrecta, se debe deshacer el trabajo realizado
(conocido como deshacer la ejecución especulativa).
● Ejecución fuera de orden: En lugar de esperar a que se resuelva un salto condicional, los procesadores
escalares modernos pueden ejecutar instrucciones en un orden diferente al que aparecen en el programa,
siempre que no haya dependencias de datos que lo impidan. Esto puede incluir la ejecución de instrucciones
después del salto condicional antes de saber si se tomará o no, con la esperanza de que se tome el camino
más probable.

94
Alternativas para la gestión de
los saltos condicionales
● Superscalaridad: Los procesadores superscalares son capaces de ejecutar múltiples instrucciones en paralelo.
Esto puede incluir instrucciones condicionales que se ejecutan simultáneamente con otras instrucciones no
condicionales. La idea es aprovechar al máximo las unidades de ejecución y reducir el impacto de los saltos
condicionales en el rendimiento.
● Renombramiento de registros: Esta técnica permite reorganizar internamente los registros del procesador para
evitar conflictos de datos causados por saltos condicionales y dependencias de datos. Esto permite una
ejecución más eficiente de las instrucciones, incluidos los saltos condicionales.
● Reducción de saltos condicionales: Los compiladores pueden intentar reducir la cantidad de saltos
condicionales en el código fuente mediante la optimización. Esto se hace reorganizando el código para evitar
instrucciones de salto innecesarias o reemplazandolas por instrucciones que no generen saltos.

95
3.4.1.1
Predicción
para los saltos
condicionales

96
Alternativas para la predicción
de paro
La predicción de saltos es una técnica crucial para mejorar el rendimiento de los procesadores al anticipar si
una instrucción condicional se tomará o no. Aquí te presento algunas de las alternativas para la predicción de
saltos:

● Predicción estática: En lugar de utilizar hardware especializado para predecir saltos, se basa en información
estática sobre el código fuente. Esto puede incluir estrategias de predicción basadas en la estructura del
programa, como asumir que los bucles se toman con alta probabilidad.
● Predicción de salto en el compilador: Los compiladores pueden analizar el código fuente y aplicar técnicas de
optimización para predecir los saltos condicionales. Esto puede incluir la reordenación del código o la
identificación de patrones de comportamiento.
● Predicción basada en el historial: Los procesadores mantienen un registro del comportamiento de saltos
anteriores y utilizan esta información para predecir futuros saltos. Esto puede incluir estrategias como el
seguimiento de la dirección de los saltos recientes y asumir que se repetirá el comportamiento anterior.

97
Alternativas para la predicción
de paro
● Predicción basada en el patrón: Los procesadores pueden utilizar técnicas de análisis de patrones para
predecir saltos. Esto implica buscar secuencias repetitivas de saltos en el código y utilizar esta información
para hacer predicciones.
● Predicción basada en el contenido de registros: Algunos procesadores utilizan el contenido de registros
específicos (llamados registros de historia) para ayudar en la predicción de saltos. Estos registros pueden
mantener información sobre el comportamiento de saltos anteriores.
● Predicción de saltos múltiples: En algunos casos, los procesadores pueden predecir múltiples saltos
condicionales en secuencia. Esto implica prever la toma o no toma de varios saltos consecutivos.

98
Alternativas para la predicción
de paro
● Predicción de saltos adaptativa: Los procesadores pueden adaptar su estrategia de predicción en función del
comportamiento observado. Por ejemplo, pueden cambiar entre diferentes predictores de salto según el tipo de
instrucción condicional o el patrón de saltos.
● Predicción basada en aprendizaje automático: Algunos procesadores utilizan técnicas de aprendizaje
automático para predecir saltos condicionales. Pueden entrenar modelos predictivos basados en datos
históricos de ejecución para mejorar la precisión de la predicción.
● Predicción mixta: Esta técnica combina múltiples estrategias de predicción de saltos en un único procesador.
El procesador puede utilizar diferentes predictores de salto según la situación, lo que mejora la precisión
general de la predicción.

99
3.4.2
Instrucciones
de ejecución
condicional

100
La solución para reducir el impacto negativo de las instrucciones de
salto condicional en procesadores superescalares es usar
instrucciones de ejecución condicional en lugar de saltos. Estas
instrucciones permiten realizar operaciones condicionales sin
necesidad de saltos. Se pueden encontrar en arquitecturas como
SPARC, Alpha, HP PA y x86, y son más comunes en arquitecturas
VLIW.

Estas instrucciones tienen dos partes: una condición y una operación.


La operación se ejecuta solo si la condición es verdadera. Por
ejemplo, la instrucción "cmovxx ra.rq, rb.rq, rc.wq" copia rb.rq en
rc.wq si la condición es verdadera, evitando así saltos condicionales.

101
Estas instrucciones puede reducir significativamente la cantidad de
saltos en programas. En promedio, un conjunto de instrucciones
completamente condicional puede eliminar alrededor del 33% de los
saltos, mientras que un conjunto parcialmente condicional, donde sólo
ciertas instrucciones pueden ejecutarse condicionalmente, puede reducir
en promedio un 15% de los saltos condicionales y alrededor del 2% de
los saltos incondicionales.

102
3.5 Interrupciones
en un
procesador
superescalar

103
En procesadores segmentados, gestionar interrupciones es complicado
debido a:

- Dificultad para identificar la causa exacta de excepciones, ya que


varias instrucciones pueden generarlas simultáneamente.

- Puede transcurrir bastante tiempo desde que se produce una


interrupción hasta que se reconozca.

- Las instrucciones en proceso pueden modificar el estado de la


máquina, dificultando determinar qué estado debe guardarse para
una recuperación adecuada.

104
En procesadores con finalización desordenada, la gestión de
interrupciones es aún más compleja, ya que una instrucción puede
generar una interrupción después de que una instrucción posterior haya
terminado. Por lo tanto, se requiere un enfoque cuidadoso en la gestión
de interrupciones en estos sistemas. Como ejemplo considérense estas
instrucciones.

Si divf produce un interrupción después de que addf se haya


completado,es difícil implementar dicha interrupción de forma precisa
porque addf habrá escrito y ya en f10 para abordar esta dificultad que
plantea la finalización desordenada de instrucciones existen varias
alternativas:

105
1. Ignorar el problema de interrupciones precisas, pero esta opción es
poco común debido a la preferencia por la precisión en los
procesadores superescalares.
2. Esperar a que las instrucciones anteriores terminen antes de emitir
nuevas instrucciones, lo cual reduce el paralelismo entre
instrucciones y no es satisfactorio.
3. Almacenar los resultados de instrucciones ejecutadas y escribirlos en
los registros de arquitectura solo después de que las instrucciones
previas hayan terminado, utilizando estructuras como el buffer de
reordenamiento. Esto permite que las instrucciones se procesen
desordenadamente pero se escriban en orden.
4. Mantener información sobre las instrucciones ejecutadas
anticipadamente para deshacer sus efectos en caso de interrupción,
utilizando estructuras como el buffer de historia y puntos de
chequeo-reparación.

106
La gestión de interrupciones en procesadores superescalares es similar
a la de instrucciones de salto condicional. Se pueden usar las mismas
estrategias para mantener la consistencia, como el buffer de
reordenamiento o el buffer de historia y puntos de
chequeo-reparación, en el caso de las interrupciones se pueden
considerar dos posibilidades.
1. Retiro Ordenado de Instrucciones: Las instrucciones se retiran en
orden, manteniendo un estado de máquina definido con un
buffer de reordenamiento.
2. Cambio Dinámico de Estado: Las instrucciones cambian el estado
a medida que se ejecutan; se usan estructuras como el buffer de
historia y puntos de chequeo-reparación para mantener un
estado coherente en caso de interrupción.

107
INTERRUPCIONES PRECISAS CON
BUFFER DE REORDENAMIENTO

Esta estrategia de gestión de interrupciones utiliza un buffer de


reordenamiento con un campo adicional que registra si una
instrucción ha causado una excepción en su proceso. Aprovecha que
las instrucciones se completan en orden en el buffer y que los
cambios en los registros de la arquitectura ocurren al retirar la
instrucción del buffer.

108
109
110
INTERRUPCIONES PRECISAS CON
BUFFER DE HISTORIA
La estrategia de interrupciones precisas se basa en un "buffer de
historia" que permite que las instrucciones modifiquen el estado de la
máquina durante su ejecución, finalizando de manera desordenada.
Este buffer almacena información sobre los cambios en el estado y
actualiza los registros de la arquitectura para recuperar ese estado en
caso de una interrupción. Se asemeja al Buffer de Reordenamiento
(ROB) pero usa un campo llamado "old.val" en lugar del campo de
"resultado" del ROB, ya que las operaciones modifican directamente
los registros de la arquitectura. Esto permite un seguimiento preciso de
los cambios en el estado de la máquina.

111
112
113
INTERRUPCIONES PRECISAS CON
PUNTOS DE CHEQUEO-REPARACIÓN.

En esta estrategia, se guardan copias del estado de la máquina en


puntos específicos a lo largo de la ejecución de las instrucciones.
Estos puntos se llaman "puntos de chequeo". Cuando ocurre una
interrupción, estos estados almacenados permiten restaurar o arreglar
el estado de la máquina a la condición que tenía en el momento en
que se realizó el último punto de chequeo. Esto garantiza que,
después de atender la interrupción, la máquina pueda continuar su
ejecución desde un estado coherente y sin pérdida de datos
importantes.

114
115
116
INTERRUPCIONES PRECISAS CON
REGISTROS DE FUTURO Y ROB

El banco de registros de futuro almacena valores de operandos y


resultados de instrucciones, mientras que el ROB controla la
finalización ordenada de las instrucciones. La clave es el uso de un
buffer de reordenamiento para mantener un orden preciso de
finalización de instrucciones y garantizar una recuperación correcta en
caso de interrupción. Esta organización separa el almacenamiento
temporal (ROB) de la gestión de la finalización de instrucciones
(banco de registros de futuro) para una ejecución eficiente y precisa.

117
118
119
Ejercicio 1
Supongamos que las cuatro instrucciones siguientes:

Se introducen una tras otra (en los ciclos indicados entre paréntesis) en un
buffer de renombrado con acceso asociativo. Indique (a) cómo evoluciona el
buffer de renombrado (registros del buffer de renombrado que se van
asignando, los registros de donde tomarían los datos y donde escribirían los
resultados las instrucciones, etc) para esas instrucciones; (b) en qué momento
empieza y termina la ejecución de las instrucciones; y (c ) cuáles son los valores
que quedan en los registros de la arquitectura al terminar, si inicialmente f1=2.0
y f2=3.0.
Nota: la multiplicación tarde 6 ciclos, y la suma y la resta 2 ciclos, y hay
suficientes unidades funcionales como para que no afecten los riesgos
estructurales. 120
Ciclo 3:

# Ent. Valida Reg. Valor Ok Ultimo


Destino

1 1 f3 0 1

Ciclo 4:

# Ent. Valida Reg. Valor Ok Ultimo


Destino

1 1 f3 0 0

2 1 f2 0 1

3 1 f3 0 1

121
Ciclo 5:

# Ent. Valida Reg. Destino Valor Ok Ultimo

1 1 f3 0 0

2 1 f2 0 1

3 1 f3 0 1

4 1 f5 0 1

122
Ciclo 6:

# Ent. Valida Reg. Destino Valor Ok Ultimo

1 1 f3 0 0

2 1 f2 0 1

3 1 f3 0 1

4 1 f5 0 1

5 1 f6 0 1

123
3 4 5 6 7 8 9 10 11 12 13 14 15

1 ID/ISS EX FIN

2 ID/ISS EX FIN

3 ID/ISS EX FIN

4 ID/ISS EX FIN

5 ID/ISS EX FIN

124
3 4 5 6 7 8 9 10 11 12 13 14 15

1 ID/ISS EX FIN

2 ID/ISS EX FIN

3 ID/ISS EX FIB

4 ID/ISS EX FIN

5 ID/ISS EX FIN

125
EJERCICIO N°02
Para el fragmento de código siguiente:
lw rl, 0xlac; r1 = m [0xlac]
lw r2, 0xlacf; r2 = m [0xclf]
add r3, r0, r0; r3 = r0+r0
mul r4, r2, r1; r4 = r2 * r1
add r3, r3, r4; r3 = r3 + r4
add r5, r0, 0xlac; r5 = r0 + 0xlac
add r6, r0, 0xclf; r6 = r0 + 0xclf
sub r5,r5, #4; r5 = r5 + 4
sub r5,r5, 0xclf; r6 = r6 + 4
sw (r5), r3; [r5] = r3
sw (r6), r4; m[r6] = r4

126
Y suponiendo que se puedan captar 4 instrucciones por ciclo y emitir 4
instrucciones por ciclo, indicar el orden que se emitirán las instrucciones para
cada uno de los siguientes casos:

a) Una ventana de instrucciones centralizada con emisión ordenada y


alineada
b) Una ventana de instrucciones centralizada con emisión desordenada
y alineada
c) Una estación de reserva de tres líneas para cada unidad funcional,
con envio ordenado y ventana deslizante

Nota: Considere que hay una unidad funcional para la carga [2 ciclos],
otra para el almacenamiento [1 ciclo], 3 para la suma/resta [1 ciclo], y una
para la multiplicación [6 ciclos]

127
a) Una ventana de instrucciones centralizada con emisión ordenada y
alineada

Orden de emision 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11

128
c) Una estación de reserva de tres líneas para cada unidad funcional,
con envio ordenado y ventana deslizante

Orden de la emision 1 - 3 - 2 - 4 - 6 - 7 - 8 - 5 - 9 - 10 - 11

129
b) Una ventana de instrucciones centralizada con emisión desordenada y
alineada

Orden de la emision 1 - 3 - 2 - 4 - 6 - 7 - 8 - 5 - 9 - 10 - 1

130
Ejercicio Nº03
Considere que el fragmento de código siguiente:

Se ejecuta en un procesador superescalar que es capaz de captar 4


instrucciones/ciclo, de decodificar 2 instrucciones/ciclo, de emitir (utilizando una
ventana de instrucciones con emisión no alineada) 2 instrucciones/ciclo, escribir
hasta 2 resultados/ciclo en los registros correspondientes (registros de reorden, o
registros de la arquitectura según el caso) y completar ( o retirar) hasta 2
instrucciones/ciclo. 131
Indicar el número de ciclos que tardaría en ejecutarse el programa
suponiendo:

a) Emisión ordenada y ejecución desordenada.


b) Emisión desordenada y ejecución desordenada.

Nota: considere que tiene una unidad funcional de carga( con latencia 2 ), una
de almacenamiento (con latencia 1), tres unidades de suma/resta ( latencia 1 )
y una de multiplicación ( latencia 6 ); y que no hay limitaciones para el
numero de lineas de la cola de instrucciones, ventana de instrucciones, buffer
de reordenamiento, puertos de lectura/escritura etc.)

132
a) Emisión ordenada y ejecución desordenada.

133
b) Emisión desordenada y ejecución desordenada.

134
Ejercicio 4)
¿Cómo renombraría un compilador los registros en la secuencia de
instrucciones siguiente para que no existan riesgos WAW ni WAR y utilizando el
menor número de registros posible?
¿Cómo se realizaría el renombramiento en un buffer de renombramiento con
acceso asociativo si se captan, decodifican hasta tres instrucciones por ciclo?

add r3,r2,r1 ; r3=r2+r1


sub r2,r3,r2 ; r2=r2-r2
add r4,r2,r3 ; r4=r2+r3
mult r3,r5,r3 ; r3=r5*r3
sub r2,r4,r6 ; r2=r4-r6
Cómo renombrar un compilador los registros en la
secuencia de instrucciones siguiente para que no existan
riesgos WAW ni WAR y utilizando el menor número de
registros posible?
add r3,r2,r1 add r3,r2,r1
sub r2,r3,r2 sub r7,r3,r2
add r4,r2,r3 add r4,r7,r3
mult r3,r5,r3 mult r8,r5,r3
sub r2,r4,r6 sub r2,r4,r6
¿Cómo se realizaría el renombramiento en un buffer de
renombramiento con acceso asociativo si se captan, decodifican hasta
tres instrucciones por ciclo?

add r3,r2,r1 Buffer de Bit de


Registro Contenido
renombra Contenido asignación
de destino Valido
miento última
sub r7,r3,r2
0 3 X 1 1
add r4,r7,r3
1 7 Y 1 1

mult r8,r5,r3 0 4 Z 1 1

sub r2,r4,r6 1 8 U 1 1

0 2 V 1 1
Ejercicio 5
2. Para el fragmento de código siguiente:

lw r1, 0x1ac ; r1=m[0x1ac] y suponiendo que se pueden captar


lw r2, 0xc1f ; r2=m[0xc1f] cuatro instrucciones por ciclo y emitir
add r3,r0,r0 ; r3=r0+r0 cuatro instrucciones por ciclo, indicar
mul r4,r2,r1 ; r4=r2*r1 el orden en que se emitirán las
add r3,r3,r4 ; r3=r3+r4 instrucciones para cada uno de los
add r5,r0,0x1ac ; r5=r0+0x1ac siguientes casos:
add r6,r0,0xc1f ; r6=r0+0xc1f
sub r5,r5,#4 ; r5=r5-4
sub r6,r6,#4 ; r6=r6-4
sw (r5),r3 ; m[r5]=r3
sw (r6),r4 ; m[r6]=r4

138
A) Una ventana de instrucciones centralizada con emisión ordenada y alineada

[1] lw r1,0x1ac
[2] lw r2,0xc1f [4] mul r4, r2, r1
[3] add r3,r0,r0
[4] mul r4,r2,r1 [3] add r3,r0,r0
[5] add r3,r3,r4
[6] add r5,r0,0x1ac [2] lw R2, 0xc1f
[7] add r6,r0,0xc1f
[8] sub r5,r5,#4 [1] lw R1, 0x1ac
[9] sub r6,r6,#4 Emite [1]
[10] sw (r5),r3
[11] sw (r6),r4

[4] mul r4, r2, r1

[3] add r3,r0,r0

[2] lw R2, 0xc1f

Procesa [1]
139
Termina [1]

[4] mul r4, r2, r1 Emite [2] y [3]

[3] add r3,r0,r0

[2] lw R2, 0xc1f [4] mul r4, r2, r1

Procesa [2]

Emite [4] Procesa [3]


Después de
6 ciclos
Termina [4]

[4] mul r4, r2, r1 [4] mul r4, r2, r1

140
[8] sub r5, r5 ,#4
Emite [5], [6], [7]
[7] add r6, r0, 0xc1f

[6] add r5, r0, 0x1ac

[5] add r3, r3, r4 [8] sub r5, r5 ,#4

Termina [5], [6], [7]

[11] sub (r6), r4 Emite [8]

[10] sw (r5), r3

[9] sw r6, r6, #4 [8] sub r5, r5 ,#4

141
Termina 8

[11] sw (r6), r4

[10] sw (r5), r3

[9] sub r6, r6, #4


Orden de la emisión:
1-2-3-4-5-6-7-8-9-10-11 Emite [9] y [10}

Termina [9} y [10]


Emite [11]

[11] sw (r6), r4 [11] sw (r6), r4

142
Muchas
gracias por
su atención!
CREDITS: This presentation template was created by Slidesgo, and
includes icons by Flaticon and infographics & images by Freepik

143

También podría gustarte