|
CPU Story: from P1 to nowdays
Quinta generazione: la rivoluzione Pentium
Nel marzo del 1993 Intel introdusse il primo Pentium con frequenza di
60 Mhz, Intel non lo chiamò, come sembrava scontato, "586"
al fine di aggirare la legge americana che non consente di riservarsi
il copyright di un numero. La dicitura “Pentium” diveniva
quindi un diritto d’autore di Intel e nessuna altra società
avrebbe potuto usare in seguito quel nome.
Il Pentium venne realizzato integrando nel silicio 3.100.000 transistor
e rispetto ai 486 proponeva tecniche avanzate di gestione interna dei
dati come una Branch Prediction Unit (unità di predizione dei salti)
e tecniche di parallelismo nell’elaborazione del codice che stanno
alla base di tutti i più recenti processori. Capire come funziona
un Pentium è dunque importante per comprendere le strategie tecnologiche
che hanno permesso di sviluppare processori negli ultimi 10 anni. Analizzeremo
pertanto in profondità le caratteristiche di questa Cpu mettendo
a confronto la sua struttura con quella molto più semplice del
486.
Nello schema che vedete
di lato si può osservare, nella struttura logica del nucleo di
un 486, la presenza di una unità aritmetico logica Alu per il calcolo
degli interi ed una Fpu 80387 collegate tra loro da un bus a 64 Bit. La
cache da 8 Kbyte è unificata per i dati e le istruzioni ed è
collegata ad entrambe le unità di calcolo Alu ed Fpu da un bus
a 32 Bit. La unità prefetcher è adibita a reperire blocchi
di istruzioni dalla memoria Ram e spostarli nella cache con la quale comunica
con un bus a 128 Bit. L’interfaccia di comunicazione verso il bus
della memoria è infine a 32 bit.
Nel Pentium (nella figura visibile di seguito) la prima cosa che risalta
è la presenza di due distinte cache da 8 Kbyte ciascuna. La prima
cache è destinata alle istruzioni (codice di programma) e la seconda
ai dati a cui tali istruzioni vanno applicate.
Il vantaggio rispetto alla cache del 486 sta nella riduzione dei conflitti
tipici di una cache unificata. Oltre alla cache sono state raddoppiate
anche le unità di elaborazione Alu; in pratica nel Pentium è
come se operassero due Alu 486 in parallelo. Dopo aver ricevuto e parzialmente
decodificato una istruzione il Pentium stabilisce se esiste la possibilità
di eseguire in parallelo l’istruzione stessa insieme a quella successiva.
Non tutte le istruzioni possono essere parallelizzate ma in quelle ove
è possibile applicare questa tecnica l’elaborazione richiederà
tempi dimezzati. Un processore che riesce a smistare le istruzioni fra
più pipeline e a parallelizzare la loro esecuzione è definito
Superscalare ed il Pentium è il primo processore x86 dotato di
questa proprietà. In particolare le istruzioni vengono prelevate,
decodificate ed eseguite nelle due Alu che vedete in figura. In condizioni
ottimali il Pentium può pertanto elaborare due istruzioni (operanti
sui numeri interi) per ciclo di clock.
Una ulteriore innovazione
nel Pentium è la introduzione della Branch Prediction Unit. Trattasi
di una piccola zona di memoria cache di appena mezzo Kbyte strutturata
in forma tabellare ed adibita a contenere una History (cronistoria) degli
indirizzi a cui il software sta eseguendo salti condizionati (tipo If-Then-Else).
In base a ciò, sfruttando il fatto che molti programmi eseguono
più volte la stessa routine di salto, si cerca di prevedere a che
punto avverrà il salto successivo. In base alla previsione il dato
viene caricato nel buffer e se il salto avverrà proprio in quella
posizione l’elaborazione ne sarà ampiamente agevolata.
Questa features da sola è in grado di fornire al Pentium il 20-25%
di prestazioni in più rispetto al 486 ove i salti nell’esecuzione
del codice non sono precognizzati. Domanda; cosa è un salto? Il
codice dei programmi è in gran parte di tipo sequenziale ma di
tanto in tanto (in media una volta su otto) il programma richiama routine
di codice diverse poste a monte (GoTo all’indietro) o, più
di rado, a valle (GoTo in avanti) del codice in esecuzione corrente interrrompendo
la sequenzialità delle istruzioni. Tutto questo non è ben
gradito ad un processore che si trova cosi di fronte ad una condizione
di Branch (salto) ed è per questo che è stata ideata la
Branch Prediction Unit. E se la predizione non va a buon fine cosa accade?
Una previsione errata comporta lo svuotamento completo delle Pipeline
del processore. Con il termine Pipeline (canalizzazione) si usa indicare
la catena di montaggio delle istruzioni interna al processore; nel 486
ne abbiamo una e nel Pentium, come abbiamo visto, ne abbiamo due che lavorano
in parallelo. Tali pipeline sono divise in cinque diversi stadi: incanalando
le istruzioni in una Pipeline a più stadi e suddividendo il processo
elaborativo tra gli stadi stessi la Cpu può cominciare ad elaborare
il primo stadio di una successiva istruzione mentre quella in fase di
elaborazione corrente è appena passata allo stadio successivo.
Come si può osservare nella schema mentre la istruzione (1) ha
passato il primo stadio la (2) inizia ad essere elaborata. Quando la (2)
è salita al secondo stadio la (1) è salita al terzo e la
(3) è in ingresso ecc. Il vantaggio (teorico) è dunque di
poter elaborare una istruzione per ogni singolo ciclo di clock per ogni
pipeline. Abbiamo detto “teorico” perchè una condizione
di Branch nel 486 cosi come una previsione di Branch errata nel Pentium
crea un punto di ingorgo nella canalizzazione che costringe ad eliminare
tutte le istruzioni precedenti e le successive a tale punto. Questa condizione
è nota anche come Stallo della pipeline.

