8) Procesadores Superescalares

Este término es utilizado para designar un tipo de microarquitectura de procesador capaz de ejecutar más de una instrucción por ciclo de reloj. El término se emplea por oposición a la microarquitectura escalar que sólo es capaz de ejecutar una instrucción por ciclo de reloj. En la clasificación de Flynn, un procesador superescalar es un procesador de tipo MIMD (multiple instruction multiple data).
La microarquitectura superescalar utiliza el paralelismo de instrucciones además del paralelismo de flujo. La estructura típica de un procesador superescalar consta de un pipeline (método por el cual se consigue aumentar el rendimiento de algunos sistemas electrónicos digitales) con las siguientes etapas:
• Lectura (fetch).
• Decodificación (decode).
• Lanzamiento (dispatch).
• Ejecución (execute).
• Escritura (writeback).
• Finalización (retirement).
En un procesador superescalar, el procesador maneja más de una instrucción en cada etapa. El número máximo de instrucciones en una etapa concreta del pipeline se denomina grado, así un procesador superescalar de grado 4 en lectura (fetch) es capaz de leer como máximo cuatro instrucciones por ciclo. El grado de la etapa de ejecución depende del número y del tipo de las unidades funcionales.
Un procesador superescalar suele tener unidades funcionales independientes de los tipos siguientes:
• Unidad aritmético lógica (ALU)
• Unidad de lectura/escritura en memoria (Load/Store Unit)
• Unidad de punto flotante (Floating Point Unit)
• Unidad de salto (Branch unit)
Si las instrucciones de salto son un problema para los procesadores con pipeline en general, en el caso de los procesadores superescalares, el problema se multiplica ya que un parón en el pipeline tiene consecuencias en un número mayor de instrucciones. Por esta razón, los fabricantes de procesadores recurren a técnicas de ejecución especulativa y diseñan algoritmos de predicción de saltos cada vez más sofisticados así como sistemas de almacenamiento de instrucciones por trazas (trace caches).
Las arquitecturas superescalares adolecen de una estructura compleja y de un mal aprovechamiento de sus recursos debido en parte a la dificultad en encontrar suficientes instrucciones paralelizables. Una forma de obtener un mayor número de instrucciones paralelizables es aumentar la ventana de instrucciones, es decir el conjunto de instrucciones que la unidad de lanzamiento considera como candidatas a ser lanzadas en un momento dado.
Desafortunadamente la complejidad del procesador superescalar aumenta desproporcionadamente con respecto al tamaño de dicha ventana lo que se traduce por un ralentizamiento general del circuito. Otra forma de obtener más instrucciones paralelizables es manipulando instrucciones de más de un programa a la vez, lo que se conoce bajo el nombre de multitarea simultánea o multihilo simultáneo.