Cpu

Materie:Altro
Categoria:Informatica

Voto:

1 (2)
Download:114
Data:14.03.2006
Numero di pagine:11
Formato di file:.doc (Microsoft Word)
Download   Anteprima
cpu_2.zip (Dimensione: 14.74 Kb)
trucheck.it_cpu.doc     51.5 Kb
readme.txt     59 Bytes


Testo

Gilardenghi Mattia Vsb A.S. 2005/06 Sartore Riccardo

- La CPU-

1- Microprogrammazione
Il concetto di microprogrammazione non è affatto originale del microprocessore, ma risale alla fine degli anni ‘50, quando fu introdotto da Wilkes. Si tratta di un approccio per cui le funzioni dell'unità di controllo sono suddivise in un numero di operazioni elementari, le microistruzioni, molto più semplici delle normali istruzioni. Le varie sequenze di microistruzioni sono registrate in una memoria di sola lettura (ROM), molto più veloce della RAM. Il vantaggio principale della microprogrammazione risiede nella sua flessibilità.
Quest'approccio è stato adottato in tutti i recenti microprocessori sia Intel sia Motorola e la ROM è ormai parte integrante del chip. La microarchitettura di tutte le CPU Intel è simile, perché sono tutte un’evoluzione della prima: l’8086.L’8086 usa un misto di microcodice e logica cablata (circuiti hardware specializzati) per dare una buona funzionalità minimizzando la dimensione del microcodice.
Per esempio, il sommatore usato per combinare gli offset da sedici bit ed i registri di segmento è cablato in modo tale che i quattro bit meno significativi dell’offset vanno direttamente all’address bus, aggirando il sommatore, mentre i bit dal quattro al quindici dell’offset sono sommati ai bit da zero a quindici del registro di segmento per formare i sedici bit superiori dell’address bus.
È fornita una piccola ROM per le costanti comuni, per esempio sommare uno all’instruction pointer, dopo che un byte è stato prelevato dalla memoria.
Il prefetch è eseguito in maniera completamente indipendente dal resto del processore. Tutte le volte che il bus è inattivo il dispositivo preposto, emette una richiesta di memoria per leggere il byte successivo del flusso delle istruzioni. I byte letti sono memorizzati in una coda, così che quando è necessaria una nuova istruzione, è prelevata dalla coda.
La dimensione della coda è un parametro interessante della progettazione. Se è troppo piccola, la CPU sarà frequentemente in stallo aspettando un byte dalla memoria, tuttavia, non è neanche buona cosa che sia troppo grande. Il dispositivo per la preacquisizione non sa che cosa significano i byte che preleva; li prende uno dopo l’altro finché c’è spazio nella coda. In particolare se la coda è troppo grande, il dispositivo preposto sprecherà un’ampiezza di banda sostanziale del bus.
Quando si comincia una nuova istruzione, il suo byte di codice operativo è tolto dalla coda di prefetch e caricato in IR.
L’unità hardware denominata decodificatore di gruppo estrae le informazioni da IR e le distribuisce ai registri:
per calcolare gli indirizzi degli operandi;
per indicare all’ALU quale funzione eseguire;
controlla il bit di byte/word per indicare all’ALU se le operazioni o i trasferimenti sono di otto o sedici bit.
Le microistruzioni sono di ventuno bit. Ne sono necessarie 504 che sono memorizzate in una ROM da 504 * 21 nella sezione di controllo. Quando è prelevata un’istruzione di macchina, un PLA (Programmable Logic Array) converte il codice operativo nel primo indirizzo del microcodice che gestisce l’istruzione stessa.
Non è presente nessun software di decodifica, ma tutta l’operazione è fatta dall’hardware per risparmiare tempo.
Il microcodice è diviso in burst (sequenze) che raggruppano fino a sedici microistruzioni. Ogni burst gestisce una o più istruzioni macchina o fornisce una procedura generale di servizio, quale il calcolo degli indirizzi. Sono presenti due tipi di microsalti: quello breve, per saltare entro il burst in esame (indirizzo di quattro bit) e quello lungo, per saltare ovunque nel microprogramma. Esistono anche le chiamate di microprocedura che assomigliano ai salti lunghi, anche se depositano il loro indirizzo di ritorno nel registro SR (Subroutine Return).
In complesso la ROM di 504 word consecutive contiene circa 90 burst, con una media di cinque o sei word ognuno.
Le microistruzioni hanno un formato verticale, con campi a più bit che specificano le funzioni generali, invece di un singolo bit che controlla le singole porte del cammino dei dati.
2- La nascita del microprocessore
Il microprocessore ha visto la luce nel 1971 a Santa Clara, in California, nei laboratori dell'Intel (nel 1968, fu fondata per costruire chip di memoria). Il responsabile del progetto fu Marcian Hoff, che propose come struttura quella di un calcolatore elettronico vero e proprio, ossia lo schema di von Neumann (la macchina tradizionale di von Neumann), composta semplicemente da tre soli chip: uno di CPU, uno di RAM, uno di ROM, e con l'utilizzo fondamentale di una struttura a bus. L'implementazione elettronica dello schema fu attuata con tecnologia MOS da Federico Faggin e portò al 4004, la prima CPU su un chip o microprocessore. L'interesse suscitato da questo tipo di prodotto superò ogni attesa, spingendo l'azienda a progettare e immettere sul mercato, nel 1974, una versione con parallelismo ad otto bit, notevolmente più potente della vecchia a soli quattro bit, il famoso 8080.
Nell'individuare le tappe dell'evoluzione del microprocessore si può fare riferimento alle linee di prodotto di due aziende di semiconduttori leader mondiali nel settore: le linee Intel e Motorola.
Per cominciare se potessimo prevedere la direzione del salto, potremmo acquisire l’istruzione adeguata ed eliminare la penalità.
Sono possibili due tipi di previsione: quello statica (in fase di compilazione) e quella dinamica (in fase di esecuzione). Con la previsione statica, il compilatore fa una stima di tutte le istruzioni che genera. Con le istruzioni FOR, per esempio, la previsione di un salto all’indietro all’inizio del ciclo è valida la maggior parte delle volte. Se si esegue un test su una condizione improbabile, come una chiamata al sistema che restituisca un codice di errore, è probabile che il salto non sia effettuato. Spesso per questi casi si usano diverse istruzioni e uno sguardo al codice operativo fornisce un sostanziale aiuto.
L’altro metodo di previsione è quello dinamico. Durante l’esecuzione, il microprogramma costruisce una tabella degli indirizzi che contengono salti, e tiene conto del comportamento di ognuno. Questo metodo, però, tende a rallentare la macchina a causa delle registrazioni.

