| Quinta
generazione: la rivoluzione Pentium
|
| Nella
prima parte abbiamo
tracciato la storia dei processori x86 dagli esordi fino
al primo processore Intel di 4° generazione: il 486.
In questa seconda parte parleremo invece delle generazioni
successive, la 5° e la 6°, che tanto hanno contribuito
alla diffusione dei PC nel mondo e che ancora in grande
parte "risiedono" nei nostri Case... In questi
processori, come vedremo, cominciano a nascere sempre più
sofisticate tecniche di ottimizzazione e dalla 5° generazione
in poi comincia anche l' avventura di AMD come vero e agguerrito
concorrente di Intel...ma di questo parleremo nella prossima
puntata.
|
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.