¿Qué son los Domain-Specific Accelerators?

Este nuevo artículo va dirigido a explicar un término que vas a escuchar cada vez con más frecuencia. Se trata de los chips Domain-Specific Accelerators, unos dispositivos que ayudarán a acelerar ciertas tareas específicas en todo tipo de sectores, especialmente en el HPC.

Y es que la Ley de More parece que está moribunda y, aunque muera, la tecnología del silicio seguirá por muchos años más. Nuevos materiales, nuevas estructuras, chips multicapas (3D), computación heterogénea… todo lo que sea necesario para seguir estirando esta tecnología más allá de lo imaginable hasta hace unos años.

Perspectiva

Desde la máquina analítica de Babbage, hasta la llegada de las primeras computadoras, pasando por los primeros procesadores CISC, la llegada de los RISC, la mejora de la jerarquía y arquitectura de la memoria, y la mejora del paralelismo (a nivel de datos, de instrucciones, de hilos), muchas cosas han ido cambiando en la búsqueda incesante del rendimiento y la eficiencia.

Precisamente esa eficiencia energética lo que más preocupa en algunos sectores como el HPC. Se busca ofrecer la mejor entrega de rendimiento/vatio, llevando a los investigadores a explorar nuevas soluciones, especialmente la computación heterogénea, con algunas unidades de procesamiento haciendo trabajos para los que no fueron creadas (p.e.: una GPGPU), aunque no todos tienen la misma flexibilidad para permitir eso.

Si se atiende a flexibilidad por rendimiento (MOPS/w), se puede ver que los ASICs son los menos flexibles, pero consiguiendo la mejor relación rendimiento/vatio. Después vendrían los reconfigurables (p.e.: FPGA), luego los ASIPs y DSPs, y finalmente los procesadores embebidos, que tienen mayor flexibilidad, pero las peores cifras de rendimiento por vatio.

Actualmente, las mejoras de rendimiento se deben más al paralelismo que por las mejoras en las microarquitecturas o el aumento de la frecuencia de reloj. Esto es debido a que cada vez es más complicado elevar la frecuencia, y también se vuelve más tedioso lograr extraer más rendimiento de los cambios arquitectónicos.

Por eso, la evolución más contemporánea ha dado como resultado máquinas cada vez más capaces y más rápidas mediante técnicas alternativas, como las tecnologías realmente disruptivas. En ésta década 202x veremos cada vez florecer más este nuevo paradigma de las arquitecturas Domain-Specific Computer. Es decir, buscar unidades muy específicas contra esa flexibilidad, pero en pos de conseguir tasas de eficiencia extremadamente buenas.

Sobre los Domain-Specific Accelerators

Los Domain-Specific Accelerators (DSA) son otro intento de continuar aumentando el rendimiento por vatio de los actuales sistemas. Gracias a ellos se puede seguir escalando, y lo harán en todo tipo de equipos, desde los dispositivos móviles, hasta las más grandes suprcomputadoras, pasando también por los PCs.

Puede que los encuentres denominados como xPU, o Accelerated Computing, etc.

Introducción

Desde los sistemas de los electrodomésticos, vehículos, pasando por los servidores de centros de datos, hasta las computadoras domésticas, todos se basan actualmente en procesadores de uso general, en CPUs. Hasta ahora, este tipo de chips eran suficientes…

Sin embargo, no son precisamente los sistemas más eficientes. La energía necesaria para ir a buscar una instrucción e interpretarla es entre 10 y 4000 veces más elevada que para ejecutar dicha instrucción. Cuando hablamos de un programa convencional con miles de instrucciones necesarias, esto es un problema mayúsculo.

Ahora que el rendimiento y la eficiencia ya no aumentan según la Ley de More, se necesitan buscar alternativas para seguir aumentando el rendimiento buscando más eficiencia. Para eso se necesitan alternativas a lo que actualmente existe, y eso pasa por estos Domain-Specific Accelerators, o aceleradores de dominio específico.