3- La pipeline
La macchina tradizionale di von Neumann appartiene a tipo SISD (Single Instruction Single Data) ha un solo flusso d’istruzioni (in pratica, un programma) eseguito da una CPU, ed una memoria che contiene i suoi dati. La prima istruzione è presa dalla memoria e poi eseguita. Poi è prelevata ed eseguita la seconda istruzione.
Tuttavia, anche entro questo modello sequenziale è possibile avere una quantità limitata di parallelismo, per esempio, prelevando una nuova istruzione e cominciando ad eseguirla prima che quella in esecuzione sia finita. In altre parole nella stessa CPU si eseguono contemporaneamente più parti di azioni diverse come in una catena di montaggio, allora basta costruire l’hardware con diverse unità funzionali.
Parallelismo temporale: è dato dalla suddivisione del ciclo di esecuzione di un’istruzione in più fasi, ciascuna delle quali è assegnata ad una differente unità funzionale.
Nella tabella si vede una CPU costituita da cinque unità funzionali.

P1 Unità di prelevamento istruzione
P2 Decodifica istruzione
P3 Unità di calcolo degli indirizzi
P4 Unità di prelevamento operandi
P5 Unità di esecuzione istruzione

Durante il primo intervallo di tempo, l’istruzione è presa dalla memoria da P1. Nel secondo intervallo di tempo, l’istruzione è passata a P2 per essere analizzata, mentre P1 prende un’altra istruzione. In ognuno degli intervalli successivi, una nuova istruzione è prelevata da P1, mentre le altre istruzioni sono passate ad un’unità successiva lungo il percorso.

