Guía de Programación CUDA
El recurso oficial y completo para desarrolladores que desean aprender el modelo de programación CUDA y cómo escribir código de alto rendimiento que se ejecute en GPUs de NVIDIA. Esta guía cubre la arquitectura de la plataforma, la interfaz de programación, funciones avanzadas del hardware y especificaciones técnicas.
Descripción del curso
Resumen del contenido
El recurso oficial y completo para desarrolladores que desean aprender el modelo de programación CUDA y cómo escribir código de alto rendimiento que se ejecute en GPUs de NVIDIA. Esta guía abarca la arquitectura de la plataforma, la interfaz de programación, características avanzadas de hardware y especificaciones técnicas.
Domina el arte del cálculo paralelo con la guía estándar de la industria sobre NVIDIA CUDA.
Autor: Corporación NVIDIA
Agradecimientos: Copyright © 2007-2024 Corporación NVIDIA y afiliados. Todos los derechos reservados.
Objetivos de aprendizaje
- Definir los roles del host (CPU) y del dispositivo (GPU) dentro de un sistema heterogéneo.
- Explicar el modelo de programación SIMT y la organización jerárquica de hilos, bloques y rejillas.
- Distinguir entre PTX (Ejecución Paralela de Hilos) y código binario (cubins) y explicar cómo la compilación Just-in-Time (JIT) facilita la compatibilidad.
- Desarrollar y compilar kernels CUDA: escribir funciones global, configurar la ejecución con notación de tres corchetes angulares y gestionar el flujo de compilación de NVCC.
- Optimizar memoria y movimiento de datos: distinguir entre modelos de memoria Unificada, Explícita y Mapeada, e implementar memoria de host bloqueada por página para transferencias eficientes.
- Gestionar la ejecución paralela: utilizar flujos CUDA, eventos y Grupos Cooperativos para gestionar tareas asíncronas y sincronizar operaciones entre CPU y GPU.
- Realizar aritmética de punteros compleja e identificar cuellos de botella arquitectónicos (von Neumann vs. Harvard).
- Implementar patrones de ejecución CUDA avanzados, incluyendo lanzamientos de kernels dependientes programáticamente y transferencias de memoria por lotes heterogéneas.
- Utilizar características específicas del hardware como Alcances de Hilos, Proxies Asincrónicos y Pipelines para maximizar la concurrencia.
- Configurar y ajustar el rendimiento de la Memoria Unificada mediante prefetching, sugerencias de uso y gestión del tamaño de página.