Menù principale
B031290 - PARALLEL PROGRAMMING FOR MACHINE LEARNING
Principali informazioni
Lingua Insegnamento
Contenuto del corso
Libri di testo consigliati
Obiettivi Formativi
Prerequisiti
Metodi Didattici
Altre Informazioni
Modalità di verifica apprendimento
Programma del corso
Anno Accademico 2023-24
Coorte 2023 - Laurea Magistrale in INTELLIGENZA ARTIFICIALE
Anno di corso
Primo Anno - Primo Semestre
Dipartimento di Afferenza
Ingegneria dell'Informazione
Tipo insegnamento
Attività formativa monodisciplinare
Settore Scientifico disciplinare
ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
Crediti Formativi
6
Ore Didattica
48
Periodo didattico
11/09/2023 ⇒ 15/12/2023
Frequenza Obbligatoria
No
Tipo Valutazione
Voto Finale
Contenuto del corso
mostra
Programma del corso
mostra
Docenza
Lingua Insegnamento
Lucidi in inglese.
Lezione in italiano e, se presenti studenti non italiani, in inglese.
Lezione in italiano e, se presenti studenti non italiani, in inglese.
Contenuto del corso
Tecniche e strumenti di programmazione parallela
Libri di testo consigliati (Cerca nel catalogo della biblioteca)
- Parallel Programming for Multicore and Cluster Systems, Thomas Dauber and Gudula Rünger, Springer
- Programming Massively Parallel Processors, David B. Kirk and Wen-mei W. Hwu, Morgan Kaufmann
- An introduction to Parallel Programming, Peter Pacheco, Morgan Kaufmann
- Programming Massively Parallel Processors, David B. Kirk and Wen-mei W. Hwu, Morgan Kaufmann
- An introduction to Parallel Programming, Peter Pacheco, Morgan Kaufmann
Obiettivi Formativi
Scopo del corso è introdurre gli studenti alle tecniche di programmazione parallela e ad alta performance applicabili, in particolare, per diversi problemi di machine learning.
Al termine del corso lo studente possiede le basi fondamentali di programmazione parallela in C/C++/CUDA e Python per sistemi multicore, cluster e GPGPU; conosce inoltre i principali paradigmi di programmazione parallela e gli ambienti di programmazione standard OpenMP e CUDA. Programmazione parallela in Python io-bound e cpu-bound.
Al termine del corso lo studente possiede le basi fondamentali di programmazione parallela in C/C++/CUDA e Python per sistemi multicore, cluster e GPGPU; conosce inoltre i principali paradigmi di programmazione parallela e gli ambienti di programmazione standard OpenMP e CUDA. Programmazione parallela in Python io-bound e cpu-bound.
Prerequisiti
Conoscenze di base di C/C++ e Python.
Metodi Didattici
Lezioni frontali (80%) e attività di laboratorio (20%)
Altre Informazioni
Tutti i materiali sono forniti sul Moodle del corso
Modalità di verifica apprendimento
- Progetto di sviluppo software durante il corso (40% del voto finale)
- Progetto di sviluppo software finale (60% del voto finale)
Per ogni progetto deve essere scritta una relazione tecnica ed una presentazione che descrive il lavoro e riporta la performance rispetto ad una versione sequenziale del progetto.
Gli elaborati sono scelti dagli studenti da una lista proposta dal docente. Possono essere svolti singolarmente o in coppia.
L'elaborato è mirato a dimostrare le capacità di:
- Saper implementare un software parallelo usando diversi framework e strumenti visti a lezione
- Saper valutare gli effetti e differenze della programmazione parallela rispetto a quella sequenziale
- Saper misurare la performance di un programma parallelo rispetto ad uno sequenziale
- Saper scrivere una relazione tecnica ed effettuare una presentazione tecnica.
- Progetto di sviluppo software finale (60% del voto finale)
Per ogni progetto deve essere scritta una relazione tecnica ed una presentazione che descrive il lavoro e riporta la performance rispetto ad una versione sequenziale del progetto.
Gli elaborati sono scelti dagli studenti da una lista proposta dal docente. Possono essere svolti singolarmente o in coppia.
L'elaborato è mirato a dimostrare le capacità di:
- Saper implementare un software parallelo usando diversi framework e strumenti visti a lezione
- Saper valutare gli effetti e differenze della programmazione parallela rispetto a quella sequenziale
- Saper misurare la performance di un programma parallelo rispetto ad uno sequenziale
- Saper scrivere una relazione tecnica ed effettuare una presentazione tecnica.
Programma del corso
Livelli di parallelismo (istruzioni, transazioni, task, thread, memoria.)
Modelli di parallelismo (SIMD, MIMD, SPMD)
CPU e architetture parallele
Design Pattern per Programmazione concorrente (Master/Worker; Message passing)
Parallelization strategies, task parallelism, data parallelism, e work sharing
Cenni di strutture dati concorrenti
Multi-core processor programming
Shared memory parallelism; OpenMP
Multithreading
Overview GPGPU, Hardware GPU
CUDA; compilatore CUDA e strumenti
La memoria nella GPU e suo accesso
Stream e multi-GPU
Utilizzo librerie CUDA
Programmazione concorrente e parallela in Python
Modelli di parallelismo (SIMD, MIMD, SPMD)
CPU e architetture parallele
Design Pattern per Programmazione concorrente (Master/Worker; Message passing)
Parallelization strategies, task parallelism, data parallelism, e work sharing
Cenni di strutture dati concorrenti
Multi-core processor programming
Shared memory parallelism; OpenMP
Multithreading
Overview GPGPU, Hardware GPU
CUDA; compilatore CUDA e strumenti
La memoria nella GPU e suo accesso
Stream e multi-GPU
Utilizzo librerie CUDA
Programmazione concorrente e parallela in Python