La potenza della unità coprocessore matematico (Fpu) del Pentium
è praticamente quadrupla rispetto a quella del 486 e questo lo
si deve al fatto che sono state introdotte nel nucleo del processore tre
nuove sezioni che eseguono direttamente in hardware calcoli di addizione,
moltiplicazione e divisione. Da un punto di vista dell’elettronica
le primissime versioni di Pentium a 60 e 66 Mhz erano integrate a 0.8
micron con alimentazione a 5 volt per poi passare ai 0.6 micron nelle
successive release da 75 a 166 Mhz con alimentazione a 3.3 Volt. La tecnica
di integrazione usata era la nuova Bicmos che fa uso di transitori bipolari
in quei punti della microcircuiteria ove necessitano tempi di risposta
rapida e di transitor Cmos (complementary metal oxide semiconductor) per
la restante parte. Questi ultimi fanno uso di strati di isolante sul silicio
e sulle micropiste in allumino per ridurre le correnti e le dispersioni
elettromagnetiche contenendo i consumi e la potenza dissipata dai circuiti.
L’indice Norton Si variava dai 190 per il modello a 60 Mhz a 638
per il modello a 200 Mhz.
Pentium Mmx e le istruzioni multimediali
E’ stato introdotto nel Gennaio 1997 ed è stato l’ultimo
processore della quinta generazione. Sfruttando una integrazione a 0.35
micron ha potuto essere alimentato a soli 2.8 volt crescendo in frequenza
dai 166 ai 233 Mhz (266 Mhz nella versione per Notebook) con un indice
Norton Si di 750. Il bus rimaneva a 64bit 66MHz. Era più veloce
del Pentium classico del 8-10% a parità di frequenza in quanto
disponeva di una cache L1 raddoppiata a 32 Kbyte (16+16) che ha fatto
lievitare il numero dei transistor integrati a 4.5 milioni. La vera novità
sta però nella introduzione di 57 nuove istruzioni nel codice base
x86. Queste istruzioni, dette Mmx (MultiMedia Extension) sono state il
primo tentativo di estendere il codice base x86 ed adattarlo alle nuove
applicazioni multimediali di grafica 2D e (in parte) 3D, streaming video,
audio, riconoscimento e sintesi vocale. Trattasi di istruzioni di tipo
Simd (Single Instructions Multiple Data) ciascuna delle quali può
operare su diversi blocchi di dati sfruttando le unità di elaborazione
parallele interne al processore. Le istruzioni eseguite dai software multimediali
infatti ben si prestano ad essere parallelizzate in quanto sono costituite
per lo più da loop (cicli) ripetitivi ed operano spesso sugli stessi
gruppi di dati. Le istruzioni MMX operano su 64bit alla volta, configurabili
secondo l'applicazione specifica come 8 word da 8bit, 4 word da 16bit,
o 2 word da 32bit. Tutti i successivi processori x86 hanno poi adottato
queste istruzioni ma il loro sfruttamento reale da parte dei programmatori
di applicativi software ha tardato un paio di anni prima di venire implementato.
Pentium Pro, Pentium II e Pentium III, la sesta generazione
Per aumentare la potenza di elaborazione di un processore si può
agire per due vie: aumentare la sua frequenza operativa (Clock) in Mhz
oppure migliorare le sue capacità IPC (Instructions per Clock)
ossia la possibilità di elaborare, parallelizzandole, più
istruzioni per ciclo di clock. La parola clock in inglese letterale significa
orologio ma in questo contesto è da intendersi come “temporizzatore”;
parliamo cioè di un apposito circuito oscillante al quarzo che
genera una determinata frequenza sulla quale vengono temporizzati diversi
eventi logici.
Il Pentium Pro ha rappresentato un vero salto generazionale. Costituito
da 5.5 milioni di transistor integrati a 0.6 micron questo processore
superscalare implementa delle nuove tecniche di elaborazione dati che
possiamo riassumere in:
Cache L2 integrata nel package: oltre alla cache di primo livello da 32
Kbyte anche la cache di secondo livello da 256 Kbyte è stata integrata
nel chip per fornire più rapidamente i dati alle unità di
esecuzione. In realtà la cache non è integrata sullo stesso
pezzo di silicio (die) ma su una porzione separata che condivide con il
nucleo principale lo stesso package ed un canale di comunicazione preferenziale.
Questo rendeva il Pentium Pro costosissimo da produrre ma tale direzione,
abbandonata con il Pentium II sarà reintrodotta in seguito nel
Celeron e da li in tutti i processori successivi.
Superpipeline: è stata aumentata a 14 la profondità delle
pipeline di esecuzione delle istruzioni, più stadi di preparazione
intermedia delle operazioni permettono di mantenere le unità di
elaborazione sempre occupate e consentono di accrescere la frequenza operativa
in Mhz del processore.
Superscalarità spinta: sono state portati a tre i canali di elaborazione
parallela delle istruzioni contro i due del Pentium. Possiamo dire, con
buona approssimazione, che il Pentium Pro implementa al suo interno tre
486 operanti in parallelo.
Esecuzione fuori ordine (Out of order): Nel Pentium, come abbiamo visto,
era possibile l’esecuzione contemporanea di due istruzioni utilizzando
due pipeline separate; l'esecuzione era legata alla sequenza definita
dal programma, perciò ogni volta che un'operazione non poteva essere
eseguita subito a causa di un stallo, entrambe le pipeline restavano ferme.
Nel Pentium Pro invece le operazioni x86 vengono convertite in istruzioni
micro-ops (micro-operazioni) con una tecnica che ricorda i processori
Risc. Attraverso questo passaggio si eliminano molte delle limitazioni
tipiche del set di istruzioni x86, cioè la codifica irregolare
delle istruzioni e le operazioni sugli interi che richiedono il passaggio
di dati dai registri interni alla memoria. Le micro-ops vengono quindi
passate a un motore di esecuzione capace di eseguirle fuori ordine, modificandone
la sequenza così da mandare in esecuzione quelle pronte e lasciare
in attesa quelle che non sono. Con ciò se una Pipeline nel Pentium
Pro va in stallo le altre due possono continuare ad operare senza essere
svuotate. La sequenza delle istruzioni viene infine riordinata da una
apposita sezione hardware detta Reorder Buffer alla fine della elaborazione.
Esecuzione speculativa: nel Pentium Pro le funzioni di predizione dei
salti sono state potenziate ed oltre alla unità di predizione dei
salti è presente una elaborazione speculativa. Essa consiste nell'eseguire
istruzioni che si trovano al di là di un'istruzione di salto prima
che quest'ultima sia stata eseguita e che quindi si sappia con certezza
che esito avrà la diramazione. Il processore non può naturalmente
aggiornare i registri interni o la memoria centrale con i risultati "speculativi"
ma deve aspettare il responso della unità di branch. In caso di
errata predizione del salto, il processore deve essere in grado di ritornare
sui propri passi azzerando tutte le operazioni già eseguite che
si riferiscono a istruzioni collocate oltre il punto di salto. Nel caso
la speculazione risultasse poi sbagliata le istruzioni speculative vengono
cancellate prima che giungano alla fase di termine. E’ un po’
il meccanismo logico che usano gli speculatori di borsa che vendono azioni
non appena una società comincia ad andare male pur non avendo dati
certi su un suo effettivo crollo ne su una sua possibile ripresa.
Per quanto possa sembrare strano dopo l’architettura del Pentium
Pro, che è stata la base di realizzazione di tutti i processori
successivi, non ci sono state grandi mutazioni tecniche strutturali nel
miglioramento delle prestazioni delle Cpu Intel atte ad aumentare il fattore
Ipc.
Il nucleo del Pentium II deriva direttamente dell'architettura “P6”
del Pentium Pro. Addirittura si potrebbe parlare quasi di una semplificazione
(es: riduzione delle pipeline da 14 a 10 stadi, finestra per l'esecuzione
fuori ordine e speculativa più piccola, etc..) con l'obbiettivo
di concentrarsi più sull' aumento della frequenza operativa che
non sull'aumento del fattore Ipc (Istructions per Clock). Con il Pentium
II si cambia anche formato, dal vecchio processore su zoccolo (socket)
Intel passa ad un nuovo formato proprietario denominato Slot I consistente
in un connettore a pettine nel quale alloggiare una "cartuccia"
processore contenente il chip vero e proprio e un certo quantitativo di
cache L2 ad alta velocità (512KB a metà frequenza nei modelli
normali,1MB o 2MB a piena frequenza nei modelli Xeon dedicati ai server).
Lo slot I sarà disponibile prima a 66MHz e successivamente a 100MHz
per meglio supportare i processori con frequenze di circa 400MHz.
Dopo il Pentium II è la volta del debutto del Celeron. Intel si
rende conto che l'assemblamento della cartuccia e della cache di secondo
livello rendono il prodotto troppo costoso e difficile da offrire alla
fascia bassa del mercato per cui prima immette sul mercato una versione
del Pentium II priva della cache di secondo livello, e poi viste le scarse
prestazioni di questa soluzione, mette a punto un processore dotato di
cache L2 ridotta a 128K ma direttamente integrata nel die di silicio.
Il Celeron debutta a 300MHz con bus a 66MHz e per molto tempo sarà
il cavallo di battaglia di Intel nel settore entry-level vendendo moltissimi
pezzi e sbaragliando la concorrenza di AMD. Con il Celeron debutta anche
la tecnologia di integrazione a 0.25 micron con tensione di core di 2V,
utilizzata anche nei Pentium II dai 350MHz in poi.
Al Pentium II succede il Pentium III, invero estremamente simile al suo
predecessore. Il PIII debutta a 450MHz, utilizza ancora lo Slot I ed ha
un FSB (Front Side Bus) a 100MHz. Internamente, a parte piccole ottimizzazioni,
la innovazione più importante è costituita dall'introduzione
delle estensioni SSE (note anche come KNI). Le SSE rappresentano per i
numeri in virgola mobile quello che le MMX rappresentano per i numeri
in virgola fissa. In pratica viene potenziata l'unità floating
point per poter gestire operazioni di tipo SIMD (Single Istruction Multiple
Data). L'unità manipola dati ampi 128bit e configurabili come 4
numeri floating point a singola precisione (32bit) o come 2 numeri a doppia
precisione (64bit). Le SSE risultano utili nella manipolazione dei contenuti
multimediali, nella decompressione dei filmati MPEG2 (DVD) e nell'elaborazione
della geometria 3D (T&L).
L'ultima evoluzione dell' architettura P6 porta al Pentium III Coppermine.
Il Core Coppermine integra nel die 256KB di cache L2 a piena frequenza,
bassa latenza ed elevata banda (256bit di collegamento con il core). Con
il Coppermine si torna anche al socket (socket 370), abbandonando il costoso
Slot I, e si raggiungono i 133MHz di FSB. Intel coglie anche l'occasione
per innaugurare la nuova tecnologia a 0.18 micron che porterà il
Coppermine dai 600MHz del debutto alle soglie dei 1100MHz, frequenza alla
quale la tecnolgia P6 comincia a mostrare tutti i suoi limiti costringendo
Intel ad un lungo stallo nell'avanzamento tecnologico, stallo che durerà
fino alla presentazione del Pentium 4 e del Pentium III Tualatin.
Mentre il Pentium 4 rappresenta di fatto il passaggio per Intel dalla
sesta alla settima generazione, il Pentium III Tualatin non è altro
che l'ennesima ottimizzazione della collaudata architettura P6 tesa a
servire il mercato dei portatili e dei server in attesa della definitiva
stabilizzazione della piattaforma Pentium 4. Il core Tualatin annovera
una cache L2 integrata da ben 512KByte e una tecnologia di 0.13 micron,
per il resto risulta identico al Pentium III. Nuova veste anche per il
Celeron il cui bus passa a 100MHz e che nelle ultime versioni eredita
la tecnologia Tualatin a 0.13 micron che permette l'integrazione di 256KByte
di cache.
AMD K6 - Il primo processore AMD di 6° generazione
Il K6 implementò l'architettura RISC86 superscalare, aggiunse il
supporto alle istruzioni MMX, eliminò il P-Rating e portò
la cache di primo livello a ben 32K + 32K (contro i 16 + 16 del Pentium
MMX, Pentium Pro e Pentium II). L'architettura interna ricalca le features
già descritte per i processori di sesta generazione (vedi anche
schema più in basso):
- Advanced RISC86 superscalar microarchitecture
- Seven parallel execution units
- Multiple sophisticated x86 to RISC86 decoders
- Two level branch prediction
- Speculative execution Out-of-Order Execution
- 64K on-chip level one cache
- 32K instruction cache
- 32K writeback data cache
- MMX capability
- Socket 7 compatible
- .35 micron architecture
Benchè fosse dotato di features avanzate, il K6 aveva una pecca:
era costruito su pipeline a bassa latenza a 6 stadi e 8,8 milioni di transistor,
ottima per ridurre gli stalli ma difficile da far salire in frequenza,
almeno rispetto ai 10 stadi del Pentium II. La floating point unit non
è completamente pipelined e quindi esibisce performance ampiamente
inferiori al Pentium. La cache di secondo livello è sempre saldata
su piastra e funziona a 66Mhz contro la cache integrata su schedina dedicata
del Pentium II e cloccata a metà frequenza del processore; questo
rappresentò una debolezza ma anche un punto di forza della piattaforma
K6 perchè permetteva il riutilizzo di piastre Socket7 (quelle del
Pentium) ed in ogni caso costi minori rispetto alla proposta Intel.
AMD K6-II - Il secondo processore AMD di 6° generazione
Nel giugno del 1998 AMD passa al K6-2 (9,3 milioni di transistor) che
innaugura il Super Socket 7 a 100MHz e introduce la tecnologia 3DNow!.
Si tratta di 21 nuove istruzioni multimediali che anticiperanno le successive
SSE di Intel. La tecnologia 3DNow! introduce l'approccio SIMD (Single
Istruction Multiple Data) anche con i numeri in virgola mobile (MMX opera
solo sugli interi) e permette l'esecuzione di fino a 4 istruzioni su numeri
Floating point a singola precisione (32bit). AMD pensava di compensare
le scarse prestazioni della sua Floating point unit con la tecnologia
3DNow!, ma lo scarso supporto da parte degli sviluppatori fece presto
riemergere le gravi debolezze in quel settore. Il K6-II ottenne comunque
un discreto successo nella fascia entry-level del mercato ma al salire
della frequenza cominciò a pesare la scarsa velocità della
L2 cache esterna (100MHz).
AMD K6-III - L'ultimo esponente della famiglia K6
Nel '99 AMD introdusse il K6-3 che per un pò fece dimenticare
i problemi del Super Socket 7 grazie ad una L2 cache da 256KByte integrata
direttamente sul die del processore ed operante alla stessa frequenza.
Questo stratagemma fece vedere di cosa era realmente capace il core K6-II
e permise ad AMD di ottenere prestazioni sugli interi migliori del corrispondente
P-III. Il 22 Febbraio del 1999 furono lanciati i modelli a 450 e 500MHz.Nel
K6-3 AMD riuscì a integrare 21.300.000 transistor usando una tecnologia
0.25 micron. Ancora scarse le prestazioni sul versante Floating-Point.
Ecco infine lo schema funzionale del core K6, K6-II e K6-III:

