lunedì 25 gennaio 2010

Storia del Microprocessore parte 2

..... continua da "Storia del microprocessore"

P.S.: Mi raccomando, leggete la storia di Federico Faggin l’ingegnere veneto che per primo al mondo creò il microprocessore Intel 4004 (prima Cpu della storia )dirigendo un’equipe di tecnici nei laboratori di ricerca americani di Intel…...un onore e orgoglio non da poco per noi Italiani!



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 furono costruiti con tecnologia a 0.25 micron e interconnessioni in Alluminio ed erano posti in una cartuccia tipo Pentium II e inseriti in uno slot chiamato Slot A, simile concettualmente allo Slot I di Intel. Nella cartuccia era 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:

AMD K7 - Thunderbird e Palomino

Come Intel, anche AMD passò più tardi (seconda metà 2000) all'integrazione di una cache di secondo livello direttamente sul die del processore. Con il passaggio alla tecnologia 0.18 micron con interconnessioni in Rame (core Thunderbird), AMD è riuscita a portare un consistente aumento delle frequenze e una sensibile diminuzione del calore prodotto oltre alla su menzionata integrazione di una L2 cache, da 256KByte per il modello Athlon e da 64KByte per il Duron, operante a piena velocità. Il passaggio coincidette anche con l'abbandono dello SlotA in favore del più economico e pratico SocketA.

Il resto è storia dei nostri giorni: Il P-III ha perso la sfida con il Thunderbird sia sotto il profilo delle frequenza (il PIII si è dovuto fermare a 1.1GHz per limiti tecnologici) che sotto quello della potenza specifica e del costo. Certamente AMD ha saputo sfruttare bene il grave momento di stallo che Intel vissuto dai tempi dell fallimentare PIII 1.13GHz fino a poco tempo fa, giocando molto sulla leva prezzo per abbracciare sempre più ampie fette di mercato ai danni dell'avversario. Alla stabilizzazione della piattaforma Pentium 4 da parte di Intel, AMD risponde con una ulteriore ottimizzazione della collaudata ed efficientissima architettura K7: l'Athlon XP. Poche le innovazioni del core Palomino ma sufficienti a guadagnare un incremento di prestazioni dell'ordine del 10-20% rispetto alle soluzioni precedenti e a consolidare la quota di mercato di AMD che pare sia ritornata su un valore del 30%. Con L'Athlon XP AMD reintroduce anche il vecchip P-Rating come risposta alle elevate frequenze del Pentium4 non rappresentative della potenza sviluppata in relazione ai prodotti AMD.

Come preannunciato, AMD non ha introdotto grosse modifiche al suo nuovo core (in particolare le unità di elaborazione principali e le cache rimangono identiche a quelle precedenti) ma ne ha ottimizzato alcuni aspetti per poter ottenere minori consumi, maggiori velocità di clock e maggiore potenza utilizzando lo stesso numero di transistor (37,5 Milioni contro i precedenti 37 Milioni del Thunderbird). Andiamo ad analizzare queste nuove caratteristiche:

- Incremento delle L1 TLB Entries: Si tratta di una piccola cache interna al processore che viene utilizzata per accelerare il processo di traslazione degli indirizzi da logici a fisici ( Traslation Loookaside Buffer ). L'incremento del buffer porta a una maggiore uniformità delle prestazioni in condizioni di Multi-Tasking e nei Server (modello Athlon MP).

- Introduzione del Data Prefetch: Si tratta di un meccanismo di previsione dei dati che verranno utilizzati dal flusso di istruzioni in esecuzione; la predizione permette di caricare in cache anticipatamente i dati necessari aumentando il rendimento nell'accesso alla memoria esterna. I maggiori benefici si hanno in architetture ad elevata banda e alta latenza quindi quelle tipiche del Pentium 4 (che infatti ha un suo meccanismo avanzato di pre-fetch) e dell'Athlon con memoria DDR. La vera novità è comunque rappresentata dalla possibilità di controllare via software il Prefetch.

- Compatibilità con le SSE: AMD ha introdotto nel set 3DNow 52 nuove istruzioni che rendono di fatto l'Athlon completamente compatibile con la tecnologia SSE di Intel. Ai puristi questo può sembrare un controsenso ma permetterà agli sviluppatori di uniformare lo sviluppo del codice sia per Athlon che per Pentium. L'implementazione del set di istruzioni SSE2 (presenti nel P4) sarà appannaggio della futura architettura x86-64 di AMD.

- Tecnologia PowerNow!: La tecnologia di riduzione del consumo permette all'Athlon un utilizzo proficuo nel settore Mobile (modello Athlon 4). PowerNow! consente di variare tensione e frequenza del core in funzione dell'impiego del processore. Sono previsti fino a 32 step a partire da 500MHz - 1.2V fino alla frequenza massima del processore. La tensione del core alla frequenza nominale si è molto ridotta passando dagli 1.7V a 1.4V (per frequenze intorno al GHz). AMD ha pensato bene di inserire anche un diodo di relavamento termico (analogamente al PIII e PIV) per garantire una maggiore protezione del core da eventuali stress termici. La riduzione dei consumi è al minimo del 20% (grazie alla tensione del core), mentre la tecnologia PowerNow! permette di estendere l'autonomia delle batterie di un portatile di fascia media fino a 3 - 3,5 ore.


Per adesso il nostro viaggio nel passato e nel presente dei processori x86 finisce qui, in futuro aggiungeremo a questa risorsa le caratteristiche dei futuri processori AMD ed Intel in particolare di tutti quei fantastici processori multi-core con le quali architetture gli ingegneri di Intel e Amd non ci dormono la notte (e forse nemmeno io talmente ne sono appassionato).

Quad-core...Extreme-edition..Quad-pumped...Core 2 Duo..e così via .

Un’inarrestabile corsa alla potenza estrema per la conquista della leadership più ambita:La Cpu più potente al mondo…(del momento..s’intende!)





Fine articolo

Storia del Microprocessore

L'Intel 4004 fu il primo microprocessore su singolo chip, così come anche il primo commerciale. Il microprocessore fu inventato da Federico Faggin, Ted Hoff, Stan Mazor e Masatoshi Shima nel 1971, con un lavoro molto intenso portato avanti nei laboratori della Intel.



L'Intel 4004 fu messo in commercio con un package a 16 pin dual in-line il 15 novembre del 1971. Il 4004 fu il primo processore progettato e costruito dalla Intel, che in precedenza costruiva chip di memoria.





Originariamente progettato per la compagnia giapponese Busicom per essere utilizzato nella loro linea di calcolatrici, il 4004 fu anche provvisto di un insieme di chip di supporto, era costituito da circa 2.300 transistor, e fu seguito l'anno successivo dal primo microprocessore ad 8 bit, l'Intel 8008, formato da 3.300 transistor e l'Intel 4040.



Il quarto prodotto rilasciato nel mercato dei microprocessori da Intel iniziò la rivoluzione dell'informatica, l'Intel 8080.



Indice



* 1 Specifiche tecniche

* 2 Chip di supporto

* 3 Collezionismo







Specifiche tecniche



* Massima velocità di clock di 740 kHz.

