NVIDIA

La importancia de los núcleos CUDA, RT y Tensor en las GPU de NVIDIA

Han pasado muchos años desde que todo el trabajo de cálculo del PC se lo llevaba sólo la CPU. No obstante, empresas como NVIDIA o AMD han desarrollado sus propias versiones de tarjetas (GPU) dedicadas al procesamiento y no solamente gráfico.

Hoy en día una GPU es probablemente uno de los componentes más significativos del computador, en lo que se refiere a juegos de altas prestaciones. De hecho, su sigla se refiere a Unidad de Procesamiento Gráfico; entendamos que cuando se acuñó el concepto de GPU, no era lo mismo a lo que se refiere hoy en día; Sin embargo, esto es una cuestión para otro artículo.

Antes de entrar en materia, primero veremos de manera breve lo que es una GPU y cómo se diferencian de las clásicas CPUs de Intel o AMD.

¿Qué es una GPU y cómo se diferencia de la CPU?

Primero que todo, la CPU es la Unidad Central de Procesamiento (en inglés Central Processing Unit), y principalmente se usa para diversas tareas que no tengan relación con los procesos gráficos, de hecho, no está ideada para este fin. La CPU está pensada para desarrollar tareas en serie.

Por su parte, las GPU están intrínsecamente diseñadas para realizar labores de procesamiento gráfico en dos y tres dimensiones. Además, GPU significa Unidad de Procesamiento Gráfico (del inglés Graphics Processing Unit).

Debido a su capacidad para desarrollar, de manera paralela, múltiples tareas de punto flotante. En sí, el papel de la GPU no se limita solo a los juegos, también es la encargada de procesar todo el entorno gráfico del sistema operativo, así como los videos o imágenes que pudieses visualizar.

Fuente: NVIDIA

La imagen anterior muestra esquemáticamente que la GPU tiene cientos de núcleos, donde cada uno de ellos ejecutan una tarea específica, que, si los unes a todos, obtienen las operaciones en paralelo que ya hemos mencionado. En cambio, las CPU’s solo tienen pocos núcleos o cores destinados a tareas secuenciales generales.

Nota: Un punto flotante se refiere al tipo de notación científica empleada por equipos de cómputo para representar números reales muy grandes y muy pequeños, de manera compacta (Ver la siguiente tabla en la fila destacada). Este tipo de dato puente tener valores enter -3.425035·10^38 hasta +3.425035·10^38.

En el siguiente video de Los Cazadores de Mitos muestran la diferencia entre una GPU y una CPU, mostrado el trabajo paralelo y en serie respectivamente.

Núcleos (cores) en las GPU NVIDIA

Las tarjetas NVIDIA de los últimos años se caracterizan por tener tres diferentes tipos de núcleos, que desglosaremos a continuación:

  • Cuda cores
  • RT cores
  • Tensor cores

Los núcleos CUDA

Partiendo por los núcleos CUDA, la palabra es un acrónimo de Compute Unified Device Architecture que referencia la plataforma GPGPU de la marca. Los CUDA cores permiten la ejecución de tareas gráficas, así como tareas de uso general, utilizando su potencia de cómputo en paralelo, donde las CPUs son menos efectivas.

De manera cotidiana cumplen tareas en el área de renderizado 3D, modelado 3D, resolver situaciones de iluminación y sombras en escenas de videojuego, etc.

Si vamos a la raíz de lo conceptual de los núcleos, el cómo los llama NVIDIA estaría incorrecto, ya que lo que hacen los CUDA cores es realizar cálculos matemáticos y lógicos, lo que en inglés corresponde a Unidad Aritmético Lógicas (ALU).

Lo que realmente corresponde a un núcleo, sería lo que NVIDIA llama SM o Streaming Multiprocessor (ver siguiente imagen). De hecho, si vemos una tabla de especificaciones de la serie RTX nos encontramos que la GeForce RTX 3080 TI tiene 10.240 núcleos CUDA, solo tendría 80 núcleos reales; lo mismo ocurre con la 3090, que si bien tiene 10.496 CUDA cores, solamente son 82 núcleos reales.

NVIDIA AMPERE ARCH SM

Finalmente, los CUDA cores son lo que se conoce en arquitectura moderna de microprocesadores, una SIMT (Single Instruction, Multiple Threads o Intrusión única, múltiples hilos). Es decir, es un modo de ejecutar tareas de cómputo en paralelo, combinadas en una instrucción única.

