- Una comprensión básica de la computación con GPU es esencial para todo ingeniero de software.
- Este artículo se centra principalmente en las GPU de Nvidia y utiliza la terminología de Nvidia.
- Las GPU están diseñadas para procesamiento masivo en paralelo y alto rendimiento en gráficos, cálculo numérico, aprendizaje profundo y más.
Comparación entre CPU y GPU
- La CPU está diseñada para la ejecución secuencial de instrucciones e incluye diversas funciones para reducir la latencia en la ejecución de instrucciones.
- La GPU está diseñada para procesamiento masivo en paralelo y alto rendimiento, y presenta una latencia de ejecución de instrucciones de media a alta.
- La GPU puede procesar una cantidad mucho mayor de operaciones mucho más rápido que la CPU.
# Arquitectura de la GPU
Arquitectura de cómputo de la GPU
- La GPU está compuesta por un arreglo de multiprocesadores de streaming (SM).
- Cada SM incluye varios procesadores de streaming (núcleos o hilos).
- Un SM tiene una cantidad limitada de memoria en chip (memoria compartida o scratchpad), compartida por todos los núcleos.
Arquitectura de memoria de la GPU
- La GPU cuenta con varios tipos de memoria organizados en múltiples niveles.
- Cada SM tiene una gran cantidad de registros, que se comparten entre los núcleos.
- La caché de constantes se usa para almacenar en caché datos constantes utilizados durante la ejecución del código.
- La memoria compartida es una memoria SRAM programable en chip, rápida y de baja latencia.
- La caché L1 almacena en caché datos de acceso frecuente desde la caché L2.
- La caché L2 es compartida por todos los SM y almacena en caché datos de acceso frecuente desde la memoria global.
- La memoria global es una DRAM de alta capacidad y alto ancho de banda que está lejos de los SM, por lo que tiene una latencia alta.
# Entendiendo el modelo de ejecución de la GPU
Breve introducción a los kernels de CUDA y los bloques de hilos
- CUDA es una interfaz de programación para escribir programas para GPU de Nvidia.
- Un kernel es un cálculo expresado de forma similar a una función en C/C++ que se ejecuta en paralelo en la GPU.
- Para ejecutar un kernel, se lanza una cantidad de hilos llamada grid.
Etapas de la ejecución de un kernel en la GPU
- Copiar datos del host al dispositivo
- Programar bloques de hilos en los SM
- Instrucción única, múltiples hilos (SIMT) y warps
- Programación de warps y tolerancia a la latencia
- Copiar los datos de resultado desde el dispositivo a la memoria del host
# Conceptos de partición de recursos y occupancy
- La utilización de los recursos de la GPU se mide con la métrica llamada "occupancy", que representa la proporción entre la cantidad de warps asignados y la cantidad máxima de warps que un SM puede soportar.
- El occupancy está limitado por los recursos de ejecución del SM, los registros, la memoria compartida, los slots de bloques de hilos y los slots de hilos.
- Es importante minimizar la latencia manteniendo un occupancy alto mediante la optimización del código.
# Resumen
- Una GPU está compuesta por varios SM, y cada SM tiene varios núcleos de procesamiento.
- La memoria global está lejos del chip y tiene una latencia alta.
- Las cachés L1 y L2 funcionan de forma similar a las cachés L1/L2 de la CPU.
- Cada SM tiene memoria compartida, que se comparte entre los núcleos.
- Para ejecutar un kernel en la GPU, se lanza una grid de hilos.
- La GPU asigna los bloques que se ejecutarán en los SM, y todos los hilos se ejecutan en el mismo SM.
- Los hilos asignados a un SM se agrupan además en unidades de 32 llamadas warps.
- La GPU realiza partición dinámica de recursos entre hilos según los requisitos de los hilos y los límites del SM.
# Cierre
- Las GPU se usan ampliamente hoy en día, y su arquitectura y modelo de ejecución son fundamentalmente distintos de los de la CPU.
- Este artículo cubre varios aspectos de la GPU y ofrece una visión de por qué se usa tanto y cómo funciona.
Opinión de GN⁺
- La GPU es una tecnología esencial para el aprendizaje profundo y los cálculos numéricos complejos, y este artículo ayuda a comprender la arquitectura básica y el modelo de ejecución de la GPU.
- Contiene contenido especialmente importante para ingenieros de software principiantes interesados en el procesamiento en paralelo y la computación de alto rendimiento.
- Este artículo ofrece conocimientos básicos sobre programación de GPU y es un material interesante que despierta la curiosidad por este campo.
1 comentarios
Comentarios de Hacker News