Si te fijas en la evolución de las computadoras, se ha tenido a especializar procesadores, aunque no de la misma manera que en un DSA:

  1. CPU (Control Processing Unit) se encargaba de todo, por tanto, estaban más sobrecargadas.
  2. Se crearon los coprocesadores matemáticos (FPU) para encargarse de las operaciones de coma flotante. Aunque finalmente, debido a las capacidades de integración, se han reintegrado en la CPU como una unidad funcional más para mejorar el rendimiento.
  3. Nacen los primeros aceleradores gráficos. Unidades específicas encargadas de las operaciones dedicadas a la generación de gráficos que saturaban la CPU.
  4. Los aceleradores dan lugar a las tarjetas gráficas o GPUs (Graphic Processing Unit) actuales.
  5. Hubo un intento de fragmentar aún más las tareas de cada unidad, incorporando la PPU (Physics Processing Unit) a la ecuación, aunque finalmente fueron reabsorvidas por la GPU como le ocurrió a las FPUs cuando se integraron en la CPU. Estas unidades estaban dirigidas al procesamiento de cálculos de física de los motores de física de videojuegos.
  6. Se buscan mejoras con la computación heterogénea. Por ejemplo, usando GPGPUs (General Purpose GPUs) para acelerar tareas que la CPU no realiza de forma tan rápida o de forma tan eficiente. Se buscaba destinar tareas específicas a aquellas unidades que las hagan de la forma más eficiente y rápida, ya sea una CPU, un DSP, una GPU, etc. Y es que, cada tipo de procesador es especialmente bueno en una tarea, pero no es bueno en todas…
  7. Después de eso, han ido apareciendo algunos aceleradores concretos que se han ido integrando dentro de SoCs/ASICs para tareas específicas, como los destinados a codecs multimedia, DSP (Digital Signal Processor), la TPU (Tensor Processing Unit), procesadores específicos para Ray Tracing, aceleradores por hardware de cifrado (AES, SSL,…), TPM, VPU (Vision Processing Unit), NPU (Neural Processing Unit), procesamiento de imagen para cámaras, etc. Algunos de ellos integrados en los SoCs, y asea como elementos independientes o como parte de la CPU o GPU…

¿Qué son los Domain-Specific Accelerator?

Los aceleradores de dominio espeífico, o Domain-Specific Accelerators, son motores informáticos de hardware especializados en un dominio particular de aplicaciones. Se diseñan para gráficos, para deep learning, para simulación, para bioinformática, para el procesamiento de imágenes, o para otras muchas tareas.

Ellos cosiguen desarrollar esas tareas de una forma más rápida y con un menor consumo que un procesador genérico. Todo gracias a una combinación de operaciones específicas, alto paralelismo, sistemas de memoria eficientes, y reducción de la sobrecarga. Por eso se están volviendo omnipresentes y cada vez más visibles en la industria…

Eso sí, no están libres de inconvenientes, ya que la mayoría de las aplicaciones requieren modificaciones para poder lograr adaptarse a estos DSAs. Además, si el acelerador está bien diseñado, podrá cubrir un amplio abanico de posibles aplicaciones, es decir, acelerar no solo una aplicación, sino un dominio de ellas.

Es decir, se necesita un nuevo modelo de programación paralela diferente al actual. A cambio, las operaciones aritméticas y lógicas serán casi «gratuitas».

Fuentes de aceleración

Los Domain-Specific Accelerators aprovechan cuatro técnicas fundamentales para aumentar el rendimiento y la eficiencia energética:

  • Especialización de datos: tipos de datos específicos de dominio sobre los que se aplican operaciones que se puedan realizar en un ciclo. Algo que llevaría decenas de ciclos en un procesador genérico.
  • Paralelismo: altos grados de paralelismo para proporcionar ganancias de rendimiento. En algunos casos, se trata de explotar paralelismo a varios niveles. Para mejorar su efectividad, las unidades paralelas deben explotar la localidad y hacer pocas referencias a la memoria global, de lo contrario, su desempeño estaría limitado.
  • Memoria local y optimizada: las estructuras de datos se pueden almacenar en memorias locales, logrando así un ancho de banda de memoria muy elevado, con bajo coste energético, y con una latencia reducida. También se debe optimizar loas acceso a la memoria global para lograr el mayor ancho de banda posible, e incluso comprimir los datos para multiplicar el ancho de banda. Por supuesto, se equilibrará la carga entre los distintos canales de memoria y la programación debe ser meticulosa para maximizar la utilización de la memoria.
  • Gastos generales reducidos: al especializar el hardware se elimina o reducen los gatos generales de interpretación de las instrucciones de un programa.

