Optimización de Procesadores: Renombrado de Registros, Superescalares y Paralelismo
Estructuras de Renombrado de Registros
En los procesadores con finalización desordenada, pueden producirse riesgos de dependencias WAR (Write After Read) o WAW (Write After Write). Para mitigarlos, se emplea el renombrado de registros y el reorden de los mismos. Existen dos tipos de implementación:
Implementación Dinámica
Se realiza durante la ejecución y requiere circuitería adicional.
Implementación Estática
Se realiza durante la compilación.
Buffer de Renombrado
Acceso Asociativo
- Permite varias escrituras pendientes a un mismo registro.
- Se utiliza el último bit para marcar cuál ha sido la más reciente.
Acceso Indexado
- Solo permite una escritura pendiente a un mismo registro.
- Se mantiene la escritura más reciente.
Buffer de Reorden (ROB)
Una vez realizadas todas las operaciones, los resultados se encuentran en el buffer de renombrado. El problema surge al decidir el momento en que los resultados se escriben en los registros. Esto puede coincidir o no con el orden en que las instrucciones están en el programa, pero en cualquier caso, debe respetarse la semántica del programa. Para ello, se utiliza el ROB.
Además, el ROB permite gestionar correctamente el procesamiento especulativo de las instrucciones de salto y las interrupciones. También puede utilizarse para el renombrado.
Superescalares
Cauce
En una arquitectura superescalar, aparte de las etapas comunes de una máquina normal (IF, ID, EX, WB), se añade la etapa de Emisión de Instrucciones (ISS), que controla que puedan existir más de una operación realizándose a la vez.
Emisión de Instrucciones (ISS)
La ventana de instrucciones almacena las instrucciones pendientes ya decodificadas y se utiliza un bit para indicar si esa instrucción está disponible. La emisión de las instrucciones depende del alineamiento y del orden:
- Emisión Alineada: No pueden introducirse nuevas instrucciones en la ventana hasta que esta no esté totalmente vacía.
- Emisión No Alineada: Mientras exista espacio en la ventana, se pueden introducir instrucciones para ser emitidas.
- Emisión Ordenada: Se respeta el orden en que las instrucciones se han introducido en la ventana. Si una instrucción no puede emitirse, las instrucciones que la siguen tampoco podrán emitirse, aunque tengan sus operandos y la unidad que necesitan esté disponible.
- Emisión Desordenada: No existe este bloqueo, ya que pueden emitirse todas las instrucciones que dispongan de sus operandos y de la correspondiente unidad funcional.
Procesamiento de Instrucciones de Salto
El efecto de los saltos en los superescalares es más pernicioso que en otros tipos de procesadores, ya que en cada ciclo puede haber una instrucción de salto.
Detección de la Instrucción de Salto
- Detección Paralela
- Detección Anticipada
- Detección Integrada por Captación
Gestión de Saltos Condicionales no Resueltos
Si en el momento de evaluar la instrucción aún no se ha resuelto, se puede utilizar un proceso especulativo o una comprobación directa.
Acceso a las Instrucciones de Destino del Salto
Hay que implementar procesos que permitan el acceso más rápido a la secuencia de instrucciones.
Tipos de Predicciones
- Predicción Fija
- Siempre No Tomado: Toda condición de salto no resuelta se predice que no da lugar a un salto.
- Siempre Tomado: Toda condición de salto no resuelta se predice que da lugar a un salto.
- Predicción Verdadera
- Predicción Estática: Para ciertos códigos de operación, se predice si el salto se toma o no.
- Predicción Dinámica
- Predicción Dinámica Implícita: Predice hacer lo mismo que ocurrió la última vez que se ejecutó esa instrucción.
- Predicción Dinámica Estática: Para cada instrucción de salto condicional, existen unos bits de historia que codifican la información del pasado de la instrucción.
Paralelismo
Conceptos Básicos
- Procesamiento Distribuido: Ejecución de múltiples aplicaciones al mismo tiempo utilizando múltiples recursos, situados en distintas localizaciones físicas.
- Procesamiento Paralelo: División de aplicaciones en unidades independientes, y su ejecución en varios procesadores.
Clasificación de los Computadores Paralelos
- Multiprocesadores: Comparten el mismo espacio de memoria.
- Mayor Latencia
- Poco Escalable
- Variables compartidas
- Programación Sencilla
- Multicomputadores: Cada procesador (o nodo) tiene su propio espacio de direcciones.
- Menor Latencia
- Mayor Escalabilidad
- Paso de mensajes
- Programación Complicada
Tipos de Paralelismo
Paralelismo de Datos
Implícito en operaciones con estructuras de datos tipo vector o matriz. Grandes volúmenes de datos independientes entre sí (superescalares y máquinas segmentadas).
Paralelismo Funcional
Reorganización de la estructura lógica de una aplicación. Nivel de Programas, Funciones, Bloques en funciones u Operaciones (granularidad de gruesa a fina).
- Explícito: No presente de forma inherente en las estructuras de programación y que se debe indicar expresamente.
- Implícito: Presente debido a la propia estructura de los datos (vectores) o de la aplicación.