PDA

View Full Version : Guida alla cpu prescott.


Jack 85
13-12-2004, 15:10
La novitá piú importante dei nuovi processori basati sul core Prescott é indubbiamente il processo produttivo, che tra quelli utilizzati per la produzione in volumi é uno dei piú avanzati, non solo per la dimensione massima del transistor inciso sul silicio (90nm, meno di un decimillesimo di millimetro), ma per una serie di tecnologie maturate dal reparto di ricerca e sviluppo del gigante di Santa Clara negli ultimi anni.

La tecnologia piú interessante sotto il punto di vista dell`innovazione é senza dubbio la tecnica dello 'strained silicon' utilizzato per la prima volta per la produzione in volumi: grazie ad un ben preciso trattamento chimico ed all`utilizzo di un maggior quantitativo di germanio per il drogaggio (come i primi transistor prodotti negli anni 50), gli atomi di silicio vengono disposti in modo ordinato, come se venissero 'allineati', in questo modo il transito degli elettroni é facilitato (si parla di un miglioramento del 30-40%), consentendo cosí di ridurre la resistenza da cui consegue anche una riduzione della generazione di calore ed una maggior tolleranza alle frequenze piú elevate. L`aumento dei costi di produzione é quantificabile intorno al 2%. L`immagine qui sotto aiuta a comprendere meglio i vantaggi dello strained silicon.
http://img75.exs.cx/img75/2636/ssilicon0lh.jpg

I transistor da 90nm rappresentano poi un altro importante passo in avanti rispetto agli attuali da 130nm (utilizzati su tutti i Pentium 4 'Northwood'), infatti essendo piú piccoli necessitano di meno corrente per funzionare e sono in grado di raggiungere frequenze piú elevate, oltre a dissipare meno corrente. In questo caso la riduzione delle dimensioni é superiore al 40%.

Nell`immagine qui sotto potete ammirare proprio uno di questi transistor da 90nm.

http://img18.exs.cx/img18/9920/transistor6ms.jpg

Il fatto che siano piccoli poi, implica che a paritá di superficie, sia possibile integrare un maggior numero di transistor; e siccome i die vengono incisi su dischi di silicio dal diametro fisso (per i Pentium 4 vengono utilizzati dischi da 30cm di diametro), il poter integrare un maggior numero di chip significa ricavare di piú da un singolo disco, e ridurre cosí drasticamente i costi di produzione.

Nel caso del Prescott, piú che a ridurre i costi di produzione, Intel ha puntato al raggiungimento di prestazioni piú elevate e ad una maggior scalabilitá in frequenza, come vedremo tra poco, e non deve quindi sorprendere la presenza di ben 1MB di cache L2 su questo processore (contro i 512KB degli attuali 'Northwood').

http://img18.exs.cx/img18/1041/die3ml.jpg

Il Prescott puó vantare un die (visibile nell`immagine) costituito da ben 125 milioni di transistor, ed una superficie del die di 112 millimetri quadrati; il voltaggio di funzionamento è compreso tra 1,25 ed 1,4v la dissipazione di calore non é delle piú contenute ed é vicina ai 100W (89W per i modelli a 2,8 e 3GHz, 103W per i modelli a 3,2 e 3,4GHz); fortunatamente é stata studiata una nuova generazione di dissipatori che permetterá di smaltire agevolmente cosí tanto calore.

Alto anche l`assorbimento di corrente, 78A per i modelli a 2,8 e 3GHz, 91A per quelli a 3,2 e 3,4GHz.

Le interconnessioni sono in rame, su sette livelli di metallizzazione (contro i 6 della generazione precedente).

Un`architettura rivoluzionata e pipeline...
Quando furono rilasciate le prime informazioni ufficiali riguardo il Prescott, questo non sembrava altro che una versione a 90nm del core 'Northwood', con in piú una cache piú ampia e varie ottimizzazioni, che includevano anche nuove istruzioni SIMD, le SSE3 appunto.

