# NetBurst

La microarchitettura NetBurst è la architettura erede della P6 nella famiglia di CPU x86 di Intel. Il primo core ad essere basato su questa architettura fu il Pentium 4 Willamette, uscito a fine 2000. Fu il primo nella linea di CPU Pentium 4, e da allora tutti i processori Pentium 4 hanno usato unicamente l'architettura NetBurst.
A metà 2001, Intel mise in commercio il core Foster, anche questo basato su NetBurst, facendo passare anche le CPU Xeon alla nuova architettura. Anche alcune CPU Celeron utilizzavano NetBurst. A volte ci si riferisce a NetBurst come Intel P7 o Intel 80786, ma questi non sono nomi ufficiali.

## La corsa ai GHz

L'architettura NetBurst è stata sviluppata quando la strada maestra per aumentare le prestazioni sembrava l'innalzamento della frequenza operativa. Si trattava infatti di un'architettura nata per spingere il processore fino a frequenze di 10 GHz e, a questo scopo, dotata di pipeline molto lunghe che, nella sua ultima incarnazione, sono arrivate fino a 31 stadi. Pipeline così lunghe subiscono penalizzazioni elevatissime in caso di salti non predetti correttamente o in caso di istruzioni che devono stallare per la mancanza di qualche risorsa. Per ridurre al minimo il problema NetBurst implementava praticamente tutte le tecniche disponibili per ridurre le condizioni di stallo delle pipeline e integrava più pipeline per sfruttare il parallelismo del codice.

## Caratteristiche tecniche
### Cardini dell'architettura NetBurst

L'architettura NetBurst in pratica si riferisce ad un insieme di caratteristiche, le più importanti delle quali sono la "Hyper Pipelined Technology", la "Rapid Execution Engine" e la "Execution Trace Cache".

#### Hyper Pipelined Technology

Questo è il nome che Intel ha scelto per la pipeline a venti stadi prevista dalla prima generazione dell'architettura NetBurst. Questo è un aumento significativo, paragonato ai soli 10 stadi della pipeline del Pentium III. Una pipeline così lunga ha comunque degli svantaggi, in particolare un ridotto IPC (istruzioni per ciclo), mitigato però dalla possibilità di aumentare la velocità di clock. Un altro svantaggio è dato dal gran numero di stadi che devono essere ripercorsi nel caso in cui l'algoritmo di branch prediction faccia un errore (cache miss). Per limitare i danni (miss penalty) dovuti a tali inevitabili problemi, Intel ha introdotto le tecnologie "Rapid Execution Engine" e "Execution Trace Cache" e ha raffinato l'algoritmo di branching, migliorando notevolmente la hit rate.

#### Rapid Execution Engine

Intel ha aggiunto due unità per le operazioni con gli interi nella ALU rispetto all'architettura P6. Le aggiunte sono un addizionatore per interi e una unità di calcolo per gli indirizzi. Ma la novità più importante introdotta da questa tecnologia è la velocità di clock della ALU, che opera al doppio della velocità di clock del core. Questo vuol dire che in una CPU a 3 GHz la ALU opera a 6 GHz. Queste migliorie combattono il calo di IPC e migliorano di molto le prestazioni della CPU nei calcoli sugli interi. Lo svantaggio è che alcune istruzioni sono più lente, come ad esempio lo shift, dovuto alla mancanza di un barrel shifter, che era incorporato in ogni CPU dall'80386.

#### Execution Trace Cache

All'interno della cache L2 della CPU Intel ha incorporato una Execution Trace Cache. Questa cache memorizza le micro operazioni dopo lo stadio di decode, cosicché quando deve passare a una nuova operazione, invece di dover eseguire di nuovo il fetching e il decoding dell'istruzione, la CPU può accedere direttamente alle micro-operazioni dalla trace cache, risparmiando una notevole quantità di tempo. Inoltre le micro-operazioni sono mantenute nella cache secondo l'ordine di esecuzione predetto algoritmicamente, il che significa che quando la CPU recupera le istruzioni dalla cache, esse sono già presenti nell'ordine corretto.

### Principi di funzionamento

