Articulo de referencia

Instrucción muy larga

La palabra de instrucción muy larga ( VLIW, por sus siglas en inglés) es un tipo de arquitectura de conjunto de instrucciones diseñada para aprovechar el paralelismo a nivel de ...

La palabra de instrucción muy larga ( VLIW, por sus siglas en inglés) es un tipo de arquitectura de conjunto de instrucciones diseñada para aprovechar el paralelismo a nivel de instrucción (ILP, por sus siglas en inglés) especificando explícitamente, de antemano, qué instrucciones se ejecutan en paralelo.

Las arquitecturas VLIW contrastan con las arquitecturas superescalares , el enfoque predominante para aprovechar el paralelismo a nivel de instrucción (ILP), donde el hardware descubre y programa dinámicamente la ejecución paralela en tiempo de ejecución. La principal motivación de VLIW es lograr un mayor rendimiento sin la complejidad de hardware de los diseños superescalares. Los circuitos necesarios para analizar repetidamente los flujos de instrucciones y programar la ejecución paralela en tiempo de ejecución aumentan el área del chip, el costo y el consumo de energía, a la vez que pueden reducir las velocidades de reloj.

El nombre VLIW deriva del formato de instrucción presente en casi todas las implementaciones, donde el compilador agrupa las operaciones destinadas a ejecutarse simultáneamente en una única palabra de instrucción ancha que se envía a las unidades de ejecución como una sola unidad. Estas palabras pueden ser extremadamente anchas; algunas implementaciones han utilizado palabras de instrucción de 1 kilobit o más. Sin embargo, esto es solo una consecuencia de la forma natural de implementar un VLIW. La característica distintiva de un VLIW es que el orden de ejecución y el paralelismo exactos se determinan y especifican de antemano.

VLIW traslada la responsabilidad de identificar el paralelismo del hardware al compilador. Esto aumenta sustancialmente la complejidad del compilador, ya que debe programar las instrucciones garantizando su corrección, resolviendo conflictos de recursos (para unidades de ejecución, registros y puertos de memoria) y aprovechando el mayor paralelismo que ofrece el hardware VLIW más sencillo.

Historia

El concepto de arquitectura VLIW y el término VLIW fueron inventados por Josh Fisher en su grupo de investigación en la Universidad de Yale a principios de la década de 1980. [ 1 ] Su desarrollo original de la planificación de trazas como método de compilación para VLIW se desarrolló cuando era estudiante de posgrado en la Universidad de Nueva York . Antes de VLIW, la noción de preplanificar unidades de ejecución y paralelismo a nivel de instrucción en software estaba bien establecida en la práctica del desarrollo de microcódigo horizontal .

Las innovaciones de Fisher consistieron en desarrollar un compilador capaz de generar microcódigo horizontal a partir de programas escritos en un lenguaje de programación convencional . Comprendió que, para obtener un buen rendimiento y optimizar el uso en máquinas de gran tamaño , sería necesario encontrar paralelismo más allá del que generalmente se encuentra dentro de un bloque básico . También desarrolló métodos de planificación de regiones para identificar paralelismo más allá de los bloques básicos. La planificación de trazas es uno de estos métodos, y consiste en planificar primero la ruta más probable de los bloques básicos, insertar código compensatorio para gestionar movimientos especulativos, planificar la segunda traza más probable, y así sucesivamente, hasta completar la planificación.

La segunda innovación de Fisher fue la idea de que la arquitectura de la CPU objetivo debía diseñarse para ser un objetivo razonable para un compilador; es decir, que el compilador y la arquitectura para un procesador VLIW debían diseñarse conjuntamente. Esto se inspiró en parte en la dificultad que Fisher observó en Yale al compilar para arquitecturas como la FPS164 de Floating Point Systems , que tenía una arquitectura de computación de conjunto de instrucciones compleja (CISC) que separaba la iniciación de instrucciones de las instrucciones que guardaban el resultado, lo que requería algoritmos de planificación muy complejos. Fisher desarrolló un conjunto de principios que caracterizan un diseño VLIW adecuado, como las tuberías de autodrenaje, los amplios registros multipuerto y las arquitecturas de memoria . Estos principios facilitaron a los compiladores la generación de código rápido.

El primer compilador VLIW fue descrito en una tesis doctoral de John Ellis, bajo la supervisión de Fisher. El compilador recibió el nombre de Bulldog, en honor a la mascota de Yale. [ 2 ]

