Barcelona (34) 93 263 33 54 | Madrid (34) 91 329 55 00 | Norte (34) 94 623 26 48

Graphic Processing Unit (GPU) en el entorno profesional

Desde que apareciesen por primera vez en los ordenadores de los años 80 del siglo pasado un chip dedicado exclusivamente a gráficos, como lo son el chip de Wi-Fi o de Ethernet, las GPUs han evolucionado en sus capacidades de proceso hasta lo que hoy se conoce con el término de GPGPU (General Purpose GPU).

 

Pero, ¿qué es realmente una GPU? Si nos ceñimos a la definición de su nombre, según sus siglas, las GPU son Unidades de Procesamiento Gráfico (del inglés, Graphic Processing Unit). Esto es, un coprocesador que se ocupa de las funciones gráficas para aligerar la carga de trabajo de la CPU principal.

 

Esta definición, ha sido válida hasta las últimas generaciones de GPUs, pero en la actualidad, las GPUs se utilizan para otras muchas funciones ya que son capaces de:

 

  • Mover los datos más rápido (optimizando la velocidad)
  • Mover menos los datos (optimizando el uso local)

 

Diferencias entre CPU y GPU

 

A pesar de que ambas son, a día de hoy, un conjunto de Cores CPU, la diferencia en la arquitectura en ambos casos es clara. Veamos como ejemplo, la siguiente figura:

 

graphic-processing-unit-gpu

 

En ella vemos un ejemplo claro de una CPU single-Core, pero puede exportarse a una configuración multi-Core.

 

En la CPU vemos un elemento de Control, rodeado de las unidades de cálculo (ALU ó Unidades Aritmético Lógicas), una caché de gran tamaño y DRAM. El objetivo de esta arquitectura es disminuir la latencia por medio de una optimización del código secuencial.

 

En el caso de la GPU tenemos una gran colección de Cores en paralelo (128, 256, 512, …) con pequeñas unidades de memoria caché dedicadas a cada uno de ellos, un gran número de ALU para cada uno y una DRAM común. A diferencia del objetivo de la CPU de reducir la latencia, en este caso, el objetivo principal es el cómputo.

 

Así como en las CPUs la ejecución del código es secuencial, en las GPU se busca optimizar los resultados con ejecución en paralelo, en la cual, si un Core está esperando porque ha terminado de realizar una operación, se le asigna un trabajo evitando que esté sin hacer nada.

 

Un buen modo de ver la diferencia entre la ejecución secuencial de código en la CPU y la ejecución paralela de código en la GPU lo tenemos en este vídeo de NVIDIA denominado “Mythbusters Demo: GPU vs CPU”:

 

 

La adopción de las GPUs para usos embedded no es casual. En ello han influido tanto el auge de nuevas tecnologías como la manera en cómo se programan las aplicaciones. Podemos ejemplificar esto con varias aplicaciones industriales:

 

Una CPU con procesado secuencial es perfectamente válida para ejecutar el programa que mueve un autómata o una máquina de control numérico en la que cada acción se ejecuta después de la siguiente. Pero la cámara de visión artificial que indica al autómata si la pieza que está manipulando es correcta o no, emplea filtros digitales que requieren del cálculo de coeficientes que se procesan de forma más eficiente en múltiples unidades aritmético lógicas que realizan operaciones sencillas en paralelo. Este tipo de procesado encaja perfectamente con la arquitectura de una GPU.

 

Si además queremos dotar a todo el sistema de capacidad de decisión, estamos hablando de IA, Inteligencia Artificial. La extrapolación del concepto de IA traducido a la computación, implica hablar de redes neuronales.

 

Las redes neuronales imitan el comportamiento del cerebro humado en el que una multitud de neuronas interconectadas entre sí reciben datos en base a los cuales deciden acciones. Todo ello se ejecuta de forma simple y en paralelo. Este modo de programación encaja a la perfección con una arquitectura multicore.

 

