Computación GPU: ¿qué es?

¿Sigue escuchando acerca de la computación o la aceleración de la GPU, pero no está seguro de lo que significan? Aquí está todo lo que necesitas saber.

Las unidades de procesamiento de gráficos o GPU están presentes en todos los circuitos electrónicos que producen una forma u otra de visualización, especialmente la computadora.

Los primeros procesadores gráficos eran relativamente simples. Pero con la llegada de los juegos, la animación 3D y las tareas de renderizado de video que llevaron a las CPU más allá de sus límites, las GPU más potentes tuvieron que acudir al rescate.

Estas nuevas tarjetas GPU crecieron en potencia y complejidad con el tiempo, con diferentes compañías e investigadores buscando formas de aprovechar su ventaja de ejecución paralela. Esta publicación muestra cómo ha ido hasta ahora.

¿Qué es una GPU?

Una GPU o unidad de procesamiento de gráficos es un circuito especializado diseñado para la manipulación de datos para ayudar en la creación de imágenes para su visualización. En otras palabras, una GPU es un sistema que crea las imágenes que ve en cualquier superficie de visualización, como el monitor de la computadora, la pantalla del teléfono inteligente, las consolas de juegos, etc.

Inicialmente, las GPU eran dispositivos sencillos que juntaban elementos gráficos para crear una salida ideal para un dispositivo específico. Sin embargo, con el tiempo y con la llegada de los juegos de computadora, las GPU comenzaron a crecer en complejidad y potencia, dando lugar a GPGPU o computación de propósito general en GPU.

¿Qué es la computación GPU?

GPU Computing o GPGPU es el uso de una GPU para computación más allá de los gráficos. Esto significa usar las GPU integradas en la tarjeta de video de una computadora y originalmente diseñadas para procesar gráficos de computadora para el cálculo de otros tipos de datos, como simulaciones científicas, minería de criptomonedas, cálculos de álgebra, pronóstico del tiempo, redes neuronales, etc.

El motivo de esta evolución de la computación GPU proviene del impresionante desarrollo de las unidades de procesamiento de gráficos, que proviene de la arquitectura paralela distribuida de los sistemas GPU modernos.

A medida que la CPU de la computadora se volvió más poderosa y pudo manejar programas y juegos más complejos, los fabricantes de tarjetas de video también intentaron mantenerse al día con los desarrollos en la computación moderna y los gráficos en 3D. Nvidia dio a conocer el GeForce 256 en 1999 como la primera tarjeta de video GPU del mundo y las cosas evolucionaron a partir de ahí.

La principal ventaja de las tarjetas GPU sobre las CPU es su arquitectura de procesamiento paralelo, que les permite procesar grandes tareas de datos de manera paralela y distribuida, lo que evita cuellos de botella y bloqueos de la CPU.

¿Cuáles son las aplicaciones para la computación GPU?

Las aplicaciones de la computación GPU son muchas, aquí hay un vistazo a algunos de los principales usos:

  1. Aprendizaje automático y redes neuronales
  2. Lógica difusa
  3. Bioinformática
  4. Modelado molecular
  5. Representación de vídeo
  6. Computación geométrica
  7. Investigación climática y pronóstico del tiempo
  8. Astrofísica
  9. Criptografía
  10. Visión por computador
  11. Craqueo de contraseñas
  12. investigación cuántica

Procesamiento GPU vs CPU

Tanto las GPU como las CPU procesan datos digitales, pero lo hacen de diferentes maneras. La CPU o unidad central de procesamiento está diseñada para el procesamiento en serie a altas velocidades, mientras que las GPU están diseñadas para el procesamiento en paralelo a velocidades mucho más bajas. Por supuesto, una CPU puede usar hyper-threading para obtener 2 hilos por núcleo, o incluso tener docenas de núcleos, pero son fundamentalmente procesadores en serie.

Mientras que las CPU pueden tener algunos núcleos, las GPU modernas vienen con miles de núcleos, por ejemplo, el Nvidia GeForce RTX 3090 que cuenta con 10K+ núcleos. Sin embargo, para obtener una ventaja sobre las CPU, los datos deben poder procesarse en paralelo, como procesar un flujo que contiene miles de imágenes a la vez.

