stringtranslate.com

Palabra de instrucción muy larga

La palabra de instrucción muy larga ( VLIW ) se refiere a arquitecturas de conjuntos de instrucciones diseñadas para explotar el paralelismo a nivel de instrucción (ILP). Un procesador VLIW permite que los programas especifiquen explícitamente instrucciones para ejecutar en paralelo , mientras que las unidades centrales de procesamiento (CPU) convencionales en su mayoría permiten que los programas especifiquen instrucciones para ejecutar solo en secuencia. VLIW está destinado a permitir un mayor rendimiento sin la complejidad inherente a algunos otros diseños.

Los medios tradicionales para mejorar el rendimiento en los procesadores incluyen dividir las instrucciones en subpasos para que puedan ejecutarse parcialmente al mismo tiempo (lo que se denomina canalización ), enviar instrucciones individuales para que se ejecuten de forma independiente, en diferentes partes del procesador ( arquitecturas superescalares ) e incluso ejecutar instrucciones en un orden diferente al del programa ( ejecución fuera de orden ). [1] Todos estos métodos complican el hardware (circuitos más grandes, mayor costo y uso de energía) porque el procesador debe tomar todas las decisiones internamente para que estos métodos funcionen.

Por el contrario, el método VLIW depende de que los programas proporcionen todas las decisiones sobre qué instrucciones ejecutar simultáneamente y cómo resolver conflictos. En la práctica, esto significa que el compilador (software utilizado para crear los programas finales) se vuelve más complejo, pero el hardware es más simple que en muchos otros medios de paralelismo.

Historia

El concepto de arquitectura VLIW, y el término VLIW , fueron inventados por Josh Fisher en su grupo de investigación de la Universidad de Yale a principios de los años 1980. [2] Su desarrollo original de la programación de seguimiento 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 preprogramación de unidades de ejecución y paralelismo a nivel de instrucción en el software estaba bien establecida en la práctica del desarrollo de microcódigo horizontal . Antes de Fisher, los aspectos teóricos de lo que más tarde se llamaría VLIW fueron desarrollados por el informático soviético Mikhail Kartsev [3] basándose en su trabajo de los años sesenta sobre ordenadores M-9 y M-10 de orientación militar. Sus ideas fueron posteriormente desarrolladas y publicadas como parte de un libro de texto [4] dos años antes del artículo fundamental de Fisher, pero debido a la Cortina de Hierro y debido a que el trabajo de Kartsev estaba principalmente relacionado con lo militar, permaneció en gran medida desconocido en Occidente.

Las innovaciones de Fisher implicaron el desarrollo de un compilador que pudiera apuntar a microcódigo horizontal a partir de programas escritos en un lenguaje de programación ordinario . Se dio cuenta de que para obtener un buen rendimiento y apuntar a una máquina de amplio espectro , sería necesario encontrar un paralelismo más allá del que generalmente se encuentra dentro de un bloque básico . También desarrolló métodos de programación regional para identificar el paralelismo más allá de los bloques básicos. La programación de seguimiento es uno de estos métodos e implica programar primero la ruta más probable de los bloques básicos, insertar código de compensación para tratar con movimientos especulativos, programar el segundo seguimiento más probable, y así sucesivamente, hasta que se complete el cronograma.

La segunda innovación de Fisher fue la noción de que la arquitectura de la CPU de destino debería diseñarse para ser un objetivo razonable para un compilador; que el compilador y la arquitectura de un procesador VLIW deben codiseñarse. Esto se inspiró en parte en la dificultad que Fisher observó en Yale al compilar arquitecturas como FPS164 de Floating Point Systems , que tenía una arquitectura de computación de conjunto de instrucciones complejas (CISC) que separaba el inicio de instrucciones de las instrucciones que guardaban el resultado, necesitando algoritmos de programación muy complejos. . Fisher desarrolló un conjunto de principios que caracterizan un diseño VLIW adecuado, como tuberías de drenaje automático, archivos de registro multipuerto amplios y arquitecturas de memoria . Estos principios facilitaron a los compiladores la emisión de código rápido.

El primer compilador VLIW se describió en un doctorado. Tesis de John Ellis, supervisada por Fisher. El compilador se llamó Bulldog, en honor a la mascota de Yale. [5]

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

Multiflow fue demasiado pronto para captar la siguiente ola, cuando las arquitecturas de chips comenzaron a permitir CPU de múltiples emisiones. [ se necesita aclaración ] Las principales empresas de semiconductores reconocieron el valor de la tecnología Multiflow en este contexto, por lo que posteriormente se concedió la licencia del compilador y la arquitectura a la mayoría de estas empresas.

