Diario delle lezioni
Questa pagina riporta l’elenco e i contenuti delle lezioni svolte in aula.
Mercoledì 26 settembre 2018 (180 min)
- Panoramica del corso e introduzione a Scala
- Interpretazione interattiva, interpretazione di script, compilazione ed esecuzione
- Elementi di base del linguaggio Scala:
- Tipi Primitivi
- Letterali
- Commenti
- Identificatori
- Variabili immutabili: val
- Inferenza di tipo
- Definizione e invocazione di funzioni
- Tuple
- Funzioni senza parametri
- Funzioni di ordine superiore
- Materiale didattico per la lezione: capitoli 1 e 2 dispensa Scala
Giovedì 27 settembre 2018 (180 min)
- Funzioni
- Funzioni anonime (funzioni “lambda”)
- Chiusure
- Funzioni annidate
- Forma abbreviata funzioni anonime usando “_” come parametri
- Conversione automatica e manuale da metodo a funzione
- Materiale didattico per la lezione:
Giovedì 4 ottobre 2018 (180 min)
- Liste (classe List)
- 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, permutations, List.range
- metodi di ordine superiore: filter, map, reduce, exists, forall, foreach, zip, slice, sliding, partition
- costo operazioni sulle liste: operazioni costanti e di costo lineare
- esempi: fattoriale con reduce, algoritmo mergesort
- Materiale didattico per la lezione:
Martedì 9 ottobre 2018 (120 min) - Laboratorio
Giovedì 11 ottobre 2018 (180 min)
- Differenza tra costrutti
if
e if ... else
- Risoluzione esercizio 5 dell’esercitazione del 9 ottobre 2018
- Esempio: prodotto cartesiano di insiemi
- Metodo
flatten
- For comprehension (
for ... yield
): generatori, dichiarazioni, filtri
- Currificazione di funzioni e funzioni parzialmente applicate
- Metodi parzialmente applicati
- Esempio: algoritmo quicksort con comparatore definito dall’utente
- Funzioni con tipi generici
- Materiale didattico per la lezione:
- Esercizi del giorno: 1-18 della collezione di esercizi
Martedì 16 ottobre 2018 (120 min)
- Pattern matching, costrutto
match ... case
:
- Matching su costanti
- Matching multiplo su costanti
- Matching su variabili
- Matching su variabili con condizione
- Matching su liste
- Matching su tuple
- Materiale didattico per la lezione:
- Esercizi del giorno: rivisitare esercizi 1-18 della collezione di esercizi utilizzando pattern matching
Giovedì 18 ottobre 2018 (180 min)
- Risoluzione esercizio 18 della collezione di esercizi Scala
- Classi
- Definizione di classi e costruttore primario
- Creazione di oggetti con new
- Ereditarietà
- Overriding
- Invocazione metodo superclasse
- Costruttori ausiliari
- Classi object
- Metodi getter automatici
- Materiale didattico per la lezione:
Martedì 23 ottobre 2018 (120 min)
- Classi
case
- Classi
abstract
e sealed
- Pattern matching su classi
case
- esempi: classe
Point
, alberi binari
- Risoluzione esercizio 17 della collezione di esercizi
- Materiale didattico per la lezione:
Giovedì 25 ottobre 2018 (180 min)
- Metodo
apply
in object
e class
- Passaggio dei parametri per nome:
=>T
- esempio: metodo
ifElse
, metodo ripeti
- Metodi
implicit
- esempio: aggiunta metodo somma su
Int
, aggiunta metodo myFilter
su List
- Materiale didattico per la lezione:
Martedì 6 novembre 2018 (120 min)
Giovedì 8 novembre 2018 (180 min)
- 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 (cenni a quelle mutabili), implementazione di default di un trait
- Mappe (
Map
)
- Equivalenza di
x->y
e (x,y)
- Metodo
groupBy
- Metodo
find
, classe Option[T]
e sottoclassi Some[T]
e None
, metodo getOrElse
- Inizializzazione pigra: keyword
lazy
(cenni)
- Collezioni
Stream
, operatore #::
, stream vuoto Stream.empty
- esempi di stream finiti e infiniti, numeri naturali, successione di Fibonacci
- Bound sui tipi generici: upper bound
<:
(cenni), convertibilità implicita <%
e tipo generico vincolato [T<%Ordered[T]]
per garantire che T
sia dotato di metodi per gli operatori relazionali <
, <=
, >
, >=
- Eccezioni: costrutto
try ... catch
(cenni)
- Panoramica sugli esercizi 23, 24, 25, 26 della collezione di esercizi del giorno
- Materiale didattico per la lezione:
- Esercizi del giorno: esercizi 31, 32, 33 e 34 della collezione di esercizi
Martedì 13 novembre 2018 (120 min)
Giovedì 15 novembre 2018 (180 min)
- Risoluzione esercizi (Luca Borzacchiello):
- 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
- Collezioni parallele:
ParVector
e metodo par
delle collezioni
- Modello fork-join in Scala
- Costrutto
par
per esecuzione parallela di codice
- Esperimento di race condition su risorse condivise
- Materiale didattico per la lezione:
Martedì 20 novembre 2018 (120 min)
Giovedì 22 novembre 2018 (180 min)
- Pipelining nelle CPU come esempio di parallelismo a livello di istruzione (ILP)
- Differenza tra concorrenza e parallelismo
- Work, span e speedup
- Computazioni CPU-intensive (possibilmente parallelizzabili) e memory-intensive (difficilmente parallelizzabili)
- Esempio dei metodi
map
e count
su collezioni parallele
- Estensione del costrutto
par
per catturare i valori delle espressioni valutate in parallelo
- Esercizi su alberi binari:
- costruzione di alberi binari completi
- metodo
count
su alberi binari
- Esempio di codice parallelo usando
par
:
- metodo
countPar
su alberi binari
- Materiale didattico per la lezione:
- Esercizi del giorno: esercizio 36 della collezione di esercizi
Martedì 27 novembre 2018 (120 min)
- 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
- Materiale didattico per la lezione:
Giovedì 29 novembre 2018 (180 min)
- Esempi di programmazione SSE/AVX
- Modello di programmazione OpenCL:
- modello eterogeneo: host e device
- modello di memoria device
- piattaforma, contesto, coda dei comandi, programma, kernel, NDRange, buffer, copia da memoria host a device e viceversa
- Materiale didattico per la lezione:
Martedì 4 dicembre 2018 (120 min)
Giovedì 6 dicembre 2018 (180 min)
- Esempi di programmazione SSE/AVX
- Programmazione OpenCL:
- work item (thread) vs. compute element (core), work group vs. compute unit, kernel instance vs. compute device
- ND-range monodimensionale e bidimensionale
- esempi: clut, devinfo, hello, vecsum, darken
- Materiale didattico per la lezione:
Martedì 11 dicembre 2018 (120 min)
Giovedì 13 dicembre 2018 (180 min)
- Esempi di programmazione OpenCL + foto di fine anno
- Materiale didattico per la lezione:
Martedì 18 dicembre 2018 (120 min)
Giovedì 20 dicembre 2018 (120 min)
- Discussione delle soluzioni degli esercizi dell’esercitazione 7
- Premiazione dei classificati nella top 10
- Auguri di buone feste
- Materiale didattico per la lezione:
[
A.A. 2015-2016 |
A.A. 2017-2018
]