La informática reconfigurable es una arquitectura informática que combina parte de la flexibilidad del software con el alto rendimiento del hardware mediante el procesamiento con plataformas de hardware flexibles como matrices de puertas programables en campo (FPGA). La principal diferencia en comparación con el uso de microprocesadores comunes es la capacidad de agregar bloques computacionales personalizados utilizando FPGA. Por otro lado, la principal diferencia con el hardware personalizado, es decir, los circuitos integrados de aplicación específica (ASIC), es la posibilidad de adaptar el hardware durante el tiempo de ejecución "cargando" un nuevo circuito en la estructura reconfigurable, proporcionando así nuevos bloques computacionales sin la necesidad. para fabricar y agregar nuevos chips al sistema existente.
El concepto de computación reconfigurable existe desde la década de 1960, cuando el artículo de Gerald Estrin propuso el concepto de una computadora hecha de un procesador estándar y una serie de hardware "reconfigurable". [1] [2] El procesador principal controlaría el comportamiento del hardware reconfigurable. Luego, este último se adaptaría para realizar una tarea específica, como el procesamiento de imágenes o la coincidencia de patrones , tan rápidamente como una pieza de hardware dedicada. Una vez realizada la tarea, el hardware se podía ajustar para realizar alguna otra tarea. Esto dio como resultado una estructura informática híbrida que combina la flexibilidad del software con la velocidad del hardware.
En las décadas de 1980 y 1990 hubo un renacimiento en esta área de investigación con muchas arquitecturas reconfigurables propuestas desarrolladas en la industria y la academia, [3] tales como: Copacobana, Matrix, GARP, [4] Elixent, NGEN, [5] Polyp, [ 6] MereGen, [7] PACT XPP, Silicon Hive, Montium, Pleiades, Morphosys y PiCoGA. [8] Tales diseños eran factibles debido al constante progreso de la tecnología del silicio que permitía implementar diseños complejos en un solo chip. Algunas de estas computadoras reconfigurables masivamente paralelas se construyeron principalmente para subdominios especiales como la evolución molecular, el procesamiento neuronal o de imágenes. La primera computadora reconfigurable comercial del mundo, la Algotronix CHS2X4, se completó en 1991. No fue un éxito comercial, pero fue lo suficientemente prometedor como para que Xilinx (el inventor del Field-Programmable Gate Array , FPGA) comprara la tecnología y contratara al personal de Algotronix. . [9] Máquinas posteriores permitieron las primeras demostraciones de principios científicos, como la autoorganización espacial espontánea de la codificación genética con MereGen. [10]
El modelo fundamental del paradigma de la máquina informática reconfigurable, la antimáquina basada en flujos de datos , está bien ilustrado por las diferencias con otros paradigmas de máquinas que se introdujeron anteriormente, como lo muestra el siguiente esquema de clasificación de paradigmas informáticos de Nick Tredennick (ver "Tabla 1: Esquema de clasificación de paradigmas de Nick Tredennick"). [11]
El informático Reiner Hartenstein describe la computación reconfigurable en términos de una antimáquina que, según él, representa un cambio de paradigma fundamental que se aleja de la máquina más convencional de von Neumann . [12] Hartenstein lo llama la Paradoja de la Computación Reconfigurable, esa migración de software a software de configuración (software a FPGA ) da como resultado factores de aceleración reportados de hasta más de cuatro órdenes de magnitud, así como una reducción en el consumo de electricidad en hasta casi cuatro órdenes de magnitud, aunque los parámetros tecnológicos de los FPGA están por detrás de la curva de Gordon Moore en aproximadamente cuatro órdenes de magnitud, y la frecuencia del reloj es sustancialmente menor que la de los microprocesadores. Esta paradoja se explica en parte por el síndrome de Von Neumann .
La informática reconfigurable de alto rendimiento (HPRC) es una arquitectura informática que combina aceleradores basados en informática reconfigurables, como una matriz de puertas programables en campo, con CPU o procesadores multinúcleo .
El aumento de la lógica en una FPGA ha permitido programar algoritmos más grandes y complejos en la FPGA. La conexión de una FPGA de este tipo a una CPU moderna a través de un bus de alta velocidad, como PCI express , ha permitido que la lógica configurable actúe más como un coprocesador que como un periférico . Esto ha llevado la informática reconfigurable a la esfera de la informática de alto rendimiento .
Además, la replicación de un algoritmo en una FPGA o el uso de una multiplicidad de FPGA ha permitido producir sistemas SIMD reconfigurables en los que varios dispositivos computacionales pueden operar simultáneamente con diferentes datos, lo que es computación altamente paralela .
Esta técnica de sistemas heterogéneos se utiliza en la investigación en informática y especialmente en supercomputación . [13] Un artículo de 2008 informó factores de aceleración de más de 4 órdenes de magnitud y factores de ahorro de energía de hasta casi 4 órdenes de magnitud. [14] Algunas empresas de supercomputadoras ofrecen bloques de procesamiento heterogéneos que incluyen FPGA como aceleradores. [ cita necesaria ] Un área de investigación es la productividad del flujo de la herramienta de programación de doble paradigma obtenida para sistemas tan heterogéneos. [15]
La Fundación Nacional de Ciencias de EE. UU. tiene un centro de computación reconfigurable de alto rendimiento (CHREC). [16] En abril de 2011 se celebró en Europa la cuarta Conferencia sobre supercomputación reconfigurable y de muchos núcleos. [17]
Los sistemas informáticos reconfigurables comerciales de alto rendimiento están comenzando a surgir con el anuncio de IBM de integrar FPGA con sus microprocesadores IBM Power . [18]
La reconfiguración parcial es el proceso de cambiar una parte del circuito de hardware reconfigurable mientras la otra parte mantiene su configuración anterior. Los conjuntos de puertas programables en campo se utilizan a menudo como soporte para la reconfiguración parcial.
El hardware electrónico , al igual que el software , se puede diseñar de forma modular, creando subcomponentes y luego componentes de nivel superior para instanciarlos. En muchos casos es útil poder intercambiar uno o varios de estos subcomponentes mientras la FPGA todavía está funcionando.
Normalmente, la reconfiguración de una FPGA requiere que se mantenga en reinicio mientras un controlador externo recarga un diseño en ella. La reconfiguración parcial permite que las partes críticas del diseño continúen funcionando mientras un controlador, ya sea en la FPGA o fuera de ella, carga un diseño parcial en un módulo reconfigurable. La reconfiguración parcial también se puede utilizar para ahorrar espacio para múltiples diseños almacenando solo los diseños parciales que cambian entre diseños. [19]
Un ejemplo común de cuándo sería útil una reconfiguración parcial es el caso de un dispositivo de comunicación. Si el dispositivo controla varias conexiones, algunas de las cuales requieren cifrado , sería útil poder cargar diferentes núcleos de cifrado sin desactivar todo el controlador.
La reconfiguración parcial no es compatible con todos los FPGA. Se requiere un flujo de software especial con énfasis en el diseño modular. Normalmente, los módulos de diseño se construyen a lo largo de límites bien definidos dentro de la FPGA que requieren que el diseño se asigne especialmente al hardware interno.
Desde la funcionalidad del diseño, la reconfiguración parcial se puede dividir en dos grupos: [20]
Con la llegada de placas FPGA asequibles, los proyectos de estudiantes y aficionados buscan recrear computadoras antiguas o implementar arquitecturas más novedosas. [21] [22] [23] Estos proyectos se construyen con hardware reconfigurable (FPGA) y algunos dispositivos admiten la emulación de varias computadoras antiguas utilizando un único hardware reconfigurable ( C-One ).
Una computadora totalmente basada en FPGA es COPACOBANA, el analizador y descifrador de códigos de costo optimizado y su sucesor RIVYERA. La empresa SciEngines GmbH , derivada del proyecto COPACOBANA de las universidades de Bochum y Kiel en Alemania, continúa el desarrollo de ordenadores totalmente basados en FPGA.
Mitrionics ha desarrollado un SDK que permite compilar y ejecutar software escrito utilizando un único lenguaje de asignación en computadoras basadas en FPGA. El lenguaje de software Mitrion-C y el procesador Mitrion permiten a los desarrolladores de software escribir y ejecutar aplicaciones en computadoras basadas en FPGA de la misma manera que con otras tecnologías informáticas, como unidades de procesamiento gráfico ("GPU"), procesadores basados en celdas, procesamiento paralelo unidades ("PPU"), CPU de múltiples núcleos y clústeres de CPU tradicionales de un solo núcleo. (fuera del negocio)
National Instruments ha desarrollado un sistema informático integrado híbrido llamado CompactRIO . Consiste en un chasis reconfigurable que alberga la FPGA programable por el usuario, módulos de E/S intercambiables en caliente, un controlador en tiempo real para comunicación y procesamiento deterministas y un software gráfico LabVIEW para una programación rápida de RT y FPGA.
Xilinx ha desarrollado dos estilos de reconfiguración parcial de dispositivos FPGA: basada en módulos y basada en diferencias . La reconfiguración parcial basada en módulos permite reconfigurar distintas partes modulares del diseño, mientras que la reconfiguración parcial basada en diferencias se puede utilizar cuando se realiza un pequeño cambio en un diseño.
Intel [24] admite la reconfiguración parcial de sus dispositivos FPGA en dispositivos de 28 nm como Stratix V, [25] y en dispositivos Arria 10 de 20 nm. [26] El flujo de reconfiguración parcial de Intel FPGA para Arria 10 se basa en la metodología de diseño jerárquico en el software Quartus Prime Pro donde los usuarios crean particiones físicas de la FPGA que se pueden reconfigurar [27] en tiempo de ejecución mientras el resto del diseño continúa. funcionar. El software Quartus Prime Pro también admite la reconfiguración parcial jerárquica y la simulación de reconfiguración parcial.
Como campo emergente, las clasificaciones de arquitecturas reconfigurables todavía se están desarrollando y perfeccionando a medida que se desarrollan nuevas arquitecturas; Hasta la fecha no se ha sugerido ninguna taxonomía unificadora. Sin embargo, se pueden utilizar varios parámetros recurrentes para clasificar estos sistemas.
La granularidad de la lógica reconfigurable se define como el tamaño de la unidad funcional más pequeña (bloque lógico configurable, CLB) abordada por las herramientas de mapeo. La alta granularidad, que también puede denominarse de grano fino, a menudo implica una mayor flexibilidad a la hora de implementar algoritmos en el hardware. Sin embargo, esto conlleva una penalización en términos de mayor potencia, área y retraso debido a una mayor cantidad de enrutamiento requerido por cálculo. Las arquitecturas detalladas funcionan en el nivel de manipulación a nivel de bits; mientras que los elementos de procesamiento de grano grueso (unidad de ruta de datos reconfigurable, rDPU) están mejor optimizados para aplicaciones de ruta de datos estándar. Uno de los inconvenientes de las arquitecturas de grano grueso es que tienden a perder parte de su utilización y rendimiento si necesitan realizar cálculos más pequeños de los que proporciona su granularidad; por ejemplo, agregar un bit a una unidad funcional de cuatro bits de ancho desperdiciaría tres bits. . Este problema se puede resolver teniendo una matriz de grano grueso ( matriz de ruta de datos reconfigurable , rDPA) y una FPGA en el mismo chip.
Las arquitecturas de grano grueso ( rDPA ) están destinadas a la implementación de algoritmos que necesitan rutas de datos de ancho de palabra (rDPU). Como sus bloques funcionales están optimizados para cálculos grandes y generalmente comprenden unidades lógicas aritméticas (ALU) de toda la palabra, realizarán estos cálculos más rápidamente y con mayor eficiencia energética que un conjunto de unidades funcionales más pequeñas interconectadas; Esto se debe a que los cables de conexión son más cortos, lo que da como resultado una menor capacitancia del cable y, por lo tanto, diseños más rápidos y de menor potencia. Una posible consecuencia indeseable de tener bloques computacionales más grandes es que cuando el tamaño de los operandos puede no coincidir con el algoritmo, puede resultar en una utilización ineficiente de los recursos. A menudo, el tipo de aplicaciones que se ejecutarán se conoce de antemano, lo que permite adaptar la lógica, la memoria y los recursos de enrutamiento para mejorar el rendimiento del dispositivo y, al mismo tiempo, proporcionar un cierto nivel de flexibilidad para futuras adaptaciones. Ejemplos de esto son los arreglos de dominio específico destinados a obtener un mejor rendimiento en términos de potencia, área y rendimiento que sus primos FPGA más genéricos de grano más fino al reducir su flexibilidad.
La configuración de estos sistemas reconfigurables puede ocurrir en el momento de la implementación, entre fases de ejecución o durante la ejecución. En un sistema reconfigurable típico, se utiliza un flujo de bits para programar el dispositivo en el momento de la implementación. Los sistemas de grano fino, por su propia naturaleza, requieren un mayor tiempo de configuración que las arquitecturas de grano grueso debido a que es necesario abordar y programar más elementos. Por lo tanto, las arquitecturas más gruesas se benefician de menores requisitos energéticos potenciales, ya que se transfiere y utiliza menos información. Intuitivamente, cuanto más lenta sea la tasa de reconfiguración, menor será el consumo de energía, ya que el costo energético asociado a la reconfiguración se amortiza durante un período de tiempo más largo. La reconfiguración parcial tiene como objetivo permitir que parte del dispositivo se reprograme mientras otra parte todavía realiza cálculos activos. La reconfiguración parcial permite flujos de bits reconfigurables más pequeños, por lo que no se desperdicia energía en la transmisión de información redundante en el flujo de bits. La compresión del flujo de bits es posible, pero se debe realizar un análisis cuidadoso para garantizar que la energía ahorrada mediante el uso de flujos de bits más pequeños no sea superada por el cálculo necesario para descomprimir los datos.
A menudo, la matriz reconfigurable se utiliza como acelerador de procesamiento conectado a un procesador anfitrión. El nivel de acoplamiento determina el tipo de transferencias de datos, latencia, potencia, rendimiento y gastos generales involucrados al utilizar la lógica reconfigurable. Algunos de los diseños más intuitivos utilizan un bus periférico para proporcionar una disposición similar a un coprocesador para la matriz reconfigurable. Sin embargo, también ha habido implementaciones en las que la estructura reconfigurable está mucho más cerca del procesador; algunas incluso se implementan en la ruta de datos, utilizando los registros del procesador. El trabajo del procesador host es realizar las funciones de control, configurar la lógica, programar datos y proporcionar interfaz externa.
La flexibilidad de los dispositivos reconfigurables proviene principalmente de su interconexión de enrutamiento. Un estilo de interconexión popularizado por los proveedores de FPGA , Xilinx y Altera, es el diseño estilo isla, donde los bloques están dispuestos en una matriz con enrutamiento vertical y horizontal. Un diseño con enrutamiento inadecuado puede sufrir una flexibilidad y una utilización de recursos deficientes, lo que proporciona un rendimiento limitado. Si se proporciona demasiada interconexión, se necesitarán más transistores de los necesarios y, por tanto, más área de silicio, cables más largos y más consumo de energía.
Uno de los desafíos clave para la informática reconfigurable es permitir una mayor productividad del diseño y proporcionar una manera más fácil de utilizar sistemas informáticos reconfigurables para usuarios que no están familiarizados con los conceptos subyacentes. Una forma de hacerlo es proporcionar estandarización y abstracción, generalmente respaldadas y aplicadas por un sistema operativo. [28]
Una de las principales tareas de un sistema operativo es ocultar el hardware y presentar los programas (y sus programadores) con abstracciones agradables, limpias, elegantes y consistentes con las que trabajar. En otras palabras, las dos tareas principales de un sistema operativo son la abstracción y la gestión de recursos . [28]
La abstracción es un mecanismo poderoso para manejar tareas (de hardware) complejas y diferentes de una manera común y bien definida. Una de las abstracciones más elementales del sistema operativo es un proceso. Un proceso es una aplicación en ejecución que tiene la percepción (proporcionada por el sistema operativo) de que se está ejecutando por sí sola en el hardware virtual subyacente. Esto se puede relajar con el concepto de subprocesos, permitiendo que diferentes tareas se ejecuten simultáneamente en este hardware virtual para explotar el paralelismo a nivel de tareas. Para permitir que diferentes procesos e hilos coordinen su trabajo, el sistema operativo debe proporcionar métodos de comunicación y sincronización. [28]
Además de la abstracción, la gestión de recursos de los componentes de hardware subyacentes es necesaria porque las computadoras virtuales proporcionadas a los procesos y subprocesos por el sistema operativo necesitan compartir los recursos físicos disponibles (procesadores, memoria y dispositivos) espacial y temporalmente. [28]
{{cite book}}
: Mantenimiento CS1: otros ( enlace ){{cite book}}
: Mantenimiento CS1: otros ( enlace )