Dopo aver analizzato informazioni piú dettagliate peró, emerge che tra Northwood e Prescott esistono anche altre, ed importantissime, modifiche architetturali, volte a migliorare le prestazioni ed a raggiungere frequenze di funzionamento piú elevate; si tratta del piú importante aggiornamento dell`architettura NetBurst (alla base dei Pentium 4) da quando questa é stata rilasciata alla fine del 2000.

La novitá che piú sorprende tra le modifiche architetturali apportate, é la lunghezza della pipeline di esecuzione, che é passata da 20 a ben 31 stadi (da sottolineare che 20 sono giá tanti). Questa scelta ha risvolti sia positivi che negativi; i secondi possono essere 'mitigati' tramite opportune tecnologie avanzate.

Per poter comprendere al meglio questa modifica architetturale, bisogna aver chiara l`idea di cosa sia la pipeline di esecuzione. Essa non é propriamente una 'parte' del processore, ma é il percorso che segue l`elaborazione, e coinvolge praticamente tutto il processore. Alcune fasi di questo 'percorso' sono ad esempio la lettura e la decodifica delle istruzioni, cosí come la restituzione dell`output dell`elaborazione.

I moderni processori sono dotati di alcuni stadi elaborativi, in modo da poter lavorare su piú istruzioni contemporaneamente, e proprio come accade in una catena di montaggio, ogni stadio svolge il proprio compito e 'passa' l`istruzione allo stadio successivo.

http://img8.exs.cx/img8/2821/catenamontaggio6lp.jpg

# Supponiamo di avere questa semplice catena di montaggio di un`autovettura, con indicato anche il tempo necessario ad eseguire ogni operazione: montaggio motore - 30 minuti
# montaggio interni - 45 minuti
# montaggio pneumatici - 5 minuti

Ora per produrre un auto con questa catena di montaggio ci vogliono un`ora e venti minuti; se noi peró non aspettiamo che l`auto che stiamo producendo sia completata per introdurne altre nella catena, possiamo aumentare la capacitá produttiva.

# 0 minuti: inizio montaggio motore sulla prima auto
# 30 minuti: fine montaggio motore sulla prima auto e passaggio al montaggio interni; inizio montaggio motore sulla seconda auto
# 60 minuti: fine montaggio motore sulla seconda auto, inizio montaggio motore sulla terza auto
# 75 minuti: fine montaggio interni sulla prima auto e passaggio al montaggio pneumatici; inizio montaggio interni sulla seconda auto
# 80 minuti: fine montaggio pneumatici sulla prima auto - la prima auto é pronta in 80 minuti
# 90 minuti: fine montaggio motore sulla terza auto
# 120 minuti: fine montaggio interni sulla seconda auto e passaggio al montaggio pneumatici, inizio montaggio interni sulla terza auto
# 125 minuti: fine montaggio pneumatici sulla seconda auto - la seconda auto é pronta in 95 minuti
# 165 minuti: fine montaggio interni sulla terza auto e passaggio al montaggio pneumatici
# 170 minuti: fine montaggio pneumatici sulla terza auto - la terza auto é pronta in 110 minuti

Abbiamo prodotto tre auto in 170 minuti anziché 240 minuti, un notevole risparmio di tempo, ma la pipeline che abbiamo proposto non é per niente efficiente, in quanto il secondo stadio é nettamente piú lungo del primo, e ad ogni passaggio introduce 15 minuti di ritardo su ogni macchina immessa, fino a divenire meno vantaggiosa rispetto alla produzione 'normale'.