Il funzionamento del Pentium 4 può essere riassunto in pochi passaggi fondamentali:
* Il processore carica le operazioni da eseguire fino a massimo 32 bit
* Le operazioni x86 di lunghezza variabile vengono tradotte in microperazioni tipo RISC di lunghezza fissa da 118 bit. Le operazioni x86 possono venir tradotte anche in 4 microoperazioni nel caso delle istruzioni più complesse.
* Il processore esegue le microoperazioni nelle sue pipeline in modalità fuori ordine per fruttare al massimo il parallelismo interno delle operazioni.
* I risultati vengono riuniti e trasferiti nel registro corrispondente seguendo l'ordine stabilito dal programma originale.
Come si è detto l'obiettivo dell'architettura NetBurst era ottenere frequenza di funzionamento molto elevate e tutto è stato progettato seguendo questo obiettivo. Il processore inizialmente carica i dati, li converte in microoperazioni e li pone in un buffer chiamato instruction window oltre a segnalare le microoperazioni decodificate in un buffer chiamamto trace buffer che viene utilizzato internamente del processore per la predizione dei salti, la gestione delle eccezioni e per riordinare correttamente i dati dopo che le operazioni sono state eseguite. Le microoperazioni sono operazioni concettualmente di tipo RISC ma sono lunghe ben 118 bit per poter gestire correttamente i molteplici modi di indirizzamento delle operazioni x86. Il processore continua a caricare dati fino a quando l'instruction window non è piena. L'unità di predizione dei salti che è basata su una tabella da 512 elementi che tiene traccia degli ultimi salti e del loro risultato analizza le microoperazioni e decide su eventuali salti. In caso di salto il processore controlla la tabella e se trova che l'istruzione di salto è già stata eseguita in passato si comporta concordemente al contenuto della tabella. In caso di mancanza di dati il processore si basa su una tabella statica. Una singola predizione sbagliata può ridurre le prestazioni del processore del 20%-30% per via delle pipeline molto lunghe. Il processore effettua la ridenominazione dei registri sia per ottenere il massimo parallelismo consentito dall'esecuzione fuori ordine delle istruzioni sia per contrastare i limite dell'architettura x86 che prevede la presenza di soli 8 registri di uso generico. Il processore dispone di 128 registri nascosti che assegna dinamicamente alle varie istruzioni con la ridenominazione dei registri per ridurre i conflitti. Le operazioni vengono divise in due code, Una coda raccoglie le operazioni in memoria (load e store) e l'altra per tutti gli altri tipi di operazioni. Ogni coda funziona in modalità FIFO (first-in first-out), ma non esiste alcun tipo di relazione tra l'ordine reciproco delle due code Appena un'unità funzionale compatibile con un'istruzione libera da conflitti diventa disponibile lo scheduler della coda trasferisce l'istruzione nell'unità funzionale. Gli scheduler sono in grado di allocare fino a sei operazioni elementari per ciclo di clock. Difatti le ALU per le operazioni semplici lavorano a frequenza di clock doppia quindi per ogni ciclo di clock sono in grado di processare quattro istruzioni, le altre due unità funzionali possono eseguire un'operazione a testa e quindi in teoria si possono eseguire fino a sei operazioni per ciclo anche se in realtà questo si verifica molto di rado. Il processore per contrastare i tempi di accesso alla memoria che con frequenza di funzionamento prossime a 4 Gigahertz sono estremamente importanti implementa un meccanismo di precaricamento dei dati. Questo è gestito sia da quattro istruzioni SSE per il codice appositamente compilato e tramite un meccanismo di previsione dinamica implementato nel processore che cerca di prevedere in anticipo quale codice andrà caricato. Dopo che le operazioni sono state eseguite l'unità finale provvede ad aggiornare i registri secondo l'ordine del programma originario, va notato che anche le eventuali eccezioni generate dalle istruzioni vengono gestite da questa unità, difatti le eccezioni vanno sollevate solamente quando ordine logico del programma lo prevede e non appena si verificano altrimenti si avrebbe un comportamento non predicibile dei programmi.

## Prestazioni

Le prestazioni del Pentium 4 rapportate alla frequenza di funzionamento non sono particolarmente elevate. Il Pentium 4 come si è detto all'inizio è nato per funzionare a frequenze di funzionamento molto elevate. Difatti a parità di frequenza di clock offre prestazioni leggermente inferiori al precedente Pentium III. L'obiettivo delle altissime frequenze poi è stato solo parzialmente raggiunto dato che limiti tecnologici non previsti inizialmente hanno impedito al progetto di arrivare alle frequenze inizialmente previste di 10 GHz. Difatti i successivi processori Intel come i Pentium M sono stati basati su architetture più performanti a parità di frequenza per ottenere prestazioni maggiori e consumi inferiori.

## Processori basati su architettura NetBurst

* Willamette
* Northwood
* Prescott
* Tejas
* Cedar Mill
* Smithfield
* Presler

