Articulo de referencia

Procesador superescalar

Pipeline superescalar simple. Al obtener y enviar dos instrucciones a la vez, se puede completar un máximo de dos instrucciones por ciclo. (IF = obtención de instrucción, ID = d...

Pipeline superescalar simple. Al obtener y enviar dos instrucciones a la vez, se puede completar un máximo de dos instrucciones por ciclo. (IF = obtención de instrucción, ID = decodificación de instrucción, EX = ejecución, MEM = acceso a memoria, WB = escritura en registro, i = número de instrucción, t = ciclo de reloj [es decir, tiempo])
Placa procesadora de una supercomputadora CRAY T3e con cuatro procesadores superescalares Alpha 21164.

Un procesador superescalar (o procesador de emisión múltiple [ 1 ] ) es una CPU que implementa una forma de paralelismo llamada paralelismo a nivel de instrucción dentro de un solo procesador. [ 2 ] A diferencia de un procesador escalar , que puede ejecutar como máximo una sola instrucción por ciclo de reloj, un procesador superescalar puede ejecutar o comenzar a ejecutar más de una instrucción durante un ciclo de reloj al enviar simultáneamente múltiples instrucciones a diferentes unidades de ejecución en el procesador. Por lo tanto, permite un mayor rendimiento (el número de instrucciones que se pueden ejecutar en una unidad de tiempo, que incluso puede ser menor que 1) del que sería posible de otro modo a una frecuencia de reloj dada . Cada unidad de ejecución no es un procesador separado (o un núcleo si el procesador es un procesador multinúcleo ), sino un recurso de ejecución dentro de una sola CPU, como una unidad aritmético-lógica .

Si bien una CPU superescalar suele estar segmentada , la ejecución superescalar y la segmentación se consideran técnicas de mejora del rendimiento distintas. La primera (superescalar) ejecuta varias instrucciones en paralelo mediante el uso de múltiples unidades de ejecución, mientras que la segunda (segmentación) ejecuta varias instrucciones en la misma unidad de ejecución en paralelo, dividiéndola en distintas fases. En la figura "Segmentación superescalar simple", la obtención de dos instrucciones simultáneamente se denomina superescalamiento, y la obtención de las dos siguientes antes de que se haya escrito el primer par se denomina segmentación.

La técnica superescalar se asocia tradicionalmente con varias características identificativas (dentro de una CPU determinada):

  • Las instrucciones se emiten desde una secuencia de instrucciones.
  • La CPU comprueba dinámicamente las dependencias de datos entre instrucciones en tiempo de ejecución (a diferencia de la comprobación por software en tiempo de compilación ).
  • La CPU puede ejecutar múltiples instrucciones por ciclo de reloj.

Historia

El CDC 6600 de Seymour Cray de 1964, aunque no era capaz de emitir múltiples instrucciones por ciclo, a menudo se cita como una influencia temprana para los procesadores superescalares modernos por su capacidad de ejecutar instrucciones simultáneamente a través de múltiples unidades funcionales. El IBM System/360 Modelo 91 de 1967 fue otra influencia temprana que introdujo la ejecución fuera de orden, siendo pionero en el uso del algoritmo de Tomasulo . [ 3 ] Los microprocesadores Intel i960 CA (1989), [ 4 ] el AMD 29000 -series 29050 (1990) y el Motorola MC88110 (1991), [ 5 ] fueron los primeros microprocesadores superescalares comerciales de un solo chip. Los microprocesadores RISC como estos fueron los primeros en tener ejecución superescalar, porque las arquitecturas RISC liberan transistores y área del chip que se pueden usar para incluir múltiples unidades de ejecución y la uniformidad tradicional del conjunto de instrucciones favorece el despacho superescalar (esta fue la razón por la que los diseños RISC fueron más rápidos que los diseños CISC durante la década de 1980 y hasta la de 1990, y es mucho más complicado realizar el despacho múltiple cuando las instrucciones tienen una longitud de bits variable).

A excepción de las CPU utilizadas en aplicaciones de bajo consumo , sistemas embebidos y dispositivos alimentados por batería , prácticamente todas las CPU de propósito general desarrolladas desde aproximadamente 1998 son superescalares.

El Pentium P5 fue el primer procesador x86 superscalar; el Nx586 , el Pentium Pro P6 y el AMD K5 estuvieron entre los primeros diseños que decodificaron instrucciones x86 de forma asíncrona en secuencias de microoperaciones dinámicas similares a microcódigo antes de su ejecución real en una microarquitectura superscalar ; esto abrió la puerta a la programación dinámica de instrucciones parciales almacenadas en búfer y permitió extraer un mayor paralelismo en comparación con los métodos más rígidos utilizados en el Pentium P5 más simple; también simplificó la ejecución especulativa y permitió frecuencias de reloj más altas en comparación con diseños como el avanzado Cyrix 6x86 .

De escalar a superescalar

Los procesadores más sencillos son los escalares. Cada instrucción ejecutada por un procesador escalar suele manipular uno o dos datos a la vez. En cambio, cada instrucción ejecutada por un procesador vectorial opera simultáneamente sobre muchos datos. Una analogía sería la diferencia entre la aritmética escalar y la vectorial. Un procesador superescalar es una combinación de ambas. Cada instrucción procesa un dato, pero existen múltiples unidades de ejecución dentro de cada CPU, por lo que varias instrucciones pueden procesar datos diferentes simultáneamente.

El diseño de las CPU superescalares prioriza la precisión del despachador de instrucciones, permitiéndole mantener las múltiples unidades de ejecución en uso en todo momento. Esto se ha vuelto cada vez más importante a medida que ha aumentado el número de unidades. Mientras que las primeras CPU superescalares contaban con dos ALU y una sola FPU , un diseño posterior, como el PowerPC 970, incluye cuatro ALU, dos FPU y dos unidades SIMD. Si el despachador no logra alimentar todas estas unidades con instrucciones, el rendimiento del sistema no será mejor que el de un diseño más simple y económico.

Un procesador superescalar suele mantener una tasa de ejecución superior a una instrucción por ciclo de máquina . Sin embargo, el mero procesamiento simultáneo de múltiples instrucciones no convierte una arquitectura en superescalar, ya que las arquitecturas segmentadas , multiprocesador o multinúcleo también lo consiguen, pero mediante métodos diferentes.

En una CPU superescalar, el despachador lee las instrucciones de la memoria y decide cuáles pueden ejecutarse en paralelo, asignándolas a una de las diversas unidades de ejecución que contiene la CPU. Por lo tanto, un procesador superescalar puede concebirse como un sistema con múltiples pipelines paralelos, cada uno de los cuales procesa instrucciones simultáneamente desde un único hilo de ejecución.

La mayoría de las CPU superescalares modernas también incorporan lógica para reordenar las instrucciones con el fin de evitar bloqueos en la tubería de procesamiento y aumentar la ejecución en paralelo.

Limitaciones

La mejora del rendimiento que se puede obtener mediante técnicas superescalares está limitada por tres áreas clave:

  • El grado de paralelismo intrínseco en el flujo de instrucciones (instrucciones que requieren los mismos recursos computacionales de la CPU).
  • La complejidad y el tiempo de ejecución de la lógica de comprobación de dependencias y los circuitos de cambio de nombre de registros.
  • El procesamiento de instrucciones de ramificación

Los programas ejecutables binarios existentes presentan distintos grados de paralelismo intrínseco. En algunos casos, las instrucciones son independientes entre sí y pueden ejecutarse simultáneamente. En otros, son interdependientes: una instrucción afecta a los recursos o a los resultados de la otra. Las instrucciones a = b + c; d = e + fpueden ejecutarse en paralelo porque ninguno de los resultados depende de otros cálculos. Sin embargo, a = b + c; b = e + fes posible que no puedan ejecutarse en paralelo, dependiendo del orden en que se completen a medida que avanzan por las unidades.

Aunque el flujo de instrucciones no contenga dependencias entre instrucciones, una CPU superescalar debe, no obstante, comprobar esa posibilidad, ya que no hay garantía de que no existan dependencias y la falta de detección de una dependencia produciría resultados incorrectos.

Por muy avanzado que sea el proceso de fabricación de semiconductores o por muy rápida que sea la velocidad de conmutación, esto impone un límite práctico a la cantidad de instrucciones que se pueden ejecutar simultáneamente. Si bien los avances en el proceso permitirán un número cada vez mayor de unidades de ejecución (por ejemplo, ALU), la carga de verificar las dependencias de las instrucciones aumenta rápidamente, al igual que la complejidad de los circuitos de renombrado de registros para mitigar algunas dependencias. En conjunto, el consumo de energía , la complejidad y los costos de retardo de las puertas limitan la aceleración superescalar que se puede lograr.

Sin embargo, incluso con una lógica de comprobación de dependencias infinitamente rápida en una CPU superescalar convencional, si el flujo de instrucciones tiene muchas dependencias, esto también limitaría la aceleración posible. Por lo tanto, el grado de paralelismo intrínseco en el flujo de código constituye una segunda limitación.

Alternativas

En conjunto, estas limitaciones impulsan la investigación de cambios arquitectónicos alternativos, como la palabra de instrucción muy larga (VLIW), la computación de instrucciones explícitamente paralelas (EPIC), la multihilo simultánea (SMT) y la computación multinúcleo .

Con VLIW, la engorrosa tarea de comprobar las dependencias mediante lógica de hardware en tiempo de ejecución se elimina y se delega al compilador . La computación de instrucciones explícitamente paralelas (EPIC) es similar a VLIW, pero con instrucciones adicionales de precarga de caché.

El procesamiento multihilo simultáneo (SMT) es una técnica para mejorar la eficiencia general de los procesadores superescalares. SMT permite que múltiples hilos de ejecución independientes aprovechen mejor los recursos que ofrecen las arquitecturas de procesadores modernas. El hecho de que sean independientes significa que sabemos que la instrucción de un hilo puede ejecutarse fuera de orden o en paralelo con la instrucción de otro. Además, un hilo independiente no generará una burbuja de segmentación en el flujo de código de otro, por ejemplo, debido a una bifurcación.

Los procesadores superescalares se diferencian de los procesadores multinúcleo en que sus unidades de ejecución no constituyen procesadores completos. Un único procesador se compone de unidades de ejecución más pequeñas, como la ALU , el multiplicador de enteros , el desplazador de enteros, la FPU , etc. Puede haber varias versiones de cada unidad de ejecución para permitir la ejecución de múltiples instrucciones en paralelo. Esto difiere de un procesador multinúcleo, que procesa simultáneamente instrucciones de múltiples hilos, uno por unidad de procesamiento (denominado "núcleo"). También difiere de un procesador segmentado , donde las múltiples instrucciones pueden estar simultáneamente en diversas etapas de ejecución, como en una cadena de montaje .

Las distintas técnicas alternativas no son mutuamente excluyentes; pueden combinarse (y de hecho se combinan con frecuencia) en un único procesador. Así, es posible una CPU multinúcleo donde cada núcleo es un procesador independiente que contiene múltiples pipelines paralelos, cada uno de ellos superescalar. Algunos procesadores también incluyen capacidad vectorial .

Véase también

Referencias

  1. P. Pacheco, Introducción a la programación paralela , 2011, sección 2.2.5, "Hay dos enfoques principales para ILP: la segmentación... y la emisión múltiple... A un procesador que admite emisión múltiple dinámica a veces se le llama superescalar." A. Chien , Arquitectura de computadoras para científicos , 2022, página 102, "emisión múltiple (también conocido como superescalar)".
  2. "¿Qué es un procesador superescalar? - Definición de Techopedia" . Techopedia.com . 28 de febrero de 2019. Consultado el 29 de agosto de 2022 .
  3. ^ Smith, James E.; Sohi, Gurindar S. (diciembre de 1995). "La microarquitectura de procesadores superescalares" (PDF) . Actas del IEEE . 83 (12): 1609. Bibcode : 1995IEEEP..83.1609S . doi : 10.1109/5.476078 .
  4. McGeady, Steven (Primavera de 1990). La implementación superescalar i960CA de la arquitectura 80960. Trigésimo quinta Conferencia Internacional de la Sociedad de Computación del IEEE sobre Apalancamiento Intelectual. págs. 232–240 . doi : 10.1109/CMPCON.1990.63681 . ISBN  0-8186-2028-5. S2CID 13206773 . 
  5. Diefendorff, K.; Allen, M. (Primavera de 1992). "El microprocesador RISC superescalar Motorola 88110". Resumen de ponencias de COMPCON Primavera de 1992. págs. 157–162 . doi : 10.1109/CMPCON.1992.186702 . ISBN  0-8186-2655-0. S2CID 34913907 . 
  • Mike Johnson , Diseño de microprocesadores superescalares , Prentice-Hall, 1991, ISBN 0-13-875634-1
  • Sorin Cotofana, Stamatis Vassiliadis, "Sobre la complejidad del diseño de la lógica de emisión de máquinas superescalares", EUROMICRO 1998: 10277-10284
  • Steven McGeady y otros, «Mejoras de rendimiento en el microprocesador integrado superescalar i960MM», Actas de la Conferencia de Arquitectura de Computadoras (Compcon) de la ACM de 1991 , 1991, págs.  4-7 .
  • Ejecución inmediata / Doble ruta / Rutas múltiples , por Mark Smotherman