(N.B.:Tutti i data sheet dell'Intel 4004, inclusi i primi rilasciati nel novembre del 1971, indicano chiaramente che il periodo minimo di clock è di 1350 nanosecondi, vale a dire una velocità di clock di 740 kHz. Sfortunatamente molte pagine web (incluso il sito della Intel) riportano una velocità massima di clock di 108 kHz. Il tempo minimo per il 4004 per eseguire un'istruzione è di 10,8 microsecondi (8 cicli di clock), e si direbbe che qualcuno abbia confuso questo dato con la velocità di clock. Da allora l'errore si è diffuso ovunque).



* Memorizzazione separata di codice e dati (architettura Harvard). Contrariamente ai progetti secondo l'architettura Harvard, che utilizzano anche bus separati, il 4004 utilizza un singolo bus multiplexato per trasferire:

o Indirizzi a 12 bit

o Istruzioni in word di 8 bit, in uno spazio separato rispetto ai dati

o Dati in word di 4 bit

* Il set di istruzioni comprende 46 istruzioni (di cui 41 a 8 bit e 5 a 16 bit)

* 16 registri a 4 bit

* Alimentazione a 12 Volt.

* Stack per le subroutine con al massimo 3 livelli di annidamento

* Poteva indirizzare fino a 640 Byte di memoria RAM.



Chip di supporto



* 4001: ROM di 256 byte (256 istruzioni a 8 bit), e una porta di I/O incorporata

* 4002: RAM di 40 byte (80 word dati a 4 bit), e una porta di output incorporata di 4 bit; la RAM è organizzata in quattro "registri" di venti word a 4 bit.

o 16 word (usate per la mantissa nel progetto originale per la calcolatrice)

o 4 word di stato (usate per le cifre dell'esponente e i segni nel progetto originale)

* 4003: shift register a 10 bit con output parallelo per l'utilizzo con tastiere, display, stampanti, ecc.

* 4008: latch a 8 bit per l'accesso a chip di memoria standard, con incorporati un chip select a 4 bit e una porta di I/O

* 4009: convertitore da accessi all'area dati e I/O in memoria standard e chip di I/O



Collezionismo



L'Intel 4004 è uno dei chip più ricercati nell'area del collezionismo. I più preziosi sono i 4004 dorati e bianchi, con visibili le cosiddette "tracce grigie" sulla zona bianca (il package originale). Nel 2004 questi chip sono stati venduti intorno ai € 400 su eBay. Le versioni leggermente meno preziose sono i chip bianchi e dorati senza le tracce grigie, che hanno una quotazione tra i € 200 e i € 250. Altri chip ricercati dai collezionisti sono gli Intel 4040.







Lista dei microprocessori Intel

Famiglia 4 bit/8 bit: 4004 | 4040 | 8008 | 8080 | 8085 Famiglia 16 bit: 8086 | 8088 | 80186 | 80286

Famiglia 32 bit: 80386 | 80486



Famiglia Pentium: Pentium | Pentium Pro | Pentium II | Celeron | Pentium III | Pentium III-M | Pentium 4 | Pentium 4-M | Mobile Pentium 4 | Pentium 4 EE | Celeron D | Pentium D | Pentium EE

Settore Mobile: Pentium M | Celeron M

Famiglia Core:Core Duo | Core Solo | Core 2 Duo | Core 2 Extreme

Settore Server: Xeon

Non x86 compatibili: Intel iAPX 432 | Intel i860 | Intel i960



Famiglia IA-64: Itanium | Itanium 2



Vedi la lista completa di tutte le CPU della storia in questo sito







Elettronica ed evoluzione dei Processori x86





Per comprendere l’architettura degli attuali processori per Personal Computer è necessario conoscere bene la loro evoluzione e la tecnologia elettronica che ne è alla base. La famiglia di processori x86 ha radici profonde nella storia dell'elettronica moderna e con tutti i pro e i contro del caso ancora oggi, a 20 anni dalla sua introduzione sul mercato, continua a costituire il cuore dei nostri PC.



Lo scopo di questa serie di articoli è mettere in luce alcune caratteristiche tecnologiche e funzionali dei processori x86 analizzandone anche l’affascinante evoluzione storica. Questi particolari circuiti integrati hanno profondamente modificato l’evoluzione della società umana da un paio di decenni a questa parte e sono alla base della tecnologia moderna. L’analisi riguarderà l’evoluzione dei processori specifici per personal computer (x86) ricostruendo la loro storia anche dal punto di vista dell’elettronica dei microcircuiti.



Seguitando a leggere potrete rendervi conto che le informazioni a cui avrete accesso vi apriranno nuove porte verso la conoscenza di questi straordinari dispositivi high-tech permettendovi di scegliere con maggiore oculatezza il prossimo processore per il vostro pc. Non si riuscirà mai infatti a comprendere a pieno il funzionamento dei processori attuali se non visionando a fondo l’architettura dei modelli che li hanno preceduti nella scala evolutiva.



Processori x86 di prima generazione



Tornando agli albori della tecnologia informatica nel 1981 Intel (Integrated Tecnology) introdusse il primo processore a 16 Bit per Personal Computer Ibm Xt: il mitico Intel 8086; Nell' 8086 sono state definite le linee guida e l'ISA (Istruction Set Architecture, vedi articolo di approfondimento) dell'architettura x86 e a distanza di 20 anni, ancora oggi per garantire la compatibilità con il passato, troviamo intatti nei processori moderni elementi architetturali di questo chip capostipite della famiglia x86. La Cpu era costruita integrando nel silicio circa 29.000 transistor. La potenza di calcolo era così bassa che persino le applicazioni Dos in semplice testo a 16 colori erano lentissime ed il refresh (aggiornamento a video) dei fogli di calcolo come il Lotus 1-2-3 era cosi lento che durante un ricalcolo si poteva assistere alla ricostruzione della tabella dall’angolo in alto a sinistra a quello in basso a destra dello schermo. Ne venne prodotta anche una versione con bus esterno ad 8 bit detta 8088 la quale, avendo costi inferiori, fu poi quella maggiormente commercializzata.



Il benchmark usato allora per la misura delle prestazioni era il “Norton System Information” che per la Cpu 8086 a 4.8 Mhz segnava un indice pari a “1” e saliva a 2 per l’8086 a 10 Mhz. Questo processore poteva indirizzare al massimo 1 Megabyte di Ram di cui realmente solo 640 Kbyte erano disponibili per il sistema operativo Dos.



Processori di seconda generazione



L’introduzione dell’80286 nel 1982 significò un vero salto da un punto di vista tecnologico; con i suoi 134.000 transistor e frequenze tra 6 e 20 Mhz otteneva un indice Norton tra 8 e 21. Grazie alla sua capacità di gestire 16 Mbyte di Ram rese possibile l’apparire delle prime arcaiche interfacce grafiche (Windows 2.0 e 2.1). I 16 Megabyte di memoria erano però gestiti a blocchi di 64 Kbyte in quanto trattandosi di un processore a 16 bit la sua capacità di indirizzamento era limitata a soli 2^16=65535 byte per volta. Il 286, come tutti i processori Intel successivi, disponeva di una perfetta compatibilità all’indietro con i programmi Dos scritti per l’8086 mentre i programmi che volessero usare la memoria al di sopra del megabyte dovevano accedervi con una modalità “protetta” che rendeva disponibile tramite un driver Xms (Extended memory specification) la memoria da 2 a 16 Mbyte.

Processori di terza generazione

Il primo 80386 Dx fu realizzato nell’Ottobre 1985 integrando 275.000 transistor, partito dai 16 Mhz arrivò fino a 40 Mhz con un indice di prestazioni Norton Si da 22 a 43. Con il suo bus interno a 32 Bit poteva indirizzare una maggiore quantità di dati e gestire una quantità di memoria Ram fino a 4 Gigabyte (2^32=4.294.967.296 byte) contro il massimo limite di 16 megabyte dei precedenti processori Intel a 16 Bit. Inoltre con l’introduzione di questo processore è sparito il problema della segmentazione della memoria a blocchi da 64 Kbyte tipica del 286. La sigla Dx sta per Double word eXternal ed indica la capacità del processore di gestire due word (parole) di 16+16=32 Bit. External sta a significare che il processore comunica verso l’esterno, ossia verso il bus di memoria della scheda madre, sempre a 32 Bit. Intel produsse in seguito anche una versione a basso costo 80386 Sx (Single word eXternal) con bus interno a 32 bit ed esterno a 16 bit.



La potenza di calcolo del 386 era divenuta sufficiente a gestire un vero sistema operativo grafico di tipo Gui (Graphical User Interface) e ciò ha permesso la definitiva affermazione di Windows 3.0 e poi 3.1. In realtà queste versioni di Windows continuavano ad usare la modalità di indirizzamento della memoria segmentata a 16 Bit e bisognerà attendere Windows 95 per vedere in opera i primi software a 32 Bit. Questo processore segna anche l’entrata in campo della concorrenza di Intel: Amd (Advanced Micro Devices) aveva appena prodotto il suo primo "clone" 386 a 40 Mhz e da qui cominciò la battaglia a suon di denunce e carte bollate tra le due grandi aziende costruttrici di processori.

La memoria cache

Il 386 Dx segna anche l’introduzione della tecnologia di caching della memoria. Si vide che il costoso (per l’epoca) 386 a 33 Mhz, in condizioni standard e con l’uso di comune memoria Ram dinamica (Dram Fastpage), non risultava affatto più veloce del 386 a 25 Mhz. La lentezza della memoria Ram da 80 ns (nanosecondi) a cui il processore accedeva per scrivere e rileggere dati fungeva da collo di bottiglia strozzando le prestazioni. Si pensò cosi di saldare sulla scheda madre un paio di chip da 32-64 Kbyte di veloce memoria Sram (Static Ram – Ram Statica) da 20 ns per velocizzare la trasmissione dati tra il processore e la memoria Ram di sistema (vedi figura).



Il meccanismo è basato sul principio che alcuni dati, appena impiegati, possano essere richiesti di nuovo per la successiva elaborazione. Se gli stessi vengono quindi memorizzati in un’area di memoria ad accesso ultrarapido il processore può avere immediato accesso agli stessi senza stare a richiederli di nuovo alla lenta memoria Ram. Per fare un esempio pratico prendiamo una Cpu a 386 a 40 Mhz funzionante su una scheda madre dotata di Ram dinamica da 80 ns; a 40 Mhz il 386 impiega 20 ns per completare un ciclo di eleborazione, ogni accesso alla memoria centrale deve durare quindi almeno quattro cicli di clock (80/20=4). Abbiamo detto “almeno” perche poi la Ram dinamica ha anche dei cicli di attesa (Wait States) che possono far lievitare a 6 i cicli di clock nei quali il processore rimane in stato di Idle (ozio) ossia a “girarsi i pollici” in attesa che la memoria Ram fornisca i dati richiesti.

Ciò accade perché la Ram dinamica Dram è costruita in modo tale da trattenere le informazioni in essa memorizzate solo per un brevissimo lasso di tempo e quindi richiede un continuo rinnovo (refresh) del proprio contenuto, sia che le informazioni (i bit di dati) in essa presenti vengano aggiornati o meno. La necessità del refresh della memoria DRam dipende dal fatto che i singoli bit sono registrati per mezzo di transistor in celle che mantengono, a mo’ di condensatori, una carica elettrica. Se la cella è carica il Bit vale 1, se è scarica vale 0. Esiste a tale scopo un apposito circuito che si occupa di effettuare il refresh delle celle di memoria ogni x cicli di clock della Cpu. Possiamo quindi immaginare la memoria Ram dinamica di un computer come una smisurata griglia di celle atte a contenere i dati che di volta in volta il processore richiede.

La RAM statica invece può conservare meglio i dati più poiché, essendo le sue celle in grado di trattenere a lungo la carica elettrica, viene meno il bisogno di effettuare continui refresh. Frapporre quindi una piccola quantità di memoria cache Sram, ossia una memoria di transito veloce da 20 ns, tra il processore e la memoria Ram dinamica di sistema può far si che il 386 a 40 Mhz possa accedere ai dati in un sol ciclo di clock aumentando di fatto le prestazioni nell'accesso alla memoria del 400-600%. Questa piccola e costosissima memoria Sram, è stata appunto definita memoria cache e contiene i dati più prossimi alle unità di esecuzione del processore. Abbiamo voluto a lungo sottolineare questo aspetto poiché, come è facile immaginare, con l’aumentare delle frequenze in Mhz dei processori si è verificò (e continua tuttoggi a verificarsi) il problema dei cicli di latenza delle memorie Ram che costituisce oggi il maggior impedimento alle prestazioni degli attuali processori. Vedremo nel seguito come di recente questo problema è stato affrontato.

Come ragiona un processore?

Un microprocessore è uno speciale circuito integrato che, facendo uso di logica digitale, processa una serie di bit che contengono informazioni (numeri) sotto il controllo di altre serie di bit che compongono invece le istruzioni da applicare su tali numeri. Le operazioni vengono svolte in particolari aree di memoria dette registri all’interno del processore.

Facciamo un esempio di un semplice calcolo: il processore per prima cosa carica uno dei numeri in uno dei suoi registri, poi ne carica un altro in un secondo registro. Quindi legge l’istruzione di programma che dice al chip quale particolare operazione dev’essere svolta (ad esempio una somma). L’istruzione attiva un altro minuscolo programma che si trova all’interno di una speciale unità di decodifica che impone ai circuiti del chip di calcolare il risultato dell’operazione e di porlo in un altro registro. Calcolato il risultato una successiva istruzione permette l’uscita della risposta verso la memoria Ram e di qui verso una unità di Output (il monitor od una stampante). In pratica quindi un processore “ragiona” in termini seriali, ossia esegue un determinato numero di istruzioni una di seguito all’altra richiamando dati dalla memoria Ram di sistema ed emettendo dati ad operazione effettuata.

Gli attuali computer sono pertanto in grado di essere molto veloci nel calcolare dati ma essendo seriali non possono elaborare istruzioni diverse da quelle introdotte in Input in partenza. Al contrario il cervello umano, per fare un esempio, è un sistema di elaborazione a parallelismo massiccio (una rete di 10 miliardi di neuroni), poco efficiente in termini puramente computazionali ma capace di elaborare dati eterogenei provenienti contemporaneamente da più fonti.

Cpu, Alu ed Fpu

I processori di classe x86, possiedono due unità di calcolo distinte: la Alu e la Fpu. La Alu (Aritmetic Logic Unit - Unità Aritmetico Logica) serve per processare i numeri interi ossia i numeri naturali positivi 1, 2, 3, ecc. e negativi -1, -2, -3 ecc. nonchè operazioni di logica booleana. La maggior parte dei software di videoscrittura (Word), database (Access) e di grafica 2D usa la unità Alu del processore.

La unità Fpu (Floating Point Unit - Unità di calcolo in virgola mobile) serve invece per processare i numeri con virgola ossia quelli razionali frazionari ed irrazionali (3.14 ad esempio) e quindi per il calcolo di divisioni, radici, funzioni trigonometriche, logaritmi ecc.. Questo tipo di calcolo è usato da applicativi software di ingegneria come Autocad, di calcolo scientifico e, in parte, dai fogli di calcolo come Excel. Negli ultimi tre anni sempre più applicativi multimediali vanno ad usare queste istruzioni ed in particolare i sempre più diffusi videogiochi 3D (Quake I-II-III, Formula 1 Gp, ecc.) e le applicazioni di streaming video quali Flaskmpeg, Adobe premiere ecc.

La unità Fpu è detta anche “Coprocessore matematico” in quanto sui processori 8086, 80286 e 80386 la Fpu era situata su un chip esterno detto 8087, 80287 ed 80387. E’ per questo che le istruzioni classiche in virgola mobile dei processori Intel ed Amd sono dette anche x87. Nella figura potete osservare un chip coprocessore matematico 387 a 33 Mhz prodotto da Cyrix che andava inserito in uno zoccolo a parte vicino a quello del processore 386 Dx 33 Mhz di cui potenziava le capacità di elaborazione dei numeri con virgola di circa 20 volte lavorando in parallelo ad esso. L’insieme della unità Alu e della Fpu forma la Cpu (Central Processing Unit) ed è per questo che Cpu e processore significano la stessa cosa.

Con l'introduzione del primo Intel 80486 un piccola porzione di cache venne inserita all'interno dei microcircuti nel nucleo (core) del processore, il quantitativo era limitato a soli 8 Kbyte ma, essendo la cache integrata il doppio più veloce di quella esterna su scheda madre, gli 8 Kb erano sufficienti a far ottenere un raddoppio netto delle prestazioni rispetto al 386. Grazie ad un nuovo algoritmo questa piccola cache integrata non solo immagazzina i dati impiegati più di recente come le cache Sram su scheda madre ma anticipa anche gli accessi del processore importando una certa quantità di dati dalla memoria di sistema anche quando gli stessi non sono al momento richiesti dal software. Questa funzione, detta Read-Ahead (lettura anticipata), rende disponibili al processore anche una certa quantità di dati che, con elevata probabilità, verranno poi effettivamente richiesti dall’applicativo.

La maggiore efficienza computazionale del 486 derivava quindi da tre fattori fondamentali:

· Maggiore integrazione dei microcircuiti (a 1 micron) che ha permesso di elevarne la frequenza operativa in Mhz.

· Memoria cache integrata da 8 Kbyte a quattro vie con algoritmo Read-Ahead.

· Integrazione nel nucleo dell’elettronica del coprocessore matematico 80387 che era invece prima disponibile solo su un chip esterno.

Questi tre aspetti costruttivi del 486 hanno fatto si che il nucleo di questo processore arrivasse ad integrare ben 1.200.000 transistor (300.000 erano per l’80387) con un raddoppio delle prestazioni della unità Alu e la triplicazione della potenza di calcolo della unità Fpu. Tale gap prestazionale nel calcolo dei numeri in vigola mobile rispetto alla accoppiata 386+387 è dovuta in parte alla memoria di transito ad alta velocità da 8 Kbyte integrata ma soprattutto alla riduzione delle distanze circuitali tra i vari elementi. In elettronica il segnale deve seguire percorsi più brevi possibile per limitare al massimo sia le interferenze elettromagnetiche che le dispersioni del segnale stesso. Raggruppare i tre componenti ed integrarli sullo stesso quadratino di silicio ha quindi ridotto la lunghezza delle connessioni all’ordine dei millesimi di millimetro contro gli svariati centimetri di rame che è necessario stendere su un circuito stampato per unire i tre componenti (Alu, Fpu e Cache) a sé stanti.

I primi esemplari del 486 presentati nel 1989 funzionavano con una frequenza di 25 MHz e sono in seguito passati ai 33 MHz. Il 486 Sx era invece una versione economica privata del coprocessore matematico 80387 integrato. Quando Intel ha però introdotto il modello 486 Dx a 50 Mhz i produttori di schede madri fecero notare che una frequenza così elevata (per l’epoca) poteva introdurre disturbi di segnale e correnti parassite sulle piste delle schede madri. Di conseguenza intel produsse il processore 486 Dx2 il quale per via di un moltiplicatore interno 2x (leggi “2 per”) poteva andare a 66 Mhz pur funzionando su un bus di sistema a 33 Mhz. In seguito venne introdotto il 486 Dx4 a 100 Mhz con moltiplicatore interno 3x (33.3x3=100). La tecnica del moltiplicatore interno è stata portata all’estremo negli attuali processori e nel Pentium 4 in particolare. Avrete dunque capito che ad impostare la frequenza in Mhz del processore è un apposito circuito presente sulla scheda madre. Questo circuito detto “clock generator” è un oscillatore al quarzo che genera la frequenza di bus di sistema, frequenza dalla quale poi si ricavano, tramite moltiplicatori o divisori quella del processore e di tutti gli altri componenti (Memoria Ram, bus Pci e Agp ecc.). L’indice di prestazioni Norton Si variava dai 54 per il 486 a 25 Mhz ai 290 per il 486 a 133 Mhz di Amd.

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.



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.





La storia dei processori x86 targati AMD

Nella prima parte abbiamo tracciato la storia dei processori x86 dagli esordi fino al primo processore Intel di 4° generazione: il 486. Nella seconda parte abbiamo parlato invece delle generazioni successive, la 5° e la 6° sempre di Intel. Dalla 5° generazione in poi comincia anche l' avventura di AMD come vero e agguerrito concorrente di Intel...ed è di questo parleremo nel corso di questa parte.



AMD è praticamente da sempre attiva nel mondo dell'elettronica, in particolare nell'ambito delle memorie, delle logiche programmabili e, ovviamente, dei processori. Benchè adesso sia acerrima avversaria di Intel, un tempo le cose tra i due colossi non stavano in questi termini, ma anzi c'era collaborazione e (addirittura) amicizia, ma partiamo dall'inizio...

Advanced Micro Device nasce nel 1969, nel ' 76 inizia la partnership con Intel con la quale firma un accordo per lo sfruttamento dei microcodici degli allora neonati processori Intel, nel 1982 AMD e Intel rafforzano la collaborazione firmando un accordo decennale in cui si impegnano a lavorare congiuntamente sulla piattaforma x86. Nel '87 arriva però la rottura, AMD accusa Intel di non aver rispettato i patti e vince la causa nel 1992 anno in cui comincia a sviluppare autonomamente un processore alternativo a quello Intel.
Ai tempi del 486, quando ancora erano in corso gli accordi di collaborazione con Intel, AMD e Cyrix (altro produttore di processori e coprocessori x86) detenevano addirittura quote di mercato del 30%. I prodotti AMD erano in pratica "cloni" dei processori Intel e Intel sopportava la situazione in nome di un principio noto nel mondo dell'elettronica come "Second Source"; in pratica per l'affermazione di un chip è necessario che esistano sul mercato almeno due fornitori dello stesso (o di un prodotto equivalente ed intercambiabile) per scongiurare eventuali problemi di approvvigionamento.

La situazione mutò improvvisamente con l'avvento del Pentium, Intel decise di mettere fine al fenomeno dei processori cloni e da allora i progettisti di CPU alternative ai prodotti Intel si sono dovuti arricciare le maniche per sviluppare da capo prodotti competitivi e al contempo totalmente compatibili.

AMD K5 - La risposta al Pentium
Fu così che AMD propose il suo primo processore "indipendente": il K5. Il K5 era, sugli interi, migliore a parità di clock rispetto sia al Pentium che al Cyrix 6x86 ma fu introdotto in ritardo sul mercato esibendo minori frequenze rispetto alla concorrenza e prestazioni inferiori sul versante Floating-Point. Questo ritardo nell'introduzione di valide alternative al Pentium fece perdere molte quote di mercato ai concorrenti che dovettero negli anni successivi faticare molto per recuperare il terreno perduto (già nel '98 Intel deteneva l'87% del mercato!). A poco valse l'introduzione del P-Rating...Il K5 aveva 16K di I-cache L1 e 8K di D-cache L1 annoverando 4.3 milioni di transistor, massima freq. raggiunta: 166MHz



Nel frattempo una piccola società di nome NextGen aveva progettato un core compatibile x86 capace di decodificare le complesse istruzioni CISC dell'ISA x86 (vedi qui per maggiori chiarimenti sull'ISA) in istruzioni RISC più semplici .AMD pensò bene di acquisire la società e produrre in fretta e furia il K6, contemporaneamente Intel era già entrata nella fase Pentium Pro, Pentium II.

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.

All'uscita del K7 Athlon a 600MHz Intel proponeva il P-III a "solo" 550MHz, ed inoltre il K7 era più veloce sia su gli interi che sul Floating Point rispetto al PIII grazie ad un redesign complessivo del core ma in particolar modo della unità Floating Point Unit, che fece salire il numero dei transistor a ben 22 Milioni (esclusa la L2 cache esterna).

Queste in breve le features salienti del K7:

- Decoders multipli per le istruzioni x86

- ICU a 72 ingressi

- Dynamic Branch prediction avanzata

- 3 unità di esecuzione floating point fuori sequenza totalmente pipelined (15 stadi) che eseguono tutte le istruzioni floating point x87 e istruzioni Mmx e 3dnow

- 3 unità superscalari per gli interi pipelined (10stadi) e con esecuzione fuori sequenza

- Tecnologia Enhaced 3dnow : nuove istruzione per riconoscimento vocale, codifica video e scambio di dati per plug-ins internet e altre applicazioni di streaming video.

- Architettura della cache ad alte prestazioni: cache L1 ad alte prestazioni da 64KB + 64KB ed una interfaccia per la cache di 2° livello programmabile ad alta velocità.

- Bus di sistema a 200 Mhz derivato dall' EV6 di Alpha..... (continua)

Il Microprocessore parte 2

Secondo articolo descrittivo CPU



Un microprocessore (spesso abbreviato con µP) è un componente elettronico digitale formato da transistor racchiuso in uno o più circuiti integrati. Uno o più processori sono utilizzati come CPU da un sistema di elaborazione digitale come può essere un personal computer, un palmare, un telefono cellulare o un altro dispositivo digitale.


Intel 4004 - La prima cpu



La costruzione dei microprocessori fu resa possibile dall'avvento della tecnologia LSI: integrando una CPU completa in un solo chip permise di ridurre significativamente i costi dei calcolatori. Dagli anni 80 in poi i microprocessori sono praticamente l'unica implementazione di CPU.



Dalla loro introduzione ad oggi, l'evoluzione del microprocessore ha seguito con buona approssimazione la legge di Moore, una legge esponenziale che prevede il raddoppio del numero di transistor integrabili sullo stesso chip (e quindi, nella visione di Moore, delle prestazioni) ogni 18 mesi. L'incremento prestazionale verificatosi dalla fine degli anni 80 però è dovuto soprattutto al miglioramento dell'architettura dei calcolatori, attraverso l'adozione di tecnologie RISC, come l'uso di pipeline e di gerarchie di memorie cache.



Indice



* 1 Il primo microprocessore

* 2 Progetti a 8 bit significativi

* 3 Progetti a 16 bit

* 4 Progetti a 32 bit

* 5 Progetti a 64 bit per personal computer

* 6 RISC

* 7 Realizzazione

* 8 Microprocessori specializzati

* 9 Mercato dei microprocessori

* 10 Architetture e microprocessori comuni



Il primo microprocessore



Come altre innovazioni tecnologiche il microprocessore apparve appena la tecnologia lo consentì dato che l'idea di integrare i componenti di una CPU in un singolo circuito integrato era una soluzione logica. Quasi contemporaneamente infatti iniziarono lo sviluppo l'Intel 4004 il Texas Instruments TMS 1000, e il Garrett AiResearch Central Air Data Computer. Nel 1968 Garrett iniziò a sviluppare un sistema elettronico per competere con i sistemi elettromeccanici utilizzati nei caccia militari. L'obiettivo del progetto era equipaggiare il nuovo F-14 Tomcat che allora era in sviluppo. Il progetto venne completato nel 1970 e utilizzava integrati MOS per il core della CPU. Il progetto era semplice e innovativo e vinse sui competitori elettromeccanici venendo utilizzato fin dai primi Tomcat. Purtroppo la marina americana considerò il progetto tanto innovativo che impedì la pubblicazione di articoli sul sistema fino al 1997, per cui questo microprocessore rimase semisconosciuto.



Texas Instruments (TI) sviluppo in sistema TMS 1000 a 4 bit per applicazioni embedded pre-programmate. Il 17 settembre 1971 annunciò il modello TSM 1802NC, programmabile, che poteva essere utilizzato per implementare un calcolatore. L'Intel 4004, processore a 4 bit, venne presentato il 15 novembre 1971 e fu sviluppato da Federico Faggin.



TI presentò la prima richiesta di brevetto per il microprocessore. Gary Boone ottenne l'assegnazione del brevetto U.S. Patent 3,757,306 per l'architettura di un microprocessore a singolo chip il 4 settembre 1973. Non è mai stato reso noto se realmente l'azienda avesse avuto il microprocessore funzionante nei suoi laboratori. Comunque sia nel 1971 che nel 1976 Intel e TI stipularono un accordo in cui Intel pagava a TI i diritti per l'utilizzo del suo brevetto. Un riassunto della storia e contenuto nella documentazione che Intel presentò in tribunale quando fu chiamata in giudizio da Cyrix per violazione dei brevetti e Ti intervenne come proprietario del brevetto originario.



Interessante è il fatto che recentemente Intel e TI abbiano affermato di avere brevetti che potrebbero coprire il brevetto del "microprocessore". In questa pagina web TI e Intel predatano il brevetto descrivendo un microcontrollore che potrebbe coprire il brevetto del microprocessore essendo il progetto indicato concettualmente simile: Gary Boone e Michael J. Cochran presso la TI ne depositarono il brevetto, U.S. Patent 4,074,351, che pur essendo più simile a un microcontroller potrebbe coprire anche quello del microprocessore.



Secondo "A History of Modern Computing'", (MIT Press), pp. 220–21, Intel venne contattata dalla Computer Terminals Corporation (in seguito nota come Datapoint) di San Antonio TX per l'acquisto dell'integrato che stava sviluppando. In seguito Datapoint decise di non utilizzare l'integrato e Intel lo immise sul mercato come 8008 nell'aprile del 1972, riscuotendo un certo successo, creando il primo vero mercato per i microprocessori: fu la base del famoso computer Mark-8 venduto in scatola di montaggio da Radio-Electronics nel 1973.



Progetti a 8 bit significativi



Il 4004 venne seguito nel 1972 dall'8008, il primo microprocessore a 8 bit del mondo, evoluto successivamente nel più famoso Intel 8080 (1974).



Dal progetto 8080 venne derivato il clone Z80 prodotto nel 1976 dalla ZiLOG, società fondata da alcuni fuoriusciti dalla Intel, tra i quali lo stesso Federico Faggin. Compatibile a livello di set istruzioni, lo Z80 includeva diversi miglioramenti che fecero rapidamente preferire all'8080 dagli sviluppatori. Intel reagì producendo nel 1976 una propria versione migliorata dell'8080, l'8085, ancora compatibile a livello binario con i programmi scritti per l'8080.



Motorola presentò nell'agosto del 1974 il 6800, primo processore ad adottare un registro indice. Molto versatile, ebbe un discreto succcesso, oscurato in parte l'anno successivo dal lancio del MOS Technology 6502: era ispirato all'architettura del 6800, dotato di alcune soluzioni tecniche migliorative e soprattutto caratterizzato da un costo drammaticamente inferiore (25 USD contro i 175 UDS del 6800), cosa che che lo rese estremamente popolare. Il 6502 fu scelto, ad esempio, da Steve Wozniak per l'Apple I nel 1976 ed il successivo Apple II nel 1977.



Motorola reagì con il 6809 (1979), uno dei più potenti e ortogonali processori a 8 bit mai sviluppati: non usava microcodice, e l'unità di controllo era interamente in logica cablata. I successori del 6809 risultarono essere troppo complessi per poter mantenere questo approccio e vennero equipaggiati con una tradizionale unità logica a microcodice. Il progetto 6809 è alla base di una serie molto diffusa di microcontrollori tutt'ora utilizzata in sistemi embedded.



The Western Design Center, Inc. (WDC) presentò nel 1982 il 65C02 con tecnologia CMOS e licenziò il progetto a molte altre ditte che svilupparono i processori alla base dei computer Apple IIc e IIe. Il processore fu utilizzato anche in pacemaker, defibrillatori, automobili, prodotti industriali e di consumo. WDC fu pioniera nella vendita delle proprietà intellettuali e fu seguita anni dopo da Architettura ARM e altre ditte che basano i loro guadagni sullo sviluppo e sulla vendita delle proprietà intelletuali.



Un altro processore a 8 bit che ebbe una discreta fama fu il Signetics 2650 un processore con un'architettura innovativa e un potente set di istruzioni.



Tutti questi processori furono alla base della "rivoluzione" degli home computer, poiché grazie al loro basso prezzo permisero la realizzazione di veri computer ad un costo accessibile.



Il primo microprocessore utilizzato per applicazioni spaziali fu l'RCA RCA 1802 (conosciuto anche come CDP1802 o RCA COSMAC) (presentato nel 1976) che venne utilizzato dalle sonde NASA Voyager, Viking e dalla sonda Galileo (lanciata nel 1989 e arrivata nel 1995 su Giove). L'RCA COSMAS era la prima implementazione della tecnologia CMOS. IL CDP1802 venne utilizzato dato che era a basso consumo e dato che era prodotto con una tecnologia (Silicon on Sapphire) che lo rendeva meno sensibile ai raggi cosmici e alle cariche elettrostatiche. Il 1802 può essere considerato il primo microprocessore anti radiazione della storia.



Progetti a 16 bit

Il primo microprocessore a 16 bit fu il National Semiconductor IMP-16 basato su più integrati. Venne presentato nel 1973 e una versione a 8 bit chiamata IMP-8 venne presentata nel 1974. Nel 1975 National presento il primo microprocessore a 16 bit su singolo chip il PACE, che fu seguito dalla versione NMOS chiamata INS8900.



Altri sistemi multichip a 16 bit furono l'LSI-11 prodotto da Digital Equipment Corporation per il minicomputer PDP 11/03 e il MicroFlame 9440 della Fairchild Semiconductor prodotto tra il 1975 e il 1976.



Il primo microprocessore a 16 bit su singolo chip fu il TI TMS 9900 un processore compatibile con la linea TI 990 di minicomputer. Il 990 venne utilizzato dai minicomputer TI990/4, dall'home computer TI-99/4A e dai computer TM990 prodotti da terze parti. Il processore era inserito in un integrato ceramico da 64 pin di tipo DIP mentre molti altri microprocessori a 8 bit dell'epoca utilizzavano un più economico package a 40 pin di tipo plastico. Il successivo TMS 9980 venne sviluppato per competere con l'Intel 8080 e venne inserito in un package plastico di 40 pin. Il processore era compatibile con il set di istruzioni TI 990 ma per poter utilizzare solo 40 pin faceva muovere 8 bit di dati per ciclo di clock e gestiva un'indirizzamento di 16 KB. Il successore TMS 9995 aveva una nuova architettura. La famiglia venne espansa con il 99105 e il 99110.



La Western Design Center, Inc. presento nel 1984 il CMOS 65816 una versione a 16 bit del WDC CMOS 65C02. Il 65816 fu il cuore dell'Apple IIgs e del Super Nintendo Entertainment System, uno dei progetti a 16 bit più famosi dell'epoca.



Diversamente da TI, Intel non aveva una linea di minicomputer da emulare e decise di usare l'8085 come base per il suo progetto a 16 bit, realizzando così l'Intel 8086, capostipite di quella che poi sarebbe diventata la famiglia X86, i cui discendenti sono molto diffusi nei moderni personal computer. Realizzò anche una versione con il bus esterno a 8 bit, l'8088, che venne impegato nel primo IBM PC modello 5150.

Successivi sviluppi furono gli Intel 80186, 80286 e nel 1985 l'Intel 80386, la prima versione a 32 bit compatibile X86. La prima Memory management unit (MMU) integrata in un microprocessore venne sviluppata da Childs e altri per Intel e ricevette il brevetto U.S. Patent 4,442,484.



Progetti a 32 bit



I progetti a 16 bit erano disponibili da pochi anni quando sul mercato iniziarono ad apparire architetture a 32 bit.



Il primo microprocessore a 32 bit fu il BELLMAC-32A prodotto dalla AT&T Bell Labs e i primi esemplari furono prodotti nel 1980 mentre la produzione in serie iniziò nel 1982 (si veda qui per la bibliografia o qui per le caratteristiche). Nel 1984 dopo lo smembramento della AT&T il microprocessore venne rinominato WE 32000 (WE da Western Electric) e vennero sviluppati due successori, il WE 321000 e il WE 32200. Questi microprocessori venero utilizzati nei minicomputer AT&T 3B5 e 3B15. Il 3B2 fu il primo superminicomputer da tavolo. I processori vennero utilizzati anche in Companion il primo computer portatile a 32 bit e in Alexander il primo supermicrocomputer grande quanto un libro. Il sistema era dotato anche di cartucce ROM, simili a quelle utilizzate da alcune console attuali. Tutte queste macchine eseguivano l'originale Unix sviluppato dai Bell Labs e includevano il primo gestore grafico chiamato xt-layer.



Il primo processore a 32 bit ad arrivare sul mercato dei personal computer fu però il Motorola 68000 presentato nel 1979. Il 68000 possedeva un'architettura interna a 32 bit ma un bus dati a 16 bit per ridurre il numero di pin delpackage. Motorola normalmente lo indicava come un processore a 16 bit sebbene l'architettura interna fosse chiaramente a 32 bit. La combinazione di alta velocità, ampio spazio di indirizzamento (16 MByte) e costo contenuto ne fecero un processore molto diffuso: venne usato dall'Apple Lisa e dal Macintosh e da molti altri sistemi come l'Atari ST e l'Amiga, e anche Olivetti lo impiegò sulla sua linea di minicomputer denominata L1.



Dato il successo ottenuto, Motorola sviluppò una serie di successori del 68000: il secondo della famiglia fu l'MC 68010 che aggiunse il supporto della memoria virtuale. Nel 1985 presentò il Motorola 68020, la prima versione con bus dati e indirizzi a 32 bit. Il 68020 fu molto popolare nei superminicomputer Unix e diverse compagnie produssero macchine basate su questo microprocessore. Il successivo Motorola 68030 introdusse la MMU nel microprocessore, la famiglia 68000 in quel periodo era l'unica a contendere la palma di processori per personal computer alla famiglia X86, con un grosso vantaggio in termini di prestazioni e versatilità. Il successivo Motorola 68040 inserì il coprocessore matematico nel microprocessore e miglioro notevolmente le sue prestazioni grazie all'adozione della pipeline. Tuttavia Motorola, operando anche in altri mercati oltre a quello dei microprocessori, non fu in grado di tenere il passo con Intel e le varie case produttrici di processori x86 compatibili sul piano della ricerca e dell'accelerazione tecnologica: i successivi processori della serie, il 68050 e 68060, offrivano un incremento prestazionale molto modesto, rimanendo staccati dalle prestazioni offerte dai modelli x86 compatibili di prezzo analogo.



Alcune società avevano utilizzato il 68020 per realizzare soluzioni embedded. Ci fu un periodo dove il numero di 68020 utilizzati in sistemi embedded era uguale a quello dei personal computer con processore Pentium [1]. Motorola a tal proposito sviluppo la famiglia ColdFire derivata dal 68020.



Tra l'inizio e la metà degli anni 80 National Semiconductor presentarono una versione a 32 bit del loro precedente processore, il processore chiamato NS 16032 aveva una piedinatura compatibile con la versione a 16 bit. Il successore con piedinatora in grado di trasmettere 32 bit di dati e indirizzi fu l'NS 32032 che venne utilizzato in una linea di computer industriali prodotti da OEM. In quel periodo la Sequent presentò il primo sistema server SMP basato su NS 32032. Questi sistemi vennero abbandonati alla fine degli ani 80.



Altre architetture come l'interessante Zilog Z8000 arrivarono troppo tardi sul mercato e non ebbero seguito.



Progetti a 64 bit per personal computer

Sebbene i microprocessori a 64 bit fossero disponibili per i sistemi di fascia alta (server e workstation) fin dagli anni 90, solo dopo l'inizio del nuovo millennio si iniziarono a vedere sistemi a 64 bit per il mercato dei personal computer.



AMD presentò il primo sistema a 64 bit compatibile con l'architettura X86 nel settembre 2003 con l'Athlon 64. Questo microprocessore implementava l'AMD64 una espansione a 64 dell'IA-32 sviluppata da AMD. Intel arrivò poco dopo con l'estensione x86-64 che pur con un nome diverso era l'estensione sviluppata da AMD infatti ne era pienamente compatibile. I processori supportavano le istruzioni a 32 bit per compatibilità ma solo con la modalità a 64 bit riuscivano a mostrare a pieno la loro potenza. Con il passaggio a 64 bit vennero raddoppiati i registri gestiti dal set di istruzioni dei processori per migliorare le prestazioni dei sistemi. La penuria di registri è sempre stata un problema per le architetture x86.



Il passaggio dei processori PowerPC ad un'architettura a 64 bit fu invece indolore, i processori vennero sviluppati durante l'inizio degli anni 90 e vennero previsti fin dall'inizio le estensioni a 64 bit. I registri degli interi e la gestione degli indirizzi venne estesa a 64 bit mentre la parte in virgola mobile era già a 64 bit. Non furono aggiunti nuovi registri e le prestazioni dei programmi a 32 bit non erano penalizzate dalla nuova architettura.



RISC

Tra la metà degli anni 80 e l'inizio degli anni 90 apparvero molti microprocessori RISC ad alte prestazioni sebbene questi microprocessori vennero utilizzati principalmente in sistemi ad alte prestazioni basati su varianti del sistema operativo Unix e su macchine embedded. Da allora i sistemi RISC si diffusero ovunque e oramai anche i microprocessori Intel integrano all'interno un'architetture RISC che utilizza uno strato di emulazione per eseguire il codice X86 che è di tipo CISC.



Il concetto RISC apparve nei supercomputer fin dagli anni 60 (CDC 6600) ma i primi progetti che puntarono allo sviluppo di microprocessori esplicitamente RISC risalgono agli anni 80 con i progetti Berkeley RISC e il progetto MIPS della Stanford University. Il primo microprocessore RISC commerciale fu l'R2000, un sistema a 32 bit appartenente all'architettura MIPS derivata dall'architettura sviluppata a Stanford. Il successore R3000 migliorò le prestazioni e l'R4000 fu il primo sistema a 64 bit RISC. Progetti concorrenti furono l'IBM POWER e il Sun SPARC. Poco dopo anche altri produttori iniziarono a rilasciare processori RISC, tra questi si segnalano l'AT&T CRISP, l'AMD 29000, l'Intel i860 e Intel i960, il Motorola 88000, il DEC Alpha e il PA-RISC.



La guerra dei microprocessori ha eliminato quasi tutte le famiglie, solo il PowerPC e lo SPARC resistono nei sistemi di calcolo per server e supercomputer. I MIPS fino al 2006 furono utilizzati da Silicon Graphics per alcuni loro sistemi sebbene adesso siano utilizzati principalmente in applicazioni embedded. Alcune società come la ARM seguirono una strada diversa. Inizialmente i processori ARM vennero progettati per l'utilizzo nei personal computer ma nel giro di pochi anni la società si rese conto dell'elevata richiesta di processori a basso consumo per applicazioni embedded e si convertì invadendo il mercato embedded con opportune versione di processori ARM. Attualmente il mercato dei dispositivi embedded e dominato dai processori MIPS, ARM e PowerPC.



Nel calcolo a 64 bit le architetture DEC Alpha, AMD64, MIPS, SPARC, Power e Itanium sono tra le più popolari.



Realizzazione



La realizzazione dei chip (e quindi anche dei microprocessori) avviene in diverse fasi. Il materiale di partenza è una fetta circolare di semiconduttore detta substrato: questo materiale, già debolmente drogato, viene ulteriormente drogato per impiantazione ionica per creare le zone attive dei vari dispositivi; vengono poi depositati una serie di sottili strati di materiali diversi che vanno a creare il wafer:



* Strati di semiconduttore policristallino;

* Strati isolanti sottili;

* Strati isolanti di ossido molto più spessi dei precedenti;

* Strati metallici per i collegamenti elettrici, generalmente costituiti da alluminio e più raramente da rame



La geometria delle zone che devono ricevere il drogaggio è impressa con un processo di fotolitografia: ogni volta che il circuito integrato deve ricevere un nuovo strato o una nuova impiantazione di droganti, viene ricoperto da un sottile film fotosensibile, che viene impressionato tramite una maschera ad altissima definizione. Le zone del film illuminate divengono solubili e vengono asportate dal lavaggio, lasciando in tal modo scoperto il chip sottostante. Una volta terminata la creazione dei chip sul substrato, questi vengono testati, il substrato viene tagliato e i chip incapsulati nei packages con cui verranno montati sui circuiti integrati. In un circuito integrato si possono facilmente inserire transistor e diodi: è anche possibile creare su semiconduttore delle piccole resistenze e condensatori, ma in genere questi ultimi componenti occupano molto spazio sul chip e si tende ad evitarne l'uso, sostituendoli quando possibile con reti di transistor. Non è invece possibile integrare degli induttori, dei trasformatori, che devono quindi essere collegati esternamente al circuito integrato: lo stesso vale per i condensatori di media e grande capacità.



In questi ultimi anni, tuttavia, si è iniziato ad usare il Silicio in combinazione col Germanio con la tecnica del silicio stirato (Strained-Silicon). Questa tecnica consiste nel depositare, sul corpo del wafer di silicio, uno strato di silicio-germano di 2micron con concentrazione di germano pari al 20%; la concentrazione di germano non è uniforme in tutto lo strato: vi è una maggiore concentrazione sulla cima della struttura. A questo punto un sottilissimo strato di silicio dello spessore di circa 20nm viene depositato sullo strato di Silicio-Germano. Questa tecnica allunga il reticolato cristallino del Silicio di circa l'1% sia in direzione laterale che verticale e ciò permette un'enorme incremento sulla mobilità dei portatori di carica, che incontrano una resistenza inferiore al loro passaggio e fluiscono fino al 70% più velocemente, cosa che rende più veloci i chip del circa 30% senza bisogno di ulteriori miniaturizzazioni. Il principio che sta alla base di tutto questo è che gli atomi di silicio dello strato sovrastante tendono ad allinearsi con quelli dello strato si Silicio-Germano che, essendo più spesso, obbliga gli atomi di silicio a spaziarsi di una distanza analoga a quella degli atomi di Silicio-Germanio.



Microprocessori specializzati

Sebbene il termine microprocessore tradizionalmente indichi una CPU a singolo o multi integrato o un System-on-a-chip (SoC), nel corso degli anni sono state sviluppate delle unità funzionali di elaborazioni con notevoli affinità con i microprocessori. Per esempio i microcontrollori, i Digital Signal Processors (DSP) e le Graphics processing unit (GPU). Molte sistemi che ricadono in queste categorie sono dotati di limitate possibilità di programmazione o non sono programmabili. Per esempio le prime GPU sviluppate negli anni 90 non erano programmabili o supportavano una limitata programmazione, solo recentemente le GPU hanno acquisito una certa libertà di programmazione. Non c'è universale consenso nella definizione di microprocessore ma in generale si assume che un microprocessore sia una CPU in grado di eseguire un programma generico e non una CPU limitata.



L'RCA 1802 era un microprocessore specializzato ma non perché fosse limitato nella programmazione ma perché era progettato per applicazioni spaziali e quindi aveva delle particolari caratteristiche. Il sistema venne definito a progetto statico dato che poteva variare la frequenza di funzionamento in modo arbitrario fino a raggiungere i 0 Hz in modo da andare in stop totale. Le sonde Voyager, Viking e Galileo per utilizzare la minor potenza elettrica durante il viaggio spaziale mettevano in stop il processore. Dei timer o dei sensori risvegliavano il processore alzandone la frequenza quando era necessario che il sistema elaborasse dei dati per la navigazione, per il controllo orbitale, per l'acquisizione dati o per le comunicazione radio.



Mercato dei microprocessori



Nel 2003 il mercato dei microprocessori valeva 44 miliardi di dollari, la cifra include la produzione e la vendita dei microprocessori [2]. I microprocessori per personal computer pur rappresentando solo lo 0.2% del numero totale di pezzi prodotti assorbono la metà del fatturato totale.



Circa il 55% delle CPU erano microcontrollori a 8 bit, più di due miliardi di microcontrollori a 8 bit furono venduti nel 1997 [3].



Meno del 10% delle CPU erano a 32 bit o 64 bit. Di tutte le CPU a 32 bit solo il 2% era utilizzato nei personal computer mentre il 98% era utilizzato in applicazioni embedded come elettrodomestici, controllori industriali, periferiche per computer e altro. Tenendo conto di tutti i microprocessori prodotti e del mercato totale il prezzo medio di un microprocessore è di 6 dollari statunitensi [4].



Architetture e microprocessori comuni



* AMD K5, K6, K6-2, K6-III, Duron, Athlon, Athlon XP, Athlon MP, Athlon XP-M (IA-32 32-bit Intel architettura x86)

* AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Opteron, Sempron, Turion 64 (architettura AMD64)

* architettura ARM, StrongARM, Intel PXA2xx

* Altera Nios, Nios II

* Architettura Atmel AVR (microcontrollori)

* EISC

* RCA 1802 (noto anche come RCA COSMAC, CDP1802)

* Cyrix M1, M2 (IA-32 architettura x86)

* DEC Alpha

* Intel 4004, 4040

* Intel 8080, 8085, Zilog Z80

* Intel 8086, 8088, 80186, 80188 (architettura x86 a 16 bit reale)

* Intel 80286 (architettura x86 a 16 bit modalità reale e protetta)

* Intel 80386, 80486, Pentium, Pentium Pro, Celeron, Intel Core Duo, Pentium II, Pentium III, Xeon, Pentium 4, Pentium M, Celeron M (IA-32 architettura intel x86 a 32 bit)

* Autimi Xeon, primi Pentium 4, Pentium D, Celeron D, Intel Core 2 (architettura EM64T)

* Intel Centrino (anche nella versione dual-core)

* Intel Itanium (architettura IA-64)

* Intel i860

* Intel i960

* Architettura MIPS

* Motorola 6800, MOS Technology 6502, Motorola 6809

* Motorola 68000, ColdFire

* Motorola 88000

* NexGen Nx586 (IA-32 architettura x86 a 32 bit)

* IBM POWER

* NSC 320xx

* OpenCores architettura OpenRISC

* PA-RISC

* PowerPC, G3, G4, G5

* National Semiconductor SC/MP ("scamp")

* Signetics 2650

* SPARC, UltraSPARC, UltraSPARC II–IV

* SuperH family

* Transmeta Crusoe, Efficeon (VLIW architettura x86, IA-32 32-bit Intel x86 tramite emulazione)

* INMOS Transputer

* VIA C3,C7,Eden Series (IA-32 architettura x86 a 32 bit)

* Western Design Center 65xx

* XAP da Cambridge Consultants





Fine articolo

Il Microprocessore

La CPU (acronimo di Central Processing Unit, detta comunemente processore) è l'implementazione fisica di uno dei due componenti della macchina di Turing (l'altro è la memoria).

