Calcolatore Architetture dei Calcolatori – Sapienza 2019 (Ciciani)
Strumento avanzato per il calcolo delle prestazioni dei sistemi di calcolo basato sul programma del corso tenuto dal Prof. Ciciani nel 2019 presso l’Università La Sapienza di Roma
Guida Completa alle Architetture dei Calcolatori – Corso del Prof. Ciciani (2019)
Il corso di Architetture dei Calcolatori tenuto dal Prof. Paolo Ciciani presso l’Università La Sapienza di Roma nel 2019 rappresenta uno dei pilastri fondamentali per la formazione degli ingegneri informatici. Questo corso approfondisce i principi fondamentali che governano la progettazione e l’implementazione dei moderni sistemi di calcolo, con particolare attenzione alle tecniche di ottimizzazione delle prestazioni e all’efficienza energetica.
Principi Fondamentali del Corso
Il programma del 2019 si articolava attorno a quattro macro-aree:
- Organizzazione dei calcolatori digitali: Studio dell’architettura von Neumann e delle sue evoluzioni moderne
- Gerarchia della memoria: Analisi dettagliata dei sistemi di memoria cache e della memoria virtuale
- Processori pipelined e superscalari: Tecniche per l’esecuzione parallela delle istruzioni
- Sistemi multiprocessore: Architetture simmetriche e a memoria distribuita
Metodologia di Valutazione delle Prestazioni
Un aspetto centrale del corso era la metodologia per la valutazione quantitativa delle prestazioni dei sistemi di calcolo. Il Prof. Ciciani introduceva diversi parametri chiave:
- Tempo di esecuzione: Misurato in secondi, rappresenta il tempo totale necessario per completare un task
- Throughput: Numero di task completati per unità di tempo (es. MIPS – Millioni di Istruzioni Per Secondo)
- Tempo medio per istruzione: CPI × Tempo di ciclo di clock
- Efficienza della cache: Rapporto tra accessi alla cache soddisfatti e accessi totali
Confronto tra Architetture
Il corso dedicava particolare attenzione al confronto tra diverse architetture processore. La tabella seguente riassume le caratteristiche principali analizzate durante le lezioni:
| Architettura | CPI Tipico | Frequenza (GHz) | Parallelismo | Complessità |
|---|---|---|---|---|
| Single Core | 1.0 – 1.5 | 2.5 – 4.0 | Nessuno | Bassa |
| Multi Core (4 core) | 1.2 – 2.0 | 2.0 – 3.5 | Istruzione/Thread | Media |
| Pipelined | 0.8 – 1.2 | 3.0 – 5.0 | Istruzione | Alta |
| Superscalar | 0.5 – 1.0 | 3.5 – 4.5 | Istruzione/Multipla | Molto Alta |
Gerarchia della Memoria
Un altro tema centrale era l’organizzazione gerarchica della memoria. Il modello analizzato prevedeva:
- Registri: 1 ciclo di clock, capacità molto limitata (32-64 registri)
- Cache L1: 1-4 cicli, 8-64 KB
- Cache L2: 10-20 cicli, 256 KB – 1 MB
- Cache L3: 30-60 cicli, 2-8 MB (condivisa in multi-core)
- Memoria principale: 100-300 cicli, GB
- Memoria secondaria: Milioni di cicli, TB
Il corso approfondiva le tecniche per ridurre il memory wall, ovvero il divario crescente tra la velocità dei processori e quella delle memorie, attraverso:
- Prefetching intelligente
- Organizzazione cache set-associativa
- Protocolli di coerenza cache (MESI)
- Memorie non volatili (NVM)
Tecniche di Ottimizzazione Studiate
Il Prof. Ciciani presentava diverse tecniche di ottimizzazione implementabili a diversi livelli:
| Livello | Tecnica | Beneficio Tipico | Complessità |
|---|---|---|---|
| Hardware | Pipelining | 20-40% | Alta |
| Hardware | Esecuzione fuori ordine | 15-30% | Molto Alta |
| Hardware | Predizione dei salti | 10-25% | Media |
| Software | Loop unrolling | 5-15% | Bassa |
| Software | Località dei dati | 30-50% | Media |
| Sistema | Scheduling dei thread | 10-20% | Bassa |
Applicazioni Pratiche e Progetti
Il corso includeva diverse esercitazioni pratiche che permettevano agli studenti di applicare i concetti teorici:
- Simulazione di una cache: Implementazione in C di una cache set-associativa con politica LRU
- Analisi delle prestazioni: Utilizzo di strumenti come
perfevtuneper profilare applicazioni reali - Ottimizzazione del codice: Riscrittura di algoritmi per massimizzare la località dei dati
- Progettazione di un processore semplice: Utilizzo di Verilog per implementare un processore pipelined a 5 stadi
Particolare enfasi veniva posta sull’analisi dei trade-off tra prestazioni, consumo energetico e complessità di implementazione, temi cruciali nella progettazione dei moderni sistemi embedded e mobile.
Risorse Esterne Autorevoli
Per approfondire gli argomenti trattati nel corso, si consigliano le seguenti risorse:
- Computer Systems: A Programmer’s Perspective (CMU) – Testo di riferimento per l’organizzazione dei calcolatori moderni
- NIST Computer Security Resource Center – Standard per la sicurezza nei sistemi di calcolo
- ISA – International Society of Automation – Standard per sistemi di controllo industriale
Evoluzioni Recenti nel Campo
Dal 2019 ad oggi, il campo delle architetture dei calcolatori ha visto diverse evoluzioni significative:
- Architetture eterogenee: Combinazione di CPU, GPU e acceleratori specializzati (TPU, FPGA) in un unico sistema
- Computing in-memory: Elaborazione diretta nei banchi di memoria per ridurre il trasferimento dati
- Quantum computing: Sviluppo di architetture ibride classiche/quantistiche
- Edge computing: Spostamento dell’elaborazione verso i dispositivi periferici per ridurre la latenza
- Architetture RISC-V: Standard aperto che sta guadagnando trazione nell’industria e nell’accademia
Queste evoluzioni pongono nuove sfide che estendono i concetti fondamentali insegnati nel corso del Prof. Ciciani, mantenendo però valida la metodologia di analisi e ottimizzazione delle prestazioni che rappresenta il cuore della disciplina.
Consigli per lo Studio
Per affrontare con successo questo corso, il Prof. Ciciani consigliava:
- Studio progressivo dei concetti fondamentali prima di affrontare gli argomenti avanzati
- Esecuzione sistematica degli esercizi proposti durante le lezioni
- Utilizzo di simulatori (come
SimpleScalarogem5) per sperimentare con diverse configurazioni architetturali - Lettura critica di articoli scientifici recenti nel campo (conferenze come ISCA, MICRO, ASPLOS)
- Partecipazione attiva ai laboratori per acquisire competenze pratiche
Il corso rappresentava non solo un’esplorazione tecnica delle architetture dei calcolatori, ma anche un’opportunità per sviluppare un approccio sistematico alla risoluzione dei problemi complessi, competenza fondamentale per qualsiasi ingegnere informatico.