Temario del curso
Introducción a la Computación Acelerada con GPU
- Computación heterogénea y arquitectura CPU-GPU.
- Espacios de ejecución y memoria de CUDA.
- Compilación de C++ con CUDA utilizando nvcc y CMake.
- Verificación del entorno de desarrollo para GPU.
Algoritmos paralelos con Thrust y CUB
- Ordenamiento, reducción y transformación acelerados por GPU.
- Reestructuración de algoritmos STL para su ejecución en GPU.
- Vectores de dispositivo de Thrust y políticas de ejecución.
- Primitivas a nivel de dispositivo de CUB para pipelines personalizados.
Arquitectura y gestión de memoria GPU
- Tipos de memoria global, constante y textura.
- Asignación explícita y transferencias de memoria del dispositivo.
- 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.
Escritura de kernels CUDA personalizados
\r- El modelo de programación SIMT y la ejecución de warps.
- Configuración de lanzamiento de kernels y bucles de cuadrícula (grid-stride).
- Indexado 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 código de dispositivo.
- Primitivas a nivel de warp y operaciones de votación (ballot).
- Sincronización a nivel de bloque y barreras.
- Análisis de ocupación y utilización de recursos.
Grupos cooperativos para paralelismo flexible
- La API cooperative_groups y los tipos de grupo.
- Baldosas (tiles) de bloques de hilos y tiled_partition.
- Lanzamientos cooperativos a nivel de cuadrícula.
- Patrones de sincronización multicuadrícula.
Técnicas de optimización con memoria compartida
- Bancos de memoria compartida y evitación de conflictos de banco.
- Estrategias de baldosas (tiling) para operaciones matriciales.
- Memoria compartida como caché administrada 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.
- Algoritmos de escaneo, reducción por clave y segmentados.
- Operaciones atómicas y estructuras de datos sin bloqueo.
- Atómicos agregados a nivel de warp para mejorar el rendimiento.
Perfilado y optimización con Nsight Systems
- Análisis temporal de la actividad de la CPU y GPU.
- Identificación de cuellos de botella en transferencias de memoria.
- Perfilado de rendimiento y ocupación de kernels.
- Optimización iterativa con Nsight Compute.
Características modernas de C++ en código de dispositivo CUDA
- Lambdas, constexpr y auto en kernels.
- Algoritmos paralelos de C++17 y políticas de ejecución.
- Conceptos y rangos de C++20 en el dispositivo.
- Soporte de C++23 en nvcc y CCCL 3.x.
Cuadros de CUDA y asincronía avanzada
- Definición y lanzamiento de cuadros de CUDA.
- Captura de cuadros a partir de la ejecución de streams.
- Actualización de cuadros 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
- Envoltura del código GPU detrás de interfaces 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
- Elección 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 incluya expresiones lambda, plantillas y la STL.
- Familiaridad con algoritmos estándar, contenedores e iteradores.
- Comodidad al utilizar 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 mediante GPUs.
- Ingenieros de software que transicionan de programación exclusiva de 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