Temario del curso
Introducción a la Computación Acelerada con GPU
- Computación heterogénea y la arquitectura CPU-GPU
- Espacios de ejecución y memoria de CUDA
- Compilación de CUDA C++ con nvcc y CMake
- Verificación del entorno de desarrollo 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 del dispositivo Thrust y políticas de ejecución
- Primitivas a nivel de dispositivo CUB para pipelines personalizados
Arquitectura y Gestión de Memoria GPU
- Tipos de memoria global, constante y de textura
- Asignación explícita y transferencias de memoria del dispositivo
- Memoria unificada para acceso simplificado a datos
- Agrupamiento de memoria y optimización de patrones de acceso
Ejecución Asíncrona con Flujos CUDA
- Creación y gestión de flujos CUDA
- Superposición de la ejecución de núcleos con transferencias de datos
- Eventos de CUDA para la gestión de dependencias
- Prioridades de flujo y ajuste de concurrencia
Escribiendo Núcleos CUDA Personalizados
- El modelo de programación SIMT y la ejecución de wargs
- Configuración de lanzamiento de núcleos y bucles con paso de cuadrícula (grid-stride)
- Indexación de hilos y cuadrículas multidimensionales
- Manejo de errores y verificaciones de la API en tiempo de ejecución de CUDA
Jerarquía de Hilos y Modelo de Ejecución
- Cuadrículas, bloques y hilos en el código del dispositivo
- Primitivas a nivel de warps y operaciones de votación
- Sincronización a nivel de bloque y barreras
- Análisis de ocupancia y utilización de recursos
Grupos Cooperativos para Paralelismo Flexible
- La API cooperative_groups y los tipos de grupo
- Mosaicos de bloques de hilos y tiled_partition
- Lanzamientos cooperativos a nivel de cuadrícula
- Patrones de sincronización multi-cuadrícula
Técnicas de Optimización de Memoria Compartida
- Bancos de memoria compartida y evitación de conflictos de bancos
- Estrategias de mosaico para operaciones matriciales
- Memoria compartida como caché gestionada por el usuario
- cuda::shared_memory_mdspan para vistas multidimensionales
Fusión de Núcleos y Patrones Avanzados de Paralelismo
- Fusión de múltiples núcleos para reducir la sobrecarga del lanzamiento
- Algoritmos de escaneo, reducción por clave y segmentada
- Operaciones atómicas y estructuras de datos sin bloqueo (lock-free)
- Atomáticos agregados a nivel de warps para mayor rendimiento
Profilación y Optimización con Nsight Systems
- Análisis de cronología de la actividad de CPU y GPU
- Identificación de cuellos de botella en las transferencias de memoria
- Profilación del rendimiento y ocupancia de núcleos
- Optimización iterativa con Nsight Compute
Características Modernas de C++ en Código de Dispositivo CUDA
- Lambdas, constexpr y auto en núcleos
- Algoritmos paralelos C++17 y políticas de ejecución
- Conceptos y rangos C++20 en el dispositivo
- Soporte C++23 en nvcc y CCCL 3.x
Gráficos CUDA y Asincronía Avanzada
- Definición y lanzamiento de gráficos CUDA
- Captura de gráficos a partir de la ejecución del flujo
- Actualización de gráficos y nodos de ejecución condicional
- Reducción de la latencia de lanzamiento para cargas de trabajo iterativas
Patrones de Integración para Aplicaciones Existentes
- Encapsulamiento del código GPU detrás de interfaces C++
- Gestión de sistemas multi-GPU y NUMA
- Integración con el sistema de compilación mediante CMake y CUDA
- Depuración del código del dispositivo con cuda-gdb
Resumen y Mejores Prácticas
- Cómo elegir entre Thrust, CUB y núcleos personalizados
- Portabilidad de rendimiento a través de arquitecturas GPU
- Organización del código y RAII para recursos CUDA
- Siguientes pasos y rutas de aprendizaje avanzadas de CUDA
Requerimientos
- Habilidad básica en C++ incluyendo expresiones lambda, plantillas y la STL
- Familiaridad con algoritmos estándar, contenedores e iteradores
- Comodidad con bucles, condicionales y funciones
- No se requiere conocimiento previo de programación CUDA o GPU
Público Objetivo
- Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cómputo con GPUs
- Ingenieros de software que transicionan de programación exclusiva para 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