Architetture avanzate (2018/2019)



Codice insegnamento
4S02910
Crediti
6
Coordinatore
Nicola Bombieri
Altri corsi di studio in cui è offerto
Altri corsi di studio in cui è offerto
    Settore disciplinare
    ING-INF/05 - SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI
    Lingua di erogazione
    Italiano
    L'insegnamento è organizzato come segue:
    Attività Crediti Periodo Docenti Orario
    Teoria 4 II semestre Nicola Bombieri

    Vai all'orario delle lezioni

    Laboratorio 2 II semestre Nicola Bombieri

    Vai all'orario delle lezioni

    Obiettivi formativi

    Il corso si propone di fornire le conoscenze teoriche e pratiche per la programmazione e l'analisi di architetture di calcolo avanzate con particolare enfasi alle piattaforme multiprocessore e GPU. Al termine del corso lo studente dovrà dimostrare di essere in grado di applicare le conoscenze necessarie per individuare tecniche di parallelizzazione di applicazioni software, anche in un contesto di ricerca, attraverso l'analisi dell'efficienza delle applicazioni considerando vincoli funzionali e non funzionali di progettazione (correttezza, performance, consumo energetico). Queste conoscenze consentiranno allo studente di effettuare un’analisi delle performance e profiling del codice, con individuazione delle zone critiche e relativa ottimizzazione considerando caratteristiche architetturali della piattaforma. Al termine del corso lo studente sarà in grado di confrontare pattern di parallelismo diversi e scegliere tra questi il più adeguato a seconda del contesto d'uso. In fase di definizione della struttura del codice ottimizzato, sarà in grado di fare le scelte progettuali più appropriate a seconda del contesto e piattaforma in cui l'applicazione parallela verrà usata. Inoltre, lo studente avrà le conoscenze necessarie per proseguire gli studi in modo autonomo nell’ambito dei linguaggi di programmazione paralleli e dello sviluppo di software per piattaforme embedded e/o parallele.

    Programma

    Modulo TEORIA (32 ore):
    -) Introduzione al parallelismo e alle architetture parallele.
    -) Progettazione di programmi per architetture parallele.
    -) Modelli di programmazione parallela.
    -) Misura e analisi delle prestazioni.
    -) Legge di Amdhal e metriche per la misura delle prestazioni.
    -) Pipeline: concetti base ed avanzati.
    -) Instruction-level parallelism (ILP).
    -) Tecniche avanzate di branch prediction, static scheduling e speculation.
    -) Gerarchie di memoria: concetti base ed avanzati.
    -) Tecniche avanzate per l'ottimizzazione delle performance della cache.
    -) Memoria virtuale.
    -) Thread-level parallelism (TLP).
    -) Coerenza della cache in architetture shared-memory.
    -) Protocolli Snoopy.
    -) General purpose Graphic Processing Unit (GP-GPU).
    -) Introduzione vincoli non funzionali: consumo di potenza ed efficienza energetica

    Modulo LABORATORIO (24 ore):
    -) Utilizzo di compilatori paralleli per architetture multiprocessore (OpenMP).
    -) Utilizzo di compilatori paralleli per architetture multicomputer (MPI).
    -) Programmazione GP-GPU: CUDA.

    Per seguire con profitto l'insegnamento è consigliabile che lo studente abbia già acquisito competenze in:
    *) Fondamenti di architettura degli elaboratori. In particolare, concetti base di: set di istruzioni, unità di elaborazione, gerarchia di memoria.
    *) Fondamenti di sistemi operativi. In particolare, concetti base di: processo e thread, virtualizzazione memoria.
    *) Fondamenti di programmazione. In particolare, concetti base di: programmazione C.

    Modalità d'esame

    Per superare l'esame lo studente dovrà dimostrare di:
    - aver compreso i principi alla base del funzionamento delle architetture parallele
    - essere in grado di esporre le proprie argomentazioni in modo preciso e organico senza divagazioni
    - saper applicare le conoscenze acquisite per risolvere problemi applicativi presentati sotto forma di esercizi, domande e progetti.

    L'esame consiste in una prova scritta, contenente domande a risposta multipla, domande a risposta aperta ed esercizi riguardanti sia la parte teorica che di laboratorio.

    Testi di riferimento
    Attività Autore Titolo Casa editrice Anno ISBN Note
    Teoria John Hennessy, David Patterson Computer Architecture - A Quantitative Approach (Edizione 6) Morgan Kaufmann 2018 9780128119051
    Teoria David E. Culler and Jaswinder Pal Singh Parallel Computer Architecture - A Hardware/Software Approach Morgan Kaufmann 1999
    Teoria David B. Kirk, Wen-mei W. Hwu Programming Massively Parallel Processors - A Hands-on Approach (Edizione 3) Morgan Kaufmann 2017 978-0-12-811986-0

    Opinione studenti frequentanti - 2017/2018