Diario delle lezioni
Questa pagina riporta l’elenco preliminare delle lezioni/esercitazioni e degli argomenti trattati. Verranno mano 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.
Mercoledì 29 settembre 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, funzioni di ordine superiore
- Tipi Primitivi
- Letterali
- Commenti
- Identificatori
- Variabili immutabili: val
- Inferenza di tipo
- Definizione e invocazione di metodi
- Metodi ricorsivi: fattoriale, somma dei primi n numeri
- Materiale didattico:
Giovedì 30 settembre 2021 (180 min) - Lezione 2
- Tuple
- Metodi senza parametri
- Metodi di ordine superiore
- Funzioni anonime (“lambda”)
- Chiusure
- Metodi annidati
- Forma abbreviata funzioni anonime usando “_” come parametri
- Conversione automatica e manuale da metodo a funzione
- Materiale didattico:
Mercoledì 6 ottobre 2021 (120 min) - Esercitazione 1
Esercitazione su tipi, variabili e metodi/funzioni Scala
Giovedì 7 ottobre 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: count, filter, map, reduce, exists, forall, foreach, foldLeft, groupBy, minBy, maxBy
- Costo operazioni sulle liste: operazioni costanti e di costo lineare
- Materiale didattico:
Mercoledì 13 ottobre 2021 (120 min) - Lezione 4
- Metodi con tipi generici
- Esercizi svolti in classe, fra cui mergesort e quicksort
- Materiale didattico:
Giovedì 14 ottobre 2021 (180 min) - Lezione 5
- Algoritmo quicksort con comparatore definito dall’utente
- Ordinamento per inserimento (insertionSort)
- For comprehension (for … yield): generatori, filtri
- Esercizi con map e for … yield: prodotto cartesiano di insiemi
- Pattern matching, costrutto match … case:
- Matching su costanti, multiplo su costanti, su variabili, su variabili con condizione, su liste
- Materiale didattico:
Mercoledì 27 ottobre 2021 (120 min) - Esercitazione 2
- 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
- Materiale didattico:
Giovedì 28 ottobre 2021 (180 min) - Lezione 6
- Classi abstract e sealed
- Pattern matching su classi case
- esempi: classe Point, alberi binari
- Metodo apply in object e class
- Passaggio dei parametri per nome: =>T
- Materiale didattico:
Mercoledì 3 novembre 2021 (120 min) - Esercitazione 3
Esercitazione su metodi generici, metodi predefiniti su liste e pattern matching
Giovedì 4 novembre 2021 (180 min) - Lezione 7
- Esempio uso classi case: esempio della classe Exp
- Metodi implicit
- esempi: aggiunta metodo somma su Int, aggiunta metodi su List
- 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
- Materiale didattico:
Mercoledì 10 novembre 2021 (120 min) - Esercitazione 4
Esercitazione su classi e argomenti precedenti
Giovedì 11 novembre 2021 (180 min) - Lezione 8
- Metodo find, classe Option[T] e sottoclassi Some[T] e None, metodo getOrElse
- Inizializzazione pigra: keyword lazy (cenni)
- Eccezioni: costrutto try … catch (cenni)
- Materiale didattico:
Giovedì 18 novembre 2021 (180 min) - Lezione 9
- Collezioni LazyList (stream), operatore #::, stream vuoto LazyList.empty
- Esempi di stream finiti e infiniti, numeri naturali, successione di Fibonacci
- 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
- Architetture parallele: IPL (instruction-level parallelism, vettorizzazione), core multipli, macchine multi-processore, server rack, data center
- Work, span e speedup
- Legge di Amdahl
- 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
- Materiale didattico:
Mercoledì 24 novembre 2021 (120 min) - Esercitazione 5
Esercitazione su metodi sulle collezioni, conversioni implicite, passaggio per nome
Mercoledì 1 dicembre 2021 (120 min) - Esercitazione 6
Esercitazione sul paralellismo in Scala ed esercizi riepilogativi in Scala
Giovedì 2 dicembre 2021 (180 min) - Lezione 10
- Tassonomia di Flynn
- 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)
- 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
- Materiale didattico:
Giovedì 9 dicembre 2021 (180 min) - Lezione 11
- Esercizi svolti in classe su vettorizzazione: arraysum, dotprod, cdiff
- Materiale didattico:
Mercoledì 15 dicembre (120 min) - Esercitazione 7
Esercitazione su vettorizzazione
Giovedì 16 dicembre 2021 (180 min) - Lezione 12
- 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
- Programmazione OpenCL:
- ND-range monodimensionale e bidimensionale, allineamento per eccesso a multiplo della local size
- libreria clut
- esempi: calcolo quadrato degli elementi di un array e somma di vettori
- Materiale didattico:
Mercoledì 22 dicembre 2021 (120 min) - Lezione 13
- Rappresentazione row-major di matrici
- Matrici che rappresentano immagini a toni di grigio
- Esempi OpenCL: darken, poster
- Esempio vettorizzazione: inrange
- Materiale didattico:
[
A.A. 2015-2016 |
A.A. 2017-2018 |
A.A. 2018-2019 |
A.A. 2019-2020 |
A.A. 2020-2021
]