Programmazione di Sistemi Multicore
Corso di Laurea in Informatica, terzo anno
A.A. 2019-2020, primo semestre
Docente: Michele Martinelli Ricevimento: per appuntamento al termine del corso. E-mail: michele.martinelli AT uniroma1.it |
Orario delle lezioni Giorno | Ore | Aula | Martedì | 16-19 | Aula 1 - Via del Castro Laurenziano 7A | Giovedì | 16-18 | Aula 1 - Via del Castro Laurenziano 7A | |
Avvisi
L'appello straordinario si terrà il 27 ottobre 2020 alle 16 in modalità telematica secondo le modalità che verranno comunicate via email dal docente (probabilmente si utilizzerà la piattaforma Exam.net + SEB).
RISULTATI appello 4 febbraio 2020:
voti_appello_4feb2020.pdf
RISULTATI prima sessione gennaio 2020
1920_voti_finali_esame_completo_gennaio_2020.pdf
1920_voti_finali_esoneri_gennaio_2020.pdf
in data 26 novembre 2019 sono stati presentati i progetti (li trovate nelle slide del diario delle lezioni) da svolgere in gruppo (fino a massimo 5 persone) o individualmente. Per richiedere il materiale necessario (in base alla vostra idea) inviare una email al docente con la lista di sensori / scheda (Arduino o Nucleo) ed eventuale altro hardware necessario. Saranno organizzati uno o due incontri prima della data degli appelli (probabilmente in laboratorio Colossus) per presentare il proprio progetto. Sono richieste alcune slide con la descrizione del progetto e i principali problemi affrontati.
*date di esame per la prima sessione : (esame completo + secondo esonero) 14 Gennaio ore 16-18 , Aula T1. Esame completo: 4 Febbraio ore 16-18 aula 2L *
Obiettivi e programma sintetico
Veloce ripasso di programmazione C (propedeutico per il resto del corso)tipi primitivi, casting, controlli condizionali (if then else). controlli iterativi (while e for), array, matrici, funzioni, struct/typedef/union. Puntatori, aritmetica dei puntatori, stringhe in C. Programmazione multithread in C (pthread).
Sistemi embedded ed elettronica (propedeutico per il resto del corso)introduzione ad Arduino. ADC e elettronica analogica, principali componenti elettronici di base: condensatori, diodi, transistor. Porte logiche (implementazione reale con transistor). Sensori: come "leggere" i diversi parametri ambientali (temperatura, umidità).Esercizi ed esempi pratici con hardware reale.
FreeRTOS ("multithread" su sistemi embedded)Introduzione ai sistemi real time, al sistema operativo
FreeRTOS e la programmazioni dei dispositivi STM. programmazione C per sistemi embedded avanzati, nozioni di gestione della memoria e dello scheduler. Gestione multitasking, queue, interrupt e comunicazioni interprocesso. Esercizi ed esempi pratici con hardware reale.
MPIIntroduzione all'HPC con cenni ai super computer. MPI: che cos'è? A cosa serve? Operazioni point to point e di massa. Esercizi ed esempi pratici.
CUDAIntroduzione al calcolo su GPU. Paradigma di programmazioni su CUDA: da CPU a GPU e gestione della memoria. Come sfruttare il parallelismo e sfruttamento del framework. Esercizi ed esempi pratici.
applicazioni pratiche di programmazione su architetture reali (droni aerei e sottomarini).
Diario delle lezioni
martedì 1 ottobre 2019:
lezione introduttiva: cosa sono i sistemi embedded e quali sono le loro caratteristiche e limitazioni. Introduzione alla piattaforma Arduino.
lezione_introduttiva.pdf
giovedì 3 ottobre 2019:
ripasso del linguaddio C: struttura di un programma, variabili, tipi primitivi, controlli condizionali, controlli iterativi, array, funzioni, puntatori, esercizi pratici.
1920_ripasso_C_1.pdf
martedì 8 ottobre 2019:
ripasso del linguaddio C: Allocazione Dinamica, Struct, Typedef, Union. Esercizi pratici.
1920_ripasso_C_2.pdf
introduzione ai thread in C: parallelismo, libreria pthread, concorrenza, ripasso dei meccanismi di sincronizzazione
1920_lezione2_multithread.pdf
giovedì 10 ottobre 2019:
POSIX thread: creazione di uno o più thread, exit, join. MUTEX: introduzione, creazione e cancellazione. Esercizi pratici.
1920_lezione3_multithread2.pdf
martedì 15 ottobre 2019:
Corrente, tensione, potenza, introduzione ai componenti elettronici di base (resistenze, diodi), legge di Ohm, Arduino, breadboard
1920_Lezione4_introduzione_elettronica.pdf
primi esperimenti con Arduino: installazione IDE, lampeggio LED integrato in Arduino, LED esterno, controllo di più LED
1920_Lezione4_Arduino.pdf
giovedì 17 ottobre 2019:
introduzione alle porte e ai pin di un microcontrollore. pulsanti e resistenze di pullup. Comandi seriali
1920_Lezione5-embedded_pullup.pdf
leggere un pulsante con Arduino, leggere un valore (resistore variabile) con un ingresso analogico di Arduino
1920_Lezione5_Arduino.pdf
mercoledì 22 ottobre 2019:
esercitazione con Arduino: seriale, display LCD
1920_Lezione_6-Arduino.pdf
giovedì 24 ottobre 2019:
lezione annullata
mercoledì 29 ottobre 2019:
ripasso legge di Ohm, condensatore, diodo, LED, interrupt. Esercizi sulla carica / scarica del condensatore.
lezione7_embedded.pdf
giovedì 31 ottobre 2019:
ripasso potenziometri e divisori di voltaggio, transistor: funzionamento in zona attiva, saturazione e interdizione. Esercizi con led e transistor, porte logiche realizzate con transistor
1920_lezione8_embedded.pdf
martedì 5 novembre
esonero
giovedì 7 novembre
sospensione didattica
martedì 12 novembre
FreeRTOS: perché è necessario il Real Time, HEAP,
STM32Cube IDE, Task ,Code, Timer.
1920_FreeRTOS_1.pdf
giovedì 14 novembre
correzione esonero, come si realizza un PCB, operare dirattamente sulle porte del microcontrollore, primi esempi in
STM32Cube IDE
1920_lezione_PCB_nucleo.pdf
martedì 19 novembre
protocolli di comunicazione seriale, esercizi con scheda Nucleo.
1920_porte_seriale_nucleo2.pdf
giovedì 21 novembre 2019
FreeRTOS: code, timer, interrupt, task notifications.
1920_FreeRTOS_2.pdf esercizi svolti a lezione:
https://drive.google.com/file/d/1jPbXiNy8inJKcHe3eUB6SALZZJ1lrTOO/view?usp=sharing
martedì 26 novembre 2019
MPI: introduzione, modelli di esecuzione, comunicazione, esercizi.
1920_MPI_1.pdf -
1920_eserciziMPI.rar
Per scaricare OPENMMPI e installarlo fare riferimento a:
https://github.com/open-mpi/ompi
presentazione progetti
1920_presentazione_progetti.pdf
giovedì 28 novembre 2019
MPI: send, receive, collective, broadcast, scatter, gather, reduce, gruppi.
1920_MPI_02.pdf -
1920_esercizi_2_mpi.zip
martedì 3 dicembre 2019
MPI: esercizi
1920_Esercizi_MPI.pdf
venerdì 5 dicembre 2019
scaricare il framework CUDA all'indirizzo:
https://developer.nvidia.com/cuda-downloads
CUDA: introduzione, gestione del flusso di calcolo, blocchi, thread, indicizzazione
1920_CUDA_01.pdf
martedì 10 dicembre 2019
CUDA: thread, dimblock e dimgrid, indexing, gestione GPU e parametri da passare ai kernel. esercizi pratici
1920_CUDA_02.pdf
giovedì 12 dicembre 2019
lezione annullata causa ITMEETING
martedì 17 dicembre
ambienti multi GPU: comunicazione e esempi di indirizzamento e gestione, paradigma RDMA, esempi di applicazione in ambito HPC e HEP
1920_HPC1.pdf
esempi di applicazione della programmazione multicore alla blockchain: funzionamento, puzzle, esempi in python
1920_BC1.pdf
elementi e chiarimenti per lo svolgimento dei progetti
1920_aiuti_per_progetto.pdf
giovedì 19 dicembre 2019
ripasso del programma e approfondimenti vari:
1920_ripasso_finale.pdf
A.A. Precedenti
A.A.20182019