Palabra de instrucción muy larga

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

Palabra de instrucción muy larga (VLIW) hace referencia a arquitecturas de conjunto de instrucciones diseñadas para explotar el paralelismo de nivel de instrucción (ILP). Mientras que las unidades de procesamiento central convencionales (CPU, procesador) en su mayoría permiten que los programas especifiquen instrucciones para ejecutar solo en secuencia, un procesador VLIW permite que los programas especifiquen explícitamente instrucciones para ejecutar en paralelo. Este diseño está destinado a permitir un mayor rendimiento sin la complejidad inherente a otros diseños.

Resumen

Los medios tradicionales para mejorar el rendimiento en los procesadores incluyen dividir las instrucciones en subpasos para que las instrucciones se puedan ejecutar 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). 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.

Motivación

Un procesador que ejecuta todas las instrucciones una detrás de otra (es decir, una arquitectura escalar no canalizada) puede usar los recursos del procesador de manera ineficiente, lo que puede generar un rendimiento deficiente. El rendimiento se puede mejorar mediante la ejecución simultánea de diferentes subpasos de instrucciones secuenciales (denominado tubería), o incluso mediante la ejecución de múltiples instrucciones de forma totalmente simultánea como en las arquitecturas superescalares. Se pueden lograr mejoras adicionales ejecutando las instrucciones en un orden diferente al que aparecen en un programa, lo que se denomina ejecución fuera de orden.

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 usa 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 fuera de servicio modernos han aumentado los recursos de hardware que programan las instrucciones y determinan las interdependencias.

Por el contrario, VLIW ejecuta operaciones en paralelo, según 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 las operaciones que 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 cómputo con menos complejidad de hardware (pero mayor complejidad del compilador) que la mayoría de las CPU superescalares. Esto también es complementario a la idea de que se deben realizar tantos cálculos como sea posible antes de que se ejecute el 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. Para la mayoría de los diseños superescalares, el ancho de 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, y cada campo especifica qué operación debe realizarse 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, lo siguiente es una instrucción para la computadora 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 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, 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 por adelantado. Debido a que la complejidad de la programación de instrucciones se traslada al compilador, la complejidad del hardware se puede reducir sustancialmente.

Ocurre un problema similar 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é 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 especulativamente. Si la CPU se equivoca, todas estas instrucciones y su contexto deben vaciarse 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 cómputo 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 usa heurística o información de perfil para adivinar la dirección de una rama. Esto le permite mover y preprogramar operaciones especulativamente antes de que se tome la sucursal, favoreciendo el camino más probable que espera a través de la sucursal. Si la bifurcación toma un camino inesperado, el compilador ya ha generado un código de compensación para descartar los resultados especulativos y preservar la semántica del programa.

