¿Qué es Superscalar?

Un procesador superescalar puede ejecutar de forma independiente varias instrucciones a la vez durante un solo ciclo de reloj. Incluye recursos de ejecución redundantes, como múltiples unidades de punto flotante, unidades aritméticas lógicas y desplazadores enteros. Este tipo de procesador está diseñado para computación paralela y ejecución especulativa sin la necesidad de software especial. Puede mejorar la velocidad de ejecución de muchas aplicaciones con un uso intensivo del procesador manipulando y reorganizando el código. Se usa con frecuencia en varias clases de computadoras, incluidos servidores, computadoras de escritorio e incluso computadoras portátiles.

Aunque algunos aspectos de la arquitectura se han utilizado en procesadores desde la década de 1960, los verdaderos procesadores superescalares no se lanzaron hasta mucho más tarde. Algunos procesadores RISC (Reduced Instruction Set Computing) vendidos a fines de la década de 1980 y principios de la de 1990 eran superescalares. Sus núcleos simples e instrucciones de longitud fija hicieron que el envío y la programación de instrucciones paralelas fueran relativamente fáciles. Muchos procesadores que no son RISC fabricados desde finales de la década de 1990 también tienen arquitecturas superescalares. Los procesadores integrados, de bajo consumo y otros procesadores especializados suelen ser excepciones, ya que optimizan otros aspectos de sus diseños en lugar de la ejecución en paralelo.

Algunos procesadores pueden compartir una única canalización con instrucciones de varios subprocesos de ejecución, lo que se conoce como superprocesamiento. Cuando una unidad funcional está inactiva porque está esperando en el subproceso que se está ejecutando actualmente, puede ejecutar una instrucción desde otro subproceso mientras tanto. Esta técnica ayuda a utilizar completamente el procesador, pero no es tan eficiente como el multihilo simultáneo (SMT). Un solo procesador superescalar puede ejecutar varias instrucciones de varios subprocesos al mismo tiempo utilizando SMT. Sin embargo, la ejecución simultánea de subprocesos puede competir por los recursos del sistema y del procesador, lo que puede ralentizar el sistema.

Los procesadores con canalizaciones de varias etapas pueden ejecutar varias instrucciones simultáneamente siempre que se encuentren en diferentes etapas de ejecución. Por el contrario, varias instrucciones se pueden ejecutar en la misma etapa al mismo tiempo en un procesador superescalar. Si bien existen muchas similitudes entre este tipo de procesador y un procesador de múltiples núcleos, no son lo mismo. Un procesador de múltiples núcleos contiene varios procesadores completos, llamados núcleos, en un dispositivo. Cada núcleo de un procesador de múltiples núcleos suele ser superescalar y puede incluir varias tuberías paralelas.

Una característica clave de un procesador superescalar es su capacidad para ejecutar código de programa fuera de orden por razones de eficiencia. Para hacer esto, debe ser consciente de las dependencias de cualquier instrucción sobre otra. Si una instrucción afecta los resultados de otra o utiliza los recursos de otra, es muy probable que las dos no se ejecuten en paralelo. Existen técnicas para eliminar algunos tipos de dependencias, pero otras deben retrasar el procesamiento hasta que haya recursos disponibles.

La ejecución fuera de orden también debe poder garantizar el contenido adecuado de registros, banderas y otros recursos si se produce una interrupción del sistema. En este caso, el estado del sistema debe tener el mismo aspecto, como si el código se hubiera ejecutado secuencialmente según lo diseñado. Otra consideración es cuántas instrucciones debe examinar el procesador para encontrar oportunidades de ejecución paralela. Cuanto mayor sea el número, más eficiente puede ser la ejecución. Esto también incluye la ejecución especulativa de instrucciones en el otro lado de cada rama en el código examinado.