P1 I1 I2 I3 I4 I5 I6 I7 I8 I9
P2 I1 I2 I3 I4 I5 I6 I7 I8
P3 I1 I2 I3 I4 I5 I6 I7
P4 I1 I2 I3 I4 I5 I6
P5 I1 I2I I3 I4 I5
T1 T2 T3 T4 T5 T6 T7 T8 T9

Questa organizzazione è chiamata macchina a pipeline, due concetti collegati sono:
la superscalarità, consiste di più pipeline parallele cui smistare diversi tipi d’istruzione;
Parallelismo spaziale: la CPU carica simultaneamente più istruzioni e le esegue in parallelo su un certo numero di unità di esecuzione specializzate identiche. Ciascuna delle unità di esecuzione parallela sfrutta a sua volta il parallelismo temporale utilizzando al suo interno una pipeline (pipeline integer e float).
Il superpipelining, consiste nell’aumentare i passi in cui è suddiviso il trattamento dell’istruzione.
Se ciascun passo (intervallo di tempo) è di n nsec, ci vogliono 5n nsec per eseguire un’istruzione. Tuttavia a P5 arriva un’istruzione completa ogni n nsec, ottenendo un incremento di velocità di cinque volte.
In condizioni ottimali, si esegue un’istruzione per ogni ciclo, invece di una ogni cinque cicli, dando una velocità media di esecuzione di un’istruzione per ciclo.
Sfortunatamente, alcuni studi hanno dimostrato che il 30% delle istruzioni sono salti e questo riduce l’efficacia della pipeline.
Quando s’incontra una JMP, l’istruzione successiva da eseguire potrebbe essere quella seguente il salto oppure quella all’indirizzo del salto. Poiché l’unità di prelevamento istruzione non sa quale prendere, finché il salto è stato eseguito, si ferma fino all’esecuzione dello stesso. Di conseguenza la pipeline si svuota.
Il salto ha effettivamente causato la perdita di quattro cicli, con una frequenza di un salto ogni tre istruzioni è chiaro che la caduta di prestazioni è sostanziale.
Per riguadagnare parte di queste prestazioni, la cosa più semplice da fare è sperare che il salto non sia fatto, e continuare a riempire la pipeline come se il salto fosse una semplice istruzione aritmetica. Se risulta che il salto non è effettuato, allora non abbiamo perso nulla; in caso contrario, dovremo spazzare via, con un’operazione chiamata squashing, le istruzioni che si trovano attualmente nella pipeline e ripartire.
Anche lo squashing causa però dei problemi. In certe macchine, infatti, come effetto collaterale del calcolo dell’indirizzo, può essere modificato un registro. Se l’istruzione da spazzare via ha modificato uno o più registri, questi devono essere ripristinati, il che significa che deve esserci un meccanismo di registrazione dei loro valori originali.

