Salta ai contenuti. | Salta alla navigazione

Strumenti personali

CALCOLATORI ELETTRONICI

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
6
Periodo didattico
Secondo Semestre
SSD
ING-INF/05

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)
* Sintesi di logica combinatoria e logica sequenziale
* Principi di funzionamento della 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 usata l'Instruction Set Architecture del processore MIPS.

Le principali abilità acquisite dallo studente al termine del corso saranno:

* Convertire numeri interi e in virgola mobile tra basi diverse
* Rappresentare numeri e caratteri nei formati binari più diffusi
* Programmare in linguaggio assembler dell'ISA MIPS
* Sintetizzare semplici funzioni combinatorie
* Sintetizzare semplici macchine a stati finiti
* Comprendere l'architettura e il funzionamento di Unità Aritmetico-Logiche
* 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
* Ottimizzare la performance di una microarchitettura tramite tecniche avanzate quali il pipelining, l'utilizzo di execution path multipli o lo scheduling delle istruzioni.
* 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, mediato dalle decisioni del compilatore.
* Comprendere la struttura della gerarchica di memoria
* Analizzare il rapporto costo-benefici di 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 gli algoritmi dell'aritmetica decimale;
* Familiarità con gli operatori logici fondamentali e con l'algebra di Boole;
* Programmazione di base nel linguaggio C.

Contenuti del corso

- Introduzione sui diversi ambiti dell'elaborazione digitale, e trend futuri.
- Rappresentazione binaria delle informazioni.
- Richiami sull'Algebra di Boole
- 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
- Branch target buffer
- Tecniche statiche per la predizione della direzione dei branch
- Tecniche dinamiche o 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
- Gerarchia della memoria: la memoria Cache e la memoria Scratchpad.
- Architetture di cache: direct mapping, associatività.
- Memoria virtuale.

Metodi didattici

Il corso è organizzato nel seguente modo:

- Lezioni frontali in aula su tutti gli argomenti del corso, per circa il 75% del monte-ore complessivo. La metodologia didattica è basata sulla proiezione di slide che verranno rese disponibili per il download almeno la sera prima dello svolgimento della lezione. Lo stile espositivo è molto interattivo, e mira a sviluppare le capacità critiche e argomentative degli studenti.

- 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 realizzazione Assembler, ottimizzando l'utilizzo delle risorse fisiche e il tempo di esecuzione, nel rispetto delle convenzioni dell'ISA di riferimento.
Le attività di laboratorio occuperanno circa il 25% 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
Il corso viene attualmente erogato in presenza.
Mediante un tool a libero accesso per il blended learning, vengono rese disponibili
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 vista a lezione. La prova di laboratorio si intende superata conseguendo un punteggio superiore o uguale 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 particolare la sintesi di funzioni logiche mediante 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 sia lo stesso giorno della 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 manifesta ufficialmente l'intenzione di ripetere una prova, la 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)

Esistono anche versioni per l'Instruction Set Architecture ARM oppure RISC-V.

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. Su tale Classroom vengono rese disponibili anche lezioni pre-registrate che coprono gli argomenti del corso.