Contacta con nosotros

Temario del curso

Introducción a la Computación Acelerada por GPU

  • Computación heterogénea y la arquitectura CPU-GPU
  • Espacios de ejecución y memoria de CUDA
  • Compilación de C++ con CUDA mediante 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 de Thrust y políticas de ejecución
  • Primitivas a nivel de dispositivo CUB para pipelines personalizados

Arquitectura y Gestión de la Memoria GPU

  • Tipos de memoria global, constante y textura
  • Alocació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 Flujos CUDA

  • Creación y gestión de flujos CUDA
  • Solapamiento de la ejecución de núcleos con transferencias de datos
  • Eventos CUDA para la gestión de dependencias
  • Prioridades de flujo y ajuste de concurrencia

Escritura de Núcleos (Kernels) CUDA Personalizados

  • El modelo de programación SIMT y la ejecución por warps
  • Configuración del lanzamiento de núcleos y bucles de paso de rejilla (grid-stride)
  • Indexación de hilos y rejillas multidimensionales
  • Gestión de errores y verificaciones de la API en tiempo de ejecución de CUDA

Jerarquía de Hilos y Modelo de Ejecución

e
  • Rejillas (grids), 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 ocupación y utilización de recursos

Grupos Cooperativos para Paralelismo Flexible

  • La API cooperative_groups y los tipos de grupos
  • 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 de matrices
  • 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 segmentados
  • Operaciones atómicas y estructuras de datos sin bloqueo
  • Atómicos agregados por warp para mejorar el rendimiento

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 la transferencia de memoria
  • Perfilado del rendimiento de núcleos y ocupación
  • 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

Grafos CUDA y Asincronía Avanzada

  • Definición y lanzamiento de grafos CUDA
  • Captura de grafos a partir de la ejecución de flujos
  • 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

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

  • Elegir entre Thrust, CUB y núcleos personalizados
  • Portabilidad del rendimiento a través de arquitecturas GPU
  • Organización del código y RAII para recursos CUDA
  • Siguientes pasos y rutas de aprendizaje avanzadas en CUDA

Requerimientos

  • Competencia básica en C++, incluyendo expresiones lambda, plantillas y la STL
  • Conocimiento de algoritmos estándar, contenedores e iteradores
  • Comodidad con bucles, condicionales y funciones
  • No se requiere conocimiento previo de CUDA ni programación GPU

Público Objetivo

  • Desarrolladores de C++ que buscan acelerar aplicaciones intensivas en cómputo mediante GPU
  • Ingenieros de software que transitan 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