Motivación

Un procesador que ejecuta todas las instrucciones una tras otra (es decir, una arquitectura escalar sin canalización ) puede utilizar los recursos del procesador de manera ineficiente, lo que podría generar un rendimiento deficiente. El rendimiento se puede mejorar ejecutando diferentes subpasos de instrucciones secuenciales simultáneamente (lo que se denomina canalización ), o incluso ejecutando múltiples instrucciones completamente simultáneamente como en las arquitecturas superescalares . Se pueden lograr mejoras adicionales ejecutando instrucciones en un orden diferente al que aparecen en un programa, lo que se denomina ejecución fuera de orden . [1]

Todos 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 de una segunda instrucción, entonces no pueden ejecutarse al mismo tiempo y la segunda instrucción no puede ejecutarse antes que la primera. Los procesadores modernos fuera de servicio han aumentado los recursos de hardware que programan instrucciones y determinan interdependencias.

Por el contrario, VLIW ejecuta operaciones en paralelo, basándose en un cronograma fijo, determinado cuando se compilan los programas . Dado que el compilador se encarga de determinar el orden de ejecución de las operaciones (incluidas qué operaciones se pueden ejecutar simultáneamente), el procesador no necesita el hardware de programación que requieren los tres métodos descritos anteriormente. Por lo tanto, las CPU VLIW ofrecen más computación con menos complejidad de hardware (pero mayor complejidad del compilador) que la mayoría de las CPU superescalares. [1] Esto también complementa la idea de que se deben realizar tantos cálculos como sea posible antes de ejecutar el programa, en tiempo de compilación.

Diseño

En 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. Para la mayoría de los diseños superescalares, el ancho de la instrucción es de 32 bits o menos.

Por el contrario, una instrucción VLIW codifica múltiples operaciones, al menos una operación para cada unidad de ejecución de un dispositivo. Por ejemplo, si un dispositivo VLIW tiene cinco unidades de ejecución, entonces una instrucción VLIW para el dispositivo tiene cinco campos de operación, cada campo especifica qué operación se debe realizar en esa unidad de ejecución correspondiente. Para adaptarse a estos campos de operación, las instrucciones VLIW suelen tener al menos 64 bits de ancho y mucho más en algunas arquitecturas.

Por ejemplo, la siguiente es una instrucción para la computadora de chip único con arquitectura Super Harvard (SHARC). En un ciclo, realiza una multiplicación de punto flotante, una suma de punto flotante y dos cargas de incremento automático. 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 primeros días de la arquitectura informática, [6] algunas CPU han agregado varias unidades lógicas aritméticas (ALU) para ejecutarse en paralelo. Las CPU superescalares usan hardware para decidir qué operaciones pueden ejecutarse en paralelo en tiempo de ejecución, mientras que las CPU VLIW usan software (el compilador) para decidir qué operaciones pueden ejecutarse en paralelo de antemano. Debido a que la complejidad de la programación de instrucciones se traslada al compilador, la complejidad del hardware se puede reducir sustancialmente. [ se necesita aclaración ]

Un problema similar ocurre cuando el resultado de una instrucción paralelizable se utiliza como entrada para una rama. La mayoría de las CPU modernas adivinan qué rama se tomará incluso antes de que se complete el cálculo, de modo que puedan cargar las instrucciones para la rama o (en algunas arquitecturas) incluso comenzar a calcularlas de forma especulativa . Si la CPU adivina mal, es necesario vaciar todas estas instrucciones y su contexto y cargar las correctas, lo que lleva tiempo.

Esto ha llevado a una lógica de envío de instrucciones cada vez más compleja que intenta adivinar correctamente , y la simplicidad de los diseños originales de computación de conjunto de instrucciones reducido (RISC) se ha erosionado. VLIW carece de esta lógica y, por lo tanto, carece de uso de energía, posibles defectos de diseño y otros aspectos negativos.

En un VLIW, el compilador utiliza heurística o información de perfil para adivinar la dirección de una rama. Esto le permite moverse y preprogramar operaciones de manera especulativa antes de que se tome la sucursal, favoreciendo el camino más probable que espera a través de la sucursal. Si la rama toma un camino inesperado, el compilador ya ha generado un código de compensación para descartar resultados especulativos y preservar la semántica del programa.

Los núcleos de procesador vectorial (diseñados para grandes conjuntos unidimensionales de datos llamados vectores ) se pueden combinar con la arquitectura VLIW, como en el microprocesador Fujitsu FR-V , aumentando aún más el rendimiento y la velocidad . [ cita necesaria ]

Implementaciones

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

