Intel Pentium Pro
Del Pentium Pro (gi conosciuto in passato sotto il nome in codice di Intel P6) ne abbiamo gi parlato sulle pagine di MCmicrocomputer in pi di un'occasione. Si tratta (per quei pochi che ancora non lo sapessero) del successore del Pentium e rappresenta la sesta generazione dell'architettura Intel. Una delle caratteristiche fisiche del nuovo microprocessore "tecnologicamente pi appariscenti" riguarda il fatto che non si tratta semplicemente (si fa per dire .. .) di un singolo "pezzo" di silicio, ma di una affiatatissima coppia. Per la prima volta nella storia dei microprocessori Intel stata inserita nel medesimo contenitore ceramico del microprocessore anche la cache di secondo livello (in tagli da 256 o 512 KB), che comunica con il "chip" vero e proprio attraverso un bus interno ottimizzato ad alta velocit (a 64 bit), ben al riparo da ogni possibile collo di bottiglia dovuto all'utilizzo di qualsivoglia logica esterna.
Se, come giusto che sia, lasciamo mentalmente da parte la doppia cache integrata e ci concentriamo maggiormente sugli aspetti della progettazione logica del microprocessore vero e proprio (che incorpora, tra l'altro, ben 5.5 milioni di transistor... tutti pronti a farci saltare nell'iperspazio) possiamo apprezzare l'alta sofisticazione tecnologica della "Esecuzione Dinamica" delle istruzioni. questa, senza ombra di dubbio la "trovata" (anche qui ... si fa per dire) pi interessante del nuovo nato: una combinazione di tecnologie comprendenti la predizione multipla di salto, l'analisi del flusso dati e l'esecuzione speculativa che permette alle unit di elaborazione interne di venir rifornite ininterrottamente di dati e istruzioni da eseguire. Con l'analisi del flusso di istruzioni effettuato durante l'esecuzione del codice il Pentium Pro effettua per suo conto un riordinamento delle istruzioni da eseguire che indipendente dall'ordine stabilito del programma, ma che ne ottimizza l'esecuzione complessiva. Ogni istruzione - ricordando in questo le architetture data flow - viene eseguita non appena sono disponibili i dati sui quali operare, indipendentemente (se non esistono dipendenze logiche) dall'esecuzione delle altre istruzioni. Questo permette di sfruttare al massimo le capacit di calcolo del processore, ottimizzando in tempo reale il codice non ottimizzato per l'architettura Pentium Pro, senza mai lasciare inoperativa l'unit di esecuzione anche quando si in attesa di dati e istruzioni non disponibili n nella cache di primo livello n in quella esterna/interna.
Un architettura data-flow
Il nuovo approccio proposto da Intel per il suo - rivoluzionario - Pentium Pro elimina la restrizione della sequenzialit delle istruzioni tra le tradizionali fasi di fetch ed execute, allargando la visibilit sulle istruzioni da eseguire e applicando tecniche di scheduling ottimizzato. Ci richiede principalmente che la fase di decodifica istruzioni del Pentium Pro sia pi intelligente in termini di predizione del flusso di programma. Lo scheduling ottimizzato richiede che la fondamentale fase di "execute" sia sostituita da fasi disgiunte di "dispatch/execute" e di "retire". Ci permette alle istruzioni di essere iniziate in qualsiasi ordine ma di essere sempre completate nella sequenza originale del programma in esecuzione. Il Pentium Pro utilizza tre indipendenti motori accoppiati con un'lnstruction Pool, come mostrato nello schema in questa pagina.
II problema principale
Prima di scendere maggiormente nei dettagli su come il Pentium Pro raggiunge le sue elevate performance, consideriamo il segmento di codice mostrato qui di seguito:
(1) R1 := mem[R0]
(2) R2 := R1 + R2
(3) R5 := R5 + 1
(4) R6 := R6 - R3
La prima istruzione carica nel registro R1 la cella di memoria indirizzata da R0, la seconda somma al contenuto di R2 il contenuto di R1, la terza incrementa R5 e la quarta sottrae il valore di R3 al contenuto di R6.
Ipotizziamo che a tempo di esecuzione, la prima istruzione provochi un cache miss (mancanza del dato richiesto all'interno della cache). Una CPU di concezione tradizionale - dal semplice 8088 all'evoluto Pentium "liscio" - non pu far altro che attendere pazientemente che l'interfaccia di bus provveda a richiedere alla memoria principale il dato mancante, provocando un rallentamento del sistema.
Se consideriamo che la velocit delle CPU aumentata dieci volte negli ultimi dieci anni, mentre la velocit delle memorie migliorata solo del 60 per cento facile rendersi conto che un microprocessore costruito secondo schemi tradizionali passerebbe buona parte del suo tempo ad attendere risposte dalla memoria. Tale "rallentamento" delle memorie (rispetto alla velocit sempre crescente delle CPU) il problema che il Pentium Pro cerca di risolvere.
Un primo approccio risolutivo potrebbe consistere nell'utilizzare uno specifico chipset separato che si occupi dell'ottimizzazione del codice a tempo di esecuzione. Ma una CPU, ad alte prestazioni, che necessiti di componenti specializzati di supporto ad altissima velocit non rappresenterebbe una soluzione economicamente valida per sistemi prodotti in grandi volumi. Un secondo approccio al problema, certamente pi brutale, pu consistere nell'aumentare a dismisura le dimensioni della cache di secondo livello in modo da minimizzare i cache miss. Sebbene funzionante, questa un'altra soluzione costosa, specialmente considerando le esigenza di velocit dei componenti per le cache di secondo livello. La soluzione proposta per il Pentium Pro sfrutta l'alta tecnologia concentrata tutta all'interno del chip, in modo da utilizzare memorie ed architetture esterne di tipo tradizionale e quindi anche piuttosto economiche.
Tecnica look ahead
Per evitare il problema dei ritardi di memoria, il Pentium Pro "guarda avanti" nel suo Instruction pool alle istruzioni successive lavorando sempre attivamente piuttosto che attendere passivamente il verificarsi degli eventi. Nell'esempio del codice prima mostrato la seconda istruzione non eseguibile finch non si ha il risultato della prima istruzione (il valore finale di R2 dipende anche da R 1), ma lo sono la terza e la quarta. Il Pentium Pro (in maniera "speculativa") esegue queste due istruzioni durante l'attesa del dato richiesto in memoria.
Il cache miss dell'istruzione 1 pu provocare un'attesa anche di diversi cicli di clock durante i quali il Pentium Pro continua a cercare altre istruzioni da eseguire, cercando anche 20 o 30 istruzioni pi avanti all'interno del codice. La tecnologia dell'esecuzione dinamica in pratica effettua un'ottimale aggiustamento dell'esecuzione delle istruzioni predicendo il flusso del programma, analizzando il grafo del flusso di dati per scegliere il miglior ordinamento di esecuzione delle istruzioni. Il Pentium Pro dinamicamente ottimizza il suo lavoro, definito dal flusso di istruzioni in entrata, per minimizzare il tempo di esecuzione globale.
Le unit interne
L'unit "fetch/decode" del Pentium Pro incaricata di inviare le istruzioni all'lnstruction Pool. Per fare questo preleva le istruzioni a partire da quella "puntata" dal program counter e le analizza per la loro decodifica. Se all'interno del codice incontrato un salto condizionato la sua destinazione (l'esito della condizione) calcolata in anticipo e il prelievo successivo delle istruzioni continua da questo punto. Il Pentium Pro in grado di predire l'esito di questo salti correttamente con probabilit di successo superiore al 90 per cento.
L'unit "dispatch/execute" incaricata di "osservare" il codice da eseguire. Quando questa trova un'istruzione che ha tutti i suoi operandi pronti la invia all'unit esecutiva. La logica di funzionamento, di tipo data-flow, offre una riduzione del tempo di esecuzione complessivo di un programma scegliendo di volta in volta tutte le istruzioni "pronte" per l'esecuzione. In questo modo le istruzioni "lente" non bloccano le istruzioni "veloci".
L'unit " Retire" individua nell'lnstruction Pool quelle istruzioni che sono state completate e passa i risultati allo stato globale della macchina ricostruendo l'ordine del programma originale.
L'unit di fetch/decode lavora secondo l'ordine del programma pu inviare fino a tre istruzioni all'lnstruction Pool per ogni ciclo di clock. L'unit dispatch/ execute opera "fuori ordine" e pu processare fino a cinque istruzioni per ciclo di clock con una media di tre. Lo stesso succede (tre istruzion i per clock) per l'unit "Retire".
Le cache (dati e istruzioni) sono di tipo dual port e sono in grado di eseguire una lettura e una scrittura in ogni ciclo di clock. Il throughput di quattro cicli di clock e sono supportati quattro accessi concorrenti (uno in ogni stadio della sua pipeline). Se il nucleo della CPU effettua un quinto accesso di lettura alla cache, questo viene bufferizzato in attesa della sua esecuzione. Anche in questo caso, per , la CPU non si arresta per attendere l'esito della sua richiesta. Infatti il load buffer della cache pu mantenere fino a dodici richieste prima di provocare un arresto del microprocessore.
Gli accessi che non ottengono esito all'interno della cache L2 (cache miss) sono passati al sottosistema interfacciato con la memoria centrale. L'interfaccia bus del Pentium Pro pu effettuare fino a quattro richieste alla memoria per sistemi monoprocessore e fino ad otto per sistemi a pi processori: tutte le transazioni con la memoria avvengono utilizzando il protocollo MESI per mantenere coerente il contenuto delle varie cache nei sistemi multiprocessore. Da alcuni benchmark simulati effettuati da Intel durante la progettazione del Pentium Pro stato misurato che il bus esterno del processore (grazie, prevalentemente, alla presenza della cache di secondo livello integrata) utilizzato per meno del 25% della sua larghezza di banda. Ci significa che fino a quattro Pentium Pro possono essere facilmente utilizzati insieme per realizzare sistemi multiprocessor senza avere troppi problemi sul bus. A tutto vantaggio della progettazione di sistemi multiprocessor che presto potranno finire sulla nostra scrivania, per offrire performance sempre pi elevate.
Dalla teoria alla pratica
Tutto quello che avete letto finora , ovviamente, basato sulla documentazione Intel del nuovo processore e naturalmente non abbiamo motivi di dubitare sulla sua veridicit . Altrettanto ovviamente, per , non potevamo evitare di effettuare qualche test comparativo con altri processori per capire quanto l'elevata tecnologia utilizzata nel Pentium Pro sia effettivamente fruibile da parte dell'utente in termini di maggiori prestazioni.
Il benchmark utilizzato , ancora una volta, l'ormai nota Suite di MC: una collezione di programmi particolarmente "tosti" dal punto di vista elaborativo, ognuno indirizzato al testing di particolari propriet dei microprocessori: aritmetica intera, floating point, interfacciamento con cache e con la memoria centrale.
I chip di paragone scelti sono stati il Pentium "normale" e ... quella spina nel fianco di Mamma Intel di nome 6x86 e cognome Cyrix: un interessante microprocessore che, nonostante la sua architettura "quasi tradizionale" (si tratta, potremmo dire, di un Pentium particolarmente ottimizzato) nasce col preciso intento di far concorrenza ai chip di sesta generazione.
Nel primo grafico mostrato in questa pagina sono riportati i risultati reali ottenuti dai vari microprocessori. Il Pentium Pro ha il c10ck a 200 MHz, il Pentium a 166 e il Cyrix a 100. Colpo di scena: il Pentium Pro a 200 MHz , in alcuni casi, pi lento del suo fratello minore a 166! successo nei test Render1 e Render2 che utilizzano in maniera massiccia il coprocessore matematico integrato all'interno del chip.
Non gridate allo scandalo: d'obbligo una precisazione. La nostra Suite compilata a 16 bit (al fine di rispecchiare al meglio l'attuale disponibilit di software prevalentemente di questo tipo) e non affatto detto che i risultati sarebbero dello stesso tipo con applicazioni a 32. Ci dimostra, semplicemente, che il Pentium pi ottimizzato per il codice "vecchio" mentre per sfruttare al massimo le elevate performance del Pentium Pro necessario far girare codice "nuovo" (a 32 bit).
E il Cyrix che fa, resta indietro a guardare? Non proprio. Non dimentichiamo, infatti, che il confronto piuttosto impari: il Cyrix (nella versione da noi testata) a 100 MHz (ma gi esiste anche il 133 MHz), mentre il Pentium Pro a 200. Bene, tiriamo fuori la bacchetta magica e normalizziamo i valori raggiunti dai tre differenti processori ad una velocit media di 150 MHz. Non si tratta di un'operazione scientificamente lecita (ne siamo ben consci ... ) ma pu essere utile per avere comunque qualche informazione in pi . Seconda sorpresa: Cyrix batte tutti nel risultato totale dell'intera Suite, eguaglia sostanzialmente il Pentium Pro per quel che riguarda i calcoli in aritmetica intera (primi tre test della Suite), lo batte in larga misura per quel che riguarda i calcoli in floating point pur non raggiungendo (in questo campo) gli strabilianti risultati del Pentium "liscio". Incredibile, ma verol
Tirando le somme
Una prima, interessante, conclusione riguarda il fatto che per sfruttare appieno le potenzialit offerte dal Pentium Pro assolutamente indispensabile utilizzare software a 32 bit. Naturalmente la considerazione non riguarda solo i programmi applicativi, ma anche (o soprattutto) il sistema operativo funzionante sulla macchina. Scordatevi, se non volete buttare tempo e denaro, la possibilit di istallare su una macchina Pentium Pro il vecchio Windows 3.1 o addirittura l'arcaico MSDOS. Rischiereste di avere performance globali del tutto paragonabili a quelle offerte da macchine pi economiche senza alcun vantaggio effettivo dato dalla maggiore sofisticazione tecnologica. Si parte, come minimo, da Windows 95, passando poi per OS/2, Solaris, Linux e altri sistemi operativi full 32 bit. Se provenite dalla vecchia scuola (e li' intendete restare), lasciate perdere il Pentium Pro. Meglio, sicuramente, optare per altre soluzioni hardware meno avverse al trattamento del codice "mezzo formato" .
Un secondo spunto di riflessione, riguarda la tecnologia di costruzione dei moderni microprocessori che consente frequenze di clock pi o meno elevate. Intel gi a quota 200 MHz, ma non detto che Cyrix non sia in procinto di proporre il suo microprocessore alla stessa velocit . Abbiamo visto dai benchmark quanto sia ottimizzato il 6x86, penalizzato attualmente solo dalla (relativamente) bassa frequenza di clock. La partita aperta: Signori Costruttori, fate il vostro gioco...