stringtranslate.com

Procesador superescalar

Tubería superescalar simple. Al buscar y enviar dos instrucciones a la vez, se puede completar un máximo de dos instrucciones por ciclo. (IF = recuperación de instrucción, ID = decodificación de instrucción, EX = ejecución, MEM = acceso a memoria, WB = escritura regresiva de 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 es una CPU que implementa una forma de paralelismo llamado paralelismo a nivel de instrucciones dentro de un solo procesador. [1] A diferencia de un procesador escalar , que puede ejecutar como máximo una única instrucción por ciclo de reloj, un procesador superescalar puede ejecutar más de una instrucción durante un ciclo de reloj enviando 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) del que sería posible de otro modo a una velocidad de reloj determinada . Cada unidad de ejecución no es un procesador independiente (o un núcleo si el procesador es un procesador multinúcleo ), sino un recurso de ejecución dentro de una única CPU, como una unidad lógica aritmética .

Si bien una CPU superescalar generalmente también se canaliza , la ejecución superescalar y de canalización se consideran técnicas diferentes de mejora del rendimiento. El primero ejecuta múltiples instrucciones en paralelo utilizando múltiples unidades de ejecución, mientras que el segundo ejecuta múltiples instrucciones en la misma unidad de ejecución en paralelo dividiendo la unidad de ejecución en diferentes fases.

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

Historia

El CDC 6600 de Seymour Cray de 1964 se menciona a menudo como el primer diseño superescalar. El IBM System/360 Modelo 91 de 1967 fue otro mainframe superescalar. Los microprocesadores Intel i960 CA (1989), [2] AMD 29000 -serie 29050 (1990) y Motorola MC88110 (1991), [3] 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 de matriz que se pueden usar para incluir múltiples unidades de ejecución (esta fue la razón por la cual los diseños RISC fueron más rápidos que los diseños CISC durante los años 1980 y 1990).

A excepción de las CPU utilizadas en aplicaciones de bajo consumo , sistemas integrados y dispositivos alimentados por baterías , esencialmente todas las CPU de uso general desarrolladas desde aproximadamente 1998 son superescalares.

El P5 Pentium fue el primer procesador superescalar x86; el Nx586 , el P6 Pentium Pro y el AMD K5 estuvieron entre los primeros diseños que decodifican instrucciones x86 de forma asincrónica en secuencias de microoperaciones dinámicas tipo microcódigo antes de la ejecución real en una microarquitectura superescalar ; esto abrió la posibilidad de programación dinámica de instrucciones parciales almacenadas en búfer y permitió extraer más 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 .

Escalar a superescalar

Los procesadores más simples son los procesadores escalares. Cada instrucción ejecutada por un procesador escalar normalmente manipula uno o dos elementos de datos a la vez. Por el contrario, cada instrucción ejecutada por un procesador vectorial opera simultáneamente en muchos elementos de datos. Una analogía es la diferencia entre aritmética escalar y vectorial. Un procesador superescalar es una mezcla de los dos. Cada instrucción procesa un elemento de datos, pero hay múltiples unidades de ejecución dentro de cada CPU, por lo que varias instrucciones pueden procesar elementos de datos separados al mismo tiempo.

El diseño de CPU superescalar enfatiza la mejora de la precisión del despachador de instrucciones y le permite mantener múltiples unidades de ejecución en uso en todo momento. Esto se ha vuelto cada vez más importante a medida que aumenta el número de unidades. Mientras que las primeras CPU superescalares tendrían 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 es ineficaz a la hora de mantener todas estas unidades alimentadas con instrucciones, el rendimiento del sistema no será mejor que el de un diseño más simple y económico.

Un procesador superescalar normalmente mantiene una tasa de ejecución superior a una instrucción por ciclo de máquina . Pero el simple hecho de procesar múltiples instrucciones simultáneamente no hace que una arquitectura sea superescalar, ya que las arquitecturas canalizadas , multiprocesador o multinúcleo también logran eso, pero con diferentes métodos.

En una CPU superescalar, el despachador lee instrucciones de la memoria y decide cuáles se pueden ejecutar en paralelo, enviando cada una a una de las varias unidades de ejecución contenidas dentro de una única CPU. Por lo tanto, se puede imaginar un procesador superescalar que tenga múltiples canales paralelos, cada uno de los cuales procese instrucciones simultáneamente desde un único hilo de instrucciones.