AMD K7 - 7° generazione
Intenzionata a superare tutti i limiti dei precedenti progetti, AMD
produce un nuovo processore capace finalmente di competere su tutti i
fronti con i prodotti Intel.
Ed infatti con l'immissione sul mercato del K7 Athlon, per la prima volta,
Intel viene battuta su tutti i fronti: sul fronte della massima frequenza
di clock, sul fonte delle prestazioni velocistiche assolute e relative,
sul fronte dei prezzi. E' un vero smacco per Intel.
L'architettura dell'Athlon
L' Athlon include 3 decoders per istruzione x86. Questi decoders traducono
le istruzioni x86 in macro operations (MacroOPs) a lunghezza fissa per
un più alto rendimento nell'esecuzione dell'elaborazione. Invece
di eseguire direttamente le istruzioni x86 che hanno lunghezza da 1 a
15 bytes, l'Athlon esegue le MacroOPs RISC-Like migliorando di molto le
prestazioni delle altre unità di elaborazione ed ottimizzazione.
Una volta che le MacroOPs sono decodificate, fino a 3 MacroOPs sono inviate
all' ICU, per ogni ciclo di clock. L'ICU è un Buffer Reorder per
MacroOPs a 72 entry che gestisce lo smistamento delle istruzioni, esegue
la rinominazione del registro per gli operandi, e gestisce tutti gli stati
d'eccezione e le operazioni di ritiro. L' ICU invia le MacroOPs agli Schedulers
delle numerose unità di esecuzione multiple presenti nel K7.
L' Athlon contiene uno scheduler a 18 entry per le istruzioni sui numeri
interi e uno scheduler a 36 entry per l'FPU/3DNow. Questi schedulers distribuiscono
le MacroOPs alle nove pipeline di esecuzione indipendenti:
3 per i calcoli sugli interi
3 per il calcolo degli indirizzi
3 per l'esecuzione delle Mmx, 3dnow! e istruzioni floating point x87
L' Athlon offre il più potente e avanzato motore di floating point
per piattaforma x86. L'FPU dell' Athlon è basata su 3 unità
di esecuzione completamente pipelined (contro le due unità del
PIII). Queste 3 unità di esecuzione (FMUL, FAD e FSTORE) eseguono
tutte le istruzioni x87, Mmx, Enhaced 3dnow.
I primi Athlon sono stati costruiti con tecnologia a 0.25 micron e interconnessioni
in Alluminio posti in una cartuccia tipo Pentium II e inseriti in uno
slot chiamato Slot A, simile concettualmente allo Slot I di Intel. Nella
cartuccia è presente una L2 cache di 512KB funzionante tipicamente
ad 1/2 o 1/3 della frequenza del core.
Qui di seguito trovate lo schema esplicativo del core di tutta la famiglia
K7:

|
|