Compito della CPU è quello di leggere le istruzioni e i dati dalla memoria ed eseguire le istruzioni; il risultato della esecuzione di una istruzione dipende dal dato su cui opera e dallo stato interno della CPU stessa, che tiene traccia delle passate operazioni.





In base all'organizzazione della memoria si possono distinguere due famiglie di CPU:



* con architettura Von Neumann classica, in cui dati ed istruzioni risiedono nella stessa memoria (è dunque possibile avere codice automodificante). Questa architettura è la più comune, perché è più semplice e flessibile.

* con architettura Harvard: i dati e le istruzioni risiedono in due memorie separate. Questa architettura garantisce migliori prestazioni poiché le due memorie possono lavorare in parallelo ma è più complessa da gestire. È tipicamente utilizzata nei DSP.



Qualunque CPU contiene:



* una ALU (Unità Aritmetico-Logica) che si occupa di eseguire le operazioni logiche e aritmetiche;

* una Unità di Controllo che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU.

* dei registri, speciali locazioni di memoria interne alla CPU, molto veloci, a cui è possibile accedere molto più rapidamente che alla memoria: il valore complessivo di tutti i registri della CPU costituisce lo stato in cui essa si trova attualmente. Due registri sempre presenti sono:

o il registro IP (Instruction Pointer) o PC (Program Counter), che contiene l'indirizzo della cella in memoria della prossima istruzione da eseguire;