Limitaciones

La mejora del rendimiento disponible a partir de técnicas superescalares está limitada por tres áreas clave:

Los programas ejecutables binarios existentes tienen distintos grados de paralelismo intrínseco. En algunos casos, las instrucciones no dependen unas de otras y pueden ejecutarse simultáneamente. En otros casos son interdependientes: una instrucción impacta los recursos o los resultados de la otra. Las instrucciones a = b + c; d = e + fse pueden ejecutar en paralelo porque ninguno de los resultados depende de otros cálculos. Sin embargo, es posible que las instrucciones a = b + c; b = e + fno se puedan ejecutar en paralelo, dependiendo del orden en que se completen mientras se mueven por las unidades.

Aunque el flujo de instrucciones puede no contener dependencias entre instrucciones, una CPU superescalar debe verificar esa posibilidad, ya que no hay garantía de lo contrario y no detectar una dependencia produciría resultados incorrectos.

No importa cuán avanzado sea el proceso del semiconductor o cuán rápida sea la velocidad de conmutación, esto impone un límite práctico a la cantidad de instrucciones que se pueden enviar simultáneamente. Si bien los avances en los procesos 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 crece rápidamente, al igual que la complejidad de cambiar el nombre de los circuitos de registros para mitigar algunas dependencias. En conjunto, el consumo de energía , la complejidad y los costos de retardo de puerta limitan la aceleración superescalar alcanzable.

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

Alternativas

En conjunto, estos límites impulsan la investigación de cambios arquitectónicos alternativos, como palabras de instrucción muy largas (VLIW), computación de instrucciones explícitamente paralela (EPIC), multiproceso simultáneo (SMT) y computación multinúcleo .

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

El multiproceso simultáneo (SMT) es una técnica para mejorar la eficiencia general de los procesadores superescalares. SMT permite múltiples subprocesos de ejecución independientes para utilizar mejor los recursos proporcionados por las arquitecturas de procesadores modernas.

Los procesadores superescalares se diferencian de los procesadores multinúcleo en que las distintas unidades de ejecución no son procesadores completos. Un único procesador se compone de unidades de ejecución más detalladas, como ALU , multiplicador de enteros , desplazador de enteros, FPU , etc. Puede haber varias versiones de cada unidad de ejecución para permitir la ejecución de muchas instrucciones en paralelo. Esto difiere de un procesador multinúcleo que procesa simultáneamente instrucciones de múltiples subprocesos, un subproceso por unidad de procesamiento (llamado "núcleo"). También difiere de un procesador canalizado , donde las múltiples instrucciones pueden estar simultáneamente en varias etapas de ejecución, al estilo de una línea de ensamblaje .

Las diversas técnicas alternativas no son mutuamente excluyentes: pueden combinarse (y con frecuencia lo hacen) en un solo procesador. Por lo tanto, es posible una CPU multinúcleo donde cada núcleo es un procesador independiente que contiene múltiples canales paralelos, siendo cada canal superescalar. Algunos procesadores también incluyen capacidad vectorial .

Ver también

Referencias

  1. ^ "¿Qué es un procesador superescalar? - Definición de Techopedia". Techinfo.com . Consultado el 29 de agosto de 2022 .
  2. ^ McGeady, Steven (primavera de 1990). "La implementación i960CA SuperScalar de la arquitectura 80960". Resumen de artículos Compcon Spring '90. Trigésima quinta conferencia internacional de la IEEE Computer Society sobre apalancamiento intelectual . págs. 232-240. doi :10.1109/CMPCON.1990.63681. ISBN 0-8186-2028-5. S2CID  13206773. {{cite book}}: |journal=ignorado ( ayuda )
  3. ^ Diefendorff, K.; Allen, M. (primavera de 1992). "El microprocesador RISC superescalar Motorola 88110". Compendio de artículos COMPCON primavera de 1992 . págs. 157-162. doi :10.1109/CMPCON.1992.186702. ISBN 0-8186-2655-0. S2CID  34913907. {{cite book}}: |journal=ignorado ( ayuda )

enlaces externos