2.11.6 PDC/Programación GPU
Temas:
Non Core
- Computación de Propósito General en GPU (GPGPU)
- Arquitectura de GPU: multiprocesadores de flujo (SMs), núcleos CUDA y modelo de ejecución por warp.
- Modelo de ejecución SIMT (Single Instruction, Multiple Threads) y sus diferencias respecto al SIMD de CPU.
- Interacción host-dispositivo: transferencia de datos entre memoria de CPU (host) y GPU (dispositivo) vía PCIe.
- Casos de uso: computación científica, aprendizaje automático, procesamiento de imágenes y simulación a gran escala.
- Modelo de Programación CUDA
- Jerarquía de ejecución CUDA: grids, bloques de hilos e hilos individuales; mapeo al hardware GPU.
- Definición y lanzamiento de kernels; parámetros de configuración (dimensiones de grid y bloque).
- Indexación de hilos: threadIdx, blockIdx, blockDim, gridDim; cálculo de índices globales en 1D, 2D y 3D.
- Divergencia de warp: implicaciones de las bifurcaciones dentro de un warp en el rendimiento.
- Primitiva de sincronización intra-bloque: __syncthreads.
- Jerarquía de Memoria CUDA
- Memoria global: grande, alta latencia, accesible por todos los hilos; patrones de acceso coalescente para el rendimiento.
- Memoria compartida: memoria en chip de baja latencia compartida dentro de un bloque de hilos; conflictos de banco.
- Registros y memoria local: almacenamiento privado por hilo.
- Memoria constante y de textura: cachés de solo lectura optimizadas para patrones de acceso específicos.
- Memoria unificada: modelo de programación simplificado con migración automática de datos entre host y dispositivo.
Aprendizaje esperado (Learning Outcomes):
NonCore:
- Escribir un kernel CUDA que realice una operación data-paralela (p. ej., suma de vectores, multiplicación de matrices) y configurar correctamente las dimensiones de grid y bloque [Escribir]
- Analizar el impacto de los patrones de acceso a memoria global (acceso coalescente vs. acceso entrelazado) y el uso de memoria compartida en el rendimiento de un kernel GPU [Analizar]
- Diseñar un algoritmo paralelo usando el modelo de programación CUDA, incluyendo la jerarquía de hilos, estrategia de asignación de memoria y transferencias de datos entre host y dispositivo [Diseñar]
Generado por Ernesto Cuadros-Vargas , Sociedad Peruana de Computación-Peru, basado en el modelo de la Computing Curricula de IEEE-CS/ACM