o il registro dei flag: questo registro non contiene valori numerici convenzionali, ma è piuttosto un insieme di bit, detti appunto flag, che segnalano stati particolari della CPU e alcune informazioni sul risultato dell'ultima operazione eseguita. I flag più importanti sono:

o Flag di stato:

+ Overflow: indica se il risultato dell'operazione precedente è troppo grande per il campo risultato: 0 assenza di overflow,1 overflow

+ Zero: vale 1 se l'ultima operazione ha avuto risultato zero, altrimenti vale 0.

+ Carry: vale 1 se l'ultima operazione ha ecceduto la capacità del registro che contiene il risultato, altrimenti vale 0 (esempio: in un registro a 8 bit, che può rappresentare solo numeri da 0 a 255, la somma 178+250 darebbe come risultato 172 e il carry verrebbe posto a 1).

+ Segno: indica il segno del risultato dell'operazione precedente: 0 risultato positivo,1 risultato negativo

o Flag di controllo:

+ Interrupt: se a questo flag viene assegnato valore 1, la CPU smette di rispondere alle richieste di servizio esterne delle periferiche (i segnali delle linee IRQ) finché non viene ripristinato al valore 0, o finché non arriva dall'esterno un segnale di RESET.









A proposito di registri le CPU si distinguono in:



