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.
Lecciones 共 5 课时 · 预计 30.0h
Lecciones
Lesson
This lesson introduces the fundamental shift from latency-optimized CPU architectures to throughput-oriented GPU computing. Students will learn to distinguish between these processing models and understand how the CUDA programming platform enables massive parallel execution for data-intensive tasks.
This lesson introduces the fundamentals of CUDA kernel development, focusing on the SIMT execution model and the use of the __global__ specifier to launch parallel functions on GPU Streaming Multiprocessors. Students will learn how to manage asynchronous kernel execution, handle device memory, and structure code to ensure effective hardware utilization.
This lesson explores the fundamental differences between von Neumann and Harvard architectures, focusing on how memory access pathways impact computational performance. Students will learn to identify the von Neumann bottleneck, understand the benefits of split-cache Harvard designs, and analyze how modern systems utilize a Modified Harvard Architecture to balance throughput with programming flexibility.
AI021: Optimization, Graphs, and Hardware Accelerators (Lesson 4) explores the shift from CPU-bottlenecked stream execution to GPU-autonomous workflows. Students will learn to utilize modern primitives like CUDA Graphs, lazy loading, and asynchronous memory prefetching to minimize host-side overhead and maximize hardware efficiency.
This lesson explores the technical reference and language extensions in CUDA, focusing on the relationship between virtual architectures (PTX) and real hardware (SASS). Students will learn to manage compute capabilities, utilize architecture-specific macros, and navigate language constraints to ensure code portability and performance.