Volver a los cursos
AI021 Professional

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.

5.0
30.0h
1762 estudiantes
1 me gusta
Inteligencia Artificial
Comenzar a aprender

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

  1. Definir los roles del host (CPU) y del dispositivo (GPU) dentro de un sistema heterogéneo.
  2. Explicar el modelo de programación SIMT y la organización jerárquica de hilos, bloques y rejillas.
  3. 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.
  4. 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.
  5. 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.
  6. Gestionar la ejecución paralela: utilizar flujos CUDA, eventos y Grupos Cooperativos para gestionar tareas asíncronas y sincronizar operaciones entre CPU y GPU.
  7. Realizar aritmética de punteros compleja e identificar cuellos de botella arquitectónicos (von Neumann vs. Harvard).
  8. Implementar patrones de ejecución CUDA avanzados, incluyendo lanzamientos de kernels dependientes programáticamente y transferencias de memoria por lotes heterogéneas.
  9. Utilizar características específicas del hardware como Alcances de Hilos, Proxies Asincrónicos y Pipelines para maximizar la concurrencia.
  10. Configurar y ajustar el rendimiento de la Memoria Unificada mediante prefetching, sugerencias de uso y gestión del tamaño de página.

🔹 Lección 1: Fundamentos de CUDA y visión general arquitectónica

Resumen: Esta lección presenta la plataforma de computación paralela CUDA y su arquitectura de hardware subyacente. Explora cómo los sistemas heterogéneos utilizan tanto CPUs como GPUs, el modelo de programación SIMT (Instrucción Única, Múltiples Hilos), y la jerarquía de hilos, bloques y rejillas. Además, cubre el flujo de compilación de CUDA, incluyendo los roles de PTX, cubins y fatbins para garantizar compatibilidad binaria y hacia adelante.

Resultados del 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.

🔹 Lección 2: Programación básica y gestión de ejecución en GPU

Resumen: Esta lección cubre los aspectos fundamentales y avanzados de la programación en GPU utilizando CUDA C++. Aborda la transición desde la especificación básica de kernels y el flujo de compilación de NVCC hasta temas avanzados de gestión de ejecución, incluyendo el diseño de kernels SIMT, conflictos de bancos de memoria compartida y ejecución asíncrona usando flujos y eventos. Los estudiantes aprenderán a equilibrar modelos de memoria (Unificada frente a Explícita) y optimizar la ocupación del hardware para computación de alto rendimiento.

Resultados del aprendizaje:

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

🔹 Lección 3: Lógica avanzada de memoria y sistemas multi-GPU

Resumen: Esta lección explora la transición desde arquitecturas de memoria fundamentales y lógica de punteros hasta técnicas avanzadas de aceleración en GPU. Cubre los modelos de ejecución a nivel de hardware (SIMT, Planificación Independiente de Hilos), mecanismos de sincronización sofisticados (Barreras Asincrónicas, Átomos Escopados) y la coordinación de sistemas multi-GPU utilizando tanto las APIs de Runtime como las de Driver.

Resultados del aprendizaje:

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

🔹 Lección 4: Optimización, gráficos y aceleradores de hardware

Resumen: Esta lección cubre técnicas de programación CUDA de alto rendimiento, centrándose en la optimización del movimiento de datos y el flujo de ejecución. Explora la transición desde la ejecución basada en flujos hasta los gráficos CUDA persistentes, el control granular de la Memoria Unificada mediante prefetching y sugerencias, y la utilización de aceleradores específicos del hardware como el Tensor Memory Accelerator (TMA) y la persistencia de caché L2. Además, detalla patrones avanzados de sincronización, particionamiento de recursos mediante Contextos Verdes y la interoperabilidad entre APIs para la computación heterogénea moderna.

Resultados del aprendizaje:

  • Configurar y ajustar el rendimiento de la Memoria Unificada mediante prefetching, sugerencias de uso y gestión del tamaño de página.
  • Crear, actualizar y ejecutar gráficos CUDA, incluyendo el uso de nodos de memoria y lanzamientos desde el dispositivo.
  • Implementar sincronización avanzada usando Barreras Asincrónicas y el patrón Productor-Consumidor.

🔹 Lección 5: Referencia técnica y extensiones del lenguaje

Resumen: Esta lección ofrece una profunda exploración técnica de las especificaciones de referencia del modelo de programación CUDA y las extensiones del lenguaje C++. Cubre la interfaz hardware-software a través de capacidades de cómputo, variables de entorno para el control en tiempo de ejecución, y los requisitos específicos de sintaxis para escribir código de dispositivo de alto rendimiento usando estándares modernos de C++, grupos cooperativos y intrínsecos especializados del hardware.

Resultados del aprendizaje:

  • Identificar restricciones de hardware y conjuntos de características según las versiones de Compute Capability de GPU.
  • Configurar el entorno de ejecución CUDA y la compilación JIT usando variables de entorno a nivel del sistema.
  • Aplicar extensiones del lenguaje C++ (anotaciones, lambdas y plantillas) respetando las restricciones del lado del dispositivo.