Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon NVIDIA Cuda


NVIDIA® CUDA® Toolkit proporciona un entorno de desarrollo para crear aplicaciones de alto rendimiento aceleradas en la GPU. Con él, puedes desarrollar, optimizar e implantar tus aplicaciones en sistemas embebidos acelerados en la GPU, estaciones de trabajo de sobremesa, centros de datos empresariales, plataformas basadas en la nube y supercomputadoras. El kit de herramientas incluye librerías aceleradas en la GPU, herramientas de depuración y optimización, un compilador de C/C++ y una librería de ejecución.


CUDA es una plataforma de cálculo paralelo y un modelo de interfaz de programación de aplicaciones (API) creado por Nvidia. Solo funciona en dispositivos Nvidia. CUDA permite a los desarrolladores y ingenieros de software utilizar una unidad de procesamiento gráfico (GPU) habilitada para CUDA para el procesamiento de propósito general, un enfoque denominado GPGPU (General-Purpose computing on Graphics Processing Units).

Si hablamos del mayor fabricante de tarjetas gráficas, nos referimos a NVIDIA. Este fabricante ofrece soluciones muy potentes y variadas, no solo destinadas al gaming, también a la computación de datos o la inteligencia artificial. Todas sus GPU tienen algo en común y son los NVIDIA CUDA Cores, un tipo de núcleo gráfico realmente potente y versátil.

CUDA (Compute Unified Device Architecture) es una plataforma de computación paralela y un modelo de programación que permite incrementos dramáticos en el rendimiento de computación al aprovechar la potencia de la unidad de procesamiento de gráficos (GPU).

NVIDIA


Al leer las especificaciones de cualquier tarjeta gráfica de NVIDIA habrás visto repetidas veces la mención de los llamados núcleos CUDA en medio de las especificaciones. ¿A que hace referencia este término y qué relación tienen con la potencia de la tarjeta gráfica y, por tanto, con la capacidad de mover gráficos?, ¿Se trata de un concepto exclusivo del hardware de NVIDIA o en su defecto es el clásico movimiento de branding tecnológico? Veamos que es esta particular tecnología que lleva en las GPU de NVIDIA desde ya quince años.

¿Qué son los CUDA Cores?

Son un tipo de núcleo específico desarrollado por parte de NVIDIA de computación en paralelo de propósito general. Esto quiere decir que es un tipo de núcleo que permite su uso en diferentes tipos de tareas. Comúnmente se los conoce en informática, para los videojuegos, pero también se usan en investigación médica y otros campos científicos, predicciones meteorológicas, matemáticas complejas y otros muchos campos.

Los núcleos CUDA (Compute Unified Device Architecture) son realmente flexibles y maleables, como hemos destacado. Debido a su capacidad de paralelización de tareas, son enormemente más eficientes en tareas complejas que una CPU. Además, son mucho más eficientes, ya que lograr esta misma potencia con CPU sería costoso, ocuparía mucha superficie y requeriría de mucha energía.

xiste desde hace años un ecosistema de aplicaciones y herramientas alrededor de CUDA centrado en el mundo científico y la ingeniería y en ramas distintas de cada uno. Desde la medicina hasta en el diseño de automóviles. Lo cual le permitió crecer a NVIDIA más allá del hardware para juegos de PC y ampliar su cuota de mercado potencial.

CUDA, además, es una filosofía a la hora de programar algoritmos que se ejecutarán en una GPU de NVIDIA. Aunque también hay posibilidades de hacerlo en un procesador central e incluso en un chip de la competencia. En la actualidad existen diversos lenguajes de programación que tienen las extensiones CUDA correspondientes. Entre los que se incluyen: C, C++, Fortran, Python y MATLAB.

Diferencia entre núcleos de CPU y núcleos CUDA

La denominación nos puede llevar a engaño, si seguimos la visión tradicional de núcleo de los procesadores. Los núcleos CUDA difieren en bastante con respecto a los núcleos de los procesadores. NVIDIA lo que hace es denominar núcleos a unidades aritmético-lógicas o ALU en inglés como núcleos. Estas unidades tienen una enorme capacidad de realizar cálculos matemáticos a gran velocidad. La denominación CUDA Core vendría a ser un nombre más comercial.



En el caso de las tarjetas de NVIDIA, lo que es el equivalente real a un núcleo o procesador son los llamados SM. Así, por ejemplo, una RTX 3090 Ti pese a tener 10.752 núcleos CUDA realmente tiene 84 núcleos reales, dado que esa es la cifra de SM reales. Pensad que un procesador ha de ser capaz de ejecutar el ciclo de instrucción al completo por sí mismo y no una sola parte, como es el caso de los mal llamados «núcleos CUDA».



