Contacta con nosotros

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
 8 Horas

Número de participantes


Precio por participante

Reseñas (3)

Próximos cursos

Categorías Relacionadas