## Il successore

L'architettura NetBurst ha lasciato il posto, a metà 2006, alla nuova Intel Core Microarchitecture, che affonda le sue radici progettuali nell'evoluzione del progetto Pentium M Banias, il Core Duo Yonah.
I primi esponenti della nuova architettura sono stati i core Merom, Conroe e Woodcrest, rispettivamente per i settori: mobile, desktop e server. Nel 2006 però Intel ha dichiarato l'intenzione di introdurre una nuova architettura ogni 2 anni e infatti nel novembre 2008 è stata introdotta Nehalem, alla base dei processori Core i7, e per l'inizio del 2011 è previsto l'arrivo di processori basati su Sandy Bridge. NetBurst quindi dovrebbe essere anche l'ultima architettura x86 così longeva.

## Roadmap

V · D · MRoadmap dei processori Intel da NetBurst a Tiger Lake :
NetBurst :
| Willamette | Willamette | Northwood | Northwood | Prescott | Prescott | Tejas | Tejas | Nehalem (NetBurst) | Nehalem (NetBurst) |
| | | | | | | ⤷ | ⤷ | Cedar Mill (Tejas) | Cedar Mill (Tejas) |
| | | | | | ⤷ | Prescott-2M | Prescott-2M | Cedar Mill | Cedar Mill |
| | | | | | | Smithfield | Smithfield | Presler | Presler |
| P6 | P6 | P6 | P6 | P6 | P6 | P6 | P6 | P6 | P6 | Core | Core | Core | Core | Nehalem | Nehalem | Nehalem | Nehalem | Sandy Bridge | Sandy Bridge | Sandy Bridge | Sandy Bridge | Haswell | Haswell | Haswell | Haswell | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Skylake | Palm Cove | Palm Cove | Sunny Cove | Sunny Cove | Willow Cove | Willow Cove | Cypress Cove | Cypress Cove | Golden Cove | Golden Cove | Raptor Cove | Raptor Cove |
| Coppermine | Coppermine | Tualatin | Tualatin | Banias | Banias | Dothan | Dothan | Yonah | Yonah | Core | Core | Penryn | Penryn | Nehalem | Nehalem | Westmere | Westmere | Sandy Bridge | Sandy Bridge | Ivy Bridge | Ivy Bridge | Haswell | Haswell | Broadwell | Broadwell | Skylake | Skylake | Kaby Lake | Kaby Lake | Coffee Lake | Coffee Lake | Whiskey Lake | Whiskey Lake | Amber Lake | Amber Lake | Comet Lake | Comet Lake | Cannon Lake | Cannon Lake | Ice Lake | Ice Lake | Tiger Lake | Tiger Lake | Rocket Lake | Rocket Lake | Alder Lake (P-core) | Alder Lake (P-core) | Raptor Lake (P-core) | Raptor Lake (P-core) |
| 180 nm | 180 nm | 130 nm | 130 nm | 130 nm | 130 nm | 90 nm | 90 nm | 65 nm | 65 nm | 65 nm | 65 nm | 45 nm | 45 nm | 45 nm | 45 nm | 32 nm | 32 nm | 32 nm | 32 nm | 22 nm | 22 nm | 22 nm | 22 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 14 nm | 10 nm | 10 nm | 10 nm | 10 nm | 10 nm | 10 nm | 14 nm | 14 nm | Intel 7 | Intel 7 | Intel 7 | Intel 7 | Intel 7 | Intel 7 | Intel 7 | Intel 7 |
| | | | | | | | | | | | | Bonnell | Bonnell | Bonnell | Bonnell | Saltwell | Saltwell | Saltwell | Saltwell | Silvermont | Silvermont | Silvermont | Silvermont | Airmont | Airmont | Goldmont | Goldmont | Goldmont | Goldmont | Goldmont Plus | Goldmont Plus | Goldmont Plus | Goldmont Plus | Goldmont Plus | Goldmont Plus | Goldmont Plus | Goldmont Plus | Lakefield | Lakefield | Lakefield | Lakefield | Jasper Lake | Jasper Lake | | | Alder Lake (E-core) | Alder Lake (E-core) | Raptor Lake (E-core) | Raptor Lake (E-core) |
| | | | | Bonnell | Bonnell | Bonnell | Bonnell | Silvermont | Silvermont | Silvermont | Silvermont | Goldmont | Goldmont | Goldmont | Goldmont | Tremont | Tremont | Tremont | Tremont | | | Gracemont | Gracemont | Gracemont | Gracemont |