La situazione sui processori la situazione é del tutto analoga, ovviamente molto meglio strutturata, con stadi che richiedono lo stesso tempo per essere completati, infatti se questo tempo é diverso, come abbiamo visto, o si creano ritardi enormi che compromettono la velocitá, o si crea un`accelerazione lungo la pipeline che finisce per non sfruttarla a fondo (ci sarebbero dei periodi in cui le risorse non verrebbero utilizzate).

Se ogni fase della nostra catena di montaggio fosse stata uguale, avremmo ottenuto un risparmio di tempo enorme: supponendo fasi lunghe 10 minuti ciascuna, un`auto sarebbe stata prodotta in 30 minuti, mentre tre sarebbero state prodotte in 50 minuti. Un osservatore posto all`uscita della nostra fabbrica vedrebbe la prima auto uscire dopo trenta minuti (quindi nessun risparmio di tempo rispetto alla produzione 'non in catena'), dopo di che vedrebbe uscire auto al ritmo di una ogni 10 minuti: sembrerebbe che per produrre un auto ci vogliano 10 minuti, ma non é cosí, per produrne una ci vogliono sempre 30 minuti, ma grazie alla catena di montaggio ed alle operazioni eseguite in parallelo in ogni fase, queste é come se venissero prodotte in soli 10 minuti. Piú semplifichiamo gli stadi, rendendoli piú rapidi, piú aumenterá la produzione.

Ovviamente peró non si puó andare oltre un certo limite con la 'semplificazione', nessuno si sognerebbe mai di assemblare un`automobile con solo due pneumatici, bisogna quindi suddividere al massimo i compiti, nel nostro esempio potremmo creare quattro fasi distinte per il montaggio di ciascun pneumatico, e supponendo che per montare tutti e quattro gli pneumatici ci vogliano 10 minuti, un osservatore vedrebbe uscire auto con 4 pneumatici al ritmo di una ogni due minuti!

http://img8.exs.cx/img8/7703/blockdiagram1jt.jpg

Questo é esattamente ció che Intel ha fatto con l`architettura Enhanced NetBurst, alla base del Prescott: ha ulteriormente suddiviso gli stadi dell`architettura originaria (20), fino a raggiungere la bellezza di 31 stadi, ció significa che i tempi necessari al completamento di ogni stadio si riducono notevolmente ed é possibile raggiungere cosí frequenze di funzionamento maggiori (bisogna ricordare infatti che in genere uno stadio della pipeline richiede un ciclo di clock, e quindi piú rendiamo breve e rapido questo stadio, piú riusciamo a ridurre la durata di un ciclo di clock, raggiungendo cosí frequenze molto elevate). In condizioni teoriche ció significa che si possono 'sfornare' un maggior numero di istruzioni in meno tempo, purtroppo peró nel mondo reale ci sono tanti 'imprevisti' che possono ridurre l`efficienza di una pipeline cosí lunga.

I processori infatti dispongono di una tale potenza di elaborazione che per sfruttarla al meglio servono delle tecniche ingegnose; la piú importante di queste consiste nell`eseguire piú istruzioni alla volta, i programmi vengono eseguiti un`istruzione alla volta, il processore peró inizia giá a scorrere ed eseguire le istruzioni successive. In questo modo si sfrutta a fondo l`esecuzione in pipeline.

Esistono peró delle istruzioni particolari, come quelle di selezione, oltre le quali é difficile 'sbirciare', infatti dopo un`istruzione di tipo 'if', il programma puó prendere due strade completamente diverse, e non é possibile stabilire quale verrá presa almeno finché non verrá eseguita l`istruzione if. Per ovviare a questo inconveniente i processori sono dotati di unitá, chiamate di branch prediction, che sulla base di modelli storici e statistici, permettono di prevedere quale strada verrá intrapresa dal programma.

http://img8.exs.cx/img8/1284/branch3qi.jpg