Uno de los licenciatarios de la tecnología Multiflow es Hewlett-Packard , a la que Josh Fisher se unió después de la desaparición de Multiflow. Bob Rau , fundador de Cydrome, también se unió a HP después del fracaso de Cydrome. Estos dos liderarían la investigación de arquitectura informática en Hewlett-Packard durante la década de 1990.

Junto con los sistemas anteriores, durante el mismo tiempo (1989-1990), Intel implementó VLIW en el Intel i860 , su primer microprocesador de 64 bits y el primer procesador en implementar VLIW en un chip. [7] Este procesador podría funcionar 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 suponía que una era una instrucción de número entero y la otra de punto flotante. [7]

El modo VLIW del i860 se utilizó ampliamente en aplicaciones de procesador de señal digital (DSP) integrado , ya que la ejecución de la aplicación y los conjuntos de datos eran simples, bien ordenados y predecibles, lo que permitió a los diseñadores explotar plenamente las ventajas de ejecución paralela habilitadas por VLIW. En modo VLIW, el i860 podría mantener un rendimiento de punto flotante en el rango de 20-40 MFLOPS de doble precisión; un valor muy alto para su época y para un procesador que funciona a 25-50Mhz.

En la década de 1990, Hewlett-Packard investigó este problema como un efecto secundario del trabajo en curso en su familia de procesadores PA-RISC . Descubrieron que la CPU podría simplificarse enormemente eliminando la compleja lógica de despacho de la CPU y colocándola en el 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 en el compilador se consideró un costo pequeño.

Las CPU VLIW suelen estar formadas por varias unidades de ejecución tipo RISC que funcionan de forma independiente. Las VLIW contemporáneas suelen tener de cuatro a ocho unidades de ejecución principales. Los compiladores generan secuencias de instrucciones iniciales para la CPU VLIW aproximadamente de la misma manera que para las CPU tradicionales, generando una secuencia de instrucciones similares a RISC. El compilador analiza este código en busca de relaciones de dependencia y requisitos de recursos. Luego programa las instrucciones de acuerdo con esas restricciones. En este proceso, se pueden programar instrucciones independientes en paralelo. Debido a que los VLIW generalmente representan 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 muy largo ) para especificar qué se ejecuta en un ciclo determinado.

Ejemplos de CPU VLIW contemporáneas incluyen los procesadores de medios TriMedia de NXP (anteriormente Philips Semiconductors), el DSP Super Harvard Architecture Single-Chip Computer (SHARC) de Analog Devices, la familia ST200 de STMicroelectronics basada en la arquitectura Lx (diseñada en HP de Josh Fisher lab de Paolo Faraboschi), el FR-V de Fujitsu , el BSP15/16 [8] de Pixelworks , el CEVA-X DSP de CEVA, el Jazz DSP de Improv Systems, la serie HiveFlex [9] de Silicon Hive y el Familia MPPA Manycore de Kalray. La línea 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 . Estas CPU VLIW contemporáneas tienen éxito principalmente como procesadores de medios integrados para dispositivos electrónicos de consumo.

También se han agregado funciones VLIW a los núcleos de procesador configurables para diseños de sistema en un chip (SoC). Por ejemplo, el procesador Xtensa LX2 de Tensilica incorpora una tecnología denominada Extensiones de instrucción de longitud flexible (FLIX) que permite instrucciones de múltiples operaciones. El compilador Xtensa C/C++ puede mezclar libremente instrucciones FLIX de 32 o 64 bits con las instrucciones RISC de una sola operación del procesador Xtensa, que tienen 16 o 24 bits de ancho. Al empaquetar múltiples operaciones en una amplia palabra de instrucción de 32 o 64 bits y permitir que estas instrucciones de múltiples operaciones se mezclen con instrucciones RISC más cortas, FLIX permite a los diseñadores de SoC aprovechar las ventajas de rendimiento de VLIW y al mismo tiempo eliminar el exceso de código de las primeras arquitecturas VLIW. El Infineon Carmel DSP es otro núcleo de procesador VLIW destinado a SoC. Utiliza un método similar de mejora de la densidad del código llamado palabra de instrucción larga configurable (CLIW). [10]

Fuera de los mercados de procesamiento integrado, la computación de instrucción explícitamente paralela (EPIC) Itanium IA-64 de Intel y Elbrus 2000 aparecen 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 aboga por la predicación de instrucciones completa, archivos de registro rotativos y una palabra de instrucción muy larga que puede codificar grupos de instrucciones no paralelos. Los VLIW también obtuvieron una importante penetración entre los consumidores en el mercado de unidades de procesamiento de gráficos (GPU), aunque desde entonces tanto Nvidia como AMD han pasado a 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 de gráficos (GPU) es una microarquitectura VLIW.

