Gracias por enviar su consulta! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Gracias por enviar su reserva! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Duración 28 horas
Temario del curso
Introducción
- ¿Qué es CUDA?
- CUDA vs OpenCL vs SYCL
- Resumen de las funciones y arquitectura de CUDA
- Configuración del entorno de desarrollo
Primeros pasos
- Creación de un nuevo proyecto de CUDA usando Visual Studio Code
- Exploración de la estructura del proyecto y los archivos
- Compilación y ejecución del programa
- Visualización de la salida usando printf y fprintf
API de CUDA
- Comprensión del papel de la API de CUDA en el programa del equipo anfitrión (host)
- Uso de la API de CUDA para consultar información y capacidades del dispositivo
- Uso de la API de CUDA para asignar y liberar memoria del dispositivo
- Uso de la API de CUDA para copiar datos entre el equipo anfitrión (host) y el dispositivo
- Uso de la API de CUDA para iniciar kernels y sincronizar hilos
- Uso de la API de CUDA para manejar errores y excepciones
CUDA C/C++
- Comprensión del papel de CUDA C/C++ en el programa del dispositivo
- Uso de CUDA C/C++ para escribir kernels que se ejecutan en la GPU y manipular datos
- Uso de tipos de datos, calificaciones, operadores y expresiones de CUDA C/C++
- Uso de funciones integradas de CUDA C/C++, como matemáticas, atómicas, warp, etc.
- Uso de variables integradas de CUDA C/C++, como threadIdx, blockIdx, blockDim, etc.
- Uso de bibliotecas de CUDA C/C++, como cuBLAS, cuFFT, cuRAND, etc.
Modelo de memoria de CUDA
- Comprensión de la diferencia entre los modelos de memoria del equipo anfitrión (host) y del dispositivo
- Uso de espacios de memoria de CUDA, como global, compartido, constante y local
- Uso de objetos de memoria de CUDA, como punteros, matrices, texturas y superficies
- Uso de modos de acceso a la memoria de CUDA, como solo lectura, solo escritura, lectura-escritura, etc.
- Uso del modelo de consistencia de memoria de CUDA y mecanismos de sincronización
Modelo de ejecución de CUDA
- Comprensión de la diferencia entre los modelos de ejecución del equipo anfitrión (host) y del dispositivo
- Uso de hilos, bloques y cuadrículas de CUDA para definir el paralelismo
- Uso de funciones de hilos de CUDA, como threadIdx, blockIdx, blockDim, etc.
- Uso de funciones de bloques de CUDA, como __syncthreads, __threadfence_block, etc.
- Uso de funciones de cuadrícula de CUDA, como gridDim, gridSync, grupos cooperativos, etc.
Depuración
- Comprensión de los errores y fallos comunes en programas de CUDA
- Uso del depurador de Visual Studio Code para inspeccionar variables, puntos de interrupción (breakpoints), pila de llamadas, etc.
- Uso de CUDA-GDB para depurar programas de CUDA en Linux
- Uso de CUDA-MEMCHECK para detectar errores de memoria y fugas de memoria
- Uso de NVIDIA Nsight para depurar y analizar programas de CUDA en Windows
Optimización
- Comprensión de los factores que afectan el rendimiento de los programas de CUDA
- Uso de técnicas de agrupación de accesos (coalescing) de CUDA para mejorar el ancho de banda de memoria
- Uso de técnicas de cacheo y pre-carga (prefetching) de CUDA para reducir la latencia de memoria
- Uso de técnicas de memoria compartida y memoria local de CUDA para optimizar los accesos a la memoria y el ancho de banda
- Uso de perfiles de rendimiento (profiling) y herramientas de perfilado de CUDA para medir y mejorar el tiempo de ejecución y la utilización de recursos
Requerimientos
- Comprensión del lenguaje C/C++ y conceptos de programación paralela
- Conocimientos básicos de arquitectura de computadoras y jerarquía de memoria
- Experiencia con herramientas de línea de comandos y editores de código
Audiencia
- Desarrolladores que desean aprender a utilizar CUDA para programar GPUs de NVIDIA y aprovechar su paralelismo
- Desarrolladores que desean escribir código de alto rendimiento y escalable que pueda ejecutarse en diferentes dispositivos CUDA
- Programadores que deseen explorar los aspectos de bajo nivel de la programación de GPU y optimizar el rendimiento de su código