Los aceleradores de dominio específico o Domain Specific Accelerators son un tipo de unidad que se sitúa por su complejidad por debajo de una CPU, pero que tiene la capacidad de realizar ciertas tareas consumiendo menos energía y siendo más rápidas. Pero, ¿cómo funcionan, qué es lo que los define y por qué son el futuro del hardware?
A medida que va pasando el tiempo se necesita que los programas vayan más y más rápidos, pero al mismo tiempo las CPU y las GPU se han vuelto mastodontes de la complejidad donde es muy difícil hacer que el rendimiento suba de manera tradicional. ¿La solución a futuro para este problema? Los aceleradores de dominio específico
Primero de todo, el concepto de acelerador
Desde los albores de la informática han sido necesarios chips de apoyo para acelerar ciertas técnicas, originalmente estos chips liberaban a la CPU de realizar una tarea repetitiva y recursiva. El ejemplo más claro fueron los sistemas gráficos que hicieron que la CPU no tuviese que perder la mayoría del tiempo dibujando en pantalla.
Un acelerador es un chip de apoyo que va más allá, porque no solamente libera a la CPU de hacer esa tarea, sino que la acelera. Es decir, la realiza la tarea en una porción del tiempo de lo que tardaría la CPU. Lo que se traduce en que esa se ve acelerada y repercute en que todo vaya más rápido. De ahí el nombre de acelerador.
Aceleradores hay de muchos tipos y diseños, cualquier tipo de hardware puede ser un acelerador: un microcontrolador, un FPGA, un circuito combinacional o uno secuencial, etc. En los últimos años han aparecido un tipo de aceleradores que van a dominar el hardware en los años siguientes, los Domain Specific Accelerators.
Domain Specific Accelerators, definición general
En el hardware llevamos tiempo utilizando aceleradores para diferentes tipos de trabajos y aplicaciones concretas y por tanto para un dominio específico en concreto. A día de hoy estos dominios pueden ser los gráficos, el Deep Learning, la bioinformática, el procesamiento de voz y de imágenes a tiempo real. Hay muchos dominios específicos en los que un Domain Specific Accelerator puede solventar de mejor manera el problema que una CPU, es decir, en menos tiempo y consumiendo menos.
Lo primero que os vendrá a la cabeza es la pregunta: ¿es una GPU un Domain Specific Accelerator? Pues no, no lo es. Los DSA se ocupan de tareas muy específicas en concreto, por lo que una GPU va a tener varias de estas unidades. Para hacerlo más comprensible hay que tener en cuenta que toda tarea se puede dividir en varias más pequeñas que se pueden acelerar de manera independiente con este tipo de procesadores.
Los Domain Specific Accelerators no obstante son diferentes a otras opciones que existen en el mercado, ya que explotan en su diseño una serie de características que los sitúan entre los procesadores de propósito general y los aceleradores convencionales. Dicho de otra manera, no llegan a la complejidad de una CPU, pero son mucho más complejos que las clásicas soluciones, especialmente las basadas en función fija.
Dominio específico, ISA específica
Lo primero que tenemos que tener en cuenta es que un Domain Specific Accelerator no es una CPU, aunque también ejecuta un programa su diseño está optimizado para una solución concreta y no una en general, para ello se crea alrededor de la unidad DSA una ISA totalmente exclusiva cuyas instrucciones, registros y tipos de datos utilizados están pensados para resolver en poco tiempo ciertas instrucciones que una CPU tardaría muchos ciclos en hacer.
Las CPUs en sus ISA construyen las instrucciones a día de hoy a partir de microinstrucciones que comparten un camino de datos común a través del ciclo de instrucción. Esto significa que debido a la complejidad del set de instrucciones una instrucción compleja tarda muchos ciclos en completarse. En un DSA podemos crear ciclos de instrucción y caminos de datos concretos para ciertas instrucciones y que se ejecutan más rápido. Incluso podemos crear unidades en paralelo que ejecuten solo esa instrucción de manera recursiva.
Pero la mayor ventaja de esto es que nos permite para ciertas aplicaciones quitarnos de encima instrucciones que una unidad de propósito general que para nuestra aplicación específica no nos sirven para nada. Y que en los últimos años han acabado transformando los sets de registros e instrucciones de CPUs y GPUs en mastodontes que ocupan un gran espacio.
Domain Specific Accelerators y acceso a memoria
Otra de las mejoras de los DSA tiene que ver con la memoria, ya que al igual que un microcontrolador estos utilizan memoria dentro del propio acelerador. Lo cual es importante, ya que la distancia física en la que se encuentra la memoria influencia el coste energético de las instrucciones.
Su configuración de memoria es la principal ventaja de los aceleradores, dado que cada instrucción ejecutada consume mucha menos energía que en una CPU, además evita el problema de la contención con la memoria. Un DSA no hace uso de la RAM del sistema para realizar sus cálculos, por lo que puede trabajar en paralelo todo el tiempo.
Además, por la forma en la que funcionan podemos colocarlos en un SoC o una estructura similar y hacer que la CPU se comunique con ellos de manera directa, todo sin tener que pasar por la RAM para conseguir los datos.
Hardware y Software van de la mano en los DSA
El diseño del hardware normalmente no se realiza para un software en concreto, más bien es el software el que se adapta para aprovechar el hardware. Esto se hace a través del uso de APIs especializadas a nivel de software donde el software interactúa con una abstracción del hardware para que un programa que es el driver sea el que realice la traducción entre la abstracción y el hardware.
En los Domain Specific Accelerator la idea es que estos puedan ejecutar un programa que se ejecute en ellos como si fuera una CPU, pero dado que tienen un set de instrucciones especializado para un problema en concreto con el objetivo que los programas se ejecuten más rápido bajo un DSA que bajo una CPU debido a su ISA y arquitectura especializadas.
Muchos de los diseños de hardware en el futuro serán DSA para problemas especializados. Los cuales se crearán localmente en cada empresa e institución para acelerar partes concretas de uno o varios programas que se han desarrollado. Su implementación será a través de la creación de chips únicos, su implementación en SoCs e incluso en FPGAs a través de lenguajes como Verilog o VHDL.
Por lo que es invertir por completo la relación entre hardware y el software, ya que pasamos a diseñar software para aprovechar un hardware concreto a diseñar hardware para soluciones concretas de software.