Los núcleos CUDA de las GPUs están diseñados para ejecutar tareas de computación paralela, por lo que son mucho más rápidos y eficientes que los núcleos de CPU diseñados para realiza tareas secuenciales. Los núcleos CUDA, además, es escalables, por lo que permite agrupar en un equipo varias GPUs para ofrecer un mayor rendimiento sumando el número total de núcleos CUDA.

Los racks que vende NVIDIA para entrenar LLM para Inteligencia Artificial, estás compuestos por un único procesador para servidor, ya sea Intel Xeon o AMD Epyc y entre 6 y 10 GPUs. Y solo se encuentra un único procesador porque los núcleos de las CPU no son tan fácilmente escalables, además de tener un precio muy elevado y el resultado no siempre es la suma de núcleos que ofrece.

Este es uno de los motivos por el que los procesadores para servidores tienen un número mayor de núcleos que los procesadores de equipos de sobremesa. Un ejemplo de esto que estamos diciendo lo encontramos en la gama de procesadores para servidor AMD EPYC Serie 9005 disponibles con hasta 192 núcleos Zen 5 o Zen 5c.

Tipos de núcleos CUDA

Por lo general llamamos a las unidades de coma flotante con precisión de 32 bits como núcleos CUDA, pero también se engloban dentro de la definición otro tipo de unidades, las cuales son:

  • Unidades ALU con la capacidad de trabajar con números de coma flotante de doble precisión, es decir, de 64 bits.
  • Las unidades de enteros de 32 bits.

Debido a que las GPU no utilizan un sistema de paralelismo con respecto a las instrucciones, lo que se hace es utilizar ejecución concurrente. Donde una unidad de un tipo puede reemplazar a la de otro tipo en la ejecución de una instrucción. Esto es una habilidad que los chips de NVIDIA tienen desde la arquitectura Volta en adelante, en el caso de los sistemas de sobremesa, desde la RTX 20.

En cambio, no son núcleos CUDA, las siguientes unidades de los SM en la GPU:

  • Tensor Cores: Nuevo tipo de unidades de computación cuyo propósito se centra en la inteligencia artificial. Son bastante conocidos en el segmento de los videojuegos, ya que estos núcleos son necesarios para el funcionamiento de la tecnología DLSS.
  • RT Cores: Es otro tipo de núcleo bastante nuevo que se centra solamente en los cálculos de trayectorias de rayos de luz para la tecnología Ray Tracing.
  • SFU: Son un tipo de núcleo que tiene la capacidad de ejecutar instrucciones matemáticas complejas a más velocidad que las ALU convencionales. Entre las instrucciones soportadas se incluyen operaciones trigonométricas, raíces cuadradas, potencias, logaritmos, etcétera.

Las cuales, pese a ser también unidades de aritmético-lógicas, no son contadas por NVIDIA como tales.

¿Cómo funcionan?

Antes de nada, debes saber que las CPU tienen un diseño para realizar las tareas de manera secuencial. Esto quiere decir que las tareas se ponen en cola y se procesan por orden de llegada. Algunas se pueden saltar esta cola si tienen una elevada prioridad.

Los núcleos CUDA de NVIDIA funcionan de una manera muy distinta, ya que han sido desarrollados para ejecutar tareas en paralelo. Esto quiere decir que cada núcleo (más o menos) se encarga de realizar una tarea concreta. Todas las tareas se van repartiendo por los diferentes núcleos CUDA a medida que estos van terminando la tarea iniciada.

Debes saber que los desarrolladores pueden establecer una estructura jerárquica y agrupación de núcleos. Las tareas pueden ser divididas por los desarrolladores en «bloques» que están conformados por una determinada cantidad de núcleos CUDA. Adicionalmente, los «bloques» se pueden estructurar en «rejillas», que viene a ser una agrupación de diferentes «bloques».

¿Cómo se ejecutan las instrucciones en núcleo CUDA?

Además, la forma de ejecutar los hilos de ejecución, y esto es en general en todas las GPU, es usando una variante del algoritmo Round-Robin. El cual consiste en:

  • Las instrucciones se clasifican en grupos según la cantidad de ciclos de reloj que tardan en ejecutarse desde cada una de las ALU/Stream Processors/núcleos CUDA.
  • Si la instrucción en un hilo de ejecución no se ha ejecutado en el tiempo determinado, entonces esta se mueve a la cola y se ejecuta la siguiente de la lista. La cual no tiene por qué corresponder al mismo hilo de ejecución de la primera.

