PROGRAMMAZIONE DI SISTEMI EMBEDDED E MULTICORE

Obiettivi formativi

Obiettivi generali: Il corso è finalizzato all'acquisizione della conoscenza di tecniche algoritmiche e di programmazione adatte alle moderne piattaforme di calcolo multicore ed embedded. Obiettivi specifici: Conoscenza e comprensione: Al termine del corso gli studenti avranno una profonda comprensione dei principali problemi di programmazione posti dai sistemi embedded e multi-core, nonché delle tecniche di programmazione utili per scrivere codice efficiente e scalabile. Avranno una comprensione della programmazione a basso livello e della progettazione HW. Capacità di applicare conoscenza e comprensione: gli studenti saranno in grado di progettare, programmare e realizzare sistemi embedded ed avranno una comprensione dei sistemi operativi adottati in tali tipi di sistemi. Capacità critiche e di giudizio: gli studenti saranno in grado di affrontare le sfide che si presentano nella progettazione di sistemi embedded e multicore e nell'implementazione di programmi efficienti e scalabili per tali sistemi, anche tenendo conto delle caratteristiche architetturali delle diverse piattaforme di calcolo. Capacità di comunicare quanto si è appreso: gli studenti saranno in grado di comunicare in modo efficace, riassumendo le idee principali nella progettazione di software embedded e multicore in modo chiaro e presentando informazioni tecniche accurate. Capacità di studio autonomo: obiettivo del corso è di introdurre i principi di base nella progettazione di software embedded e multicore. Gli studenti saranno quindi in grado di estendere la loro conoscenza in modo indipendente, adattandola all’evoluzione delle tecnologie e delle piattaforme di calcolo.

Canale 1
DANIELE DE SENSI Scheda docente

Programmi - Frequenza - Esami

Programma
1. Introduzione alla programmazione parallela 2. Hardware parallelo e Software parallelo 3. Programmazione di sistemi a memoria distribuita tramite MPI 4. Programmazione di sistemi a memoria condivisa tramite Pthreads 5. Programmazione di sistemi a memoria condivisa tramite OpenMP 6. Programmazione di GPGPU tramite CUDA 7. Esempi di algoritmi paralleli e distribuiti, e loro implementazione
Prerequisiti
- Conoscenza di base del linguaggio C - Conoscenza di base dell'architettura di un elaboratore
Testi di riferimento
Peter Pacheco, "An Introduction to Parallel Programming", Morgan Kaufmann. David B.Kirk, Wen-mei W.Hwu, "Programming Massively Parallel Processors. A Hands-on Approach" Second Edition, Morgan Kaufmann Barlas, "Multicore and GPU Programming"
Frequenza
Frequenza non obbligatoria ma fortemente consigliata.
Modalità di esame
L'esame consiste nello sviluppo di un progetto (ad esempio, implementazione di un'applicazione su sistemi multi-GPU, usando le metodologie e tecnologie viste a lezione), e di un successivo esame orale che comprende la discussione del progetto e domande sul programma del corso.
Modalità di erogazione
L'insegnamento adotta un modello didattico misto (teoria e pratica). Vengono utilizzate lezioni frontali integrate da una componente di esercitazioni pratiche e attività di laboratorio dedicate all'implementazione e all'ottimizzazione di codice parallelo su piattaforme multicore e GPU (es. CUDA/OpenMP). L'alternanza tra teoria (principi architetturali e modelli di programmazione) e laboratorio (sviluppo e benchmarking) è finalizzata a garantire l'acquisizione delle capacità di Conoscenza e di Applicazione dei concetti di programmazione parallela.
DANIELE DE SENSI Scheda docente

Programmi - Frequenza - Esami

Programma
1. Introduzione alla programmazione parallela 2. Hardware parallelo e Software parallelo 3. Programmazione di sistemi a memoria distribuita tramite MPI 4. Programmazione di sistemi a memoria condivisa tramite Pthreads 5. Programmazione di sistemi a memoria condivisa tramite OpenMP 6. Programmazione di GPGPU tramite CUDA 7. Esempi di algoritmi paralleli e distribuiti, e loro implementazione
Prerequisiti
- Conoscenza di base del linguaggio C - Conoscenza di base dell'architettura di un elaboratore
Testi di riferimento
Peter Pacheco, "An Introduction to Parallel Programming", Morgan Kaufmann. David B.Kirk, Wen-mei W.Hwu, "Programming Massively Parallel Processors. A Hands-on Approach" Second Edition, Morgan Kaufmann Barlas, "Multicore and GPU Programming"
Frequenza
Frequenza non obbligatoria ma fortemente consigliata.
Modalità di esame
L'esame consiste nello sviluppo di un progetto (ad esempio, implementazione di un'applicazione su sistemi multi-GPU, usando le metodologie e tecnologie viste a lezione), e di un successivo esame orale che comprende la discussione del progetto e domande sul programma del corso.
Modalità di erogazione
L'insegnamento adotta un modello didattico misto (teoria e pratica). Vengono utilizzate lezioni frontali integrate da una componente di esercitazioni pratiche e attività di laboratorio dedicate all'implementazione e all'ottimizzazione di codice parallelo su piattaforme multicore e GPU (es. CUDA/OpenMP). L'alternanza tra teoria (principi architetturali e modelli di programmazione) e laboratorio (sviluppo e benchmarking) è finalizzata a garantire l'acquisizione delle capacità di Conoscenza e di Applicazione dei concetti di programmazione parallela.
  • Codice insegnamento10593235
  • Anno accademico2025/2026
  • CorsoInformatica
  • CurriculumMetodologico
  • Anno3º anno
  • Semestre1º semestre
  • SSDINF/01
  • CFU6