4- La CPU
La CPU, Central Processing Unit, è il dispositivo fondamentale per il funzionamento del calcolatore: ad esso infatti sono riservati i compiti di elaborare i dati e sincronizzare tutti gli altri componenti connessi alla scheda madre. Eseguendo continuamente le istruzioni, di cui sono composti i programmi come ad esempio gli stessi videogames, il sistema operativo, il browser etc, detta i tempi di elaborazione del computer. Questo componente viene oggi impiegato in una varietà di settori davvero impressionante: si va infatti dagli impianti industriali di controllo automatico agli elettrodomestici, dalle centrali elettriche e telefoniche allo equipaggiamento delle automobili....Nel campo informatico sono presenti diversi produttori di processori destinati agli ambienti Windows. Tra questi AMD e INTEL sono i leader indiscussi del mercato, con la prima che sta attraversando un periodo di grande sviluppo tecnologico e successo commerciale in seguito al quale ha interrotto lo storico monopolio della seconda.
Prenderemo in esame essenzialmente le due aziende che dominano la fascia PC desktop: INTEL e AMD. Molti di voi sanno come la principale azienda, il mostro sacro, sia INTEL, ma negli ultimi 5 anni AMD con investimenti al limite della banca rotta , abbia colmato pienamente il gap, producendo cpu al pari o forse più potenti a prezzi nettamente inferiori. Purtroppo non è semplice valutare una cpu. Certamente un ottimo strumento possono essere i benchmark. Sono programmi che valutano in certi ambienti applicativi quanto un processore impiega per eseguire un tot di operazioni. Affinché questi risultati abbiano senso, questi test devono essere i più coerenti possibili altrimenti non servono a nulla. Mi spiego se il processore ha una velocità nell'acquisire il dato molto elevata (memory benchmark), ma poi l'ALU non tira altrettanto poco serve, così pure il viceversa. Quello che conta da sempre è il giusto compromesso o meglio più alte sono entrambe meglio è. Altro mito da sfatare i MHz. Questo parametro non conta nulla: i processori più potenti sono gli ALFA che vanno non oltre al 1GHz.
Il parametro da considerare è l'IPC * CLOCK. L'IPC è il numero di istruzioni per clock. Se il mio processore va a 6Ghz però fa 1 istruzione per ciclo, allora va tanto come un processore che va 1 GHz che fa 6 istruzioni per ciclo (RIFERENDOSI ALLA STESSA ARCHITETTURA).
Esempi:
IPC= "2.1" per un Pentium Classic (P54C), "3" per il Pentium 2, "3.2" per il P-III (che, ricordo, è della stessa generazione del P2, cioè la sesta, ma ha alcune migliorie nell'architettura). Allo stesso modo, l'IPC per le CPU AMD degli anni passati ha avuto andamento crescente, aumentando con il passaggio generazionale. I motivi dell'incremento di IPC costante nel tempo sono molteplici e per lo più tecnici: geometrie ridotte (ormai siamo prossimi a 0.13 micron, mentre solo 5 anni fa eravamo a 0.5), transistor più veloci nel passare impulsi elettronici, architetture superscalari (possibilità di eseguire più processi in parallelo, all'interno della stessa CPU), Cache di maggiori dimensioni, branch prediction sempre migliore (capacità di precaricare in Cache dati che verranno richiamati solo da istruzioni non ancora eseguite, dunque di prevedere lo sviluppo delle cose).
Invece oggi giorno con il P4 notiamo una inversione di tendenza. Ha diminuito sensibilmente l'IPC aumentando i Mhz, questo per far preso evidentemente sui consumatori meno esperti. Però questo è vero fino a quando INTEL non introdurrà la versione a 0.13um, cioè il prossimo anno. In quanto il P4 è stato ottimizzato per lavorare ad alte frequenze con un elevato numero di stadi in parallelo 20 contro 15 dell'amd. Questo a frequenze basse non ha un grosso impatto anzi delude assai, in quanto se un dato entra sbagliato deve farsi tutta la catena, inoltre se il software non è scritto contemplando queste caratteristiche nulla serve. Ma se mai si giungerà a software e benchmark ottimizzati, introduzione del 0.13um (con quantitativo di cache doppio) e frequenze superiori al 2.5Ghz il P4 potrebbe manifestare tutta la sua potenza.

