Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
5
Ejecución de una secuencia de código DLX
6
Distintas organizaciones para la microarquitectura de un
procesador superescalar
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
10
Notas históricas sobre los procesadores superescalares
11
Notas históricas sobre los procesadores 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.
15
Resultados de estudios de paralelismo para distintos programas
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
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.
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.
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.
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
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
-Valor : contenido
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
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
mult
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
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
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.
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
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:
○ 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.
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.
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.
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.
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:
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.
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
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.
114
115
116
INTERRUPCIONES PRECISAS CON
REGISTROS DE FUTURO Y ROB
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:
1 1 f3 0 1
Ciclo 4:
1 1 f3 0 0
2 1 f2 0 1
3 1 f3 0 1
121
Ciclo 5:
1 1 f3 0 0
2 1 f2 0 1
3 1 f3 0 1
4 1 f5 0 1
122
Ciclo 6:
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:
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:
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?
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:
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
Procesa [1]
139
Termina [1]
Procesa [2]
140
[8] sub r5, r5 ,#4
Emite [5], [6], [7]
[7] add r6, r0, 0xc1f
[10] sw (r5), r3
141
Termina 8
[11] sw (r6), r4
[10] sw (r5), r3
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