Gracias a esto, los aceleradores pueden hacer ese trabajo pesado de una forma ligera.

Hablando de eficiencia

Las ganancias de rendimiento y eficiencia que se pueden conseguir son realmente impresionantes. En ocasiones miles de veces mayor. Para que te hagas una idea, con un DSA fabricao en nodo de 28nm CMOS se podría realizar una operación de suma de enteros con un coste energético de 63 fJ, mientra que esa misma suma en una CPU genérica como el ARM Cortex A-15 de 28nm podría suponer 250 pJ (250.000 fJ), lo que supone casi x4000 veces mejor… Multiplica esa ganancia en una sola instrucción por los miles de instrucciones que se ejecutan en un computador actual y puedes obtener beneficios globales realmente impresionantes.

Hay que buscar el mejor compromiso entre especialización y generalidad. Un acelerador de dominio específico muy especializado puede brindar mucha eficiencia, pero el rango que abarca puede no ser suficiente como para justificar los gastos de diseño y los cambios en el algoritmo puede hacer que se vuelva obsoleto pronto.

Otro ejemplo de lo comentado lo tienes en una instrucción compleja del NVIDIA Volta V100, como la HMMA (Half-precision Matrix Multiply-accumulate), la cual puede realizar hasta 128 operaciones de coma flotante en una sola instrucción, con solo un 27% de sobrecarga (fetch, decode y fech del operando, que supone un +30pJ), y con un consumo de 110pJ (para un nodo de 45nm).

En centros de datos, por ejemplo el de Google, la carga de trabajo está entre el 10 y el 50% la mayor parte del tiempo, mientras que las cargas al 100% solo se dan durante menos del 1% del tiempo. Esto puede ser esperanzador, pero dados los consumos actuales, incluso esas cifras suponen un gran consumo. Por ejemplo, se estima que aproximadamente el 33% de la potencia se consume con cargas de solo el 15%. Esto hace patente la falta de mejorar la eficiencia para ejecutar esas cargas con la menor energía posible.

Como curiosidad, observa estos cálculos para hacerte una idea de los costes energéticos en Julios que cuesta hacer ciertas operaciones habituales para estos sistemas (en base a un nodo de 14nm):

  • Una operación aritmética de suma de 8-bit tiene un coste de 10 fJ y 4 μmde superficie.
  • Una multiplicación de coma flotante de doble precisión (64-bit) tendría un coste de 5 pJ y 3600 μm 2.
  • Un acceso a la memoria local (on-chip) de un DSA, considerando que fuese de 8 KByte, estaría en 50 fJ/bit, con un área de 0,013 μm2 en caso de ser celdas SRAM. En memorias mayores sería un coste también mayor, ya que se necesita algo más para recorrerla (p.e.: 100 fJ/bit-mm, siendo una de 100MB de aprox. 0.7 pJ/bit).
  • Un acceso a una memoria global, es decir, que esté off-chip o fuera del chip, es más cara en cuanto a coste energético. Por ejemplo, teniendo en cuenta una DDR4 se podría estar hablando de 20 pJ/bit, mientras que una LPDDR4 estaría en torno a los 4 pJ/bit. Eso sin contar las limitaciones del ancho de banda, latencias,…
  • Comunicación local, entre bloques o unidades funcionales del propio chip, pueden aumentar con la distancia a tasas de 100 fJ/bit-mm.
  • Comunicación global, a través de canales o buses con elementos que están fuera del chip, pueden usar hasta cientos de veces más memoria. Por ejemplo, podrían ser de 10 pJ/bit.

