Diario delle lezioni
Questa pagina riporta l’elenco preliminare delle lezioni/esercitazioni e degli argomenti trattati. Verranno mano aggiunti i video delle lezioni e materiale aggiuntivo. Le lezioni si terranno presso l’aula 204 dell’edificio Marco Polo. Le lezioni presso il laboratorio di via Tiburtina, aule 15 e 16.
Importante. A causa della didattica frontale sospesa per il Coronavirus, le lezioni vengono tenute live su Google Meet all’indirizzo meet.google.com/sph-eiax-fsv agli orari stabiliti per il corso, accedendo con la mail istituzionale uniroma1.it dello studente.
Lunedì 24 febbraio (120 min) - Lezione 1
- Presentazione del corso,
- Panoramica del corso e introduzione a Scala
- Interpretazione interattiva, interpretazione di script, compilazione ed esecuzione
- Elementi di base del linguaggio Scala:
- Tipi Primitivi
- Letterali
- Tuple
- Commenti
- Identificatori
- Variabili immutabili: val
- Inferenza di tipo
- Definizione e invocazione di metodi
- Metodi ricorsivi: fattoriale, somma dei primi n numeri
- Materiale didattico:
Mercoledì 26 febbraio (180 min) - Lezione 2
- Funzioni senza parametri
- Funzioni di ordine superiore
- Funzioni anonime (“lambda”)
- Chiusure
- Funzioni annidate
- Forma abbreviata funzioni anonime usando “_” come parametri
- Conversione automatica e manuale da metodo a funzione
- Materiale didattico:
Lunedì 2 marzo (120 min) - Esercitazione 1
Esercitazione su tipi, variabili e funzioni Scala
Mercoledì 4 marzo (180 min) - Lezione 3
- Costruttore lista
- Lista vuota List() o Nil
- Uguaglianza profonda (==, equals) e superficiale (eq)
- Metodi base: head, tail, :: (aggiunta in testa), :+ (aggiunta in coda), ::: (concatenazione liste), length or size, isEmpty, take, drop, splitAt, reverse, List.range
- Metodi di ordine superiore: filter, map, reduce, exists, forall, sliding, zipWithIndex, flatten
- Costo operazioni sulle liste: operazioni costanti e di costo lineare
- Esempi: algoritmi mergesort e quicksort
- Materiale didattico:
Lunedì 9 marzo (120 min) - Lezione 4 (in streaming)
- Metodi to e until sugli interi
- Metodi con tipi generici
- Esercizi con reduce: fattoriale, myFlatten
- Altri metodi sulle liste: permutations, foreach, zip, slice, partition
- Materiale didattico:
Mercoledì 11 marzo (180 min) - Lezione 5 (in streaming)
- For comprehension (for … yield): generatori, dichiarazioni, filtri
- Esercizi con map e for … yield: prodotto cartesiano di insiemi
- Currificazione di funzioni e funzioni parzialmente applicate
- Metodi parzialmente applicati
- Esempio: algoritmo quicksort con comparatore definito dall’utente
- Pattern matching, costrutto match … case:
- Metodo groupBy
- Matching su costanti, multiplo su costanti, su variabili, su variabili con condizione, su liste, su tuple
- Materiale didattico:
Lunedì 16 marzo (120 min) - Esercitazione 2 (da remoto, assistenza docente in streaming)
Esercitazione su metodi generici, metodi predefiniti su liste e pattern matching
Mercoledì 18 marzo (180 min) - Lezione 6 (in streaming)
- Definizione di classi e costruttore primario
- Creazione di oggetti con new
- Ereditarietà
- Overriding
- Invocazione metodo superclasse e altro costruttore
- Costruttori ausiliari
- Classi statiche (object)
- Metodi getter automatici
- Classi case
- Classi abstract e sealed
- Pattern matching su classi case
- esempi: classe Point, alberi binari
- Metodo apply in object e class
- Materiale didattico:
Lunedì 23 marzo (120 min) - Esercitazione 3 (da remoto, assistenza docente in streaming)
Esercitazione su classi e argomenti precedenti
Lunedì 30 marzo (120 min) - Lezione 7 (in streaming)
- Esempio uso classi case: esempio della classe Exp
- Passaggio dei parametri per nome: =>T
- Metodi implicit
- esempi: aggiunta metodo somma su Int, aggiunta metodi mioZip e mioFilter su List
- Materiale didattico:
Mercoledì 1 aprile (180 min) - Lezione 8 (in streaming)
- Bound sui tipi generici: upper bound <: (cenni), convertibilità implicita <% su tipo generico vincolato [T<%Ordered[T]] (deprecata) e variante (implicit cmp:T=>Int) per garantire che T sia dotato di metodi per gli operatori relazionali <, <=, >, >=
- Gerarchia delle classi Scala: Any, AnyVal, AnyRef, Null e Nothing, covarianza Liste
- Cenni a differenza tra classi concrete, classi astratte, e trait (interfacce)
- Collezioni immutabili in Scala (cenni a quelle mutabili), implementazione di default di un trait
- Mappe (Map)
- Equivalenza di x->y e (x,y)
- Metodo find, classe Option[T] e sottoclassi Some[T] e None, metodo getOrElse
- Inizializzazione pigra: keyword lazy (cenni)
- Collezioni LazyList (stream), operatore #::, stream vuoto LazyList.empty
- Esempi di stream finiti e infiniti, numeri naturali, successione di Fibonacci
- Eccezioni: costrutto try … catch (cenni)
-Esercizi visti in classe: ricerca binaria, elemento più frequente con frequenza, costrutto profila per misurare il tempo di esecuzione di una espressione Scala, funzione myReduce
- Materiale didattico:
Lunedì 6 aprile (120 min) - (da remoto, assistenza docente in streaming)
Esercitazione su metodi sulle collezioni, conversioni implicite, passaggio per nome
Mercoledì 15 aprile (180 min) - Lezione 9 (in streaming)
- Risoluzione esercizi esercitazione 4
- Architetture parallele: IPL (instruction-level parallelism, vettorizzazione), core multipli, macchine multi-processore, server rack, data center
- Uso del comando htop per monitorare l’uso dei core della CPU
- Paradigma fork-join in Scala
- Costrutto par per valutatre espressioni in parallelo
- Estensione del costrutto par per catturare i valori delle espressioni valutate in parallelo
- Work, span e speedup
- legge di Amdahl
- Materiale didattico:
Lunedì 20 aprile (120 min) - Esercitazione 5 (da remoto, assistenza docente in streaming)
Esercitazione sul paralellismo in Scala
Mercoledì 22 aprile (180 min) - Lezione 10 (in streaming)
- Tassonomia di Flynn
- Collezioni parallele: ParVector e metodo par delle collezioni (cenni)
- Differenza tra concorrenza e parallelismo
- Esperimento di race condition su risorse condivise
- Computazioni CPU-intensive (possibilmente parallelizzabili) e memory-intensive (difficilmente parallelizzabili)
- Vettorizzazione SSE/AVX nei processori x86/x64
- registri xmm (128 bit, SSE), ymm (256 bit, AVX), zmm (512 bit, AVX-512)
- istruzioni macchina vettoriali: esempio paddd
- programmazione vettoriale in C usando compiler intrinsics: esempio __m128i, _mm_add_epi32
- somma di array di dimensioni arbitrarie con SSE e AVX2
- Materiale didattico:
Lunedì 27 aprile (120 min) - Lezione 11 (in streaming)
- Esercizi svolti in classe su vettorizzazione: arraysum, dotprod, cdiff, inrange
- Materiale didattico:
Lunedì 4 maggio (180 min) - Esercitazione 6 (da remoto, assistenza docente in streaming)
Esercitazione su vettorizzazione
Mercoledì 6 maggio (180 min) - Lezione 12 (in streaming)
- Soluzione esercizi vettorizzazione della precedente esercitazione
- Modello di programmazione OpenCL:
- modello eterogeneo: host e device
- work item (thread) vs. compute element (core), work group vs. compute unit, kernel instance vs. compute device
- piattaforma, contesto, coda dei comandi, programma, kernel, NDRange, buffer, copia da memoria host a device e viceversa
- esempio calcolo quadrato degli elementi di un array
- Materiale didattico:
Lunedì 11 maggio (120 min) - Lezione 13 (in streaming)
- Programmazione OpenCL:
- modello di memoria device
- ND-range monodimensionale e bidimensionale, allineamento per eccesso a multiplo della local size
- libreria clut
- esempi OpenCL: vecsum, darken, devinfo, poster, palind (solo impostato e non realizzato)
- Materiale didattico:
Mercoledì 13 maggio (180 min) - Esercitazione 7 (da remoto, assistenza docente in streaming)
Esercitazione su Scala (alberi binari), OpenCL (filtri grafici) e domande vero/falso sugli argomenti del corso
Lunedì 18 maggio (120 min) - Lezione 14 (in streaming)
Correzione esercitazione del 13 maggio 2018
Mercoledì 20 maggio (180 min) - Esercitazione 8 (da remoto, assistenza docente in streaming)
Esercitazione complessiva a quiz sul corso
Lunedì 25 maggio (120 min) - Lezione 15 (in streaming)
Correzione esercitazione del 13 maggio 2018
[
A.A. 2015-2016 |
A.A. 2017-2018 |
A.A. 2018-2019
]