Fisher dejó Yale en 1984 para fundar una empresa emergente, Multiflow , junto con sus cofundadores John O'Donnell y John Ruttenberg. Multiflow produjo la serie TRACE de minisupercomputadoras VLIW , lanzando sus primeras máquinas en 1987. La arquitectura VLIW de Multiflow podía realizar 28 operaciones en paralelo por instrucción. El sistema TRACE se implementó mediante una combinación de integración a escala media (MSI), integración a gran escala (LSI) e integración a muy gran escala (VLSI) , empaquetadas en gabinetes, una tecnología que quedó obsoleta a medida que se volvió más rentable integrar todos los componentes de un procesador (excluyendo la memoria) en un solo chip.

Multiflow llegó demasiado pronto para aprovechar la siguiente ola, cuando las arquitecturas de chips comenzaron a permitir CPU de emisión múltiple. Las principales empresas de semiconductores reconocieron el valor de la tecnología Multiflow en este contexto, por lo que posteriormente licenciaron el compilador y la arquitectura a la mayoría de estas empresas.

Motivación

Un procesador que ejecuta cada instrucción una tras otra (es decir, una arquitectura escalar sin segmentación ) puede utilizar los recursos del procesador de forma ineficiente, lo que puede resultar en un rendimiento deficiente. El rendimiento puede mejorarse ejecutando simultáneamente diferentes subpasos de instrucciones secuenciales (lo que se denomina segmentación ), o incluso ejecutando varias instrucciones de forma totalmente simultánea, como en las arquitecturas superescalares . Se puede lograr una mejora adicional ejecutando las instrucciones en un orden diferente al que aparecen en un programa, lo que se denomina ejecución fuera de orden . [ 3 ]

Estos tres métodos aumentan la complejidad del hardware. Antes de ejecutar cualquier operación en paralelo, el procesador debe verificar que las instrucciones no tengan interdependencias . Por ejemplo, si el resultado de una primera instrucción se utiliza como entrada para una segunda, no pueden ejecutarse simultáneamente y la segunda instrucción no puede ejecutarse antes que la primera. Los procesadores modernos de ejecución fuera de orden han incrementado los recursos de hardware necesarios para programar las instrucciones y determinar las interdependencias.

En contraste, VLIW ejecuta operaciones en paralelo, según una planificación fija, determinada durante la compilación de los programas . Dado que el compilador se encarga de determinar el orden de ejecución de las operaciones (incluyendo cuáles pueden ejecutarse simultáneamente), el procesador no necesita el hardware de planificación que requieren los tres métodos descritos anteriormente. Por lo tanto, las CPU VLIW ofrecen mayor capacidad de cálculo con menor complejidad de hardware (pero mayor complejidad de compilación) que la mayoría de las CPU superescalares. [ 3 ] Esto también complementa la idea de que se deben realizar la mayor cantidad posible de cálculos antes de la ejecución del programa, en tiempo de compilación.

Diseño

En los diseños superescalares, el número de unidades de ejecución es invisible para el conjunto de instrucciones. Cada instrucción codifica una sola operación. En la mayoría de los diseños superescalares, el ancho de instrucción es de 32 bits o menos.

En cambio, una instrucción VLIW codifica múltiples operaciones, al menos una por cada unidad de ejecución del dispositivo. Por ejemplo, si un dispositivo VLIW tiene cinco unidades de ejecución, una instrucción VLIW para dicho dispositivo consta de cinco campos de operación, cada uno de los cuales especifica la operación que debe realizarse en la unidad de ejecución correspondiente. Para dar cabida a estos campos de operación, las instrucciones VLIW suelen tener un ancho mínimo de 64 bits, e incluso mucho mayor en algunas arquitecturas.

Por ejemplo, la siguiente es una instrucción para el ordenador de un solo chip con arquitectura Super Harvard (SHARC). En un ciclo, realiza una multiplicación de punto flotante, una suma de punto flotante y dos cargas de autoincremento. Todo esto cabe en una instrucción de 48 bits:

f12 = f0 * f4, f8 = f8 + f12, f0 = dm(i0, m3), f4 = pm(i8, m9);

Desde los inicios de la arquitectura informática, [ 4 ] algunas CPU han incorporado varias unidades aritmético-lógicas (ALU) para ejecutarse en paralelo. Las CPU superescalares utilizan hardware para determinar qué operaciones pueden ejecutarse en paralelo durante la ejecución, mientras que las CPU VLIW utilizan software (el compilador) para determinar de antemano qué operaciones pueden ejecutarse en paralelo. Dado que la complejidad de la planificación de instrucciones se traslada al compilador, la complejidad del hardware puede reducirse sustancialmente.