GPU vs ASIC

ASIC son las siglas de Application Specific Integrated Circuit y esto significa que solo puede realizar una tarea, es decir, la tarea para la que fue diseñado. Un ASIC es una máquina única que se desarrolla desde cero y requiere un conocimiento experto del hardware para su construcción. Los ASIC se usan comúnmente en la minería de criptomonedas, ya que ofrecen buenos beneficios de procesamiento paralelo y una mayor eficiencia que las GPU.

Sin embargo, la principal diferencia entre los dos es que las GPU son más versátiles. Por ejemplo, puede construir fácilmente una plataforma de minería de criptomonedas usando GPU. Las partes están fácilmente disponibles y si ha terminado con la minería, siempre puede vender la tarjeta GPU a los jugadores u otros mineros. Sin embargo, con los ASIC, solo puede vender una máquina usada a otros mineros, porque casi no puede hacer nada más con ella.

Más allá de la minería de criptomonedas, se vuelve aún más difícil poner las manos en una máquina ASIC, porque no son productos masivos. Esto contrasta fuertemente con los sistemas de GPU que puede obtener en todas partes y configurar fácilmente.

Computación en clúster versus GPU

Si bien una sola tarjeta GPU contiene miles de núcleos, lo que agrega una enorme potencia a cualquier computadora a la que la conecte, teóricamente puede agregar tantas tarjetas GPU a la placa base de la computadora como pueda manejar, y aumentar aún más su capacidad de procesamiento.

Un clúster de computadoras, por otro lado, se refiere a múltiples computadoras que están conectadas en red para funcionar como una gran computadora: una supercomputadora. Cada computadora en la red se llama nodo y puede tener una CPU multinúcleo, así como una o más tarjetas GPU a bordo.

Cada clúster debe tener un nodo maestro, que es la computadora frontal responsable de administrar y programar sus nodos trabajadores. También contendrá software que asigna datos y programas para que sus nodos trabajadores calculen y devuelvan resultados.

Aceleración GPU Vs Hyper-threading

La CPU está diseñada para manejar múltiples tareas a la vez, y es por eso que funciona a velocidades muy altas, programando el tiempo de procesamiento entre esos múltiples procesos. Sin embargo, cuando encuentra una función de computación intensiva, puede pasar un tiempo en el bucle antes de volver a los otros procesos. Esto generalmente resulta en una ralentización general de la computadora y, en el peor de los casos, una congelación completa del sistema.

Los diseñadores de computadoras pueden evitar este temido escenario usando hyper-threading o aceleración de GPU. Hyper-threading permite que un solo núcleo de CPU funcione como dos subprocesos de procesamiento. Entonces, cuando un subproceso queda atrapado en un ciclo de computación intensiva, el otro subproceso aún puede mantener unido el sistema.

Las computadoras modernas ahora tienen múltiples núcleos de 2 a 4, 8, 16, 32, etc. Además, cuentan con hiperprocesamiento, por lo que una CPU de 2 núcleos ofrece 4 subprocesos, una de 4 núcleos ofrece 8 subprocesos, y así sucesivamente.

Hyper-threading con CPU multinúcleo resolverá la mayoría de los problemas informáticos, evitará cuellos de botella y ofrecerá un rendimiento superior con juegos simples, producción de música y pequeños proyectos de gráficos, videos y aprendizaje automático. Pero cuando necesita más potencia que eso, una GPU suele ser la solución adecuada.

La aceleración de GPU o hardware es la capacidad de una aplicación de software para aprovechar la potencia de procesamiento paralelo de una GPU para procesar grandes cantidades de datos, sin atascar la CPU. Muchas aplicaciones profesionales dependen de la aceleración de GPU para funcionar bien. Estos incluyen programas de renderizado/diseño de animación y video, codificadores, criptografía, grandes redes neuronales, etc.

Conceptos básicos de programación GPGPU

La programación de propósito general de las GPU se realizó inicialmente utilizando DirectX y OpenGL bibliotecas Sin embargo, estos se diseñaron estrictamente para el desarrollo de gráficos, por lo que tuvo que reutilizar sus datos en modelos similares a gráficos para que funcionaran.

