Diario delle lezioni ed esercizi del giorno A.A. 2015-2016
Questa pagina riporta l'elenco delle lezioni svolte in aula.
Lunedì 28 settembre 2015 (90 min)
Panoramica del corso, paradigmi di programmazione imperativo, funzionale e orientato agli oggetti.
Venerdì 2 ottobre 2015 (180 min)
- Interpretazione interattiva, interpretazione di script, compilazione ed esecuzione
- Elementi di base del linguaggio Scala:
- Tipi Primitivi
- Letterali
- Commenti
- Parole chiave
- Identificatori
- Variabili mutabili e immutabili
- Inferenza di tipo
- Definizione e invocazione di funzioni
- Esercitazione in laboratorio: esercizi 1, 2, 3
- Materiale didattico per la lezione: capitoli 1 e 2 dispensa Scala
Mercoledì 7 ottobre 2015 (90 min)
Mercoledì 14 ottobre 2015 (90 min)
- Forma abbreviata funzioni anonime usando "_" come parametri
- Chiusure
- Funzioni senza parametri
- Differenza tra metodi e funzioni e conversione implicita ed esplicita da metodo a funzione
- Materiale didattico per la lezione: capitolo 2 dispensa Scala
Venerdì 16 ottobre 2015 (180 min)
- Liste immutabili in Scala: classe scala.List
- Letterali lista:
- letterale lista non vuota: List(e1, e2, ...) con e1, e2, ecc. elementi della lista
- letterale lista vuota: List() oppure Nil
- Metodi di prim'ordine:
- concatenazione di liste: ::: (es. l1:::l2)
- concatenazione elemento con lista: :: (es. 7::l)
- elemento di testa: head
- lista senza il primo elemento: tail
- lunghezza della lista: length
- predicato lista vuota: isEmpty
- intervallo di interi: List.range(a,b)==List(a, a+1, a+2, ..., b-1)
- lista partizionata in due sottosequenze di lunghezza n e n-length: splitAt(n)
- Metodi di ordine superiore: filter, map, reduce, forall, exists
- Prestazioni delle liste:
- condivisione di memoria
- accesso in testa in tempo O(1) e accesso in coda in tempo O(n), con n=lunghezza della lista
- Esempi:
- Fattoriale di un numero con range e reduce
- Algoritmo di ordinamento insertionSort
- Algoritmo di ordinamento mergeSort
- Esercitazione in laboratorio: esercizi 10, 11, 12, 13, 14, 15
- Materiale didattico per la lezione: capitolo 3 dispensa Scala
Mercoledì 21 ottobre 2015 (90 min)
- Pattern matching su costanti, variabili, variabili con condizione, e liste
- Materiale didattico per la lezione: capitolo 4 dispensa Scala
Venerdì 26 ottobre 2015 (180 min)
Mercoledì 28 ottobre 2015 (90 min)
- Presentazione piani di studio e modalità prova finale (prof. Massimo Mecella)
- Costruttore primario
- Costruttori ausiliari: this
- Parametri val, var e getter/setter automatici
- Convenzione di nomi uniforme per i getter e setter (getter e setter hanno lo stesso nome della variabile)
- Variabili di istanza private
- Ereditarietà
- Parola chiave extends
- Invocazione del costruttore della superclasse
- Pattern matching sui tipi come meccanismo sicuro per il downcasting
- Materiale didattico per la lezione: dispensa Scala
Venerdì 30 ottobre 2015 (180 min)
- Overriding di metodi e variabili
- Metodo apply
- Passaggio dei parametri per copia e per nome
- Esempio: metodo di profilazione dei tempi
- Esempio: estensione di Scala con un costrutto mywhile con la semantica del while imperativo usando ricorsione, espressioni Unit, e passaggio dei parametri per nome
- Sequenze
- espressione x to y (sequenza dei numeri da x a y)
- espressione x until y (sequenza dei numeri da x a y-1)
- Programmazione imperativa in Scala:
- Classe Array
- Costrutto while
- Costrutto for con generatori (es. for (i<-List.range(0,n))) println(i) stampa numeri da 0 a n-1)
- Esempi
- Materiale didattico per la lezione: dispensa Scala
- Esercitazione in laboratorio: esercizi 26, 27 e 28
Venerdì 6 novembre 2015 (180 min)
- Classi case
- Pattern matching sulle classi case
- Esempi
- Materiale didattico per la lezione: dispensa Scala
- Esercitazione in laboratorio: esercizio 29
Mercoledì 11 novembre 2015 (90 min)
- Metodi implicit
- import di spazi di nomi
- For comprehension: costrutto for ... yield con generatori, filtri, dichiarazioni di variabili
- Esempi
- Materiale didattico per la lezione: dispensa Scala
Venerdì 13 novembre 2015 (180 min)
- Gerarchia dei tipi in Scala
- Panoramica sulle collezioni Scala
- Casi di studio: Stream, Map
- Materiale didattico per la lezione: Documentazione Scala
- Esercitazione in laboratorio
Mercoledì 18 novembre 2015 (90 min)
- Introduzione alla programmazione parallela:
- Tassonomia di Flynn
- Parallelismo nell'hardware: instruction-level parallelism, multi-core, multi-processor, acceleratori, cluster, grid
- Parallelismo nel software: data e task parallelism
- Materiale didattico per la lezione:
Mercoledì 25 novembre 2015 (90 min)
Venerdì 27 novembre 2015 (180 min)
- Vettorizzazione SSE e AVX:
- registri XMM, YMM, ZMM e istruzioni SSE/AVX architettura x86-64
- tipi di dato vettoriali __m128, __m256, __m512 e intrinsic
- Materiale didattico per la lezione: dispensa parallelismo
- Esercitazione in laboratorio: prodotto di matrici vettorizzato
Mercoledì 2 dicembre 2015 (90 min)
- Allineamento dei dati AVX in memoria, istruzioni load e store
- Esercizi in classe ed esperimenti prestazionali sul prodotto di matrici
- Materiale didattico per la lezione: dispensa parallelismo
Venerdì 4 dicembre 2015 (180 min)
- Programmazione data parallel multi-threaded: pthread
- Esempi di programmazione data parallel: modifica degli elementi di un array in parallelo, filtri grafici su immagini (inversione, convoluzione)
- Esercitazione in laboratorio: prodotto di matrici con pthread
- Materiale didattico per la lezione:
Mercoledì 9 dicembre 2015 (90 min)
- Esercizi di preparazione all'esonero
Mercoledì 16 dicembre 2015 (90 min)
- Programmazione eterogenea in OpenCL
- Modello astratto di macchina OpenCL: host, device, compute unit, processing element, struttura della memoria (globale, locale, privata)
- Architettura generale di una GPU: streaming processor, core, registri, livelli di memoria
- Modello di programmazione: programma, kernel, work item, work group, piattaforma, buffer, code dei comandi, NDRange
- Materiale didattico per la lezione: NVidia OpenCL tutorial
Venerdì 18 dicembre 2015 (180 min)
Lunedì 21 dicembre 2015 (90 min)
- Esercizi su programmazione in OpenCL: elaborazione grafica di immagini (Esercizio 5)