CUDA viene utilizzato per accelerare le applicazioni solo CPU facendole funzionare su GPU. Nvidia offre un corso per iniziare a trattare con tale tecnologia.
La programmazione parallela, pur nella usa intrinseca complessità, offre numerosi vantaggi allo sviluppo di applicazioni efficienti.
Se da un lato “pensare in parallelo” è più complesso e meno intuitivo del classico paradigma seriale (o von Neumann), dall’altro tale modalità offre insperati vantaggi ed accelerazioni nella produzione di programmi.
La complessità computazionale di algoritmi seriali è stata sottoposta ad analisi in tutte le sue sfaccettature (per maggiori approfondimenti al riguardo consigliamo di leggere “The Art of Computer Programming” di Donald Knuth). La complessità degli algoritmi paralleli invece risulta molto più difficile da valutare: oltre al flusso di informazioni occorre tenere conto delle caratteristiche dell’hardware sul quale si lavora: parallelismo massicco, architetture NUMA, processori vettoriali, latenza di accesso alla memoria condivisa.
Infine occorre tenere conto della Legge di Amdahl: “Il miglioramento delle prestazioni di un sistema che si può ottenere ottimizzando una certa parte del sistema è limitato dalla frazione di tempo in cui tale parte è effettivamente utilizzata” .
Accelerazione hardware con Nvidia CUDA
Da diversi anni Nvidia sviluppa la modalità CUDA (Compute Unified Device Architecture) per offrire anche all’utente finale la possibilità di accedere ad un ambiente massiciamente parallelo (migliaia di processori semplici). CUDA utilizza un linguaggio C con istruzioni estese per tale compito. Ma la sintassi non è tutto: occorre capire come operare su questi sistemi per accedere con cognizione di causa.
Per tale ragione Nvidia offre periodicamente ai propri utenti corsi di avvicinamento e approfondimento a vari livelli.
Oggi analizzeremo nello specifico il corso denominato “Fundamentals of Accelerated Computing in CUDA C/C++“.
Il corso
Le applicazioni CUDA sono estremamente parallele e molto più veloci delle loro controparti solo CPU. Il corso consente di sperimentare l’accelerazione delle applicazioni C/C++ tramite:
- Parallelizzazione delle applicazioni da eseguire su GPU
- Ottimizzazione delle applicazioni utilizzando tecniche CUDA come la gestione della memoria
- Tecniche di apprendimento come la concorrenza e i flussi CUDA
- Strumenti di apprendimento come Nsight Systems per profilare e identificare i colli di bottiglia
Al termine, l’utente sarà in grado di accelerare e ottimizzare le applicazioni esistenti solo per CPU C/C++ utilizzando le tecniche CUDA più essenziali e i sistemi Nsight. Verrà presentato un framework iterativo di sviluppo CUDA che consentirà di realizzare rapidamente applicazioni accelerate.
Prerequisiti:
Competenza C/C++ di base inclusa familiarità con tipi di variabili, loop, istruzioni condizionali, funzioni e manipolazioni di array. Non si presume alcuna conoscenza precedente della programmazione CUDA.
Risorse suggerite per soddisfare i prerequisiti
Il tutorial interattivo di learn-c.org.
Strumenti, librerie e framework utilizzati
Dettagli del corso
Il corso (online) ha la durata di 8 ore complessive, costa 90 dollari Usa ed offre le competenze necessarie per iniziare a comprendere ed utilizzare le caratteristiche di accelerazione e ottimizzazione dei computer paralleli.
Il corso fa parte di un percorso formativo gestito da Nvidia, che darà diritto (al completamento) di una certificazione ufficiale verificata.
Join our groups on Telegram…