Programmazione di Processori Multicore
Introduzione
I processori multicore, che integrano più di una CPU su un unico
chip, sono sempre più diffusi.
In teoria, consentono di aumentare la potenza di elaborazione disponibile nella macchina aggirando le limitazioni tecnologiche (velocità di
clock, dissipazione termica).
In pratica, un programma seriale convenzionale, non potendo utilizzare più di una CPU, non può ottenere i vantaggi prestazionali promessi.
Scopo di questa attività complementare è di illustrare le potenzialità e i limiti dell'approccio, quali tecniche adoperare per rendere i codici più efficienti a parità di frequenza di
clock, ed introdurre alcuni modelli di programmazione che permettono di suddividere le elaborazioni di un unico programma su più CPU, senza dover ricorrere esplicitamente a processi intercomunicanti o ai
thread.
Programma
- Motivazioni dell'uso di processori multicore
- Codici efficienti: algoritmica ed implementazione
- La gerarchia di memoria e come sfruttarla
- Il compilatore ed il profiler
- Ottimizzazione dei codici: costo delle operazioni, scrittura dei codici
- Brevi richiami sui thread
- Problemi della programmazione con thread che condividono la memoria
- Parallelismo: approcci e valutazione delle prestazioni
- Cenni sui linguaggi che supportano multithreading
- OpenMP
- Cilk
concetti principali, cenni su Cilk++
- CUDA e forse cenni su OpenCL
Materiale didattico
Progetto finale
Modalità di valutazione
Per conseguire i crediti previsti è necessario svolgere alcuni
homework, di cui discuteremo insieme i risultati a lezione, e svolgere un progetto pratico.
Prerequisiti
Buona conoscenza del linguaggio C e padronanza dei concetti fondamentali dei sistemi operativi.
Prog_multicore Web Utilities