ARCHITETTURA DEGLI ELABORATORI E LABORATORIO
Anno accademico e docente
Non hai trovato la Scheda dell'insegnamento riferita a un anno accademico precedente?
Ecco come fare >>
- English course description
- Anno accademico
- 2022/2023
- Docente
- DAVIDE BERTOZZI
- Crediti formativi
- 10
- Periodo didattico
- Secondo Semestre
- SSD
- INF/01
Obiettivi formativi
- L'obiettivo formativo primario del corso è la comprensione da parte dello studente di quali siano gli elementi fondamentali dell'architettura di un sistema di calcolo moderno e di come la progettazione di tali elementi possa influire sulle prestazioni del sistema.
Le principali conoscenze acquisite dallo studente al termine del corso verteranno sull'interfaccia hardware/software di un generico calcolatore, e includeranno più nello specifico:
* Rappresentazione binaria delle informazioni (istruzioni e dati)
* Aritmetica dell'elaboratore (aritmetica per numeri naturali, interi e aritmetica in virgola mobile)
* Logica combinatoria e logica sequenziale
* Macchina di von Neumann
* Instruction Set Architecture e linguaggio Assembler
* Elementi di progettazione microarchitetturale (control path e data path)
* Tecniche di ottimizzazione della performance nelle architetture dei microprocessori
* Gerarchia di memoria e memoria virtuale
Per illustrare i concetti sopra citati viene usato l'Instruction Set Architecture del processore MIPS.
Le principali abilità acquisite dallo studente al termine del corso saranno:
* Convertire numeri interi o in virgola mobile tra basi diverse
* Rappresentare numeri e caratteri nei formati binari più diffusi
* Programmare in linguaggio assembler (Instruction Set Architecture del MIPS)
* Sintetizzare semplici funzioni combinatorie
* Sintetizzare semplici macchine a stati finiti
* Utilizzare moduli combinatori standard (in particolare quelli aritmetici) per costruire architetture di elaboratori
* Comprendere benefici e limiti di una architettura di von Neumann
* Comprendere l'allocazione dei dati in memoria secondo i principi dell'allineamento naturale
* Progettare il datapath e il control path di una semplice microarchitettura a singolo ciclo
* Ottimizzare la performance di una microarchitettura tramite tecniche avanzate quali il pipelining, l'utilizzo di execution path multipli o lo scheduling delle istruzioni
* Riconoscere la presenza di hazard dati in frammenti di codice Assembler
* Comprendere i meccanismi predittivi dei moderni microprocessori per l'ottimizzazione della performance in presenza di salti condizionali.
* Analizzare il comportamento di frammenti di codice C o Assembler sul datapath di una microarchitettura.
* Valutare il rapporto costo-benefici per diverse architetture di cache
* Valutazione dell'overhead nella gestione della memoria virtuale Prerequisiti
- Per poter seguire il corso in modo proficuo sono richieste le seguenti abilità:
* Dimestichezza con l'aritmetica elementare;
* Programmazione di base nel linguaggio C. Contenuti del corso
- - Introduzione sui diversi ambiti dell'elaborazione digitale, e trend futuri.
- Rappresentazione binaria delle informazioni.
- Operatori logici fondamentali e porte logiche
- Algebra di Boole
- Logica combinatoria e logica sequenziale
- Sintesi con il metodo delle mappe di Karnaugh
- Componenti combinatori standard
- Componenti per l'aritmetica binaria
- Unità aritmetico-logica e moltiplicatori
- Modello della Macchina di von Neumann
- Instruction Set Architecture del processore MIPS
- Linguaggio Assembler per MIPS e relativa attività di laboratorio
- Gestione delle chiamate a procedura
- Allineamento dei dati in memoria ed Endianess del processore
- Aritmetica degli elaboratori per numeri interi.
- Aritmetica degli elaboratori per numeri in virgola mobile secondo lo standard IEEE 754.
- Elementi di progettazione del datapath di una microarchitettura.
- Mapping delle istruzioni assembler sul datapath.
- Realizzazione dell'unità di controllo
- Tecnica di ottimizzazione della performance: pipelining.
- Hazard dati: definizione, riconoscimento, soluzioni.
- Forwarding units e hazard detection units.
- Hazard di controllo e tecniche per la loro gestione
- Tecniche statiche per la predizione della direzione dei branch.
- Tecniche dinamiche e ibride per la predizione della direzione dei branch.
- Architetture con scheduling in-ordine delle istruzioni
- Reorder Buffer e renaming dei registri
- Gestione precisa delle eccezioni
- Cenni sulle architetture con scheduling fuori ordine delle istruzioni.
- Gerarchia della memoria: la memoria cache, la memoria scratchpad.
- Architetture di cache: direct mapping e associatività
- Memoria virtuale. Metodi didattici
- Il corso è organizzato nel seguente modo:
- Lezioni frontali in aula su tutti gli argomenti del corso, per circa il 60% del monte-ore complessivo. La metodologia didattica è basata sulla proiezione di slide che verranno rese disponibili per il download almeno la sera prima del giorno della lezione.
- Esercitazioni guidate nel laboratorio di informatica, con un triplice scopo:
(a) sviluppare la capacità di sviluppo algoritmico degli studenti, tramite l'assegnazione di specifiche di ingresso e requisiti di elaborazione che lo studente dovrà tradurre negli step di un algoritmo funzionale alla risoluzione di un problema.
(b) sviluppare la capacità di codificare algoritmi mediante uno stile di programmazione molto vicino al livello di astrazione della macchina fisica (linguaggio Assembler).
(c) sviluppare la capacità di tradurre un frammento di codice C in una corrispondente implementazione Assembler, ottimizzando l'utilizzo delle risorse fisiche e il tempo di esecuzione, nel rispetto delle convenzioni dell'ISA in esame.
Le attività di laboratorio occuperanno circa il 40% del monte-ore complessivo del corso.
Sarà possibile l'installazione dei software utilizzati in laboratorio direttamente sul proprio computer portatile, al fine di ampliare le opportunità di esercitare le proprie capacità di programmazione.
EMERGENZA COVID
Al momento il corso si svolge in presenza con possibilità di fruizione on-line di lezioni
pre-registrate che coprono gli argomenti del corso. Modalità di verifica dell'apprendimento
- L'esame è diviso in 2 parti:
- Prova di Laboratorio, che incide sul voto finale con un punteggio che va da 1 a 5 punti.
- Prova Scritta, che incide sul voto finale con un punteggio che va da 15 (sufficienza) a 25 punti (massimo ottenibile).
Il voto finale viene assegnato solo quando si ottiene un voto superiore o uguale alla sufficienza in entrambe le prove. Anche in quel caso, la somma dei punteggi delle due prove deve risultare superiore a 18 per considerare superato l'esame.
Lo svolgimento di una prova è indipendente dall'altra, e non ci sono vincoli di dipendenze temporali tra le prove.
A) Prova di Laboratorio.
La prova di Laboratorio mira a verificare l'acquisizione della abilità di mappare in modo efficiente un codice di alto livello scritto in C in un codice Assembler per l'Instruction Set Architecture visto a lezione. La prova di laboratorio si intende superata conseguendo un punteggio superiore a 1.
B) Prova scritta.
La prova scritta consiste di domande a risposta aperta, e consente di valutare la capacità dello studente di esporre in modo appropriato, conciso e logicamente rigoroso il contenuto relativo agli argomenti trattati a lezione. Le domande coprono tendenzialmente tutto il programma trattato, e si distinguono in domande per la verifica della comprensione di base e domande più approfondite su determinati argomenti. Le prime verificano la comprensione delle nozioni e dei principi fondamentali che regolano la materia, mentre le seconde permettono di verificare una preparazione più approfondita da parte dello studente. La prova scritta contiene infine un esercizio per verificare la comprensione degli aspetti più applicativi trattati a lezione, in paricolare la sintesi di funzioni logiche tramite il metodo delle mappe di Karnaugh.
La prova scritta si intende superata con il conseguimento di almeno 15 punti su 25, e dà diritto ad un massimo di 25 punti su 25.
La somma dei punteggi massimi della prova di Laboratorio (5 punti) e della prova scritta (25) equivale al superamento dell'esame con voto finale di 30 (con eventuale lode). Per superare l'esame, la somma dei punteggi deve dare un voto minimo di 18.
Le due parti dell'esame non hanno vincoli di sequenzialità temporale, nel senso che la prova di Laboratorio può essere sostenuta sia prima sia dopo la prova scritta. Lo studente può chiedere di ridare selettivamente o la prova di Laboratorio o la prova scritta o entrambe, in caso non sia soddisfatto dell'esito. Nel momento in cui lo studente richiede di ripetere una prova, quella vecchia si intende automaticamente annullata, a prescindere dall'esito della nuova. Testi di riferimento
- Il corso adotta i seguenti testi di riferimento.
Per la parte di Instruction Set Architecture e Micro-architettura:
Computer Organization and Design - The Hardware/Software Interface
D. Patterson, J. Hennessy
5th Edition, Elsevier, 2013
ISBN 978-0-12-407726-3
(relativamente all'Instruction Set Architecture MIPS)
per il quale esiste anche la traduzione italiana:
Struttura e Progetto dei Calcolatori
D. Patterson, J. Hennessy
4a edizione italiana,
Zanichelli, 2015
(relativamente all'Instruction Set Architecture del MIPS)
Per la parte di Reti Logiche si consiglia:
Elementi di Progettazione dei Sistemi VLSI - Volume I: Introduzione all'Elettronica Digitale.
Autore: Mauro Olivieri.
EdiSES 2004.
Le slides proiettate a lezione nonchè le specifiche delle attività di Laboratorio sono rese disponibili su una Google Classroom opportunamente creata per ogni edizione del corso. Sulla Classroom è possibile trovare anche lezioni pre-registrate che coprono gli argomenti del corso.