Le unitá di branch prediction peró non sono infallibili, ed in caso di previsione sbagliata (branch miss-prediction), tutte le operazioni eseguite sono del tutto inutili e 'da buttare', in questo caso siamo davanti al cosiddetto 'stallo della pipeline'. Il processore é costretto a svuotare tutta la pipeline, ed a riprendere l`elaborazione da dove era stata interrotta. Questa operazione fa perdere parecchi cicli di clock, e di fatto annulla tutti i benefici dell`elaborazione in pipeline. Infatti come abbiamo visto nell`esempio di prima, l`elaborazione in pipeline ha dei vantaggi solo quando funziona a pieno regime, senza interruzioni, quando infatti il processo viene interrotto e riprende daccapo, la prima istruzione verrá elaborata nello stesso tempo necessario all`elaborazione se questa non fosse eseguita in pipeline. Quanto piú é lunga la pipeline, tanto maggiori sono le conseguenze negative di un branch miss-prediction, ed é per questo che pipeline cosí lunghe possono penalizzare le prestazioni.

Tra l`altro se durante l`esecuzione un`istruzione prevede il recupero di un dato che non é immediatamente disponibile nei registri o nella cache, tutta la pipeline viene bloccata in attesa che il dato richiesto sia recuperato. Anche in questo caso ci sono delle unitá, dette di data prefetching, che cercano di individuare i dati di cui avrá bisogno il programma, e li inizia a copiare nelle porzioni di memoria piú veloce (nella cache se possibile) prima che vengano richiesti. Cosí come le unitá di branch prediction, anche queste sono soggette ad errori, anche se le conseguenze in caso di errore non sono 'catastrofiche' rispetto ad un branch misprediction. Le unitá di data prefetching hardware migliorano le prestazioni anche del 10%.

Per ridurre al minimo gli svantaggi di una pipeline estremamente lunga, Intel ha implementato delle unitá di branch prediction ancora piú avanzate di quelle utilizzate sui Pentium 4 (che giá sono ottime), mentre per ridurre il rischio che dati richiesti dal programma non si possano trovare nella cache, ha raddoppiato sia la porzione di cache L1 dedicata ai dati (passata da 8 a 16KB) che la cache L2 (passata da 512KB ad 1MB).

Riguardo la branch prediction, una delle novitá piú interessanti é che nel caso in cui la previsione di un salto condizionato non sia stata fatta, o sia risultata sbagliata, questa viene rilevata in fase di decodifica delle istruzioni, e non in fase di esecuzione, permettendo cosí un ripristino piú rapido della piena funzionalitá. Il risultato di tutte le ottimizzazioni é che la percentuale di previsioni sbagliate é diminuita di molto rispetto ai Pentium 4 precedenti, in alcuni casi é scesa di oltre il 50%. Mediamente si puó parlare di una riduzione del 15-20%.


Le nuove istruzioni SSE3
Altra importante novitá del Prescott, é l`introduzione di 13 nuove istruzioni SIMD (Single Instruction Multiple Data) che prendono il nome di SSE3 (Streaming SIMD Extension), pensate per ottimizzare alcuni compiti, soprattutto in ambito multimediale.

Le istruzioni SIMD infatti sono adatte a questo scopo, in quanto permettono di operare su dati diversi con una sola istruzione, e sono quindi particolarmente adatte ad operazioni come il calcolo vettoriale (utilizzato ad esempio nella grafica 3D).

http://img65.exs.cx/img65/5798/sse36aa.jpg

Tra le 13 istruzioni ne troviamo una per la conversione dei numeri in virgola mobile in numeri interi, abbiamo poi ben cinque istruzioni per l`aritmetica complessa, una per la codifica video, due per la grafica 3D e due per migliorare la gestione dei thread.