* basate su stack: i registri sono organizzati in una struttura a stack e tutte le istruzioni operano esclusivamente su questo stack (ad esempio il Transputer); questa architettura ha il vantaggio di non dover specificare su quale registro interno operare (è sempre quello in cima allo stack), ottenendo istruzioni (opcodes) più corte e più semplici da decodificare. L'altra faccia della medaglia è che nel caso sia necessario un dato "sepolto" in fondo allo stack, il suo recupero è un'operazione molto lenta.

* basate su registri: queste CPU sono dotate di ulteriori registri generici che restano a disposizione dell'utente per memorizzarci valori temporanei. Le istruzioni possono accedere a questi registri generici. La maggioranza delle CPU sono di questo tipo.



Una CPU è un circuito digitale sincrono: vale a dire che il suo stato cambia ogni volta che riceve un impulso da un segnale di sincronismo detto CLOCK, che ne determina di conseguenza la velocità operativa, detta velocità di clock: quindi il tempo di esecuzione di una istruzione si misura in cicli di clock, cioè in quanti impulsi di clock sono necessari perché la CPU la completi. In effetti, una parte importante e delicata di ogni CPU è il sistema di distribuzione che porta il segnale di clock alle varie unità e sottounità di cui è composta, per fare in modo che siano sempre in sincronia: tale sistema si dirama in una struttura ad albero con divisori e ripetitori che giunge ovunque nella CPU. Nei processori più moderni (Pentium, Athlon, PowerPC) questa "catena di ingranaggi" elettronica arriva ad impiegare circa il 30% di tutti i transistor disponibili. La velocità di questa distribuzione determina in maniera diretta la massima frequenza operativa di una CPU: nessuna CPU può essere più veloce del suo critical path, cioè del tempo che impiega il clock per percorrere il tratto più lungo in tutto l'albero di distribuzione del clock. Per esempio, se il segnale di clock di una data CPU impiega un nanosecondo per attraversare tutto il chip ed arrivare fino all'ultima sottounità, questa CPU potrà operare a non più di 1 GHz, perché altrimenti le sue componenti interne perderebbero la sincronizzazione, con risultati imprevedibili (per motivi di tolleranze e margini di sicurezza, il limite pratico sarà anzi ben minore di 1GHz).