Hay que tener en cuenta que las escenas complejas en 3D están compuestas a día de hoy por millones de elementos visuales para formar las complejas escenas y que se formen a una velocidad lo suficientemente rápida. Por lo que los núcleos CUDA son la base de conseguir procesar en paralelo y en gran velocidad todos esos elementos.

Tienen como ventaja la ejecución de los datos dentro de los registros y, por tanto, en la memoria interna de cada SM. Así que no contiene instrucciones de acceso directo a la memoria VRAM.

El ecosistema, por tanto, está pensado para que los hilos de ejecución sean dirigidos desde la memoria a cada uno de los núcleos de la GPU. Mediante este sistema se reduce la posibilidad de atascos de acceso a la memoria. Supone un importante cambio con respecto al sistema convencional de acceso a la memoria.

No pueden ejecutar programas convencionales

Los hilos de ejecución que ejecutaran los núcleos CUDA son creados y gestionados por el procesador central del sistema y son creados en grupos por parte de la API al enviar las listas de comandos gráficos o para computación. Cuando el procesador de comandos del chip gráfico lee las listas de comandos, estos se encuentran clasificados en bloques que son distribuidos cada uno de ellos a un SM o núcleo real distinto. Desde allí, el planificador interno desgrana los hilos de ejecución según el tipo de instrucción y los agrupa para irlos ejecutando.

Esto significa que no pueden ejecutar programas convencionales, debido a esta particular forma de funcionar de los núcleos en las GPU de las tarjetas gráficas, ya que su naturaleza se lo impide. Es por ello que no podéis instalar ningún sistema operativo ni ejecutar ningún programa convencional en ellos.

Diferencia entre NVIDIA CUDA y AMD Stream Processors

Aunque parezca mentira, no existe una unificación en el término de núcleo, ni tan siquiera, en los procesadores. Si bien todos estamos de acuerdo en la denominación basica, cada fabricante los bautiza de manera diferente posteriormente. Algo así sucede en las tarjetas gráficas.

Pese a que son iguales, prácticamente iguales, los núcleos (bueno, las ALU) cada fabricante les ha puesto un nombre. NVIDIA los ha bautizado como CUDA Cores, mientras que AMD los denomina como Stream Processors. Cambiarán aspectos menores, como el proceso de fabricación o diseño, entre otros ajustes.

Realmente, en el caso de NVIDIA, el término CUDA no solo referencia a los núcleos, sino también a un conjunto de instrucciones y herramientas para desarrolladores. Podemos hablar que se ha construido un entorno en torno a este tipo de núcleos con su misma denominación. AMD, como es lógico, cuenta con su ecosistema de instrucciones y herramientas, aunque tienen otras denominaciones.

Por cierto, un Stream Processor o Procesador de Caudal en su correcta definición es todo aquel procesador que depende directamente del ancho de banda de su memoria RAM asociada y no de la latencia. Así pues, un chip gráfico o GPU lo es, pero, en cambio, una CPU que depende más de la latencia no. Por otro lado, desde el momento en que los chips de NVIDIA y AMD entienden binarios distintos es imposible ejecutar un programa CUDA en una GPU que no sea de NVIDIA.

 Núcleos NVIDIA CUDAAMD Stream Processors
¿Qué son?Unidades ALUUnidades ALU
¿Dónde se encuentran?En las GPU de NVIDIAEn las GPU de AMD
¿Pueden ejecutar programas CUDA?SiNo

Al final se trata del mismo correo con distinto collar, ya que la función tanto de los núcleos CUDA como de los Stream Processors es exactamente la misma y se encarga de medir la potencia de procesamiento. Básicamente, lo más importante a la hora de comprar una tarjeta gráfica, es la cantidad de memoria que ofrezca de que tipo. La memoria más rápida para gráficas disponible actualmente en el mercado es la GDDR7, seguida de la GDDR6X y GDDR6.


Su importancia en los videojuegos

Seamos sinceros, muchos estáis aquí porque os encantan los videojuegos y queréis/tenéis una tarjeta gráfica NVIDIA, pero, ¿cuál es su importancia en los videojuegos?

Si nos fijamos en la ficha técnica de las familias GTX 1000 (Pascal), RTX 2000 (Turing) o RTX 3000 (Ampere), los núcleos CUDA van ascendiendo conforme subimos de gama. Esto ocurre porque a más núcleos CUDA, más potencia gráfica. Hay que tener en cuenta que el funcionamiento de los CUDA Cores:

  • Llega una tarea a realizar y se asigna a un núcleo, el cual trabaja para completar la tarea.
  • Mientras ocurre esto, otro núcleo cercano realizará otro trabajo similar.