Además, es el cerebro detrás del resto de los núcleos que tienen las GPU's de NVIDIA, puesto que son los encargados de dar las instrucciones a los núcleos RT y Tensor.

Los Núcleos RT

Los núcleos RT son los transistores por los cuales NVIDIA cambió el clásico nombre de sus tarjetas gráficas GTX, por la nueva serie RTX. Estas últimas disponen de la tecnología Ray Tracing o Trazado de Rayos de NVIDIA.

En sí, los núcleos RT son aceleradores de hardware que realizan comprobaciones de las pruebas de rayo; entendamos que estos rayos corresponden al trazado de los haces de luz en una escena.

En color verde los rayos. Fuente: Profesional Review.

Los núcleos RT ejecutan el cálculo de la intersección que se produce entre los rayos y los elementos que componen la escena que estamos viendo en nuestros monitores. Esta verificación requiere entre 12 y 30 operaciones aritméticas de punto flotante (cada una de ella), que en esencia corresponde al Ray Tracing, que trataremos profundamente en otra publicación.

Finalmente, este tipo de núcleos sólo pueden utilizarse para el cálculo de la intersección de los rayos o la aceleración del Ray Tracing.

En el siguiente video puedes ver la comparación de la capacidad del Ray Tracing activo, lo que, con respecto a hardware, correspondería a que los núcleos RT estén operativos o no.

Los núcleos Tensor

Estos núcleos de NVIDIA están diseñados para ejecutar operaciones con datos agrupados en tensores o matrices. Este trabajo facilita enormemente las labores que están relacionadas con grandes matrices de datos en 2 y 3 dimensiones llamadas tensores.

Arreglo de matrices Fuente: FreeCodeCamp

Los núcleos Tensor funcionan muy bien con Inteligencia Artificial (IA) de tipo Deep Learning o también llamadas redes neuronales convolucionales, que fueron creadas como un modelo matemático que se acerca al funcionamiento de nuestro cerebro.

Una red neuronal convolucional se subdivide en al menos tres niveles de conceptualización: El primer nivel es capaz de distinguir objetos simples basados en sus bordes o colores; el segundo nivel puede diferenciar mezclas entre los bordes y colores de diferentes objetos, y el último nivel se fija en lo que estamos buscando detectar.

Este tipo de redes por lo general se mezclan con redes neuronales antagonistas, en la que una genera patrones que se buscan, basándose en una biblioteca de información; la segunda y antagonista es la encarga de discernir si el patrón generado es correcto o no.

Esta es una de las razones por las que NVIDIA ha desarrollado su propia línea negocios basada en Inteligencia Artificial.

La siguiente figura muestra una idea matricial de cómo funciona una red neuronal convolucional:

Ejemplo de la estructura de una red convolucional Fuente: Codificandobits

Finalmente, los Tensor cores son un hardware dedicado a realizar procesos matemáticos que agrupan los resultados numéricos en arreglos matriciales que tienen sentido cuando están unidos según ciertas reglas en los tensores.

Por ejemplo, si queremos almacenar los datos de un vehículo que se mueve de A a B, con cierta velocidad, en un tiempo determinado. Esta información se puede almacenar en dos arreglos:

Vector de inicio:

  • 1º Celda: Coordenada X de inicio del vehículo.
  • 2º Celda: Coordenada Y de inicio del vehículo.
  • 3º Celda: Coordenada Z de inicio del vehículo.
  • 4º Celda: Tiempo de inicio.
  • 5º Celda: Velocidad inicio.

Vector de término de desplazamiento:

  • 1º Celda: Coordenada X de fin del desplazamiento.
  • 2º Celda: Coordenada Y de fin del desplazamiento.
  • 3º Celda: Coordenada Z de fin del desplazamiento.
  • 4º Celda: Tiempo de término.
  • 5º Celda: Velocidad de término.

Estos dos arreglos se pueden dejar en una matriz; luego si tenemos más móviles desplazándose, podemos agrupar una matriz para cada vehículo, que al unir estas matrices tendremos un Tensor. También se pueden unir o mezclar tensores, para obtener otros más grandes.

En consecuencia, lo que hacen los núcleos tensores, es resolver el entramado de datos que se generan con estos tensores, acelerando el proceso de cálculo.

El siguiente video de NVIDIA Developer muestra una breve explicación de los Tensor cores en 3:39 minutos.

Resumiendo:

¿Te interesa que tratemos en profundidad cada tema descrito por separado?