Un problema similar ocurre cuando el resultado de una instrucción paralelizable se usa como entrada para una bifurcación. La mayoría de las CPU modernas adivinan qué bifurcación se tomará incluso antes de que finalice el cálculo, de modo que pueden cargar las instrucciones para la bifurcación o (en algunas arquitecturas) incluso comenzar a calcularlas de forma especulativa . Si la CPU adivina incorrectamente, todas estas instrucciones y su contexto deben vaciarse y las correctas deben cargarse, lo que lleva tiempo.

Esto ha dado lugar a una lógica de despacho de instrucciones cada vez más compleja que intenta adivinar correctamente , y la simplicidad de los diseños originales de computación con conjunto de instrucciones reducido (RISC) se ha visto mermada. VLIW carece de esta lógica y, por lo tanto, no presenta su consumo de energía, posibles defectos de diseño ni otros aspectos negativos.

En un compilador VLIW, utiliza heurísticas o información de perfil para predecir la dirección de una bifurcación. Esto le permite mover y preprogramar operaciones de forma especulativa antes de que se ejecute la bifurcación, favoreciendo la ruta más probable que espera. Si la bifurcación toma un camino inesperado, el compilador ya ha generado código compensatorio para descartar resultados especulativos y preservar la semántica del programa.

Los núcleos de procesadores vectoriales (diseñados para grandes matrices de datos unidimensionales llamadas vectores ) se pueden combinar con la arquitectura VLIW, como en el microprocesador Fujitsu FR-V , lo que aumenta aún más el rendimiento y la velocidad .

Implementaciones

Cydrome era una empresa que fabricaba procesadores numéricos VLIW utilizando circuitos integrados de lógica acoplada por emisor (ECL) en la misma época (finales de la década de 1980). Esta empresa, al igual que Multiflow, fracasó al cabo de unos años.

Una de las empresas licenciatarias de la tecnología Multiflow es Hewlett-Packard , a la que se unió Josh Fisher tras la desaparición de Multiflow. Bob Rau , fundador de Cydrome, también se incorporó a HP después del fracaso de Cydrome. Ambos liderarían la investigación en arquitectura informática en Hewlett-Packard durante la década de 1990.

Junto con los sistemas mencionados anteriormente, durante el mismo período (1989-1990), Intel implementó VLIW en el Intel i860 , su primer microprocesador de 64 bits y el primer procesador en implementar VLIW en un solo chip. [ 5 ] Este procesador podía operar tanto en modo RISC simple como en modo VLIW:

A principios de la década de 1990, Intel presentó el microprocesador RISC i860. Este sencillo chip tenía dos modos de funcionamiento: un modo escalar y un modo VLIW. En el modo VLIW, el procesador siempre buscaba dos instrucciones y asumía que una era una instrucción entera y la otra de punto flotante. [ 5 ]

El modo VLIW del i860 se utilizó ampliamente en aplicaciones de procesadores de señales digitales (DSP) integrados , ya que la ejecución de la aplicación y los conjuntos de datos eran sencillos, estaban bien ordenados y eran predecibles, lo que permitía a los diseñadores aprovechar al máximo las ventajas de la ejecución paralela que ofrecía VLIW. En modo VLIW, el i860 podía mantener un rendimiento de coma flotante de entre 20 y 40 MFLOPS de doble precisión; un valor muy alto para su época y para un procesador que funcionaba a una frecuencia de entre 25 y 50 MHz.

En la década de 1990, Hewlett-Packard investigó este problema como consecuencia del desarrollo de su familia de procesadores PA-RISC . Descubrieron que la CPU podía simplificarse enormemente eliminando la compleja lógica de despacho y trasladándola al compilador. Los compiladores de la época eran mucho más complejos que los de la década de 1980, por lo que la complejidad adicional del compilador se consideró un pequeño inconveniente.

Las CPU VLIW suelen estar compuestas por múltiples unidades de ejecución tipo RISC que operan de forma independiente. Las VLIW más recientes suelen tener entre cuatro y ocho unidades de ejecución principales. Los compiladores generan secuencias de instrucciones iniciales para la CPU VLIW de forma similar a como lo hacen para las CPU tradicionales, generando una secuencia de instrucciones tipo RISC. El compilador analiza este código para detectar relaciones de dependencia y requisitos de recursos. A continuación, programa las instrucciones de acuerdo con dichas restricciones. En este proceso, las instrucciones independientes pueden programarse en paralelo. Dado que las VLIW suelen representar instrucciones programadas en paralelo con una palabra de instrucción más larga que incorpora las instrucciones individuales, esto da como resultado un código de operación mucho más largo (denominado " very long ") para especificar qué se ejecuta en un ciclo determinado.

