Contacta con nosotros

Temario del curso

Introducción a la Computación Acelerada con GPU

  • Computación heterogénea y arquitectura CPU-GPU.
  • Espacios de ejecución y memoria de CUDA.
  • Compilación de C++ con CUDA utilizando nvcc y CMake.
  • Verificación del entorno de desarrollo para GPU.

Algoritmos paralelos con Thrust y CUB

  • Ordenamiento, reducción y transformación acelerados 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 de CUB para pipelines personalizados.

Arquitectura y gestión de memoria GPU

  • Tipos de memoria global, constante y textura.
  • Asignació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 streams de CUDA

  • Creación y gestión de streams de CUDA.
  • Solapar la ejecución de kernels con transferencias de datos.
  • Eventos de CUDA para la gestión de dependencias.
  • Prioridades de stream y ajuste de concurrencia.

Escritura de kernels CUDA personalizados

\r
  • El modelo de programación SIMT y la ejecución de warps.
  • Configuración de lanzamiento de kernels y bucles de cuadrícula (grid-stride).
  • Indexado 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 código de 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.
  • Baldosas (tiles) de bloques de hilos y tiled_partition.
  • Lanzamientos cooperativos a nivel de cuadrícula.
  • Patrones de sincronización multicuadrícula.

Técnicas de optimización con memoria compartida

  • Bancos de memoria compartida y evitación de conflictos de banco.
  • Estrategias de baldosas (tiling) para operaciones matriciales.
  • Memoria compartida como caché administrada 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 de lanzamiento.
  • Algoritmos de escaneo, reducción por clave y segmentados.
  • Operaciones atómicas y estructuras de datos sin bloqueo.
  • Atómicos agregados a nivel de warp para mejorar el rendimiento.

Perfilado y optimización con Nsight Systems

  • Análisis temporal de la actividad de la CPU y GPU.
  • Identificación de cuellos de botella en transferencias de memoria.
  • Perfilado de rendimiento y ocupación de kernels.
  • 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 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.

Cuadros de CUDA y asincronía avanzada

  • Definición y lanzamiento de cuadros de CUDA.
  • Captura de cuadros a partir de la ejecución de streams.
  • Actualización de cuadros 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 del sistema de compilación con CMake y CUDA.
  • Depuración de código de dispositivo con cuda-gdb.

Resumen y mejores prácticas

  • Elección 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 al utilizar 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 mediante GPUs.
  • Ingenieros de software que transicionan de programación exclusiva de 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