Los núcleos de procesadores vectoriales (diseñados para grandes conjuntos unidimensionales de datos denominados 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.

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 la década de 1980. 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 software estaba bien establecida en la práctica de desarrollar microcódigo horizontal. Antes de Fisher, los aspectos teóricos de lo que más tarde se llamaría VLIW fueron desarrollados por el científico informático soviético Mikhail Kartsev basándose en su trabajo de los años sesenta en las computadoras M-9 y M-10 de orientación militar. Sus ideas se desarrollaron y publicaron más tarde como parte de un libro de texto dos años antes del artículo seminal de Fisher, pero debido a la Cortina de Hierro y a que el trabajo de Kartsev estaba principalmente relacionado con el ejército, permaneció en gran parte desconocido en Occidente..

Las innovaciones de Fisher involucraron el desarrollo de un compilador que podría apuntar a microcódigos horizontales de programas escritos en un lenguaje de programación común. Se dio cuenta de que para obtener un buen rendimiento y apuntar a una máquina de problemas amplios, sería necesario encontrar un paralelismo más allá de eso, generalmente dentro de un bloque básico. También desarrolló métodos de programación de regiones para identificar el paralelismo más allá de los bloques básicos. La programación de seguimiento es un método de este tipo e implica programar primero la ruta más probable de 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 programa.

La segunda innovación de Fisher fue la noción de que la arquitectura de la CPU de destino debe diseñarse para ser un objetivo razonable para un compilador; que el compilador y la arquitectura para un procesador VLIW deben estar codiseñados. Esto se inspiró en parte en la dificultad que Fisher observó en Yale de compilar para arquitecturas como Floating Point Systems' FPS164, que tenía una arquitectura informática de conjuntos de instrucciones complejas (CISC) que separaba el inicio de las instrucciones de las instrucciones que guardaban el resultado, y necesitaba algoritmos de programación muy complejos. Fisher desarrolló un conjunto de principios que caracterizan un diseño VLIW adecuado, como canalizaciones de drenaje automático, archivos de registro amplios de múltiples puertos 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.

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 ejecutar 28 operaciones en paralelo por instrucción. El sistema TRACE se implementó en una combinación de integración a mediana escala (MSI), integración a gran escala (LSI) e integración a muy gran escala (VLSI), empaquetados en gabinetes, una tecnología 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 tomar la siguiente ola, cuando las arquitecturas de chips comenzaron a permitir CPU de múltiples problemas. Las principales empresas de semiconductores reconocieron el valor de la tecnología Multiflow en este contexto, por lo que posteriormente se autorizó el compilador y la arquitectura a la mayoría de estas empresas.

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 (finales de la década de 1980). Esta empresa, como Multiflow, fracasó después 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 de la quiebra 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. Este procesador podría operar tanto en modo RISC simple como en modo VLIW:

A principios del decenio de 1990, Intel introdujo el microprocesador i860 RISC. Este chip simple tenía dos modos de operación: un modo escalar y un modo VLIW. En el modo VLIW, el procesador siempre tomó dos instrucciones y asumió que una era una instrucción entero y el otro punto flotante.

El modo VLIW del i860 se usó 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 simples, bien ordenados y predecibles, lo que permitía a los diseñadores aprovechar al máximo las ventajas de ejecución paralela habilitadas por VLIW. En el 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 continuo en su familia de procesadores PA-RISC. Descubrieron que la CPU se podía simplificar en gran medida 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 compuestas por varias unidades de ejecución similares a RISC que funcionan de forma independiente. Los VLIW contemporáneos suelen tener de cuatro a ocho unidades principales de ejecución. 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 tipo 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 Josh Fisher&# 39;s HP lab de Paolo Faraboschi), el FR-V de Fujitsu, el BSP15/16 de Pixelworks, el CEVA-X DSP de CEVA, el Jazz DSP de Improv Systems, la serie HiveFlex de Silicon Hive y el MPPA Manycore familia por Kalray. La línea Texas Instruments TMS320 DSP 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 llamada Extensiones de instrucción de longitud flexible (FLIX) que permite instrucciones de operaciones múltiples. El compilador Xtensa C/C++ puede entremezclar libremente instrucciones FLIX de 32 o 64 bits con las instrucciones RISC de una 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 entremezclen con instrucciones RISC más cortas, FLIX permite a los diseñadores de SoC aprovechar las ventajas de rendimiento de VLIW y eliminar la sobrecarga de código de los primeros VLIW. arquitecturas El Infineon Carmel DSP es otro núcleo de procesador VLIW diseñado para SoC. Utiliza un método de mejora de densidad de código similar llamado palabra de instrucción larga configurable (CLIW).

Fuera de los mercados de procesamiento integrado, el Itanium IA-64 de Intel de computación de instrucción explícitamente paralela (EPIC) 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 predicación de instrucciones completas, archivos de registro rotativos y una palabra de instrucción muy larga que puede codificar grupos de instrucciones no paralelos. Las VLIW también lograron una penetración significativa entre los consumidores en el mercado de unidades de procesamiento de gráficos (GPU), aunque desde entonces tanto Nvidia como AMD se han mudado a arquitecturas RISC para mejorar el rendimiento en cargas de trabajo no gráficas.

Tecnologías ATI' (ATI) y Advanced Micro Devices' (AMD) La microarquitectura TeraScale 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 con CPU VLIW Elbrus-4s.

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

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 de 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 del máquina.

Transmeta solucionó este problema al incluir 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ó básicamente para 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 x86 CISC 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 código de operación múltiple, 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 evita que el hardware calcule esta información de dependencia. Tener esta información de dependencia codificada en el flujo de instrucciones permite que las implementaciones más amplias emitan múltiples instrucciones VLIW no dependientes en paralelo por ciclo, mientras que las implementaciones más estrechas emitirían un número menor de instrucciones VLIW por ciclo.

Otra deficiencia percibida de los diseños de 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 las canalizaciones de instrucciones se vacíen antes de que puedan continuar las operaciones posteriores.

Dado que la cantidad de transistores en un chip ha aumentado, las desventajas percibidas del VLIW han disminuido en 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.

Contenido relacionado

Código de poema

Simulacro de incendio

Aeronave sin motor

Más resultados...
Tamaño del texto:
Copiar