Calcolatore Architettura dei Calcolatori (Sapienza 2018-2019)
Strumento professionale per il calcolo delle prestazioni dei sistemi di calcolo basato sul programma del corso di Architettura dei Calcolatori (A.A. 2018-2019) della Sapienza Università di Roma.
Guida Completa all’Architettura dei Calcolatori (Sapienza 2018-2019)
Il corso di Architettura dei Calcolatori tenuto presso la Sapienza Università di Roma durante l’anno accademico 2018-2019 rappresenta uno dei pilastri fondamentali per la formazione degli studenti in Ingegneria Informatica e delle discipline affini. Questo corso fornisce le basi teoriche e pratiche per comprendere il funzionamento interno dei sistemi di calcolo moderni, dalla rappresentazione dell’informazione all’organizzazione gerarchica della memoria, fino alle tecniche di parallelismo e ottimizzazione delle prestazioni.
Programma del Corso (A.A. 2018-2019)
Il programma del corso era strutturato secondo i seguenti macro-argomenti:
- Introduzione all’architettura dei calcolatori
- Storia e evoluzione dei calcolatori elettronici
- Classificazione delle architetture (von Neumann vs Harvard)
- Prestazioni dei calcolatori: metriche e metodologie di valutazione
- Rappresentazione dell’informazione
- Sistemi di numerazione posizionali
- Rappresentazione dei numeri interi (segno e modulo, complemento a 2)
- Rappresentazione in virgola mobile (standard IEEE 754)
- Codici per la rappresentazione di caratteri (ASCII, Unicode)
- Organizzazione della CPU
- Struttura del datapath e dell’unità di controllo
- Ciclo di esecuzione delle istruzioni
- Tecniche di pipelining e hazard
- Architetture superscalari e VLIW
- Gerarchia di memoria
- Principi di località spaziale e temporale
- Organizzazione e gestione della cache
- Memoria virtuale e tecniche di paginazione
- Sistemi di memoria connessi a bus (SDRAM, DDR)
- Input/Output e dispositivi di storage
- Organizzazione dei bus (PCI, PCIe)
- Dispositivi di storage (HDD, SSD, RAID)
- Tecniche di gestione delle interruzioni
- Architetture parallele
- Sistemi multiprocessore (SMP, NUMA)
- Architetture a memoria distribuita (cluster, grid)
- Modelli di programmazione parallela
Metodologie di Valutazione delle Prestazioni
Uno degli aspetti fondamentali del corso era la valutazione quantitativa delle prestazioni dei sistemi di calcolo. Venivano introdotte diverse metriche e metodologie:
- Tempo di esecuzione (Execution Time): Misurato in secondi, rappresenta il tempo totale necessario per completare un task.
- Throughput: Numero di task completati per unità di tempo (es. istruzioni al secondo).
- MIPS (Millions of Instructions Per Second): Metrica comune per confrontare le prestazioni di diversi processori.
- MFLOPS (Millions of Floating Point Operations Per Second): Specifico per operazioni in virgola mobile.
- Legge di Amdahl: Utilizzata per valutare i limiti teorici del parallelismo.
- Legge di Gustafson: Alternative alla legge di Amdahl per sistemi con carichi di lavoro scalabili.
Confronto tra Architetture (Dati 2018-2019)
Durante il corso venivano analizzate le differenze prestazionali tra diverse architetture. La seguente tabella riporta dati comparativi tipici per l’epoca (2018-2019):
| Architettura | Frequenza (GHz) | CPI Medio | MIPS (Milioni) | Consumo (W) | Costo Relativo |
|---|---|---|---|---|---|
| Single Core (Intel Core 2 Duo) | 3.0 | 1.2 | 2500 | 65 | 1.0x |
| Multi Core (Intel i7-8700K) | 3.7 (4.7 Turbo) | 0.8 | 18500 | 95 | 2.5x |
| Pipelined (ARM Cortex-A75) | 2.8 | 0.6 | 4666 | 5 | 0.8x |
| Superscalar (AMD Ryzen 7 2700X) | 3.7 (4.3 Turbo) | 0.5 | 29600 | 105 | 3.0x |
Nota: I valori MIPS sono calcolati come (Frequenza × 109) / CPI. I dati di consumo e costo sono indicativi e basati su configurazioni tipiche del 2018.
Tecniche di Ottimizzazione Studiate
Il corso approfondiva diverse tecniche per ottimizzare le prestazioni dei sistemi di calcolo:
- Ottimizzazione del pipeline:
- Rilevamento e risoluzione degli hazard (strutturali, di dati, di controllo)
- Forwarding e bypass dei dati
- Predizione dei salti (branch prediction)
- Esecuzione speculativa
- Ottimizzazione della cache:
- Scelta della dimensione e dell’associatività
- Politiche di sostituzione (LRU, FIFO, Random)
- Tecniche di prefetching
- Cache multi-livello (L1, L2, L3)
- Ottimizzazione della memoria principale:
- Interleaving dei banchi di memoria
- Tecniche di buffering
- Organizzazione DRAM (pagine, righe, colonne)
- Parallelismo a livello di istruzione (ILP):
- Esecuzione fuori ordine (Out-of-Order Execution)
- Rinomina dei registri (Register Renaming)
- Esecuzione speculativa
- Parallelismo a livello di thread (TLP):
- Multithreading simultaneo (SMT)
- Architetture multicore
- Coerenza della cache (protocollo MESI)
Esempi Pratici e Casi Studio
Durante le lezioni e le esercitazioni, venivano analizzati diversi casi studio per applicare concretamente i concetti teorici:
- Calcolo del tempo di esecuzione: Dati il numero di istruzioni, il CPI e la frequenza di clock, gli studenti dovevano calcolare il tempo di esecuzione di un programma e valutare l’impatto di modifiche architetturali.
- Analisi delle prestazioni della cache: Utilizzando parametri come dimensione, blocco, associatività e hit rate, si calcolava il tempo medio di accesso alla memoria.
- Confronto tra architetture: Si confrontavano le prestazioni di diverse configurazioni (es. single-core vs multi-core) per specifici carichi di lavoro.
- Ottimizzazione del codice: Si analizzava come modifiche al codice assembly potessero migliorare le prestazioni sfruttando meglio il pipeline o la gerarchia di memoria.
Un esempio tipico di esercizio riguardava il calcolo del tempo di esecuzione di un programma con le seguenti caratteristiche:
- Numero di istruzioni: 1 × 109
- Frequenza di clock: 3.2 GHz
- CPI medio: 1.5
Tempo di esecuzione = (Numero di istruzioni × CPI) / (Frequenza di clock × 109) = (1 × 109 × 1.5) / (3.2 × 109) = 0.46875 secondi
Laboratori e Strumenti Utilizzati
Il corso includeva anche attività di laboratorio dove gli studenti potevano applicare praticamente i concetti teorici. Gli strumenti principali erano:
- Simulatori architetturali:
- SimpleScalar: simulatore per architetture pipeline e superscalari
- Gem5: framework per la simulazione di sistemi computerizzati
- MARSSx86: simulatore per architetture x86
- Linguaggi di programmazione:
- Assembly x86 per comprendere il funzionamento a basso livello
- C per analizzare l’impatto delle ottimizzazioni del compilatore
- Strumenti di benchmarking:
- SPEC CPU: suite di benchmark standard per valutare le prestazioni
- Linpack: per misurare le prestazioni in virgola mobile
- Stream: per valutare la banda passante della memoria
- Analisi delle prestazioni:
- Perf (Linux): per profilare le applicazioni
- VTune (Intel): per l’analisi delle prestazioni su architetture Intel
- CodeAnalyst (AMD): equivalente per processori AMD
Tendenze e Sviluppi Futuri (Prospettive dal 2018-2019)
Durante il corso venivano anche discussi i trend emergenti nell’architettura dei calcolatori, che all’epoca (2018-2019) includevano:
- Fine della legge di Moore: Si iniziava a discutere dei limiti fisici della miniaturizzazione dei transistor e delle possibili alternative (es. computazione quantistica, materiali 2D come il grafene).
- Architetture eterogenee: L’integrazione di CPU, GPU, TPU e altri acceleratori specializzati in un unico sistema (es. sistem-on-chip).
- Memorie non volatili: Lo sviluppo di tecnologie come 3D XPoint (Intel Optane) che combinano le prestazioni della RAM con la persistenza delle memorie flash.
- Calcolo approssimato: Tecniche per ridurre il consumo energetico accettando risultati approssimati in applicazioni tolleranti agli errori (es. elaborazione multimediale).
- Architetture per l’intelligenza artificiale: L’emergere di acceleratori hardware specifici per il machine learning (es. Tensor Processing Units di Google).
- Sicurezza hardware: L’importanza crescente di meccanismi di sicurezza implementati a livello architetturale (es. Intel SGX per le enclave sicure).
Questi argomenti riflettevano le sfide e le opportunità che gli ingegneri informatici avrebbero affrontato nei successivi anni, con particolare attenzione all’efficienza energetica e alle prestazioni per carichi di lavoro specifici come l’AI e il big data.
Risorse per lo Studio
Per preparare l’esame, gli studenti potevano fare riferimento a diverse risorse:
- Testi consigliati:
- “Computer Architecture: A Quantitative Approach” – Hennessy & Patterson (6ª edizione)
- “Computer Organization and Design” – Patterson & Hennessy (5ª edizione)
- “Structured Computer Organization” – Tanenbaum (6ª edizione)
- Materiale delle lezioni:
- Slide e appunti forniti dal docente
- Esercizi svolti durante le esercitazioni
- Tracce d’esame degli anni precedenti
- Risorse online:
- Corsi MOOC su piattaforme come Coursera ed edX
- Tutorial su simulatori architetturali
- Forum specializzati (es. Stack Overflow per domande tecniche)
Preparazione per l’Esame
L’esame di Architettura dei Calcolatori (2018-2019) era tipicamente strutturato in:
- Prova scritta:
- Domande teoriche a risposta aperta
- Esercizi di calcolo (es. tempo di esecuzione, hit rate della cache)
- Problemi di progettazione (es. disegnare un datapath per una specifica ISA)
- Prova orale (facoltativa):
- Discussione della prova scritta
- Domande di approfondimento su argomenti specifici
- Analisi di casi studio
Consigli per la preparazione:
- Studiare gli appunti e rivedere le slide delle lezioni
- Esercitarsi con gli esercizi svolti durante il corso
- Ripassare le dimostrazioni matematiche (es. legge di Amdahl)
- Comprendere a fondo i concetti di pipeline e gerarchia di memoria
- Saper applicare le formule per il calcolo delle prestazioni
- Rivedere le traccia d’esame degli anni precedenti
Un tipico esercizio d’esame potrebbe chiedere di:
Problema: Un processore ha una frequenza di clock di 4 GHz e un CPI medio di 1.2. La cache L1 ha un hit rate del 90%, un tempo di hit di 1 ns e un tempo di miss di 10 ns. La memoria principale ha un tempo di accesso di 100 ns. Calcolare il tempo medio di accesso alla memoria e il tempo di esecuzione per 109 istruzioni, assumendo che il 30% delle istruzioni acceda alla memoria.
Soluzione:
- Tempo medio di accesso alla memoria (AMAT):
AMAT = Hit rate × Hit time + Miss rate × Miss time = 0.9 × 1 ns + 0.1 × 10 ns = 1.8 ns
- Tempo di esecuzione:
Tempo CPU = (Numero istruzioni × CPI) / Frequenza = (109 × 1.2) / (4 × 109) = 0.3 secondi
Tempo memoria = Numero accessi memoria × AMAT = (0.3 × 109) × 1.8 × 10-9 = 0.54 secondi
Tempo totale = 0.3 + 0.54 = 0.84 secondi
Conclusione
Il corso di Architettura dei Calcolatori (A.A. 2018-2019) presso la Sapienza Università di Roma offriva una panoramica completa e aggiornata sulle tecnologie e metodologie alla base dei moderni sistemi di calcolo. Gli studenti acquisivano non solo conoscenze teoriche, ma anche competenze pratiche nell’analisi e ottimizzazione delle prestazioni, fondamentali per affrontare le sfide dell’ingegneria informatica contemporanea.
La comprensione dei principi architetturali è essenziale per:
- Progettare sistemi efficienti dal punto di vista energetico e prestazionale
- Ottimizzare il software per specifiche architetture hardware
- Valutare e confrontare diverse soluzioni tecnologiche
- Anticipare e adattarsi alle evoluzioni future dei sistemi di calcolo
Per gli studenti che hanno seguito questo corso, le competenze acquisite rappresentano una solida base per specializzazioni successive in ambiti come:
- Progettazione di processori e sistemi embedded
- Ottimizzazione di compilatori e runtime
- Sviluppo di acceleratori hardware per applicazioni specifiche
- Ricerca in architetture innovative (quantistiche, neuromorfiche, etc.)