Ejemplos de CPU VLIW incluyen los procesadores multimedia TriMedia de NXP (anteriormente Philips Semiconductors), el DSP SHARC ( Super Harvard Architecture Single-Chip Computer ) de Analog Devices, la familia ST200 de STMicroelectronics basada en la arquitectura Lx (diseñada en el laboratorio HP de Josh Fisher por Paolo Faraboschi), el FR-V de Fujitsu , el BSP15/16 [ 6 ] de Pixelworks , el DSP CEVA-X de CEVA, el DSP Jazz de Improv Systems, la serie HiveFlex [ 7 ] de Silicon Hive y la familia MPPA Manycore de Kalray. La línea de DSP TMS320 de Texas Instruments ha evolucionado, en su familia C6000 , para parecerse más a un VLIW, en contraste con la familia C5000 anterior . Uno o más Qualcomm Hexagon se utilizaron en diseños de teléfonos celulares. Estas CPU VLIW se utilizan principalmente como procesadores multimedia integrados para dispositivos electrónicos de consumo.

También se han añadido características VLIW a los núcleos de procesador configurables para diseños de sistemas en un chip (SoC). Por ejemplo, el procesador Xtensa LX2 de Tensilica incorpora una tecnología llamada Extensiones de Instrucciones de Longitud Flexible (FLIX) que permite instrucciones de múltiples operaciones. El compilador C/C++ de Xtensa puede combinar libremente instrucciones FLIX de 32 o 64 bits con las instrucciones RISC de una sola operación del procesador Xtensa, que tienen un ancho de 16 o 24 bits. Al agrupar múltiples operaciones en una palabra de instrucción ancha de 32 o 64 bits y permitir que estas instrucciones de múltiples operaciones se combinen con instrucciones RISC más cortas, FLIX permite a los diseñadores de SoC aprovechar las ventajas de rendimiento de VLIW, eliminando al mismo tiempo la sobrecarga de código de las primeras arquitecturas VLIW.

El DSP Infineon Carmel es otro núcleo de procesador VLIW destinado a SoC. Utiliza un método similar de mejora de la densidad de código llamado palabra de instrucción larga configurable (CLIW). [ 8 ]

Fuera del mercado de procesamiento embebido, las arquitecturas EPIC ( Explicitly Parallel Instruction Computing ) de Intel para Itanium IA-64 y Elbrus 2000 se presentan como los únicos ejemplos de arquitecturas de CPU VLIW ampliamente utilizadas. Sin embargo, la arquitectura EPIC a veces se distingue de una arquitectura VLIW pura, ya que EPIC promueve la predicción completa de instrucciones, la rotación de registros y una palabra de instrucción muy larga que puede codificar grupos de instrucciones no paralelas. Las VLIW también lograron una penetración significativa en el mercado de unidades de procesamiento gráfico (GPU), aunque tanto Nvidia como AMD posteriormente adoptaron arquitecturas RISC para mejorar el rendimiento en cargas de trabajo no gráficas.

La microarquitectura TeraScale de ATI Technologies (ATI) y Advanced Micro Devices (AMD) para unidades de procesamiento gráfico (GPU) es una microarquitectura VLIW.

En diciembre de 2015, se realizó en Rusia el primer envío de PCs basados ​​en la CPU VLIW Elbrus-4s . [ 9 ]

El Neo de REX Computing es un procesador que consta de una malla 2D de núcleos VLIW orientado a la eficiencia energética. [ 10 ]

El Elbrus 2000 ( en ruso : Эльбрус 2000 ) y sus sucesores son microprocesadores VLIW rusos de 512 bits desarrollados por el Centro de Tecnologías SPARC de Moscú (MCST) y fabricados por TSMC .

Compatibilidad con versiones anteriores

Cuando la tecnología del silicio permitió la creación de implementaciones más amplias (con más unidades de ejecución), los programas compilados para la generación anterior no se ejecutaban en las implementaciones más amplias, ya que la codificación de las instrucciones binarias dependía del número de unidades de ejecución de la máquina.

Transmeta solucionó este problema incluyendo una capa de compilación de software binario a binario (denominada transformación de código ) en su implementación Crusoe de la arquitectura x86 . Este mecanismo se anunciaba para recompilar, optimizar y traducir los códigos de operación x86 en tiempo de ejecución al código máquina interno de la CPU. De este modo, el chip Transmeta es internamente un procesador VLIW, efectivamente desacoplado del conjunto de instrucciones CISC x86 que ejecuta.

