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 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 de dispositivo Thrust y políticas de ejecución.
  • Primitivas de ancho de dispositivo CUB para pipelines personalizados.
 

Arquitectura y Gestión de Memoria 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 del kernel con transferencias de datos.
  • Eventos de CUDA para la gestión de dependencias.
  • Prioridades de streams y ajuste de concurrencia.
 

 

Escritura de Kernels CUDA Personalizados

 

 

 

 

 

  • El modelo de programación SIMT y la ejecución de warps.
  • Configuración del lanzamiento de kernels y bucles de paso de grilla (grid-stride loops).
  • Indexación de hilos y grids multidimensionales.
  • Manejo de errores y verificaciones de la API de tiempo de ejecución de CUDA.
 

Jerarquía de Hilos y Modelo de Ejecución

 

 

  • Grillas, bloques e 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 ocupancia y utilización de recursos.
 

Grupos Cooperativos para Paralelismo Flexible

 

 

 

  • La API cooperative_groups y los tipos de grupo.
  • Tiles de bloques de hilos y tiled_partition.
  • Lanzamientos cooperativos a nivel de grilla.
  • Patrones de sincronización multi-grilla.
 

 

Técnicas de Optimización con Memoria Compartida

 

 

 

  • Bancos de memoria compartida y evitación de conflictos de banco.
  • Estrategias de teselado (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 del lanzamiento.
  • Algoritmos de escaneo, reducción por clave y segmentados.
  • Operaciones atómicas y estructuras de datos sin bloqueo (lock-free).
  • Atómicos agregados por warp para mejorar el rendimiento (throughput).
 

 

Perfilado y Optimización con Nsight Systems

 

 

 

  • Análisis de 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 ocupancia del kernel.
  • 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 C++17 y políticas de ejecución.
  • Conceptos y rangos C++20 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 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

     

     

     

     

    • Acondicionar el código GPU detrás de interfaces C++.
    • Gestión de sistemas multi-GPU y NUMA.
    • Integración del sistema de construcción con CMake y CUDA.
    • Depuración del código del 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 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.

Público Objetivo

 

  • Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cálculo con GPU.
  • Ingenieros de software que transicionan de la programación solo en CPU a la 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