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.
Importante. A causa dell’emergenza Coronavirus è possibile seguire le lezioni live su Zoom all’indirizzo https://uniroma1.zoom.us/my/camil.demetrescu agli orari stabiliti per il corso.
Lunedì 22 febbraio 2021 (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:
- Funzioni pure, trasparenza referenziale, funzioni di primo ordine
- 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ì 24 febbraio 2021 (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ì 1 marzo 2021 (120 min) - Esercitazione 1
Esercitazione su tipi, variabili e funzioni Scala
Mercoledì 4 marzo 2021 (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 o size, isEmpty, take, drop, splitAt, reverse, List.range, zip, zipWithIndex, slice, sliding, flatten
- Metodi di ordine superiore: filter, map, reduce, exists, forall, foreach
- Metodi con tipi generici
- Costo operazioni sulle liste: operazioni costanti e di costo lineare
- Materiale didattico:
Lunedì 8 marzo 2021 (120 min) - Lezione 4
- Esercizi svolti in classe, fra cui mergesort e quicksort
- Materiale didattico:
Mercoledì 10 marzo 2021 (180 min) - Lezione 5
- Funzioni reduce e foldLeft
- Esercizi con reduce: fattoriale, myFlatten
- Metodi to e until sugli interi
- For comprehension (for … yield): generatori, 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
- Materiale didattico:
Lunedì 15 marzo 2021 (120 min) - Esercitazione 2
Esercitazione su metodi generici, metodi predefiniti su liste e pattern matching
Mercoledì 17 marzo 2021 (180 min) - Lezione 6
- 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ì 22 marzo 2021 (120 min) - Esercitazione 3
Esercitazione su classi e argomenti precedenti
Lunedì 29 marzo 2021 (120 min) - Lezione 7
- 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ì 31 marzo 2021 (180 min) - Lezione 8
- Bound sui tipi generici: upper bound <: (cenni), convertibilità implicita <% su tipo generico vincolato [T<%Ordered[T]] (deprecata) e variante (implicit cmp:T=>Ordered[T]) per garantire che T sia dotato di metodi per gli operatori relazionali <, <=, >, >=
- Gerarchia delle classi Scala: Any, AnyVal, AnyRef, Null e Nothing
- Cenni a differenza tra classi concrete, classi astratte, e trait (interfacce)
- Collezioni immutabili in Scala, implementazione di default di un trait
- Mappe (Map)
- Metodo find, classe Option[T] e sottoclassi Some[T] e None, metodo getOrElse
- Inizializzazione pigra: keyword lazy (cenni)
- Materiale didattico:
Mercoledì 7 aprile 2021 (180 min) - Lezione 9
- Gerarchia delle collezioni mutabili (cenni)
- Covarianza Liste (cenni)
- Equivalenza di x->y e (x,y)
- 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, altri esercizi
- Risoluzione esercizi di alcune esercitazioni precedenti
- Materiale didattico:
Lunedì 12 aprile 2021 (120 min) - Esercitazione 4
Esercitazione su metodi sulle collezioni, conversioni implicite, passaggio per nome
Lunedì 19 aprile 2021 (120 min) - Esercitazione 5
Esercitazione su metodi sulle collezioni, alberi, conversioni implicite
Mercoledì 21 aprile 2021 (180 min) - Lezione 10
- Architetture parallele: IPL (instruction-level parallelism, vettorizzazione), core multipli, macchine multi-processore, server rack, data center
- Tassonomia di Flynn
- Work, span e speedup
- Legge di Amdahl
- Collezioni parallele: metodo par delle collezioni (cenni)
- Esperimento di race condition su risorse condivise
- 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
- Risoluzione esercizi esercitazione 5
- Materiale didattico:
Lunedì 26 aprile 2021 (120 min) - Esercitazione 6
Esercitazione sul paralellismo in Scala ed esercizi riepilogativi in Scala
Mercoledì 28 aprile 2021 (180 min) - Lezione 11
- 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ì 3 maggio 2021 (120 min) - Lezione 12
- Esercizi svolti in classe su vettorizzazione: dotprod, cdiff, inrange (parte I)
- Materiale didattico:
Mercoledì 5 maggio (180 min) - Lezione 13
- Esercizi svolti in classe su vettorizzazione: inrange (parte II)
- Uso del comando htop per monitorare l’uso dei core della CPU
- Modello di programmazione OpenCL:
- modello eterogeneo: host e device
- work item (thread) vs. processing 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
- modello di memoria device
- Materiale didattico:
Lunedì 10 maggio (120 min) - Esercitazione 7
Esercitazione su vettorizzazione
Mercoledì 12 maggio (180 min) - Lezione 14
- Programmazione OpenCL:
- ND-range monodimensionale e bidimensionale, allineamento per eccesso a multiplo della local size
- libreria clut
- esempio calcolo quadrato degli elementi di un array
- esempi OpenCL: vecsum, darken
- Materiale didattico:
Lunedì 17 maggio (180 min) - Esercitazione 8
Esercitazione su Scala (alberi binari), OpenCL (filtri grafici) e domande vero/falso sugli argomenti del corso
Mercoledì 19 maggio (120 min) - Lezione 15
- Esempi OpenCL: devinfo, poster, palind
- Materiale didattico:
Lunedì 24 maggio (180 min) - Esercitazione 9
Esercitazione complessiva a quiz sul corso
[
A.A. 2015-2016 |
A.A. 2017-2018 |
A.A. 2018-2019 |
A.A. 2019-2020
]