Indice



* 1 Set di istruzioni

* 2 Architettura della CPU

* 3 Architetture CISC e architetture RISC

o 3.1 CISC (Complex Instruction Set Computer)

o 3.2 RISC (Reduced Instruction Set Computer)

o 3.3 RISC vs CISC



Set di istruzioni



Le istruzioni di una CPU (instruction set) sono semplicemente dei numeri, detti opcode o codici operativi: in base al loro valore l'unità di controllo intraprende delle azioni predefinite, come per esempio leggere la successiva locazione di memoria per caricare un dato, oppure attivare la ALU per eseguire un calcolo, oppure scrivere il contenuto di un registro in una certa locazione di memoria o in un altro registro, oppure una combinazione di queste.



Per una persona, stendere programmi scrivendo direttamente gli opcode è estremamente noioso e prono all'errore. Per questo motivo si utilizza l'assembly. L'assembly associa un simbolo mnemonico ad ogni istruzione della CPU e introduce una sintassi che permette di esprimere i vari metodi di indirizzamento.



Una caratteristica importante dell'insieme (set) delle istruzioni di una CPU è la sua ortogonalità: vale a dire, il fatto che ogni istruzione che usi i registri possa usarli tutti indifferentemente (tranne quelli "speciali" come l'IP) e che nessun registro sia in qualche modo privilegiato rispetto agli altri perché su di esso si possono compiere operazioni particolari: è stato dimostrato che un set di istruzioni ortogonali, a parità di tempo di esecuzione delle istruzioni e di numero dei registri, è più efficiente di uno non ortogonale.