Afortunadamente, ha habido grandes avances en GPGPU a lo largo de los años, lo que ha dado lugar a bibliotecas, lenguajes de programación y marcos. El más popular de estos marcos es CUDA de Nvidia.

CUDA facilita que cualquier desarrollador se sumerja en la programación de GPU sin necesidad de conocer los detalles de la programación de GPU clásica. Proporciona características que mejoran el desarrollo más allá de los gráficos, y muchas unidades incluso presentan funciones específicas de aprendizaje automático.

Las bibliotecas disponibles también facilitan la creación de nuevos programas acelerados por GPU desde cero o la adaptación de los preescritos al procesamiento paralelo. Elige la biblioteca correcta, optimiza su código para bucles paralelos, vuelve a compilar y eso es todo.

Núcleos CUDA frente a procesadores de flujo

A menudo, se encontrará con los términos Núcleos Cuda y procesadores de flujo. Ambos términos simplemente se refieren al núcleo de la GPU o Unidades aritméticas lógicas de una GPU. CUDA Core es una tecnología patentada de Nvidia, mientras que los procesadores Stream son de AMD.

Otro término que puede encontrar es Streaming Multi-Processor o SM. Esta es otra tecnología de Nvidia que originalmente agrupaba 8 núcleos CUDA por SM. Ejecuta warps de 32 hilos a la vez, usando 4 ciclos de reloj por comando. Los diseños más nuevos ahora cuentan con más de 100 núcleos por multiprocesador de transmisión.

Principales lenguajes y bibliotecas de GPU

Hay tantas bibliotecas e idiomas que funcionan en las plataformas Nvidia CUDA y AMD. Los siguientes son solo algunos:

  1. Nvidia cuBLAS – Subprogramas básicos de álgebra lineal para CUDA
  2. cuDNN – Biblioteca de redes neuronales profundas
  3. OpenCL – Estándar abierto para programación paralela
  4. MP abierto – Para GPU AMD
  5. CADERA – Biblioteca C++
  6. Nvidia curand – Generación de números aleatorios
  7. manguito – Para transformada rápida de Fourier
  8. central nuclear de nvidia – Procesamiento de señales e imágenes 2D
  9. GPUVSIPL – Procesamiento de señales e imágenes vectoriales
  10. OpenCV – Biblioteca de GPU para visión artificial
  11. AbrirACC – Lenguaje para desarrollo paralelo
  12. PyCUDA – Python para la plataforma CUDA
  13. TensorRT – Aprendizaje profundo para CUDA
  14. CUDA C ++ – Lenguaje C++ para CUDA
  15. CUDA C – Lenguaje C para CUDA
  16. CUDAFortran – CUDA para desarrolladores de FORTRAN

Principales proyectos de clúster de GPU

A partir de junio de 2022, 8 de las 10 supercomputadoras más rápidas del mundo están aceleradas por GPU. Todos comparten el sistema operativo Linux también, y son los siguientes:

RangoNombrepetaflopsNúcleos de CPUNúcleos GPUPotencia (kW)Año
1.frontera1,102591,8728,138,24021,1002022
2.LUMI151.9075,2641,034,8802,9002022
3.Summit148.6202,7522,211,84010,0962018
4.Sierra94.64190,0801,382,4007,4382018
5.permutador64.59N/AN/A2,5892021
6.Selene63.4671,680483,8402,6462020
7.Tianhe-261.445427,0084,554,75218,4822013
8.Ad Astra46.121,632297,4409212022

Conclusión

Al llegar al final de esta inmersión en la computación GPU y todo lo que conlleva, ya deberías haberte hecho una idea de su potencia y alcance.

Para obtener más información, puede consultar la plataforma para desarrolladores de Nvidia aquí o el de AMD aquí.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke es un entusiasta de la informática al que le encanta leer una gran variedad de libros. Tiene preferencia por Linux sobre Windows/Mac y ha estado usando
Ubuntu desde sus inicios. Puedes atraparlo en twitter a través de bongotrax

Artículos: 298

Recibe cosas tecnológicas

Tendencias tecnológicas, tendencias de inicio, reseñas, ingresos en línea, herramientas web y marketing una o dos veces al mes