Diario delle lezioni
Questa pagina riporta l'elenco e i contenuti delle lezioni svolte in aula.
Nota: Gli esempi OpenCL distribuiti come codice su questa pagina sono predisposti per essere compilati su MacOS X. Per compilare in ambiente Linux cambiare nei Makefile -framework OpenCL in -lOpenCL.
Giovedì 28 settembre 2017 (130 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
Mercoledì 4 ottobre 2017 (90 min)
Mercoledì 11 ottobre 2017 (90 min)
- Forma abbreviata funzioni anonime usando "_" come parametri
- Esempio svolto: calcolo della radice quadrata con il metodo di Newton
- Metodi parzialmente applicati
- Liste immutabili in Scala: classe scala.List
- Consultazione della documentazione delle API stardard Scala
- 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:
- uguaglianza profonda di liste: ==
- concatenazione elemento con lista: :: (es. 7::Nil)
- 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)
- Metodi di ordine superiore: filter, map, reduce, exists
- Esempi: somma dei primi n numeri con range e reduce
- Materiale didattico per la lezione: capitolo 3 dispensa Scala
Giovedì 12 ottobre 2017 (130 min)
- Metodi generici
- cenni a bound sui tipi generici: [T <% Ordered[T]] per assumere ordinamento totale su T
- Metodi su liste:
- concatenazione di liste: ::: (es. l1:::l2)
- metodi drop, take, splitAt
- Esempi su liste:
- Algoritmo di ordinamento mergeSort
- Algoritmo di ordinamento quickSort
- Pattern matching su costanti, variabili, variabili con condizione, e liste
- For comprehension: costrutto for ... yield con generatori, filtri, dichiarazioni di variabili
- Materiale didattico per la lezione: capitolo 3 e capitolo 4 dispensa Scala
Mercoledì 18 ottobre 2017 (90 min)
- Definizione di classi
- Classi object e nozione di companion object
- Costruttore primario
- Parametri val e getter automatici
- Convenzione di nomi uniforme per i getter (getter hanno lo stesso nome della variabile)
- Variabili di istanza private
- Ereditarietà
- Parola chiave extends
- Invocazione del costruttore della superclasse
- Overriding di metodi e variabili
- Pattern matching sui tipi come meccanismo sicuro per il downcasting
- Classi case
- Uguaglianza profonda e superficiale: metodi equals e ==
- Conversioni di tipo (cast): toString, toInt, toList, ecc.
Giovedì 19 ottobre 2017 (130 min)
- Classi:
- Accesso ai parametri passati a un programma (args in main)
- Uguaglianza superficiale con eq
- Accesso ai metodi della superclasse: super
- Metodi implicit e conversione implicita di nomi
- import di spazi di nomi
- Passaggio dei parametri per nome: =>
- Passaggio di un numero di parametri variabile T*
- Esercizi d'esame svolti
- Materiale didattico per la lezione: capitolo 5 dispensa Scala
- Codice visto a lezione
Mercoledì 25 ottobre 2017 (90 min)
Giovedì 26 ottobre 2017 (130 min)
- Programmazione imperativa in Scala:
- Classe Array
- Variabili var
- Costrutto while
- Metodo update
- Esercizi d'esame svolti
- Materiale didattico per la lezione: capitolo 7 dispensa Scala
Giovedì 2 novembre 2017 (130 min)
- Metodi su collezioni per maggiore produttività utili per l'esonero: groupBy, sliding, flatten, splitAt.
- Esercizi d'esame svolti
- Codice visto a lezione
Mercoledì 8 novembre 2017 (90 min)
- Esercizi per la preparazione all'esonero
Mercoledì 15 novembre 2017 (90 min)
- Introduzione alla programmazione parallela:
- Parallelismo nell'hardware: instruction-level parallelism (pipelining, vettorizzazione), multi-core, multi-processor, cluster, grid
- Parallelismo nel software: data e task parallelism
- Legge di Amdahl per sistemi paralleli: work e span
- Materiale didattico per la lezione:
Mercoledì 22 novembre 2017 (60 min)
- Tassonomia di Flynn: SISD, SIMD, MISD, MIMD
- 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
- Codice visto a lezione | File zip
Giovedì 23 novembre 2017 (130 min)
- Allineamento dei dati AVX in memoria, istruzioni loadu, storeu, posix_memalign, direttiva gcc __attribute__(aligned(...))
- Esercizi in classe ed esperimenti prestazionali su vettorizzazione:
- somma vettoriale di array: impatto della gerarchia di memoria
- somma degli elementi di un array
- prodotto scalare di array
- soluzione esercizio 2 compito A del 14 gennaio 2016 (funzione decode)
- Materiale didattico per la lezione: dispensa parallelismo
- Codice visto a lezione | File zip
Mercoledì 29 novembre 2017 (60 min)
- Caso di studio: prodotto di matrici mediante vettorizzazione e pthread
- Esercizi svolti su vettorizzazione: funzione inrange che verifica se tutti gli elementi di un array sono in un certo intervallo min,max
- Codice visto a lezione in file zip
Giovedì 30 novembre 2017 (130 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: Slide su programmazione OpenCL (in inglese)
Mercoledì 6 dicembre 2017 (60 min)
- NDRange: global vs. local size
- Arrotondamento global size al più piccolo multiplo della local size maggiore o uguale al numero di work-item richiesti
- Rappresentazione row-major di matrici e NDRange a due dimensioni
- Materiale didattico per la lezione: Slide su programmazione OpenCL (in inglese)
Giovedì 7 dicembre 2017 (130 min)
- Rappresentazione di immagini monocromatiche nel formato PGM
- Esercizi svolti OpenCL
- Soluzione esercizio mirror, compito di esame B del 10/2/2016
- Codice visto a lezione | File zip
Giovedì 14 dicembre 2017 (130 min)
Mercoledì 20 dicembre 2017 (60 min)
Giovedì 21 dicembre 2017 (130 min)
- Foto di gruppo alle 13:20 al chiostro della sede di Via Eudossiana
- Esercizi svolti vettorizzazione e OpenCL
[
A.A. 2015-2016]