Architettura della CPU



Qualunque CPU possiede almeno due unità distinte:



* una ALU (Unità Aritmetico-Logica) che si occupa di eseguire le operazioni logiche e aritmetiche;

* una Unità di Controllo che legge dalla memoria le istruzioni, se occorre legge anche i dati per l'istruzione letta, esegue l'istruzione e memorizza il risultato se c'è, scrivendolo in memoria o in un registro della CPU.



Oltre a queste possono esserne presenti altre, per esempio:



* una FPU (Floating Point Unit) che si occupa di eseguire calcoli in virgola mobile;

* una MMU (Memory Management Unit) che si occupa di tradurre gli indirizzi di memoria logici in indirizzi fisici, supportando la protezione della memoria e/o uno o più meccanismi di memoria virtuale.



Una generica CPU deve gestire una serie di operazioni sincronizzandole con il resto del sistema: perciò è dotata, oltre a quanto sopra elencato, anche di uno o più bus interni che si occupano di collegare registri, ALU, unità di controllo e memoria: inoltre, all'unità di controllo interna della CPU fanno capo una serie di segnali elettrici esterni che si occupano di tenere la CPU al corrente dello stato del resto del sistema e di agire su di esso. Il tipo e il numero di segnali esterni gestiti possono variare ma alcuni, come il RESET, le linee di IRQ e il CLOCK sono sempre presenti.