La arquitectura Itanium de Intel (entre otras) resolvió el problema de la retrocompatibilidad con un mecanismo más general. Dentro de cada instrucción de múltiples códigos de operación, se asigna un campo de bits para indicar la dependencia de la instrucción VLIW anterior dentro del flujo de instrucciones del programa. Estos bits se establecen en tiempo de compilación , lo que libera al hardware de calcular esta información de dependencia. Al tener esta información de dependencia codificada en el flujo de instrucciones, las implementaciones más amplias pueden emitir múltiples instrucciones VLIW no dependientes en paralelo por ciclo, mientras que las implementaciones más limitadas emitirían un número menor de instrucciones VLIW por ciclo.

Otra deficiencia percibida en los diseños VLIW es la sobrecarga de código que se produce cuando una o más unidades de ejecución no tienen trabajo útil que realizar y, por lo tanto, deben ejecutar instrucciones NOP ( No Operation ). Esto sucede cuando existen dependencias en el código y es necesario permitir que las tuberías de instrucciones se vacíen antes de que puedan continuar las operaciones posteriores.

Dado que el número de transistores en un chip ha aumentado, las desventajas percibidas de la arquitectura VLIW han perdido importancia. Las arquitecturas VLIW están ganando popularidad, especialmente en el mercado de sistemas embebidos , donde es posible personalizar un procesador para una aplicación en un sistema en un chip .

Véase también

Referencias

  1. Fisher, Joseph A. (1983). «Arquitecturas de instrucciones muy largas y el ELI-512». Actas del 10.º simposio internacional anual sobre arquitectura de computadoras . Simposio Internacional sobre Arquitectura de Computadoras. Nueva York, NY, EE. UU.: Association for Computing Machinery (ACM). págs. 140–150 . doi : 10.1145/800046.801649 . ISBN  0-89791-101-6.
  2. "Premio ACM a la Tesis Doctoral de 1985" . Asociación para la Maquinaria de Computación (ACM). Archivado del original el 2 de abril de 2008. Recuperado el 15 de octubre de 2007. Por su tesis Bulldog: Un compilador para la arquitectura VLIW .
  3. 1 2 "Arquitectura de la Palabra de Instrucción Muy Larga (VLIW)" . GeeksforGeeks . 1 de diciembre de 2020. Consultado el 14 de octubre de 2022 .
  4. "Manual de referencia de los sistemas informáticos Control Data 6400/6500/6600" . 21 de febrero de 1969. Archivado del original el 2 de enero de 2014. Consultado el 7 de noviembre de 2013 .
  5. 1 2 "Introducción a la arquitectura de computadoras con instrucciones de palabra muy larga (VLIW)" (PDF) . Philips Semiconductors. Archivado del original (PDF) el 29 de septiembre de 2011.
  6. "Pixelworks | BSP15/16" . Archivado del original el 24 de diciembre de 1996. Consultado el 28 de julio de 2016 .
  7. "Productos de Silicon Hive" . Silicon Hive . Silicon Hive BV. Archivado del original el 28/01/2012 . Consultado el 28/01/2012 .
  8. "EEMBC publica puntuaciones de referencia para el núcleo DSP Carmel y el microcontrolador TriCore-TC11IB de Infineon Technologies" . eembc.org . Consultado el 28 de julio de 2016 .
  9. «ТАСС» . tass.ru. ​Consultado el 28 de julio de 2016 .
  10. "El pequeño chip que podría revolucionar la computación a exaescala" . The Next Platform . Stackhouse Publishing Inc. 12 de marzo de 2015. Consultado el 26 de abril de 2021 .
  • Documento que introdujo los VLIW
  • Libro sobre la historia de Multiflow Computer, empresa pionera en VLIW.
  • Vídeo: VLIW: El ordenador “imposible”
  • Entrevista con Josh Fisher sobre los orígenes y la historia de VLIW.
  • Retrospectiva de los "Mejores Artículos" de ISCA sobre el artículo que introdujo los VLIW (Archivado el 10 de marzo de 2012 en Wayback Machine).
  • VLIW y procesamiento embebido
  • Microprocesador integrado de alto rendimiento FR500 con arquitectura VLIW
  • Antecedentes históricos de las arquitecturas del conjunto de instrucciones EPIC.
  • DIS: una arquitectura para la ejecución rápida de LISP. Una arquitectura VLIW similar, con un compilador de paralelización orientado a LISP.