Laurea Magistrale in Informatica - Dipartimento di Statistica, Informatica, Applicazioni "G. Parenti" (DiSIA)

La prima parte introdurrà i principali metodi per definire la semantica denotazionale e operazionale di linguaggi sequenziali, la seconda introdurrà alcuni formalismi per specificare, progettare e implementare sistemi concorrenti e distribuiti, e per analizzare e verificare loro proprietà.

Programma - Richiami di programmazione sequenziale e concorrente, di matematica discreta e di tecniche di prova. Automi a stati finiti e sistemi di transizione etichettati. Semantica operazionale e denotazionale dei linguaggi di programmazione. Algebre e calcoli di processo e loro modelli come sistemi di transizione. Equivalenze comportamentali come strumenti di astrazione e minimizzazione di sistemi e come base per prove di correttezza. Logiche modali e logiche temporali, e tecniche di verifica di proprietà dei sistemi basate sul model checking.

Obiettivi Formativi - Lo studente imparerà a comprendere la semantica dei linguaggi di programmazione e a progettare e realizzare semplici sistemi concorrenti. Lo studente acquisirà le competenze necessarie a utilizzare metodi formali per la validazione di sistemi informatici, possibilmente anche attraverso strumenti software di supporto, ed acquisirà le basi per l'ulteriore studio e la ricerca su teoria dei sistemi distribuiti, dei sistemi real-time e dei sistemi fault-tolerant.

Modifica

Anno accademico: 2016-2017

Contenuto del corso

Piattaforme avanzate per il calcolo ad alte prestazioni. Architetture dei micro-processori, e parallelismo implicito. Paradigmi di programmazione parallela. Tecniche di decomposizione di algoritmi complessi. Bilanciamento del carico. Modelli analitici per la programmazione parallela. Modelli di costo e valutazione delle prestazioni. Piattaforme avanzate: multi- core,many-core, processori grafici, cluster di grandi dimensioni. Tecniche di programmazione per GPU. Tecniche di programmazione con Hadoop-Mapreduce.

Obbiettivi Formativi

Conoscenze: 
L'obiettivo del corso è quello di fornire allo studente le basi per lo sviluppo di algoritmi per architetture di calcolo emergenti per l'analisi di grandi volumi di dati (Web, social networks, ...). 
Competenze acquisite: Processori multi-core, processori GPU, architetture distribuite, hadoop Mapreduce. 
Capacità acquisite (al termine del corso): Al termine del corso lo studente sarà in possesso delle tecniche di progettazione ed analisi di algoritmi paralleli e distribuiti per l'analisi di grandi volumi di dati.

Programma del corso

Piattaforme avanzate per il calcolo ad alte prestazioni. Architetture dei micro-processori, e parallelismo implicito. Paradigmi di programmazione parallela. Tecniche di decomposizione di algoritmi complessi. Bilanciamento del carico. Modelli analitici per la programmazione parallela. Modelli di costo e valutazione delle prestazioni. Piattaforme avanzate: multi- core,many-core, processori grafici, cluster di grandi dimensioni. Tecniche di programmazione per GPU. Tecniche di programmazione con Hadoop-Mapreduce.


Anno accademico: 2016-2017

Obiettivi formativi - Il corso intende fornire agli studenti una descrizione completa delle principali tecniche utilizzate nella progettazione e nell'analisi degli algoritmi e delle strutture dati. Il corso si focalizza soprattutto sull'analisi del caso medio, sebbene le tecniche matematiche illustrate siano le stesse utilizzate anche nell'analisi del caso peggiore, ed è integrato con la presentazione di un sistema di manipolazione simbolica che viene utilizzato come strumento per l'approfondimento e la verifica degli argomenti trattati.

Programma - Algoritmi greedy. Programmazione dinamica. Divide et impera. Algoritmi su grafi. Algoritmi probabilistici. Analisi degli algoritmi e complessità computazionale. Numeri speciali. Relazioni di ricorrenza. Funzioni generatrici. L'inversione di Lagrange. Il metodo simbolico. Espressioni regolari e grammatiche context-free: la metodologia di Chomsky-Schutzenberger. Simulazione di algoritmi e strutture dati e relativi test statistici.

Anno accademico: 2016-2017

Il corso intende far riflettere sulle problematiche che si presentano nella costruzione e nell'uso di interfacce e vuol fornire gli strumenti per una loro valutazione. In particolare, vuole presentare agli studenti informatici, gli aspetti di progettazione e uso di interfacce legati ad altre discipline (dalla psicologia cognitiva, all'ergonomia, alla sociologia, alla linguistica) in modo tale che siano consapevoli e sensibili alle richieste che possono venire da altre figure professionali e siano in grado di comprenderle. Inoltre intende presentare le problematiche legate all'accessibilità degli strumenti informatici da parte di soggetti con disabilità fisiche e/o tecnologiche.

Anno accademico: 2016-2017