La consecuencia de ello es que no hay colas: un núcleo no tiene que esperar a que el otro finalice su trabajo para completar la otra tarea. Y es que los núcleos CUDA solo se centran en tareas gráficas, entre las que destacan:

  • Renderizado de objetos y escenas.
  • Iluminación y sombras.
  • Efectos 3D.
  • Detalles.

Cuando estamos en una pantalla de carga (el mítico «loading…») los núcleos CUDA están trabajando creando el escenario, dibujando los personajes, dejando a punto la iluminación, etc. Es cierto que aquí también trabaja el disco duro y la CPU, pero creo que se entiende lo que quiero decir.

Su trabajo no acaba con la pantalla de carga, sino que está continuamente realizando cálculos conforme nos movemos por el entorno. El famoso trazado de rayos (Ray Tracing) requiere de mucha potencia gráfica por todos los cálculos complejos que supone a la tarjeta gráfica; de ahí que NVIDIA decidiera diseñar los RT Cores.

Stream Processors vs CUDA Cores



Por otro lado, tenemos los Stream Processors de AMD Radeon, que cumplen el mismo fin de los NVIDIA CUDA Cores, pero de diferentes maneras. No son iguales porque hay muchas cosas distintas en la ejecución de ambas compañías:

  • Distinto DIE y distinto proceso de fabricación (nm).
  • Distintas arquitecturas (RDNA 2 y Ampere, por ejemplo).
  • Distinto tamaño de núcleos, así como otros núcleos dentro de la misma GPU:
      • RT Cores y Ray Accelerators.
      • Tensor Cores.

¿Es igual de potente un núcleo CUDA y un Stream Processor? Eso es algo que no se sabe y que es equivalente a comparar un núcleo AMD con un núcleo Intel. Todo el hardware es optimizado por las distintas arquitecturas de las marcas, así que hay muchos factores a evaluar.

Por todo esto, hay que tener en cuenta lo siguiente a la hora de enfrentar Stream Processors vs NVIDIA CUDA Cores:

Stream Processors

NVIDIA CUDA Cores
Más pequeños, más simples y frecuencia más baja

Más grandes, más complejos y frecuencias más altas

Compilador AMD más optimizado

Compilador CUDA con menos optimización

GPUOpen en AMD

GameWorks mucho y plataforma CUDA atractiva para desarrolladores

A fin de cuentas, ambas opciones son núcleos para procesamiento paralelo y su funcionamiento está estrechamente relacionado con la arquitectura que usen.

¿Cuántos núcleos CUDA son necesarios?



Depende de nuestras necesidades, aunque no solo hay que fijarse en los núcleos CUDA a la hora de elegir una tarjeta gráfica NVIDIA. De hecho, sería un error dejarnos llevar únicamente por los CUDA Cores que tenga la GPU que estemos buscando, sino que hay que tener en cuenta otros datos como:

  • RT Cores, especialmente relacionado con el Ray Tracing.
  • Memoria VRAM.
  • Ancho de banda y bus de memoria.
  • Frecuencias.

¿No sabes qué GPU comprar para tener un buen rendimiento? Nuestro consejo es que echéis un vistazo a las reviews del modelo que más te interese porque en ellas probamos los FPS que consigue la GPU en un juego, así como las puntuaciones en las pruebas sintéticas.

Conclusiones

En definitiva, en una GPU NVIDIA encontraremos muchos CUDA Cores (de 3000 a más de 10.000 en las últimas generaciones) y se encargan de tareas gráficas, asistiendo a la CPU para brindar al usuario una experiencia gaming a la altura.

Hemos señalado qué son, cómo funcionan (a grosso modo) y para qué sirven, así que lo básico ya lo tenemos, ¿no? El número de CUDA Cores solo va a ascender, solo hay que fijarse en el cambio de Turing a Ampere: la NVIDIA RTX 2080 Ti equipaba 4352 y la RTX 3090 equipa 10.496.

Lo bueno es que los CUDA Cores no crecen solos, también lo hacen los RT Cores, Tensor Cores y memoria VRAM. De este modo, se consigue un aumento global de FPS de una generación a otra, no solo incrementando más CUDA Cores.

Fuentes:

https://hardzone.es/marcas/nvidia/nucleos-cuda/

https://www.profesionalreview.com/2018/10/09/que-son-nvidia-cuda-core/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.