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 CUDA C++ con nvcc y CMake.
- Verificación del entorno de desarrollo GPU.
Algoritmos Paralelos con Thrust y CUB
- Ordenación, reducción y transformación aceleradas 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 CUB para tuberías personalizadas.
Arquitectura y Gestión de la Memoria GPU
- Tipos de memoria global, constante y de textura.
- Asignación explícita de memoria del dispositivo y transferencias.
- Memoria unificada para simplificar el acceso a datos.
- Agrupación de memoria y optimización de patrones de acceso.
Ejecución Asíncrona con Streams de CUDA
- Creación y gestión de streams CUDA.
- Superposición de la ejecución de kernels con transferencias de datos.
- Eventos de CUDA para la gestión de dependencias.
- Prioridades de stream y ajuste de la concurrencia.
Escritura de Kernels CUDA Personalizados
- El modelo de programación SIMT y la ejecución del warp.
- Configuración del lanzamiento del kernel y bucles de paso de rejilla (grid-stride loops).
- Indexación de hilos y rejillas multidimensionales.
- Gestión de errores y comprobaciones de la API de ejecución de CUDA.
Jerarquía de Hilos y Modelo de Ejecución
- Rejillas, bloques y hilos en el código del 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.
- Mosaicos (tiles) de bloques de hilos y tiled_partition.
- Lanzamientos cooperativos a nivel de rejilla.
- Patrones de sincronización multi-rejilla.
Técnicas de Optimización de Memoria Compartida
- Bancos de memoria compartida y evitación de conflictos de banco.
- Estrategias de mosaico (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 Avanzados de Paralelismo
- Fusión de 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 (lock-free).
- Atómicos agregados a nivel de warp para mejorar el rendimiento.
Perfilado y Optimización con Nsight Systems
- Análisis cronológico de la actividad de la CPU y la GPU.
- Identificación de cuellos de botella en las transferencias de memoria.
- Perfilado del rendimiento y ocupación de los kernels.
- Optimización iterativa con Nsight Compute.
Características Modernas de C++ en el Código CUDA del Dispositivo
- 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.
CUDA Graphs y Asincronía Avanzada
- Definición y lanzamiento de CUDA Graphs.
- Captura de gráficos a partir de la ejecución del stream.
- 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
- Envoltura 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
- Celección entre Thrust, CUB y kernels personalizados.
- Portabilidad del rendimiento entre arquitecturas GPU.
- Estructuración del código y RAII para recursos CUDA.
- Próximos pasos y rutas de aprendizaje avanzadas de CUDA.
Requerimientos
- Habilidad básica en C++ que incluya 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 CUDA ni programación GPU.
Audiencia
- Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cómputo con GPUs.
- Ingenieros de software que transicionan de la programación solo con CPU a la programación paralela heterogénea.
- Ingenieros de rendimiento y desarrolladores cuantitativos que trabajan con grandes conjuntos de datos.
Formación Corporativa a Medida
Soluciones de formación diseñadas exclusivamente para empresas.
- Contenido personalizado: Adaptamos el temario y los ejercicios prácticos a los objetivos y necesidades reales del proyecto.
- Calendario flexible: Fechas y horarios adaptados a la agenda de su equipo.
- Modalidad: Online (en directo), In-company (en sus oficinas) o Híbrida.
Precio por grupo privado (formación online) desde 2900 € + IVA*
Contáctenos para obtener un presupuesto exacto y conocer nuestras promociones actuales
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