Guida alla Programmazione CUDA
La risorsa ufficiale e completa per gli sviluppatori per imparare il modello di programmazione CUDA e come scrivere codice ad alte prestazioni che si esegue su GPU NVIDIA. Questa guida copre l'architettura della piattaforma, l'interfaccia di programmazione, le funzionalità hardware avanzate e le specifiche tecniche.
Panoramica del corso
📚 Riepilogo del contenuto
La risorsa ufficiale e completa per gli sviluppatori che desiderano apprendere il modello di programmazione CUDA e come scrivere codice ad alte prestazioni eseguito su GPU NVIDIA. Questa guida copre l'architettura della piattaforma, l'interfaccia di programmazione, le caratteristiche hardware avanzate e le specifiche tecniche.
Padroneggia l'arte del calcolo parallelo con la guida standard dell'industria per NVIDIA CUDA.
Autore: NVIDIA Corporation
Ringraziamenti: Copyright © 2007-2024 NVIDIA Corporation & affiliate. Tutti i diritti riservati.
🎯 Obiettivi didattici
- Definire i ruoli dell'host (CPU) e del dispositivo (GPU) all'interno di un sistema eterogeneo.
- Spiegare il modello di programmazione SIMT e l'organizzazione gerarchica di thread, blocchi e griglie.
- Distinguere tra PTX (Parallel Thread Execution) e codice binario (cubins) e spiegare come la compilazione Just-in-Time (JIT) faciliti la compatibilità.
- Sviluppare e compilare kernel CUDA: scrivere funzioni global, configurare l'esecuzione con la notazione a tripla freccia e gestire il flusso di compilazione NVCC.
- Ottimizzare la memoria e il movimento dei dati: distinguere tra modelli di memoria Unified, Esplicita e Mappata, e implementare la memoria host bloccata a pagina per trasferimenti efficienti.
- Gestire l'esecuzione parallela: utilizzare CUDA Streams, Eventi e Cooperative Groups per gestire compiti asincroni e sincronizzare operazioni CPU-GPU.
- Eseguire aritmetica di puntatori complessa e identificare i collo di bottiglia architettonici (von Neumann vs. Harvard).
- Implementare pattern di esecuzione CUDA avanzati, inclusi lanci kernel dipendenti dal programma e trasferimenti batch multipli eterogenei.
- Utilizzare funzionalità specifiche dell'hardware come Thread Scopes, Proxy asincroni e Pipeline per massimizzare la concorrenza.
- Configurare e ottimizzare le prestazioni della memoria Unified tramite prefetching, suggerimenti d'uso e gestione delle dimensioni delle pagine.
Lezioni 共 5 课时 · 预计 30.0h
Lezioni
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.