Nuove cpu da Intel e AMD
Debuttano oggi le nuove cpu Intel Pentium 4 Northwood, insieme all'Athlon XP2000+, e appaiono le prime recensioni complete sulla rete. Le caratteristiche principali del nuovo "step" di cpu Intel Pentium 4 sono le seguenti:
Core basato sul nuovo processo costruttivo a 0,13 micron, che permette una netta riduzione delle dimensioni del core, una minor produzione di calore, e di conseguenza una migliore possibilità di alzare ulteriormente le frequenze operative.
• Quantitativo di cache L2 portato a 512Kb (contro i 256Kb del core Willamete), grazie al nuovo processo costruttivo
• VCore abbassato a 1,5V (contro gli 1,75V del core Willamete), che permette una netta riduzione dell'emissione di calore, e di conseguenza anche una migliore overcloccabilità teorica. Il modello a 2Ghz dissipa circa 41W, mentre il modello a 2Ghz basato sul precedente core Willamete ne dissipa ben 61.
• Modelli disponibili attualmente: Pentium 4 2A Ghz (la A è stata adottata per distinguere il nuovo core Northwood dal vecchio core Willamete), e Pentium 4 2,2Ghz.
La cpu AMD Athlon XP2000+ invece non è altro che una nuova cpu XP con frequenza di clock alzata sino a 1667Mhz.
Nei benchmarks la cpu Pentium 4 Northwood 2AGhz ha sopravanzato molto spesso le prestazioni dell'Athlon XP2000+, sopratutto nelle applicazioni che sfruttano decisamente le istruzioni SSE2 e che fanno uso di grossi "blocchi" di informazioni, e che quindi beneficiano di una cache L2 molto capiente. A sua volta la cpu AMD ha ottenuto risultati migliori in alcuni giochi (ad esempio UT) e applicazioni in cui si fa un uso più intensivo della pura potenza di calcolo della cpu.
Nell'immagine sopra potete vedere l'esempio del bench FlasK encoding, in cui viene testata la velocità di compressione di un filmato DivX. Le prestazioni della cpu Intel sopravanzano nettamente quelle della cpu AMD, soprattutto grazie all'intensivo sfruttamento delle istruzioni SSE2.
A sua volta, in Unreal Tournament l'Athlon XP2000+ dà il benservito, seppur di poco, alle nuove cpu Northwood, grazie alla pura potenza di calcolo geometrico/matematico migliore.

5- Linea Intel
Dopo l'8080, fu raddoppiato il parallelismo con lo sviluppo dell'8086 un dispositivo a 16 bit messo sul mercato nel 1978. Va però ricordato l'8088 uscito un anno dopo non tanto perché segnò un particolare progresso tecnologico, ma perché fu adottato dall'IBM per il suo primo personal computer: PC/XT. In seguito l'Intel progettò l'80286, più avanzato dei suoi predecessori e compatibili con l'8086. L'80286 fu adottato dall'IBM per i suoi PC/AT ed ebbe un enorme successo.

6- Linea Motorola
Il primo processore presentato dalla Motorola fu il 6800, introdotto non molto tempo dopo l'8080. Il 6800 era confrontabile, anche se non compatibile, con il prodotto Intel. Quando, negli anni Settanta, la Motorola introdusse il 68000 si ebbe una sostanziale diversificazione fra le due aziende. Infatti, il 68000 pur avendo un bus a 16 bit, presentava una struttura di registri a 32 bit e uno spazio di memoria indirizzabile di 16 MB. Grazie a queste caratteristiche questo processore fu adottato da costruttori come l’Apple, l’Atari e l’Amiga.
Importante ricordare anche che il successivo 68010 fu utilizzato con UNIX per il concetto di memoria virtuale, caratteristica fondamentale di questo sistema operativo.
Il 68010 fu seguito dal 68020, un trentadue bit completo (registri e bus), con indirizzamento fino a quattro Gbyte. Questo dispositivo divenne il cuore di molte workstation avanzate, come quelle di Sun, Apollo e HP.
In seguito fu presentato sul mercato il 68030 che conteneva nel chip anche l'unità di gestione della memoria (MMU), e poi il 68040 che inglobava nel chip un coprocessore a virgola mobile e una memoria cache.
Analizzando gli attuali prodotti delle linee Intel e Motorola si può affermare che essi sono sostanzialmente confrontabili quanto a prestazioni e COMPLESSITÀ. A titolo di esempio, il 68040 contiene 1.2 milioni di transistori, mentre l'80486 ne contiene 1.16 milioni.

Esempio