# Architetture avanzate degli elaboratori - Introduzione

In questo corso ci occuperemo di analizzare le architetture odierne e come si sono evolute nel tempo, concentrandoci di più sulle architetture oggi usate nei supercomputer. Seppur le architetture "consumer" rappresentano una buona parte dei sistemi di elaborazione ad oggi presenti, le prestazioni migliori vengono ottenute attraverso la ricerca scientifica e prodotte per i supercomputer e architetture specializzate.
I supercomputer vengono oggi utilizzati per:
* ricerca scientifica
* previsioni meteorologiche
* analisi economiche
* simulazioni industriali
Inizialmente il problema dei supercomputer era la capacità di calcolo, oggi invece è la corrente consumata e l'energia dissipata. L'idea deve quindi essere quella di massimizzare il rapporto prestazioni/energia necessaria.

## Concetti generali

In genere per classificare i supercomputer si utilizza l'unità di misura FLOPS. Un FLOPS (FLoating point Operations Per Seconds) rappresenta il numero di operazioni in virgola mobile che un computer è in grado di fare in un secondo. I supercomputer di oggi raggiungono capacità di calcolo dell'ordine dei PetaFLOPS ($10^{15}$ FLOPS).

### Legge di Moore

Ben nota sarà al lettore la legge empirica di Moore:
    «La complessità di un microcircuito, misurata ad esempio tramite il numero di transistori per chip, raddoppia ogni 18 mesi.»
Essa viene comunemente rapportata al numero di transistor; in effetti, negli ultimi 50 anni le CPU hanno evidenziato un trend che combacia con questa legge:
Purtroppo però, il raddoppio dei transistor non coincide con il raddoppio delle prestazioni delle CPU. Questo è dovuto a:
* Frequency Wall: non è più possibile aumentare la frequenza della CPU (troppa energia necessaria e calore da disperdere). Si è assestata su circa 4 Ghz.
* Power Wall: i processori, sempre per un problema di dissipazione del calore e energia necessaria, non possono superare un certo valore di potenza (siamo poco oltre i 100W).
* Chip Density: tra qualche anno si raggiungerà il limite fisico di grandezza dei transistor: più piccoli di così non si potranno costruire (anche per gli effetti quantistici), quindi l'incremento dei transistor dovrà necessariamente arrestarsi. Oggi le architetture più piccole prevedono transistor nell'ordine delle decine di nm.
Oggi si cerca di migliorare la potenza di calcolo utilizzando sistemi paralleli (più unità elaborative che cooperano) e sistemi eterogenei (unità elaborative di diverso tipo specializzate in particolari operazioni). Distinguiamo due tipi di sistemi:
* Sistema multi-core: un solo processore fisico con più core, cioè singole unità elaborative;
* Sistema multi-processore: tanti diversi processori fisici su chip diversi.

## L'architettura

Definiamo l'architettura di un sistema di elaborazione come il design dei layers di astrazione che ci permette di implementare applicazioni che processano dati in modo efficiente, utilizzando le tecnologie esistenti. I livelli di astrazione dei moderni sistemi possono essere classificati in:
* Applicazione
* Algoritmo
* Linguaggio di programmazione
* Sistema operativo / Virtual machine
* ISA
* Microarchitettura
* Gates / Register Transfer Level (RTL)
* Circuiti
* Dispositivi
* Fisica
Come ben noto, tutte le implementazioni odierne si basano sul modello di Von Neumann.

### Architetture parallele

Definiamo architettura parallela come "una collezione di processing elements che cooperano e comunicano per risolvere grandi problemi velocemente". Le architetture parallele verranno affrontate in specifiche lezioni.