Hoy en día, en muchos de los ordenadores modernos se está optando por una arquitectura de trabajo híbrida, que permite aprovechar las ventajas de CPU y GPU.

 

graphic-processing-unit-gpu

 

De este modo, la CPU ejecuta el código secuencial y la GPU se encarga de las partes del código que necesitan más potencia de computación, generándose un código que la GPU es capaz de ejecutar en paralelo.

 

Uno de los grandes problemas que había en los años anteriores era la limitación de ancho de banda entre la CPU y la GPU, pero esto ha sido resuelto con la aplicación del bus PCI-Express.

 

Productos con GPU en el mercado industrial

 

Existen en el mercado industrial diferentes productos basados en tecnología de GPU. Así, podemos encontrar placas en formato VPX con GPUs dedicadas, como puede ser la VX3327 de Kontron, basada en la GPU AMD Radeon™ E6760, que permite tener unas altas capacidades gráficas (hasta tres puertos de salida gráficos) a la vez que dispone de altas capacidades de proceso como GPGPU (hasta 576 GFlops en coma flotante de precisión sencilla) gracias a sus 480 cores y 1 GByte de GDDR5).

 

Las aplicaciones de estas plataformas no se limitan al procesado de imagen propiamente dicho.  Son plataformas ideales para el procesado de señal tales como radar, sonar, análisis de señales cósmicas, aplicaciones de diagnóstico médico como tomografía, radiología, etc.

 

graphic-processing-unit-gpu

 

Otras optan por integrar dentro de la placa tecnología de SoC (System on Chip) como los productos de AMD o Intel

 

Como ejemplo, los SOC embebidos de la serie R de AMD integran la tecnología gráfica AMD Radeon™ por medio de la arquitectura Graphics Core Next (GCN), que permite unas prestaciones gráficas muy potentes.

 

Pero, además, para aplicaciones de procesado paralelo, dispone de tecnología HSA que balancea la carga de trabajo entre la CPU y la GPU reduciendo la latencia y optimizando las prestaciones de procesamiento.

 

En la arquitectura de estos SOC se incluyen múltiples salidas de display, bus PCIe, USB 2.0 y 3.0 e interfaces para discos SATA y SD. Dentro del dispositivo incluye memoria DDR3 y DDR4 con ECC (Error Correction Code).

 

En la siguiente imagen se puede ver la arquitectura de un SOC embebido AMD serie-R:

 

graphic-processing-unit-gpu

 

Otro ejemplo bastante utilizado es la línea de procesadores anteriormente conocidos como Apollo Lake. Lo podemos encontrar en formato PC monoplaca (SBC), en caja BoxPC, en formato Panel PCPlacas Madre, entre otros.

 

En la siguiente imagen podemos ver un esquema de las prestaciones que soportan los procesadores Intel anteriormente conocidos como Apollo Lake (Atom E3900, Celeron N3350, Pentium N4200, …)

 

graphic-processing-unit-gpu

 

En los últimos meses, los fabricantes de PCs industriales han anunciado una nueva gama de productos con APU (Accelerated Processing Units) basados en AMD Ryzen V1000. Esta nueva serie integra en un mismo circuito CPU “Zen” y GPU “Vega”. Así, podemos encontrar ya módulos COM-Express o placas Mini-ITX.

 

graphic-processing-unit-gpu

 

Por último, para finalizar con los productos más actuales que incorporan tecnología GPU con alta capacidad de proceso, incluimos los que están basados en la familia de módulos NVIDIA® Jetson™.

 

Especialmente orientados a aplicaciones de Inteligencia Artificial (IA ó AI por sus siglas en inglés), desde productos médicos a productos agrícolas, pasando por equipos para automatización o automoción, entre otros. Dedicaremos una entrada a desgranar aplicaciones de equipos basados en estos módulos y otros SOC con GPU más adelante.