En diciembre de 2015, se realizó en Rusia el primer envío de PC basadas en CPU VLIW Elbrus-4 . [11]

El Neo de REX Computing es un procesador formado por una malla 2D de núcleos VLIW orientados a la eficiencia energética. [12]

El Elbrus 2000 ( ruso : Эльбрус 2000 ) y sus sucesores son microprocesadores rusos VLIW de 512 bits de ancho 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ó construir implementaciones más amplias (con más unidades de ejecución), los programas compilados para la generación anterior no se ejecutarían en implementaciones más amplias, ya que la codificación de instrucciones binarias dependía del número de unidades de ejecución de la máquina.

Transmeta abordó este problema incluyendo una capa de compilador de software de binario a binario (denominada transformación de código ) en su implementación Crusoe de la arquitectura x86 . Este mecanismo se anunció para básicamente recompilar, optimizar y traducir códigos de operación x86 en tiempo de ejecución al código de máquina interno de la CPU. Por lo tanto, 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 compatibilidad con versiones anteriores con un mecanismo más general. Dentro de cada una de las instrucciones 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 el momento de la compilación , lo que libera al hardware de calcular esta información de dependencia. Tener esta información de dependencia codificada en el flujo de instrucciones permite que implementaciones más amplias emitan múltiples instrucciones VLIW no dependientes en paralelo por ciclo, mientras que implementaciones más limitadas emitirían una cantidad menor de instrucciones VLIW por ciclo.

Otra deficiencia percibida de los diseños VLIW es la sobrecarga de código que ocurre cuando una o más unidades de ejecución no tienen trabajo útil que hacer y, por lo tanto, deben ejecutar instrucciones NOP sin operación . Esto ocurre cuando hay dependencias en el código y se debe permitir que los canales de instrucciones se agoten antes de que puedan continuar operaciones posteriores.

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

Ver también

Referencias

  1. ^ abc "Arquitectura de palabras de instrucción muy largas (VLIW)". Geeks para Geeks . 2020-12-01 . Consultado el 14 de octubre de 2022 .
  2. ^ Pescador, José A. (1983). "Arquitecturas de Word de instrucciones muy largas y el ELI-512". Actas del décimo simposio internacional anual sobre arquitectura informática . Simposio Internacional sobre Arquitectura de Computadores. Nueva York, NY, EE.UU.: Asociación de Maquinaria de Computación (ACM). págs. 140-150. doi : 10.1145/800046.801649 . ISBN 0-89791-101-6.
  3. ^ Kartsev, Mikhail (1970). "Вопросы построения многопроцессорных вычислительных систем" [Construcción de sistemas informáticos multiprocesador]. Asuntos radioelectrónicos, técnicas de informática electrónica (en ruso) (5–6): 3–19.
  4. ^ Kartsev, Miguel; Brik, Vladimir (1981). Вычислительные системы и синхронная арифметика [ Sistemas informáticos y aritmética sincrónica ] (en ruso). Moscú: Radio i Svyaz.
  5. ^ "Premio Tesis Doctoral ACM 1985". Asociación de Maquinaria de Computación (ACM). Archivado desde el original el 2 de abril de 2008 . Consultado el 15 de octubre de 2007 . Por su disertación Bulldog: un compilador para arquitectura VLIW .
  6. ^ "Manual de referencia de sistemas informáticos Control Data 6400/6500/6600". 1969-02-21. Archivado desde el original el 2 de enero de 2014 . Consultado el 7 de noviembre de 2013 .
  7. ^ ab "Introducción a la arquitectura informática de palabras de instrucciones muy largas (VLIW)" (PDF) . Semiconductores Philips. Archivado desde el original (PDF) el 29 de septiembre de 2011.
  8. ^ "Pixelworks | BSP15/16". Archivado desde el original el 24 de diciembre de 1996 . Consultado el 28 de julio de 2016 .
  9. ^ "Productos de colmena de silicona". Colmena de silicio . Colmena de silicio BV. Archivado desde el original el 28 de enero de 2012 . Consultado el 28 de enero de 2012 .
  10. ^ "EEMBC publica puntuaciones de referencia para Carmel - DSP Core y TriCore - Microcontrolador TC11IB de Infineon Technologies". eembc.org . Consultado el 28 de julio de 2016 .
  11. ^ "ТАСС". tass.ru.Consultado el 28 de julio de 2016 .
  12. ^ "El pequeño chip que podría alterar la computación a exaescala". La próxima plataforma . Stackhouse Publishing Inc. 12 de marzo de 2015 . Consultado el 26 de abril de 2021 .

enlaces externos