Conversione in interi piú rapida
L`istruzione per la conversione dei numeri in virgola mobile in numeri interi é FISTTP, e permette di eseguire questo tipo di operazione in un numero inferiore di passaggi e con tre livelli di precisione (16, 32 e 64-bit); quando si esegue questo tipo di operazione infatti é necessario scegliere il metodo di arrotondamento scelto, indicato nella FCW (Floating Point Control Word). Il tipo di arrotondamento di default scelto nella FCW é quello dell`approssimazione (che riduce al minimo gli errori di arrotondamento), tuttavia il tipo di arrotondamento utilizzato in comuni linguaggi di programmazione come Fortran o C e C++ é il troncamento, ossia semplicemente si eliminano tutte le cifre decimali. Per poter rispettare le specifiche di questi linguaggi quindi, é necessario creare una nuova FCW che indichi l`esecuzione dell`arrotondamento con il troncamento anziché l`approssimazione, e sostituirla alla FCW originale. Si deve quindi usare la 'vecchia' istruzione di conversione FISTP che esegue la conversione in base al valore della FCW, ed infine ripristinare la FCW vecchia. Si tratta di un processo molto lungo e macchinoso.

Il vantaggio della FISTTP é che ignora del tutto la FCW ed utilizza sempre il troncamento come metodo di arrotondamento, in questo modo per eseguire arrotondamenti con approssimazione si usa la vecchia istruzione FISTP, mentre per arrotondamenti con troncamento (necessari per C/C++ o Fortran), si usa FISTTP; cosí, quando ci sará bisogno di utilizzare il troncamento basterá una sola istruzione e non sará necessario accedere, né tantomeno modificare, la FCW.

Aritmetica complessa
Per migliorare le prestazioni durante l`esecuzione di calcoli aritmetici complessi, sul nuovo Prescott troviamo ben 5 nuove istruzioni che permettono di velocizzare i calcoli; in ambito multimediale questo tipo di operazioni viene eseguito soprattutto per il filtraggio di sorgenti audio, ad esempio per eliminare l`eco.

In alcuni test specifici, l`utilizzo di queste istruzioni ha fornito punteggi migliori anche del 10-15% rispetto a codice scritto utilizzando le SSE2 (in virtú del fatto che con le SSE3 sono necessarie meno istruzioni).

Codifica Video
Una delle operazioni piú onerose degli encoder video é quella di rilevamento del moto, che viene eseguita confrontando blocchi di un frame con quelli del frame successivo; le istruzioni delle SSE3 integrate per migliorare le prestazioni in questo campo permettono di gestire al meglio la cache superando anche alcune limitazioni proprie dell`architettura, e riuscendo a migliorare le prestazioni della fase di rilevamento del moto fino al 30% e del 10% quelle complessive degli encoder MPEG4.

Grafica
La maggior parte delle informazioni di un ambiente tridimensionale é organizzata in un AOS (Array of Structures), dove ogni struttura-vertice contiene campi nei quali sono inserite informazioni sulla posizione (coordinate x,y,z,w), colori (r,g,b,a) e fino a due set di coordinate bidimensionali per il posizionamento delle texture. Le istruzioni SSE peró per loro natura funzionano al meglio quando i dati sono organizzati in SOA (Structure of Arrays), ossia ci sono dei campi nei quali troviamo i dati di tutti i vertici, ad esempio, nella stuttura-coordinate, troviamo tutte le coordinate dei vertici.

Finora quindi, siccome il tipo di archiviazione dei dati sui vertici piú utilizzato é l`AOS, e le SSE funzionano al meglio con strutture SOA, era necessario convertire la struttura da AOS ad SOA, e poi facendo agire le SSE, con notevole dispendio di tempo.

Le SSE3 invece introducono istruzioni specifiche per eseguire operazioni comuni (come il prodotto scalare) anche con la struttura AOS.

Miglior gestione dei thread
Nei mesi scorsi la tecnologia HyperThreading ha mostrato i propri benefici, con il Prescott Intel ha voluto introdurre nuove istruzioni volte a migliorare ulteriormente questa tecnologia, e a renderla ancora piú efficiente, oltre ovviamente ad altre ottimizzazioni specifiche.

Nella fattispecie troviamo due istruzioni, MONITOR e MWAIT, esse permettono ai programmatori di indicare se un thread in esecuzione sta eseguendo operazioni non vitali (come il ciclo idle di sistema, o un ciclo in attesa di un evento), che quindi richiedono poche risorse per essere eseguiti. Quando vengono utilizzate queste istruzioni, il processore entra in uno stato di 'riposo', con consumi piú bassi; se poi c`é un altro thread in esecuzione che richiede molte risorse, la maggior parte delle risorse di esecuzione viene assegnata a questo, migliorando le prestazioni complessive.

Execution Core migliorato
Altre importanti modifiche sono state fatte alle unitá di esecuzione; come sui precedenti Pentium 4 troviamo 7 unitá di esecuzione: due ALU funzionanti al doppio della frequenza del processore, due unitá load/store, una unitá per operazione complesse sugli interi, e due unitá floating point, una per le operazioni semplici ed una per le operazioni complesse.

Le due ALU sono accompagnate da scheduler capaci di fornire un`istruzione in mezzo ciclo di clock, in modo da sfruttare a fondo le potenzialitá di queste unitá, capaci di elaborare due istruzioni per ciclo di clock. Rispetto ai Pentium 4 precedenti poi, é stato aggiunto uno shifter ad una delle due unitá (utilizzato ad esempio per eseguire rapidamente le moltiplicazioni o divisioni per due), consentendo cosí di non ricorrere all`unitá per l`esecuzione di operazioni complesse con gli interi (che in genere richiede piú cicli di clock per risolvere queste operazioni).

