5. Grado en el que, en
promedio, las instrucciones
de un programa se pueden
ejecutar en paralelo
Medida de la capacidad del procesador para
sacar partido del paralelismo a nivel de
instrucciones. El paralelismo de la máquina
dependerá del número de instrucciones que
se pueden captar y ejecutar al mismo tiempo,
y de la capacidad del procesador para
localizar instrucciones independientes.
9. La etapa de decodificación de un
procesador superescalar debe ser capaz de
decodificar varias instrucciones por ciclo.
En esta etapa de predecodificación se suele
encargar de determinar el tipo de
instrucción y, con ello, facilita la
identificación posterior de los recursos que
se van a necesitar.
La unidad ID toma las instrucciones de la cola de las instrucciones
captadas son almacenadas por parte de la etapa IF y tras
decodificarlas, las pones en una estructura de buffers desde donde la
unidad ISS determinan que instrucciones de las que se encuentran
dentro de una ventana definida en una estructura de buffers pueden
pasar a ejecutarse y a qué unidad funcional.
10. La etapa de emisión se encarga de determinar
que instrucciones pueden emitirse al disponer
de sus operandos y existir unidades
funcionales libres para su ejecución.
POLITICAS DE EMISION:
- Emisión Alineada.
- Emisión no Alineada.
- Emisión Ordenada.
- emisión no Ordenada
11. En la figura se ilustran las diferencias entre emisión
ordenada y desordenada, emisión alineada y no alineada.
12.
La idea consiste en que, en lugar de existir
una única ventana desde donde las
instrucciones se emiten a las distintas
unidades funcionales
Por esta esta etapa se divide en dos:
Decodificador Emisor y envío
13. PROCESAMIENTO DE LAS
INSTRUCCIONES DE
SALTO
Detección de la instrucción del salto
Gestión de saltos condicionales no resueltos
Acceso a las instrucciones de destino del salto
14. Detección de la instrucción del salto
Detección anticipada.-
Detección paralela.-
Detección integrada
en la captación.-
17. Clasificación de los procedimientos
de predicción de saltos
Predicción Fija:
Se toma siempre la misma decisión, el salto siempre se realiza
Predicción Verdadera:
La decisión de si se realiza o no los saltos se toma mediante
Predicción Estática: Según los atributos de la instrucción
de salto. (Código de operación, desplazamiento, decisión
del compilador )
Predicción Dinámica: Según el resultado de ejecuciones
pasadas de la instrucción. (historia de la instrucción de
salto)
19. Para saber si las instrucciones son paralelizables, el
procesador sigue un sencillo algoritmo. Para
ejecutar las instrucciones I1 e I2:
IF I1 es simple
AND I2 también simple
AND I1 no es salto
AND destino de I1 no es fuente de I2
AND destino de I1 no es destino de I2
THEN
envía I1 a U
envía I2 a V
ELSE
envía I1 a U, para I2 (será evaluada con I3)
Si se utiliza un compilador que conoce este modo de
funcionamiento, mejora hasta un 30% la velocidad
20. RENOMBRAMIENTO DE REGISTROS
Como hemos visto, el hecho de permitir la emisión desordenada de
instrucciones y la finalización desordenada puede originar dependencias
de salida y antidependencias. La naturaleza de estas dependencias es
diferente a la de las dependencias de datos verdaderas, que reflejan el
flujo de datos a través de un programa y su secuencia de ejecución
Las antidependencias y las dependencias de salida son realmente
conflictos de almacenamiento. Son un tipo de conflicto por los recursos en
el que varias instrucciones compiten por los mismos registros
Un método para resolver tales conflictos se basa en la solución tradicional
de los conflictos con los recursos: la duplicación de recursos. Esta técnica
se denomina renombramiento de registros. Consiste en que el hardware del
procesador asigne dinámicamente los registros, que están asociados con
los valores que necesitan las instrucciones en diversos instantes de
tiempo.
21. Para ilustrar esta técnica, vamos a considerar la secuencia de instrucciones
utilizada anteriormente:
I1: r3 ← r3 op r5
I2: r4 ← r3 + 1
I3: r3 ← r5 + 1
I4: r7 ← r3 op r4
Que, como ya hemos visto, tiene varias dependencias, incluidas una
dependencia de salida y una antidependencia. Si aplicamos el
renombramiento de registros a dicho código tendremos:
I1: r3b ← r3a op r5a
I2: r4b ← r3b + 1
I3: r3c ← r5a + 1
I4: r7b ← r3c op r4b
El resultado es que utilizando el renombramiento de registros I1 e I3
pueden ejecutarse en paralelo.
22. PARALELISMO DE LA MÁQUINA
Existen tres técnicas hardware que se pueden
utilizar en un procesador superescalar para
aumentar sus prestaciones.
Estas son:
duplicación de recursos,
emisión desordenada y
renombramiento de registros
26. Los predictores vistos hasta ahora son locales
ya que solo tienen en cuenta información
referente a la instrucción de salto objeto de la
predicción.
Los predictores globales además tienen en
cuenta la información sobre otras instrucciones
de salto del programa.
28. EJECUCIÓN ESPECULATIVA
La ejecución especulativa es una estrategia que se usa en la mayoría de
procesadores de altas prestaciones. Consiste en realizar la ejecución del
código (instrucciones o partes de instrucciones), antes de estar seguro de si
esta ejecución se requiere. Es una técnica de optimización de prestaciones.
Los procesadores usan ejecución especulativa para reducir el coste de las
bifurcaciones (instrucciones de salto condicional). Así, cuando se encuentra
un salto condicional, el procesador realiza una predicción sobre cuál es el
camino más probable a seguir (utilizando técnicas de predicción de saltos), e
inmediatamente prosigue la captación, decodificación y ejecución de
instrucciones desde dicho punto, sin esperar a saber si es el camino correcto.
Si, posteriormente, la predicción resulta ser errónea, el procesador descarta
las instrucciones ejecutadas a partir del punto de salto, y continúa la
ejecución de las instrucciones del camino correcto. Si la predicción resulta
correcta, el procesador continua la ejecución de las instrucciones.
29. Los procesadores que utilizan ejecución especulativa, ejecutan
muchas más instrucciones de las que necesita el flujo del
programa. Así pues, esta estrategia debe poseer un mecanismo
para que una instrucción ejecutada pueda ser descartada tras su
ejecución, pues ¿cómo sino se podría deshacer la ejecución de
una instrucción, cuando se decide que ésta nunca hubiera sido
ejecutada por una máquina secuencial? Este mecanismo consiste
en que:
- El almacenamiento y los registros visibles no se pueden
actualizar inmediatamente después de su ejecución.
- Se han de mantener en algún tipo de almacenamiento temporal
para después convertirlo en permanente una vez que se determine
que el modelo secuencial habría ejecutado la instrucción.