Contacta con nosotros

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++ con CUDA usando 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 globales de dispositivo CUB para pipelines personalizados.

Arquitectura y Gestión de Memoria de GPU

  • Tipos de memoria global, constante y textura.
  • Alocación explícita de memoria de dispositivo y transferencias.
  • Memoria Unificada para un acceso a datos simplificado.
  • 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 CUDA.
  • Solapar la ejecución del kernel con transferencias de datos.
  • Eventos CUDA para la gestión de dependencias.
  • Prioridades de stream y ajuste de concurrencia.

Escribiendo Kernels CUDA Personalizados

  • El modelo de programación SIMT y ejecución por warp.
  • Configuración de lanzamiento de kernels y bucles tipo grid-stride.
  • Indexación de hilos y grids multidimensionales.
  • Gestión de errores y verificaciones de la API de runtime CUDA.

Jerarquía de Hilos y Modelo de Ejecución

  • Grids, bloques y hilos en código de dispositivo.
  • Primitivas a nivel de warp y operaciones de votación (ballot).
  • Sincronización y barreras a nivel de bloque.
  • Análisis de ocupancia 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 tile 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 Parallelismo

  • Fusionar múltiples kernels para reducir la sobrecarga de lanzamiento.
  • Algoritmos de scan, reduce-by-key y segmentados.
  • Operaciones atómicas y estructuras de datos sin bloqueo (lock-free).
  • Atómicos agregados por warp para mejorar el throughput.

Perfilado y Optimización con Nsight Systems

  • Análisis cronológico de la actividad de CPU y GPU.
  • Identificación de cuellos de botella en transferencias de memoria.
  • Perfilado de rendimiento y ocupancia del kernel.
  • Optimización iterativa con Nsight Compute.

Características Modernas de C++ en Código de Dispositivo CUDA

  • Lambdas, constexpr y auto dentro de kernels.
  • Algoritmos paralelos C++17 y políticas de ejecución.
  • Conceptos C++20 y ranges en el dispositivo.
  • Soporte para C++23 en nvcc y CCCL 3.x.

CUDA Graphs y Asincronía Avanzada

  • Definición y lanzamiento de CUDA graphs.
  • Captura de grafos desde la ejecución del stream.
  • Actualización de grafos y nodos de ejecución condicional.
  • Reducción de latencia de lanzamiento para cargas de trabajo iterativas.

Patrones de Integración para Aplicaciones Existentes

  • Agregar 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

  • Elegir entre Thrust, CUB y kernels personalizados.
  • Portabilidad de rendimiento entre arquitecturas GPU.
  • Organización del código y RAII para recursos CUDA.
  • Siguientes pasos y rutas de aprendizaje avanzado en CUDA.

Requerimientos

  • Competencia 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 o programación GPU.

Audiencia Objetivo

  • Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cómputo con GPUs.
  • Ingenieros de software que transicionan de programación exclusivamente en CPU a programación paralela heterogénea.
  • Ingenieros de rendimiento y desarrolladores cuantitativos que trabajan con grandes conjuntos de datos.
 8 Horas

Número de participantes


Precio por participante

Reseñas (3)

Próximos cursos

Categorías Relacionadas