http://img113.exs.cx/img113/8828/alu8ix.jpg

Inoltre poi é stato aggiunto anche un moltiplicatore per gli interi; prima infatti le moltiplicazioni tra interi venivano eseguite nelle unitá FPU, con notevole dispendio per muovere gli operandi nelle unitá FPU, e quindi riportarli in quelle interi.

Migliorati anche i due scheduler utilizzati per memorizzare temporaneamente le istruzioni destinate alle unitá FPU, tra le quali anche istruzioni SSE, SSE2 ed SSE3, piú che migliorare direttamente le prestazioni, questa novitá permette di aumentare le probabilitá di incrementare il parallelismo durante l`esecuzione di queste istruzioni.

Riguardo gli scheduler delle unitá load/store, troviamo un`altra importante novitá, infatti a volte puó capitare che queste unitá richiedano un dato (load) che non é stato ancora scritto in memoria (store), se ció accade, sui processori attuali, il load viene eseguito piú volte fino a quando il dato richiesto non é disponibile. Sul Prescott invece é stato introdotto un meccanismo per contrassegnare le istruzioni load 'a rischio', che vengono mantenute nello scheduler fino a quando non arriva il segnale che il dato richiesto é disponibile (un pó come il servizio telefonico della richiamata su occupato). In questo modo si risparmia preziosa ampiezza di banda.

MaxArt
13-12-2004, 17:35
Oh cielo, hai scazzato tutte le 'è'! :nono: Anzi, direi tutte le lettere accentate e dove serviva hai usato l'accento al posto dell'apostrofo! :eek:

La guida pare interessante come argomento, ma credo che tu sia finito un po' fuori tema in certi punti. Ad esempio, il lungo discorso sulla pipeline stava bene in una guida a parte.

Non ho letto tutto, ti farò sapere! ;)

^TiGeRShArK^
13-12-2004, 22:24
è spiegato abbastanza semplicemente... solo ke in alcune parti mi da l'impressione di essere pro-intel come articolo....
Sembra un elogio al prescott....
X le SSE3 stesse io avevo visto dappertutto ke gli incrementi ke si potevano ottenere non superavano il 7-8%...mentre qui si parla anke del 30%....
Infine non si dice ke nonostante tutte questi cambiamenti, nonostante la dissipazione termica molto maggiore, le prestazioni sono addirittura peggiori (anke se di poco) del northwood di pari frequenza in tutti i campi tranne ke nel video-editing.

enry2772
13-12-2004, 22:28
Complimenti per la guida....;)

Cester
14-12-2004, 01:44
Non facevi prima a darci QUESTO (http://www.hardwareirc.com/articoli.php?ID=205&Pag=2) link???:nonsifa: :nonsifa: :nonsifa: :fiufiu: :fiufiu:
:ops2: :rotfl: :rotfl:

^TiGeRShArK^
14-12-2004, 09:35
quoto in pieno cester! :D

Intel88
14-12-2004, 11:37
bhe o almeno scrivere
Fonte: Hardwareirc (http://www.hardwareirc.com/articoli.php?ID=205&Pag=2)

486sx25Mhz
14-12-2004, 11:46
Non facevi prima a darci QUESTO link???

:-D

http://www.britishmarano.it/057.gif

marcowheelie
14-12-2004, 23:12
Non facevi prima a darci QUESTO link???



:D muahahah :rotfl: