Jun 23 2019

Intel y las FPGAs: ¿Usarán FPGAs las nuevas generaciones de microprocesadores?

[Actualización del 2/7/2019] En esta entrada comentaré algunos detalles del impacto de la entrada de Intel en el mercado de los circuitos reconfigurable (FPGA), centrándome en los nuevos chips híbridos que combinan microprocesadores con tejido reconfigurable FPGA. El texto es complementario al siguiente programa de radio del Canal UNED, serie Informática en Radio 3, publicado el 28/6/2019:

 

¿Qué es una FPGA?

Una FPGA es un circuito integrado formado por una gran cantidad de memorias muy pequeñas, que almacenan escasos bits, y que pueden interconectarse entre sí . Cada memoria implementa una función lógica, con lo que es posible configurar la FPGA para que implemente cualquier circuito digital. Esta configuración se puede realizar tantas veces como se quiera, de igual manera que podemos cargar un programa diferente en un ordenador.

Esta capacidad de reconfiguración, hace que una vez fabricado el chip, su arquitectura interna pueda modificarse programando las memorias y las interconexiones. Esto no puede hacerse con otros chips, como por ejemplo el microprocesador, que una vez que están fabricados no es posible modificar en absoluto el funcionamiento de sus bloques internos.

Pero que esto no nos lleve a confusión, una CPU puede variar su funcionalidad modificando los valores de la memoria que contiene el programa que ejecuta el micro, pero si el micro está mal diseñado, entonces funcionará mal. Si el circuito digital que está implementado en una FPGA está mal diseñado, siempre puede corregirse y actualizarse, aunque ya esté el dispositivo en el mercado.

Esto es similar a las actualizaciones de Windows, que permiten corregir errores en el software de este sistema operativo, sólo que en la FPGAs las actualizaciones modifican el hardware.

El nombre FPGA viene del inglés, Field-Programmable Gate Array. En español podría traducirse como matriz de puertas programable in situ, haciendo hincapié en que puede modificarse una vez está el chip en uso. Personalmente, creo que el nombre es poco acertado, porque en realidad está compuesto principalmente de memorias y no de puertas lógicas. Un nombre más acertado hubiese sido FPLCA: Field-Programable Logic Cell Array. De hecho, la primera FPGA se llamó LCA: Logic Cell Array [Trimberger2015].

 

¿Por qué no se usan siempre las FPGAs para evitar vender productos con errores?

Tal como he comentado antes, las FPGAs puede actualizarse. Recordemos el caso del Intel Pentium que salió al mercado con un error en la operación de la división y que supuso grandes pérdidas a Intel [Cipra1995]. Más actuales son los problemas de seguridad producidos por las vulnerabilidades tipo Spectre [Abu-Ghazaleh2019], que se deben, fundamentalmente, al diseño de la propia arquitectura hardware de procesadores de Intel, ARM y AMD. Sería ideal poder actualizar nuestros procesadores a nivel hardware en lugar de tener que aplicar parches al sistema operativo, que mejoran la seguridad pero ralentizan el tiempo de ejecución de las aplicaciones.

Una FPGA puede implementar cualquier tipo de circuito digital incluyendo al microprocesador. Entonces ¿por qué no están todos los micros basados en FPGA y así poder corregir errores hardware en la etapa post-venta? El motivo es que la FPGA no es tan eficiente como un circuito específico, tal como el microprocesador.

Hay que entender que en la FPGA la mayoría del silicio área del chip está dedicada a las interconexiones. Hacer que un circuito disponga en su interior de cientos de miles de bloques que pueden interconectarse entre sí de forma arbitraria hace que el circuito aproveche muy mal el espacio. La flexibilidad va reñida con la eficiencia. Podemos imaginar las interconexiones como una red de carreteras con varios niveles, como si se tratase de los llamados “scalextric” que encontramos en algunas ciudades. Por lo tanto la FPGA no es capaz de alcanzar la velocidad de procesamiento  de los microprocesadores de Intel, ARM o AMD.

 

¿Cuál es el nicho de la FPGA?

La FPGA es interesante cuando se quieren realizar muchas tareas al mismo tiempo. Un microprocesador ejecuta las instrucciones de un programa de forma secuencial, es decir, una instrucción tras otra. Sin entrar en detalles de arquitectura de computadores, la tendencia es añadir varias CPUs en un mismo micro para así poder ejecutar varias programas (o hilos) a la vez. Los microprocesadores que usamos en casa suelen tener entre 4 y 8 CPUS (los llamados cores).

Una FPGA dispone de cientos de miles de elementos muy simples que pueden trabajar en paralelo. Si las tareas a realizar son sencillas, entonces se pueden conseguir velocidades de procesamiento abismales. Hay trabajos en la literatura académica que muestran como algunos algoritmos/aplicaciones corren hasta 10.000 veces más rápido en una FPGA que en un core de un procesador Intel i7 [Pérez2016].

Por otra parte, no solo es que estas tareas se realizan rápido, sino que al estar los diseños optimizados para algoritmos concretos, el consumo de potencia es menor que en un microprocesador, puesto que no hay hardware sobredimensionado.

Y podríamos volver a preguntarnos por qué no implementamos todos los algoritmos en FPGA y no usamos los micros. La respuesta es que no todos lo algoritmos o aplicaciones son adecuados para la arquitectura hardware de una FPGA. Y por otra parte, el diseño de estos circuitos es muy costoso en tiempo. Lo que en software se puede desarrollar en varios minutos, podría tardarse varios días en hacerlo para que se aprovechen las características de las FPGAs. Además, los tiempos de compilación de software son muy cortos en comparación con los tiempos de compilación de las FPGA.

Mundos muy distintos, pero complementarios.

Por último, comentar que un circuito optimizado para llevar a cabo una aplicación específica no sólo puede implementarse en una FPGA, sino que puede implementarse en un circuito integrado que no sea flexible y que una vez fabricado no permita variar sus interconexiones (ASIC: circuito integrado de aplicación específica). Con esto se conseguiría la máxima velocidad y el mínimo consumo de batería, pero, una vez más, si hay un error en el diseño, se perdería mucho dinero

Un poco de historia

En esta sección me baso principalmente en la información contenida en [Trimberger2015].

La primera FPGA la fabricó la compañía estadounidense Xilinx en 1985. Era el chip XC2064, al que bautizaron como LCA (logic cell array). En 1988, otra compañía del sector, Actel (ahora Microsemi), introdujo el nombre FPGA, que es como se conoce hoy en día a estos dispositivos. Estas FPGAs primitivas no eran muy útiles. Presentaban una idea interesante, pero eran caras y tenían poca capacidad.

El chip XC2018 fue el hermano mayor de la FPGA XC2064. Fuente: https://commons.wikimedia.org/wiki/File:Xilinx_XC2018_LCA.jpg

Un año antes, la compañía Altera introduce en el mercado un chip llamado CPLD (complex programmable logic device). Este chip sí que era funcional y supuso un hito en los circuitos integrados. La CPLD se basaba en una idea similar a la de la FPGA, pero utilizando puertas lógicas.

A mediados de los 90, es esta misma compañía, Altera, la que realiza un cambio drástico en las FPGAs. Las primeras FPGAs sólo permitían que se interconectasen bloques cercanos entre sí, por lo que para conectar dos bloques separados había que dividir las interconexiones en varios tramos. Algo similar a utilizar el metro, que para ir de una estación a otra, hay que pasar por todas las estaciones intermedias. El nuevo cambio fue posible a que la fabricación de chips mejoró en lo referente a interconexiones, permitiendo que existiesen varias capas paralelas por las que podían trazarse líneas conductoras (la idea del “scalextric” mencionado antes). Altera combinó líneas conductoras cortas para las comunicaciones cercanas y líneas largas para conectar bloques alejados. Con esto la FPGA empezó a ser un dispositivo mucho más flexible y rápido que la CPLD.

Con el comienzo del milenio los avances en la microelectrónica permitieron que las FPGAs tuviesen una capacidad cercana al millón de puertas lógicas y además permitió introducir elementos de procesamiento más complejos que las pequeñas memorias utilizadas hasta entonces. Se añadieron bloques de memoria RAM de varios kilobits, operadores matemáticos como multiplicadores y sumadores, e incluso microprocesadores (PowerPC de Motorola).

Esta tendencia continúa hoy en día, pero en lugar de introducir varios microprocesadores en la FPGA, éstos están fuera – aunque comparten el mismo encapsulado y se conectan directamente a gran velocidad – y son mucho más potentes. Por ejemplo, hay chips en los que conviven procesadores ARM de la familia A con dos cores, frecuencia de reloj de 1 GHz, 1 GB de RAM y una FPGA.

Me estoy centrado únicamente en las compañías más potentes de FPGA que son Xilinx y Altera, pero existen varias compañías muy interesantes en el mercado y cada una da una solución diferente: bajo consumo, seguridad, altas prestaciones, etc. Podríamos decir que tradicionalmente Xilinx y Altera ha sido las empresas líderes del sector; competidores acérrimos y que se han ido turnando a la hora de introducir innovaciones tecnológicas.

En 2015 la compañía Intel adquiere la empresa Altera por 16,700 millones de dólares, haciendo temblar los cimientos del negocio de los circuitos reconfigurables.

 

Intel entra en juego

La compra de Intel se debe principalmente a un intento por parte de esta compañía de buscar una tecnología rompedora que le permita sostener su negocio frente a la actividad de empresas como NVvidia (productor principal de tarjetas gráficas) y ARM (productor principal de microprocesadores y microcontroladores de bajo coste y bajo consumo). Nvidia domina el mercado de las tarjetas gráficas (GPU) y ARM domina el mercado de los smartphones, las tablets y los dispositivos IoT.

Tal como he comentado antes, la unión de microprocesadores y FPGA ya existía, pero nunca se había producido desde una misma empresa, y al gigante de los microprocesadores, con más de 40 años de vida, hay mirarlo siempre con mucho respeto.

En los dispositivos existentes en el mercado que combinan desde principios de la década procesadores ARM y FPGAs (por ejemplo, los chips Zynq de Xilinx o los Stratix V GX de Altera) el microprocesador se comunica con la FPGA para configurarla y para enviarle datos o recibirlos, pero pueden perfectamente funcionar de forma autónoma sin la FPGA. LA FPGA actuaría como co-procesador, es decir, como acelerador de algoritmos. El proceso de diseño de los aceleradores es lento, y aunque se han incluido compiladores que permiten usar lenguajes como C o OpenCL, se tarda entre minutos u horas en obtener un circuito disponible. Esto descarta la compilación a demanda, según se ejecuten los programas. Con esto, lo que ocurre es que hay que disponer de una biblioteca de diseños precompilados, que el microprocesador utilizará según la aplicación que esté ejecutando.

La aportación de Intel en este sentido es introducir las FPGAs en microprocesadores de altas prestaciones, como los Xeon. En 2015, Intel anuncia que integrará FPGAs en sus microprocesadores y con el objetivo de mejorar la eficiencia de aplicaciones específicas, tales como servicios en la nube, Big Data, análisis genómico, compresión de ficheros, etc. El salto a sistemas de altas prestaciones diferencia estos chips de los que hay actualmente disponibles, más orientado a aplicaciones de prestaciones bajas o medias. En este año hace un llamamiento a la comunidad científica para explotar las posibilidades de un nuevo chip que integre FPGA y microprocesadores. Es el proyecto HARP: Hardware Acceleration Research Program.

En mayo de 2018, Intel anuncia que ya tiene un prototipo que integra un chip Xeon, posiblemente un Xeon SP-6138 con 20 cores, con una FPGA Arria 10 integrada [Priaocket2018]. Existe un canal de comunicación de alta velocidad entre la FPGA y la CPU y además, como ocurre con este tipo de procesadores, es posible conectar con uno de estos canales otro procesador Xeon, que a su vez también puede disponer de una FPGA integrada. La FPGA seleccionada dispone de una capacidad de unos 10 millones de puertas lógicas, la posibilidad de hacer 3000 multiplicación de enteros simultáneas, 400 operaciones de coma flotante de precisión doble simultáneas, 2000 memorias de 2 KB, etc.

Las noticias son que han conseguido aumentar el rendimiento de técnicas de virtualización en la nube, reduciendo la latencia por dos, aumento el flujo de datos por 3 y duplicando el número de máquinas que pueden desplegarse [Pricket2018].

La respuesta del otro grande de la electrónica, Xilinx, ha sido presentar chip orientados a la aceleración que integran, además de tejido configurable FPGA, varios procesadores ARM de las familias A y R, procesadores vectoriales para Deep Learning y memorias de alta capacidad de almacenamiento y bajas latencias de acceso.

 

Límites y futuro de la tecnología híbrida

La información de la que dispongo acerca de las posibilidades de esta tecnología híbrida es bastante limitada, pero a día de hoy es posible programar la FPGA con distintos aceleradores simultáneos. Esto permite acelerar más de una aplicación. Es decir, parte de la aplicación se ejecuta mediante software en la CPU y en paralelo se hacen tareas intensivas mediante el hardware de la FPGA. Es posible crear una librería de aceleradores (denominados cores) y ejecutarlos a demanda. Los cores se varían desde la CPU como hilos que se ejecutan en paralela y es posible la comunicación entre estos hilos mediante memoria compartida.

El diseño de los cores se realiza mediante herramientas de Intel. No es un proceso sencillo, puesto que el diseño hardware no es sencillo de por sí. Con esto lo que quiero decir es que los tiempos de compilación son largos y la depuración es también costosa en tiempo. Todo esto es lo normal en el mundo del diseño de hardware digital.

Existe la posibilidad de usar lenguajes similares a C, como sería OpenCL, lo cual facilita el diseño, pero los tiempos de desarrollo siguen siendo largos. De hecho, es posible realizar compilación al vuelo, lo que permite que se use OpenCL para decribir una aplicación que correría tanto en la CPU como el la FPGA, pero seguimos teniendo el problema de que la compilación para la FPGA tarda mucho y todavía no es una opción atractiva y se está muy lejos de conseguir el tipo de compilación al vuelo que por ejemplo tenemos en GPUs y que permite que el código binario final aproveche al máximos las características de la GPU concreta que tiene conectada el ordenador.

Las posibilidades futuras son muy interesantes si entendemos que es posible hacer diseños óptimos ajustados a aplicaciones específicas con resultados realmente diferenciadores. Sin embargo, todavía, después de más de 30 años de FPGAs en el mercado, sigue habiendo grandes retos por resolver:

  • Simplificar el proceso de diseño de cores utilizando descripciones más cercanas al software que al hardware, lo que se denomina Síntesis de Alto Nivel (HLS: high-level synthesis). En mi opinión, todavía los resultados de este enfoque distan bastante de lo que se consigue con un diseño clásico en el que el diseñador toma gran parte de las decisiones. Conseguir altas prestaciones requiere entrar en un bucle de prueba y error que al final resultado también largo, aunque menos que el diseño tradicional.
  • Mejorar la conectividad con memorias de las FPGAs y con CPUs. En este sentido, estoy convencido de que Intel mejorará el sistema de cachés de las FPGAs y el acceso a memorias externas. De igual manera, hasta la fecha se han incluido líneas de alta velocidad, más orientadas a sistemas de comunicación, pero nada específico para CPUs. La FPGA debe incluir bloques similares a los que incluyen los procesadores Xeon para gestionar memorias y las comunicaciones con CPUs (enlaces QPI y UPI).
  • Reducir los tiempos de reconfiguración y mejorar las técnicas de reconfiguración parcial. En la actualidad el tiempo que se tarda en configurar una FPGA Arria 10 GX 1150 completa son de decenas de milisegundos. Además, también interesa configurar solamente parte de la FPGA por si una aplicación ha terminado y una nueva debe ejecutarse sin interrumpir la ejecución del resto de aplicaciones que siguen activas. Al igual que ocurre con el uso de memoria en ordenadores, es necesario gestionar qué zonas de la FPGA están libres y comprobar si el nuevo core encajaría en estas zonas. Lo habitual es tener un rectángulo designado a reconfiguración dinámica y usarlos siempre para esos. En definitiva, habría que dar soporte software a mejorar el rendimiento de la reconfiguración dinámica, e idealmente, modificar el hardware de la FPGA para que gestione de forma automática la introducción y reemplazo de cores a demanda.

Creo que nos encontramos en un punto de inflexión en la historia de la informática, similar al momento en el que se creó la primera FPGA, la cual presentaba una idea revolucionaria, pero las limitaciones de la tecnología y también de su propio diseño no permitieron que se desarrollase plenamente hasta pasadas un par de décadas. La introducción de computación reconfigurable en microprocesadores es una apuesta de futuro, pero todavía queda mucho trabajo por hacer. Confiemos en la experiencia de Intel para llevar esta tarea a cabo.

Agradecimientos

Tengo que agradecer a varios profesores del Departamento de Arquitectura de Computadores de la Universidad de Málaga, algunos pertenecientes al proyecto HARP, por sus comentarios: Javier Hormigo Aguilar, Rafael Asenjo y Andrés Rodríguez. Los comentarios que hago en este post son personales y no expresan su opinión.

Enlaces de interés

HARP project: https://software.intel.com/en-us/hardware-accelerator-research-program

“IEEE Chip Hall of Fame: XC2064”: https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-xilinx-xc2064-fpga

“FPGA for Dummies”: https://plan.seek.intel.com/PSG_WW_NC_LPCD_FR_2018_FPGAforDummiesbook

Intel FPGAs: https://www.intel.com/content/www/us/en/products/programmable/fpga.html

Xilinx: https://www.xilinx.com/products/silicon-devices/fpga.html

Lattice: https://www.latticesemi.com/Products#_D5A173024E414501B36997F26E842A31

Microsemi: https://www.microsemi.com/product-directory/fpga-soc/1638-fpgas

Referencias

[Abu-Ghazaleh2019] “How the Spectre and Meltdown Hacks Really Worked
”, Nael Abu-Ghazaleh, Dmitry Ponomarev, Dmitry Evtyushkin, IEEE Spectrum Magazine, 2019

[Cipra1995] “How Number Theory Got the Best of the Pentium Chip “, Barry Cipra, Science, 1995 [pdf]

[HARP] Website of Hardware Accelerator Research Program [link – last access 4/7/2019]

[Pricket2018] “A peek inside that Intel Xeob FPGA chip”, Timothy Pricket Morgan, The next platform, 2018 [link (last visit 2/7/2019)]

[Pérez2016] “Hardware Accelerator to Compute the Minimum Embedding Dimension of ECG Records”,  P. Pérez Tirador et al, Proceedings of International Work-Conference on Bioinformatics and Biomedical Engineering, 2016.

[Trimberger2015] “Three Ages of FPGAs: A Retrospective on the First Thirty Years of FPGA Technology”, Proceedings of the IEEE, 2015

 

Deja un comentario

Your email address will not be published.

Bitnami