En un sistema x86, por ejemplo, la mayoría de las instrucciones necesarias para ejecutar un programa son de transferencia de datos (aprox. 38%). Más que las de computación (aprox. 35%) y que control de flujo (aprox. 22%).

Ten en cuenta que la energía usada para la memoria local y la lógica escalan linealmente con la tecnología, ya que la capacitancia de estos dispositivos se reduce mientras la tensión de alimentación se mantiene constante. Por otro lado, la energía de comunicación permanece constante. Ese escalado no uniforme hace que la comunicación, como los accesos a memorias globales, sea aún más crítica conforme la tecnología avanza…

Conclusión

Conforme se aproxima la tecnología del silicio a su límite en cuanto a nodos, los DSAs son de los pocos caminos para seguir aumentando el rendimiento y la eficiencia del hardware. Y mientras haya ciertas barreras y limitaciones para «democratizar» la computación cuántica para adaptarla al consumo más allá de un simple servicio, seguiremos dependiendo del silicio por mucho tiempo…

Importancia de la FPGA

¿Qué tienen que ver las FPGA (Field-Programmable Gate Array) en todo esto? Es posible que te estés preguntando eso, pero la verdad es que tienen mucho que ver. ¿Por qué crees que Intel compró Altera y AMD ha comprado recientemente Xilinx? No son movimientos estúpidos, y tienen como objetivo, entre otras cosas, poder implementar este tipo de aceleradores junto con sus procesadores.

Xilinx y Altera eran dos de los líderes en el sector de las FPGAs.

Intel invirtió 16.700 millones de dólares en su adquisición, mientras AMD ha invertido 35.000 millones de dólares. Nadie se gasta esas cifras si no fuesen claves para el futuro. Estos dispositivos programables contienen bloques de lógica que se pueden interconectar y generar funciones configuradas de forma específica.

Es decir, a diferencia de lo chips convencionales o los ASICs, estos chips FPGAs son como libros en blanco donde se puede «escribir» lo que se necesite. Puedes ser una memoria, un procesador, controlador o, en este caso, Domain-Specific Accelerators. Tan solo se necesita escribir un código mediante un lenguaje de descripción de hardware especial.

Y, a pesar de que una FPGA es más lento que un ASIC y tienen un mayor consumo de energía, su flexibilidad los hace realmente importantes, ya que al ser reprogrmables, permiten unos costes de desarrollo inferiores.

RISC-V: otra pieza clave

Fuente: codasip.com

El proyecto EPI está usando la ISA RISC-V para su acelerador, y no es extraño. Las magníficas ventajas que ofrece RISC-V lo hacen ideal para este tipo de dispositivos. Ademas, permite optimizar la ISA para los núcleos DSA mediante la creación de perfiles de software, y agregando o eliminando instrucciones según se necesite.

Para poder realizar esto, se debería modificar manualmente el simulador de conjunto de instrucciones (ISS), ajustando el repertorio de instrucciones. Luego habría que actualizar el SDK para que se vea reflejado el nuevo conjunto de instrucciones. Eso requiere gran cantidad de trabajo manual, la necesidad de modificar el compilador, y con sus riesgos técnicos asociados. Además, si se necesita ampliar el set, sería necesario modificar también la microarquitectura, editando el RTL y verificando con el ISS.

Otra alternativa a esto es describir la ISA mediante un lenguaje de descripción de procesador como CodAL. Eso mejoraría la eficiencia de este arduo proceso manual, ya que se emplearían herramientas de automatización de diseño como Codasip Studio. Esta suite permitiría generar automáticamente la ISS y también el nuevo compilador para la ISA modificada.

Los propios núcleos Codasip han sido diseñados con este software.

Además, CodAL también permitiría describir la propia microarquitectura (cycle-accurate). Y dentro de la suite se podría realizar una comprobación mediante análisis estático, generar el HDK (Hardware Development Kit), incluido el RTL, banco de pruebas, scripts EDA, y entorno UVM (Universal Verification Methology).  En definitiva, un ahorro en tiempo y esfuerzo bastante importante…

Isaac: Apasionado de la computación y la tecnología en general. Siempre intentando desaprender para apreHender.