Tipicamente la CPU è l'Interprete del linguaggio macchina. Come tutti gli interpreti, si basa sul seguente ciclo:



* Acquisizione dell'istruzione: il processore preleva l'istruzione dalla memoria, presente nell'indirizzo (tipicamente logico) specificato da un registro "speciale" ("speciale" opposto di "generico"), il PC

* Decodifica: una volta che la word è stata prelevata, viene determinata quale operazione debba essere eseguita e come ottenere gli operandi, in base ad una funzione il cui dominio è costituito dai codici operativi (tipicamente i bit alti delle word) ed il codominio consiste nei brani di microprogramma da eseguire

* Esecuzione: viene eseguita la computazione desiderata. Nell'ultimo passo dell'esecuzione viene incrementato il PC: tipicamente di uno se l'istruzione non era un salto condizionale, altrimenti l'incremento dipende dall'istruzione e dall'esito di questa



Questo ciclo elementare può essere migliorato in vari modi: per esempio, la decodifica di una istruzione può essere fatta contemporaneamente all'esecuzione della precedente e alla lettura dalla memoria della prossima (instruction prefetch) e lo stesso può essere fatto con i dati che si prevede saranno necessari alle istruzioni (data prefetch). La stessa esecuzione delle istruzioni può essere suddivisa in passi più semplici, da eseguire in stadi successivi, organizzando la unità di controllo e la ALU in stadi consecutivi, come delle catene di montaggio (pipeline): in questo modo più istruzioni possono essere eseguite "quasi contemporaneamente", ciascuna occupando ad un certo istante uno stadio diverso della pipeline.



Il problema di questo approccio sono le istruzioni di salto condizionato: la CPU non può sapere a priori se dovrà eseguire o no il salto prima di aver eseguito quelle precedenti, così deve decidere se impostare la pipeline tenendo conto del salto o no: e in caso di previsione errata la pipeline va svuotata completamente e le istruzioni in corso di decodifica rilette da capo, perdendo un numero di cicli di clock direttamente proporzionale al numero di stadi della pipeline. Per evitare questo i processori moderni hanno unità interne (“Branch prediction unit”) il cui scopo è tentare di prevedere se, data una istruzione di salto condizionato e quelle eseguite in precedenza, il salto dovrà essere eseguito o no.





Inoltre i processori possono implementare al loro interno più unità di esecuzione per eseguire più operazioni contemporaneamente. Questo approccio incrementa le prestazioni delle CPU ma ne complica notevolmente l'esecuzione dato che per poter eseguire in modo efficiente più operazioni in parallelo la CPU deve poter organizzare le istruzioni in modo diverso da come sono organizzate dal programmatore implementando l'esecuzione fuori ordine delle stesse. Per mantenere comunque la coerenza con quanto previsto dal programma la CPU dopo aver eseguito le istruzioni in modalità fuori ordine deve riordinare le istruzioni in modo da far apparire all'esterno della CPU un'esecuzione in ordine, cioè come prevista dal programma. Questo approccio è seguito da tutti le CPU per computer difatti l'architettura riportato nel paragrafo precedente va intesa come un'architettura concettuale, un'architettura di CPU reale è molto più complessa.



Architetture CISC e architetture RISC



Quando i transistor disponibili su un solo chip erano pochi e i calcolatori venivano spesso programmati in assembler, era naturale sfruttarli in modo tale da avere CPU con istruzioni potenti, evolute e complesse: più queste erano vicine alle istruzioni dei linguaggi di programmazione ad alto livello più il computer sarebbe stato facile da programmare, e i programmi avrebbero occupato poco spazio in memoria (anch'essa poca e preziosa). Le CPU progettate secondo questo approccio sono dette CISC ed avevano unità di controllo complesse capaci di sfruttare al meglio pochi registri e i cui programmi erano di dimensioni relativamente piccole. A cavallo fra gli anni '70 e gli '80 però la situazione era in gran parte cambiata: la RAM era molto più economica ed erano ormai disponibili ottimi compilatori in grado di generare linguaggio macchina molto efficiente: per questo si iniziò a pensare ad un nuovo modo di progettare le CPU, prendendo in esame la possibilità di usare i transistor disponibili per avere invece molti registri e un set di istruzioni elementare, molto ridotto, che delegasse al compilatore il lavoro di tradurre le istruzioni complesse in serie di istruzioni più semplici, permettendo così di avere unità di controllo particolarmente semplici e veloci. Oramai però la distinzione fra queste due architetture è venuta in gran parte meno: il numero di transistor disponibili su un solo chip è aumentato tanto da poter gestire molti registri ed anche set di istruzioni complesse.



CISC (Complex Instruction Set Computer)

Per approfondire, vedi la voce Complex instruction set computer.



CISC è l'acronimo di Complex Instruction Set Computer: tipicamente un processore di questo tipo implementa un numero relativamente scarso (una decina) di registri di uso generale, ed ha una unità di controllo microprogrammata: la logica del programma è memorizzata in una memoria veloce situata nella parte di controllo, invece di essere espressa tramite una rete combinatoria.



Il set di istruzioni associato a CPU di tipo CISC è molto esteso e composto in genere di alcune centinaia di codici operativi diversi che svolgono funzioni anche molto complesse, fra cui sono caratteristici i trasferimenti memoria-memoria, assenti nei RISC; le istruzioni hanno lunghezza variabile e possono presentarsi in formati diversi, e sono necessari due o più (a volte molti di più) cicli di clock per completare una istruzione; è possibile specificare la posizione dei dati necessari alle istruzioni usando molti metodi di indirizzamento diversi. Il ridotto numero di registri interni obbliga questi processori a scrivere in memoria ogni volta che si verifica una chiamata di funzione, che si verifica un context switch o che viene salvato un registro nello stack.



Programmare in Assembler una CPU CISC è un compito (relativamente) facile, perché le istruzioni presenti sono più vicine a quelle dei linguaggi ad alto livello.



RISC (Reduced Instruction Set Computer)

;



RISC è l'acronimo di Reduced Instruction Set Computer. Il tipico set di istruzioni RISC è molto piccolo, circa sessanta o settanta istruzioni molto elementari (logiche, aritmetiche e istruzioni di trasferimento memoria-registro e registro-registro): hanno tutte lo stesso formato e la stessa lunghezza, e molte vengono eseguite in un solo ciclo di clock. La diretta conseguenza di tale scelta progettuale è che i processori RISC posseggono una unità di controllo semplice e a bassa latenza, riservando invece molto spazio per i registri interni: una CPU RISC ha di solito da un minimo di un centinaio ad alcune migliaia di registri interni generici, organizzati in un file di registri. Il fatto di avere un formato unico di istruzione permette di strutturare l'unità di controllo come una pipeline, cioè una catena di montaggio a più stadi: questa innovazione ha il grosso vantaggio di ridurre il critical path interno alla CPU e consente ai RISC di raggiungere frequenze di clock più alte rispetto agli analoghi CISC.



Nel caso di context-switch o di chiamata a subroutine o comunque di uso dello stack i RISC spesso invece di accedere alla memoria di sistema usano un meccanismo chiamato register renaming, che consiste nel rinominare i registri in modo da usare per la nuova esecuzione una diversa zona del file di registri, senza dover accedere alla memoria ogni volta.



RISC vs CISC



La semplicità dei RISC si traduce in una minore espressività del linguaggio assembler: il numero di word necessarie per esprimere una computazione in una macchina RISC è maggiore/uguale alla controparte CISC: questo si traduce in programmi più grossi, penalità molto alta in altre epoche, in cui la RAM era una componente costosa e di bassa capacità. L'architettura CISC dipende dal compilatore più di quanto non dipenda il RISC: dato che le istruzioni prevedono più metodi di indirizzamento, e che son presenti istruzioni dalla semantica complessa, al compilatore viene prospettato un'ampio ventaglio di scelte per quanto concerne la traduzione di una istruzione, e non sempre la scelta più performante è banale. Come spesso accade nei problemi di ottimizzazione, la scelta della configurazione migliore è un compito NP completo, e non è pensabile utilizzare un compilatore che, per ogni istruzione, valuti la scelta migliore in base al contesto. Si conoscono solo delle buone euristiche, ma il problema dell'ottimizzazione è un problema di ricerca aperto. La stessa macchina CISC può essere dunque più o meno performante rispetto ad una macchina comparabile RISC in base al compilatore utilizzato.