Intel Nehalem: uno sguardo alla nuova architettura

Intel Nehalem: uno sguardo alla nuova architettura

In attesa del debutto delle prime cpu Intel Core i7 analizziamo l'architettura della prossima generazione di processori Intel nota con il nome in codice di Nehalem. Memory controller integrato, bus QPI, ritorno di Hyper-Threading e varie innovazioni caratterizzano queste nuove architetture.

di pubblicato il nel canale Processori
Intel
 

Architettura dell'engine: il cuore delle cpu Nehalem

Analizziamo ora l'architettura dei core contenuti nelle cpu Nehalem partendo da quelli che sono i principali elementi dell'architettura Core 2 di Intel; vedremo come Intel abbia scelto di non stravolgere quell'approccio con le cpu Nehalem, a differenza di quanto accaduto con Core 2 rispetto all'architettura NetBurst delle cpu Pentium 4 e Pentium D, operando nella direzione di un affinamento di quanto di valido era presente in Core 2.

architettura_core.jpg (49872 bytes)

Le cpu della famiglia Core hanno per la prima volta implementato una Execution Unit a 4 vie, capace quindi di eseguire sino a 4 operazioni di decode, rename e retire per ogni ciclo di clock. Questa potenza elaborativa teorica a disposizione delle cpu Core è stata difficilmente sfruttata a fondo dal codice disponibile sul mercato: per questo motivo Intel è intervenuta in Nehalem, espandendo il più possibile i buffers interni così da incrementare le condizioni nelle quali il notevole parallelismo interno di questa architettura potesse venir sfruttato al meglio. Vedremo in seguito come questo rivesta implicazioni dirette anche sulla tecnologia Hyper-Threading, a sua volta fortemente influenzata dall'integrazione del memory controller.

Nelle cpu Core 2 Intel ha introdotto le cosiddette Macrofusion: si tratta della possibilità di gestire le istruzioni TEST/CMP seguite da un conditional branch, così che possano venir decodificate, eseguite e ritirate come se si trattasse di una singola istruzione. In Nehalem Intel ha mantenuto questa interessante funzionalità estendendola ad altre tipologie di condizioni riassunte nello schema seguente:

macrofusonnew.jpg (15132 bytes)

Con le architetture Core 2 le Macrofusion potevano venir eseguite solo con applicazioni a 32bit; in Nehalem questa funzionalità è stata estesa anche al codice a 64bit. Previsti dunque incrementi prestazionali con applicazioni di questo tipo in Nehalem rispetto a quanto ottenibile con le architetture della famiglia Penryn.

Un'altra delle caratteristiche del front end del processore Nehalem mutuata dall'architettura delle cpu Core 2 è il Loop Stream Detector, logica interna al processore responsabile di individuare la presenza di loop nel software che viene eseguito. Nel momento in cui il software esegue un loop, il Loop Stream Detector (LSD) interviene sospendendo le operazioni di stima delle branches e inviando le istruzioni direttamernte dal LSD.

lsd_1.jpg (15265 bytes)

lsd_2.jpg (18261 bytes)

Nelle architetture Core 2 l'LSD è stato inserito tra Fetch e Decode, con una capacità massima di 18 istruzioni; nelle soluzioni Nehalem è stato spostato oltre la fase di decode, potendo memorizzare sino a 28 Micro-Ops all'interno dell'LSD con quindi una capacità complessiva più elevata che con le soluzioni Core 2. Oltre a gestire più istruzioni contemporaneamente attraverso il Loop Stream Detector, la nuova implementazione adottata da Intel nelle cpu Nehalem permette di disabilitare un maggior quantitativo di logica rispetto a quanto fatto con le cpu Core 2, intervenendo anche sul decode: questo ha positive ripercussioni in termini di consumo complessivo del sistema.

Altre migliorie sono state introdotte a livello dei branch predictor, componente di elevata efficienza nelle architetture Core 2. Intel ha implementato in Nehalem un secondo livello di TLB che è più lento di quello di primo livello ma può analizzare uno storico di più ampia portata, specializzato soltanto in small page (4k) Sono stati inseriti anche dei branch predictor per la cache L2, particolarmente utili secondo quanto anticipato da Intel per velocizzare alcune tipologie di applicazioni quali i database. Sono state implementate ulteriori ottimizzazioni a livello del renamed return stack buffer: questo impedisce che si possano venire a creare delle corruzioni nel return stack, componente che tiene conto in quale locazione di memoria il processore dovrà iniziare ad eseguire le proprie elaborazioni, anche nel caso in cui vi sia stata una errata previsione circa le istruzioni da elaborare all'interno della pipeline da parte dei branch predictor.

execution_engine.jpg (53906 bytes)

Le execution unit delle cpu Nehalem sono molto simili a quanto implementato da Intel nelle soluzioni Core 2: nelle cpu Penryn Intel ha implementato Execution Unit a 4 livelli, supporto SSE a 128bit e tecnologia Super Shuffle. In Nehalem a questo si aggiungono incrementi nella dimensione di varie data structure all'interno del processore, oltre che dell'out of order scheduling window.

execution_engine_2.jpg (47869 bytes)

Altre innovazioni sono state introdotte a livello di Reservation Station, passate dalle 32 delle cpu Core 2 alle attuali 36; i load buffers sono incrementati da 32 a 48 e lo stesso vale per gli store buffers, passati dai 20 delle cpu Core 2 agli attuali 32. Analizzando nel complesso l'execution engine unitamente al front end delle cpu Nehalem se ne ricava come conclusione che Intel ha scelto di non incrementare l'ampiezza di elaborazione del core nelle cpu Nehalem rispetto a quanto a disposizione con le cpu Core 2, ma di essere intervenuta per fare in modo che questa ampiezza di elaborazione dell'architettura venga sfruttata al meglio eliminando vari potenziali colli di bottiglia interni che minimizzano le prestazioni.

 
^