Temario del curso
Introducción a la Computación Acelerada por GPU
- Computación heterogénea y arquitectura CPU-GPU
- Espacios de ejecución y memoria de CUDA
- Compilación de C++ de CUDA con nvcc y CMake
- Verificación del entorno de desarrollo de GPU
Algoritmos Paralelos con Thrust y CUB
- Ordenamiento, reducción y transformación acelerados por GPU
- Refactorización de algoritmos STL para ejecución en GPU
- Vectores de dispositivo Thrust y políticas de ejecución
- Primitivas CUB de todo el dispositivo para pipelines personalizados
Arquitectura y Gestión de Memoria de GPU
- Tipos de memoria global, constante y de textura
- Alocación explícita de memoria de dispositivo y transferencias
- Memoria unificada para simplificar el acceso a datos
- Coalescencia de memoria y optimización de patrones de acceso
Ejecución Asíncrona con Streams de CUDA
- Creación y gestión de streams de CUDA
- Solapar la ejecución de kernels con transferencias de datos
- Eventos de CUDA para la gestión de dependencias
- Prioridades de stream y ajuste de concurrencia
Escribiendo Kernels Personalizados de CUDA
- El modelo de programación SIMT y la ejecución de warps
- Configuración de lanzamiento de kernels y bucles grid-stride
- Indexación de hilos y grids multidimensionales
- Manejo de errores y comprobaciones de la API en tiempo de ejecución de CUDA
Jerarquía de Hilos y Modelo de Ejecución
- Grids, bloques e hilos en el código de dispositivo
- Primitivas a nivel de warp y operaciones de votación
- Sincronización a nivel de bloque y barreras
- Análisis de ocupación y utilización de recursos
Grupos Cooperativos para Parallelismo Flexible
- La API cooperative_groups y tipos de grupo
- Tiles de bloques de hilos y tiled_partition
- Lanzamientos cooperativos a nivel de grid
- Patrones de sincronización multi-grid
Técnicas de Optimización con Memoria Compartida
- Bancos de memoria compartida y evitación de conflictos de banco
- Estrategias de tiling para operaciones matriciales
- Memoria compartida como caché gestionada por el usuario
- cuda::shared_memory_mdspan para vistas multidimensionales
Fusión de Kernels y Patrones Paralelos Avanzados
- Fusionar múltiples kernels para reducir la sobrecarga de lanzamiento
- Scan, reduce-by-key y algoritmos segmentados
- Operaciones atómicas y estructuras de datos sin bloqueo
- Atómicos agregados por warp para mejorar el rendimiento
Perfilado y Optimización con Nsight Systems
- Análisis de la línea de tiempo de la actividad de CPU y GPU
- Identificación de cuellos de botella en la transferencia de memoria
- Perfilado del rendimiento y ocupación del kernel
- Optimización iterativa con Nsight Compute
Características Modernas de C++ en el Código de Dispositivo CUDA
- Lambdas, constexpr y auto en kernels
- Algoritmos paralelos C++17 y políticas de ejecución
- Conceptos y rangos C++20 en el dispositivo
- Soporte de C++23 en nvcc y CCCL 3.x
CUDA Graphs y Asincronía Avanzada
- Definición y lanzamiento de CUDA Graphs
- Captura de gráficos desde la ejecución de streams
- Actualización de gráficos y nodos de ejecución condicional
- Reducción de latencia de lanzamiento para cargas de trabajo iterativas
Patrones de Integración para Aplicaciones Existentes
- Envolver código GPU tras interfaces de C++
- Gestión de sistemas multi-GPU y NUMA
- Integración del sistema de compilación con CMake y CUDA
- Depuración de código de dispositivo con cuda-gdb
Resumen y Mejores Prácticas
- Elegir entre Thrust, CUB y kernels personalizados
- Portabilidad del rendimiento a través de arquitecturas GPU
- Organización del código y RAII para recursos CUDA
- Próximos pasos y rutas de aprendizaje avanzadas de CUDA
Requerimientos
- Competencia básica en C++ que incluye expresiones lambda, plantillas y STL
- Conocimiento familiar de algoritmos estándar, contenedores e iteradores
- Comodidad con bucles, condicionales y funciones
- No se requiere conocimiento previo de CUDA o programación de GPU
Audiencia
- Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cómputo con GPUs
- Ingenieros de software que transicionan de programación solo en CPU a programación paralela heterogénea
- Ingenieros de rendimiento y desarrolladores cuantitativos que trabajan con grandes conjuntos de datos
Reseñas (3)
Explicación detallada, reiteración de los puntos de manera sutil que realmente hizo que el conocimiento quedara muy bien asimilado. La disposición de Rod a doblegar la información sobre las preguntas poco comunes que planteamos para asegurarse de que sus respuestas fueran 100% correctas. Además, su interés en discutir los pros y contras de diferentes estilos de codificación, lo que nos permitió no solo aprender a usar C++ de la manera prevista, sino también entender por qué debía hacerse de esa forma.
Nick Dillon - cellxica Ltd
Curso - Using C++ in Embedded Systems - Applying C++11/C++14
Traducción Automática
La experiencia compartida, el saber hacer del profesor y su valor son importantes.
Carey Fan - Logitech
Curso - C/C++ Secure Coding
Traducción Automática
La naturaleza en línea de la formación significó que pudimos ahorrar mucho tiempo. Lo apreciamos enormemente. Además, el hecho de que el instructor conociera tanto C# como C++ fue de gran ayuda, ya que pudo explicar todo a través del conocimiento que ya poseíamos.
Gabor - Rheinmetall Electronics Hungary Kft
Curso - Advanced C++
Traducción Automática