Contattataci

Struttura del corso

Introduzione

  • Cos’è ROCm?
  • Cos’è HIP?
  • ROCm, CUDA ed OpenCL: differenze e relazioni reciproche
  • Panoramica sulle caratteristiche architetturali di ROCm e HIP
  • Configurazione dell’ambiente di sviluppo

Prime mosse

  • Creazione di un nuovo progetto ROCm utilizzando Visual Studio Code.
  • Analisi della struttura e dei file del progetto.
  • Compilazione ed esecuzione del programma sviluppato.
  • Visualizzazione degli output tramite le funzioni printf e fprintf.

L’API di ROCm

  • Funzione svolta dall’API di ROCm all’interno dei programmi scritti in ambiente host.
  • Utilizzo dell’API per interrogare le specifiche e i requisiti del dispositivo GPU.
  • Allocazione e deallocazione della memoria mediante tali strumenti.
  • Trasferimento dei dati tra la CPU e la GPU, operato tramite l’API stessa.
  • Lancio dei kernel nonché sincronizzazione tra i thread grazie all’API.
  • Gestione degli errori e delle eccezioni attraverso le procedure previste da ROCm.

Il linguaggio HIP

  • Ruolo ricoperto dal linguaggio HIP nei programmi che si eseguono sui device GPU.
  • Scrivere, utilizzando il linguaggio HIP, dei kernel capaci di funzionare sulla GPU e modificarne i dati interni.
  • Conoscenza dei tipi di dato, qualificatori, operatori ed espressioni previsti da questo linguaggio.
  • Impiego delle funzioni predefinite, delle variabili e delle librerie disponibili in HIP per gestire attività comuni.

Modelli di memoria con ROCm e HIP

  • Distinguere tra i modelli di memoria utilizzati su host e su device.
  • Utilizzare gli spazi di memoria messi a disposizione da entrambi i sistemi – globale, condiviso, costante e locale – per gestire correttamente l’allocazione dei dati.
  • Manipolare i tipi specifici di oggetti memorizzati in tali aree, come puntatori, array, texture ed altre strutture simili.
  • Scegliere le modalità di accesso appropriato – in lettura, scrittura o anche lettura/scrittura – ai dati immagazzinati nella memoria.
  • Comprendere i meccanismi di coerenza della memoria e le procedure necessarie per la relativa sincronizzazione.

Modelli esecutivi con ROCm e HIP

  • Distinguere chiaramente tra l’esecuzione su host e quella su device nel contesto di questi ambienti di sviluppo.
  • Controllare il comportamento dei thread, blocchi e griglie definiti in modo da ottenere la massima parallelizzazione.
  • Sfruttare le funzioni tipiche per l’identificazione e la gestione dei singoli thread – ad esempio hipThreadIdx_x, hipBlockIdx_x, hipBlockDim_x – disponibili tramite ROCm ed HIP.
  • Impiegare specifiche funzioni destinate ai blocchi di calcolo – quali __syncthreads e __threadfence_block – per garantire la corretta progressione temporale dei thread stessi.
  • Riconoscere le principali strutture della griglia di calcolo (definite da hipGridDim_x, hipGridSync) nonché le tecniche basate su cooperative groups che permettono una comunicazione più stretta tra le parti interconnesse del codice.

Debugging

  • Riconoscere i tipi di errori e problemi ricorrenti in codici sviluppati con ROCm ed HIP.
  • Servirsi del debugger presente in Visual Studio Code per esaminare variabili, impostare breakpoint o analizzare il call stack.
  • Debuggare direttamente i programmi su piattaforme AMD utilizzando appositi strumenti come il Debugger di ROCm stesso.
  • Analisi approfondita delle prestazioni e della distribuzione del carico di lavoro tramite lo strumento specifico Profiler di ROCm.

Ottimizzazione

  • Identificare i fattori principali che incidono sulle performance complessive dei programmi sviluppati con questi ambienti.
  • Sfruttare le tecniche di coalescenza fornite da ROCm e HIP per migliorare il throughput complessivo della memoria stessa.
  • Impiegare procedure di caching o prefetching per ridurre significativamente i tempi di attesa legati agli accessi alla memoria.
  • Sperimentare la gestione ottimale delle aree condivise e locali della memoria allo scopo di contenere le latenze operative e sfruttare al meglio le loro capacità.
  • Utilizzare opportunamente il profiler integrato per misurare le prestazioni, rilevando così dove possano esserci margini di miglioramento in termini temporali ed efficiente impiego delle risorse hardware.

Sintesi finale e prossimi passi

Requisiti

  • Conoscenza di base del linguaggio C/C++ e dei concetti fondamentali della programmazione parallela
  • Competenze elementari in materia di architettura dei computer e gerarchia della memoria
  • Esperienza nell’utilizzo di strumenti a riga di comando e editor di codice

Destinatari del corso

  • Sviluppatori interessati ad apprendere l’uso di ROCm e HIP per programmare le GPU AMD sfruttandone il potenziale parallelo.
  • Programmatori intenzionati a creare codice ad alte prestazioni ed estensibile, in grado di funzionare su diversi dispositivi basati su tecnologia AMD.
  • Ingegneri del software desiderosi di approfondire gli aspetti più tecnici della programmazione delle GPU e di migliorarne le prestazioni attraverso ottimizzazioni specifiche.
 28 ore

Numero di Partecipanti


Prezzo per partecipante

Corsi in Arrivo

Categorie relative