Università di Parma Dipartimento di Ingegneria dell' Informazione Computer Engineering Group Sviluppo a cura di: © Fantini Filippo © Stocchi Stefano Coordinamento: Prof. Gianni Conte Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 1 Limiti dell’architettura a 32 bit L’architettura x86 o IA-32 (Intel Architecture-32 bit) è vecchia di oltre 20 anni e sta mostrando, ora che le sue potenzialità sono state spinte all’estremo dalle recenti architetture, i propri limiti. Essi sono essenzialmente i seguenti: • Lunghezza variabile delle istruzioni: ciò comporta una fase di decodifica molto complessa che per compensazione richiede frequenze di lavoro più alte o pipeline più profonde con relativi problemi di predizione delle diramazioni. • Carenza dei registri: gli indirizzi dei registri nell’architettura x86 sono di soli 3 bit che consentono quindi l’indirizzamento di soli 8 registri di uso generale. I moderni processori hanno cercato di superare questo limite per mezzo di tecniche come la ridenominazione dei registri che aggiungono però ulteriore complessità. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 2 • Floating Point Stack: le istruzioni x87 usano per le proprie operazioni uno stack del quale viene fatto un uso intensivo con spreco di molti cicli per posizionare i dati occorrenti alla sua cima e che costituisce la ragione principale della sostanziale inferiorità delle CPU x86 rispetto le CPU RISC per la computazione floating point. • Istruzioni che referenziano indirizzi di memoria: con evidenti rallentamenti dovuti alle latenze associate ai chip di memoria in confronto a quelle che caratterizzano i registri interni della CPU (mentre le CPU RISC adottano un modello di memoria Load/Store che prevede le istruzioni operino solo tra registri e gli accessi alla memoria siano espliciti e deputati solo alle istruzioni di load e store). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 3 • Dimensioni del die: i buffer sempre più grandi, sempre più sviluppate tecniche di branch prediction (Intel stima che le penalità di errata predizione delle diramazioni comportino diminuzioni del 20%-30% delle prestazioni dei processori), la decodifica di istruzioni x86 in microistruzioni RISC sono tutti accorgimenti per estrarre grandi prestazioni dalle CPU x86 ma che richiedono molti transistor e quindi molto spazio sui die e quindi aumenti dei costi. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 4 La Intel ha ritenuto che, per assicurare l’incremento delle prestazioni che ha visto la recente storia del mercato dei PC, occorresse cambiare radicalmente il set di istruzioni anche a costo di penalizzare, naturalmente il meno possibile, la compatibilità con l’architettura precedente ma offrendo nel contempo prestazioni con le nuove architetture tali da giustificare un simile passo. La strada scelta da Intel per aumentare le prestazioni è quella di incrementare il parallelismo a livello di istruzioni (ILP). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 5 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 6 Le due strade privilegiate sino ad oggi per conseguire questo obbiettivo sono: la superscalarità nella quale il parallelismo non è esplicitamente indicato ma viene estratto mediante scheduling dinamico delle istruzioni in pratica deputando all’hardware tutto il lavoro (figura a sinistra) e la tecnica VLIW (Very Long Instruction Word) secondo la quale le istruzioni contengono esplicite informazioni riguardanti il parallelismo da esplicitare, ad esempio quante e quali istruzioni elaborare parallelamente che il compilatore raggruppa in pacchetti di dimensione fissata (in genere tra 112 e 168 bits inserendo NOP per riempire gli slots vuoti del pacchetto) e invia alle unità esecutive (figura a destra). In questo caso il grosso del lavoro è svolto dal compilatore e l’esecuzione è fissata staticamente al momento della compilazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 7 EPIC L’approccio usato da Intel e HP è una combinazione delle due per sfruttarne le caratteristiche di dinamicità e staticità di ognuna che è stato chiamato Explicitly Parallel Instruction Computing (EPIC). La filosofia EPIC in sostanza lascia decidere al compilatore quali istruzioni debbano essere eseguite in parallelo, le riunisce in un bundle (fascio) e manda in esecuzione questi bundle. In aggiunta a questo la tecnica EPIC prevede tipiche azioni di controllo e correzione della esecuzione come Prediction oppure Speculation (per dati e istruzioni) che consente il loro caricamento prima della risoluzione delle relative dipendenze per ridurre gli effetti della latenza di memoria. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 8 Le caratteristiche principali di questa architettura sono: • la possibilità di far collaborare il compilatore e l’hardware in modo che il compilatore possa controllare le risorse hardware in maniera più diretta anche a livello di predizione delle diramazioni o della gestione della gerarchia di memoria. Un tipico esempio di questa collaborazione è la tecnica di Predication che consente ad esempio l’esecuzione in caso di una diramazione IF THEN ELSE di entrambi i THEN e ELSE (che non dipendono uno dall’altro) in parallelo (e quindi con la latenza di uno solo) salvo poi invalidare quello non corretto mediante apposito valore dei flag di Predicate assegnati a ciascuna delle diramazioni all’atto della loro esecuzione; Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 9 • il grande numero di registri utilizzabili che, oltre ad una computazione sia di interi che floating point più agevole specie a doppia precisione, fornisce adeguate risorse hardware per funzioni specializzate come la Predication e consente grande flessibilità ed estensibilità circa la superscalarità dei chip basati sul ISA IA-64 (è difficile per un processore x86 gestire un numero elevato di pipeline con solo 8 registri indirizzabili). Inoltre è possibile ridurre gli accessi alla memoria solo alle operazioni load e store sfruttando i registri per i risultati intermedi; • grande memoria indirizzabile grazie ai registri a 64 bit che consente di superare gli attuali 4 GB dell’architettura IA-32, i cui limiti peraltro non sono ancora stati raggiunti dalle applicazioni attuali ma potrebbero esserlo in futuro, e di supportare numerosi GB di RAM; Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 10 Tutte queste caratteristiche sono facilmente, quanto piuttosto estensivamente, catalogabili come tipiche caratteristiche RISC. Il problema della filosofia EPIC risiede esattamente nel coinvolgimento del compilatore e nella definizione di un nuovo ISA per cui la esecuzione di codice IA-32 risulterebbe problematica ed inoltre potrebbe comportare, senza un adeguato supporto peraltro già perseguito da Intel, un certo ritardo nello sviluppo di software che possa avvantaggiarsi di questa architettura. Inoltre l’esecuzione in ordine e il raggruppamento statico delle istruzioni tipiche delle CPU EPIC possono poco contro i miss della cache che sono poco prevedibili a livello di compilazione e per alcune applicazioni come Java non è detto che il tempo speso in fase di compilazione possa essere adeguatamente compensato dai tempi di esecuzione Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 11 TLP Un’altra strada a disposizione degli sviluppatori per incrementare le prestazioni sfruttando il parallelismo consiste nel Thread Level Parallelism (TLP) cioè nella esecuzione in parallelo da parte di sistemi multiprocessore che possono essere fisici (cioè con la presenza effettiva di più CPU sul medesimo chip come nel POWER4 di IBM) o virtuali (cioè ottenuti da un singolo chip che emula un sistema multiprocessore simmetrico come l’EV8 della Compaq) di differenti processi software (o thread). Questo approccio trova le sue ragioni e naturali applicazioni nell’ambito del mercato server dove effettivamente molte applicazioni possono essere effettivamente scomposte in più threads e assegnati ai diversi processori che costituiscono il sistema. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 12 In ambito desktop attualmente l’implementazione del TLP ha un impatto assai contenuto ma le applicazioni multimediali sono naturalmente orientate al TLP e quando nuovi sistemi operativi, come Windows 2000 che supporta sistemi multiprocessore, o linguaggi di programmazione come Java, che predispone a sviluppare applicazioni multithread, diventeranno standard le cose potrebbero sensibilmente cambiare Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 13 L’approccio TLP in sostanza pone la sua attenzione sul design di sistema più che non sulla definizione di un nuovo ISA e in particolare, dovendo prevedere la condivisione di risorse tra i diversi processori, sulla banda di memoria e difatti la IBM con il POWER4 ha speso molte risorse in questa direzione. I sistemi TLP inoltre potrebbero essere più liberi nella evoluzione hardware rispetto alle macchine EPIC e limitati più che altro dalla tecnologia (il POWER4 ad esempio consiste di 170 milioni di transistor su 400 mm2 di die). Grande attenzione inoltre deve essere posta per questi processori nella condivisione delle risorse, soprattutto per quelle del sistema di memoria, per non creare interferenze di cache tra i diversi threads. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 14 AMD, proprio per motivi di compatibilità con il set di istruzioni x86 e per il fatto che non ha probabilmente la forza di definire un nuovo ISA, ha optato con il K8 (o Sledgehammer) per la strada dell’estensione del set istruzioni x86 sul modello di quanto fatto da Intel nel passaggio da 16 bit a 32 bit e per l’adozione del sistema di più processori sul medesimo die che è un approccio più performante rispetto ad esempio ai sistemi simmetrici multiprocessore, la naturale evoluzione dell’impiego dell’architettura IA-64 soprattutto in ambito server, dato che non devono comunicare attraverso un bus lento e occupano meno spazio Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 15 Naturalmente queste unità esecutive poste sul medesimo die avranno anche importanti potenziamenti per superare alcuni dei limiti sopra esposti. Ad esempio per la computazione su floating point si farà uso di un nuovo modello di programmazione e di istruzioni per la FPU di tipo RISC (con l’uso di tre operandi) che si serviranno di un largo register file per floating point in luogo del vecchio e limitante stack x87. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 16 ARCHITETTURA DEI PROCESSORI L’obiettivo di questa sezione non è quello di spiegare nel dettaglio il funzionamento di una CPU, bensì di mettere in evidenza i punti principali che alla fine fanno la differenza, in termini di prestazioni, fra una CPU ed un’altra. Per questo nella prima parte verranno analizzati i principali problemi progettuali che devono essere affrontati nel disegno di una CPU superscalare, e nella seconda parte verranno presentati le più interessanti soluzioni attualmente utilizzate. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 17 ARCHITETTURE ODIERNE E FUTURE L'obiettivo di questa sezione è illustrare nella prima parte le principali linee guida seguite nella realizzazione dei processori attualmente sul mercato da un punto di vista generale con particolare attenzione alle filosofie di progettazione che le hanno ispirate.Nella seconda parte verranno illustrati gli attuali limiti delle architetture a 32 bit e quali sono le innovazioni con cui si sta progettando di superarli con i processori di prossima realizzazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 18 Le sfide della computazione moderna La generazione attuale dei microprocessori ha prestazioni, rispetto ai predecessori, superiori di svariati ordini di grandezza. Questi radicali aumenti di performance, velocità e numero di transistor possono sembrare slegati ad un osservatore casuale. In realtà, sebbene il progetto attuale dei microprocessori vari enormemente da caso a caso, possono essere individuate delle linee guida comuni. Ogni processore infatti effettua una generazione degli indirizzi, contiene unità logicoaritmetiche, possiede dei file dei registri, e ha un’interfaccia di sistema. Molti hanno una cache on-chip, un TLB (translation lookaside buffer), e quasi tutte le architettura correnti possiedono unità floating point on-chip. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 19 Per effettuare queste funzioni di base sono state implementate differenti tecniche di progetto, che però devono risolvere gli stessi problemi. Pertanto questa sezione analizza alcuni dei problemi comuni affrontati da tutti i progettisti di CPU, mentre la sezione successiva presenta alcune delle tecniche utilizzate per superare questi problemi Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 20 Le latenze della memoria e della cache di secondo livello I primi microprocessori effettuavano il fetch delle istruzioni direttamente dalla memoria; in questo modo, dopo aver inviato una richiesta di dati, il processore doveva attendere un tempo molto lungo prima che i dati arrivassero, impedendo così alla CPU di operare in modo efficiente alla velocità per la quale era stata progettata. L’implementazione della cache secondaria off-chip ha aiutato ad alleviare questo problema. Una mamoria cache è solitamente di dimensioni limitate (normalmente da 32 a 512 Kbyte), e contiene un blocco di indirizzi di memoria comprendenti una piccola sezione della memoria principale. La memoria cache fornisce un accesso più rapido, e può spedire i dati al processore ad una frequenza maggiore della memoria principale. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 21 I sistemi di memoria cache on-chip possono poi aumentare ancore le prestazioni, poiché permettono il completamento di un accesso in un singolo ciclo di clock. L’aumento di prestazioni fornito dalla cache di primo livello ha provocato in molte architettura l’aumento dello spazio dedicato al progetto della cache; in molte implementazioni attuali la cache occupa più dell’80% della superficie del die. Le performance raggiungono il valore massimo quando l’applicazione èpuò essere eseguita totalmente dentro la cache. Tuttavia, quando l’applicazione, come spesso avviene, è troppo grande per stare nella cache, le performance diminuiscono in modo significativo. La figura 1 mostra la relazione esistente fra le prestazioni e la dimensione di un’applicazione Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 22 La cache di primo livello contiene un range di indirizzi che comprende un sottoinsieme di quelli presenti nella cache secondaria, che a loro volta sono un sottoinsieme degli indirizzi presenti nella memoria principale. La figura 2 mostra la relazione fra le cache in un tipico sistema. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 23 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 24 Se la cache on-chip ha il vantaggio di aumentare le prestazioni, la tecnologia attuale e il numero di transistori disponibili ne limitano la dimensione massima. Attualmente 64 Kbyte (32 per i dati e 32 per le istruzioni) rappresentano il limite della cache di primo livello, e la sua implementazione richiede molti milioni di transistor. Questi fattori limitanti della cache on-chip aumentano l‘importanza della cache di secondo livello, dove la dimensione della cache è limitata solo dal mercato in cui il prodotto sarà collocato. Il tempo di accesso di molti dei dispositivi RAM attualmente disponibili è piuttosto elevato rispetto al tempo di clock del processore, e ciò forza i progettisti a trovare soluzioni alternative. L’interleaving della cache è uno degli espedienti utilizzati, dato che permette la sovrapposizione delle richieste in memoria da parte del processore. Questa tecnica si può applicare sia alla memoria principale che alla cache; il più comune è l’interleaving a due o a quattro vie. Questo perché aumentando l’interleaving si riesce a nascondere gran parte del tempo di accesso, ma aumenta considerevolmente anche la complessità richiesta per supportarlo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 25 Le dipendenze dei dati In un programma, le istruzioni vengono caricate dalla cache istruzioni, decodificate ed eseguite. Il dato corrispondente è spesso caricato da un registro, manipolato in un’ALU, e il risultato viene rimesso nello stesso registro o in un altro. Se l’istruzione successiva della sequenza richiede il risultato dell’istruzione precedente per poter essere eseguita, avviene una dipendenza di dati. Per quelle istruzioni che richiedono molti cicli per essere completate, ci può essere un impatto notevole sulle prestazioni nel caso vi siano delle dipendenze. Alcune di queste possono essere eliminate semplicemente riarrangiando il programma in modo che il risultato di una data istruzione non venga utilizzato dalle prime istruzioni seguenti. Un modo per alleviare il problema delle dipendenze dei dati è utilizzare l’esecuzione fuori ordine attraverso la ridenominazione dei registri. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 26 Diramazioni Tutti i programmi di computer contengono diramazioni (branch). Alcune sono non condizionali, cioè il flusso del programma viene interrotto non appena l’istruzione di branch viene eseguita; altre sono condizionali, cioè il branch viene eseguito solo se certe condizioni vengono soddisfatte. Le interruzioni del flusso del programma sono presenti in tutti i software, e l’hardware può solo cercare di adeguarsi ai branch nel modo più efficiente possibile. Quando viene presa una diramazione, il nuovo indirizzo al quale il programma deve riiniziare può essere nella cache secondaria oppure no; a seconda di dove è situato il nuovo blocco di istruzioni la latenza aumenta o diminuisce. Poiché il tempo di accesso della memoria principale e della cache secondaria sono molto maggiori del tempo di accesso della cache on chip, il branching spesso degrada le prestazioni del processore. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 27 Questo problema è ancora più importante nelle macchine superscalari, dove ad ogni ciclo vengono eseguite più istruzioni. In un certo momento, infatti, a seconda della dimensione della pipeline, numerose istruzioni possono essere in vari stadi di esecuzione; quando viene presa una diramazione, non si conoscono il numero di cicli che saranno necessari per la sua esecuzione. L’implementazione del branching è un importante problema architetturale. Per migliorare le prestazioni molte architettura attuali incorporano una circuiteria per la predizione delle diramazioni, la quale può essere implementata in vari modi. La sezione 2.2 discute alcune fra le tecniche di predizione più comuni. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 28 Riduzione della latenza in memoria Come spiegato nella sezione 1, la riduzione della latenza della memoria è un passo critico nell’aumentare le prestazioni di un processore. Questa sezione discute alcune delle tecniche più comuni utilizzate per ridurre la latenza. 2.1 Interfaccia a larga banda con la cache secondaria Un’interfaccia ideale cache secondaria-processore dovrebbe essere sempre in grado di ricevere una richiesta di dati dal processore e di soddisfare questa richiesta nel ciclo di clock successivo; ci si riferisce a questo comportamento come uno "zero wait state". Per progettare una cache secondaria che sia in grado di raggiungere questo tipo di prestazioni, l’interfaccia deve essere studiata in modo da riuscire a trasmettere i dati sempre alla massima velocità possibile. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 29 Il bus dati e il bus indirizzi per molti processori costituiscono l’interfaccia con l’intero sistema: il processore può accedere a qualsiasi tipo di dispositivo in ogni momento. Quando avviene un cache miss, viene spedito sul bus un indirizzo, e si accede alla cache secondaria, trasferendo i dati richiesti alla cache on-chip. Se avviene un cache miss in un bus di sistema condiviso, e il processore sta utilizzando il bus esterno per leggere o scrivere su qualche altro dispositivo, l’accesso alla cache secondaria deve attendere finchè non si sono liberati i bus dati e indirizzi; ciò può richiedere molti cicli di clock, a seconda della periferica a cui si accede Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 30 In un sistema con bus dedicato i bus dei dati, degli indirizzi e di controllo per la cache secondaria sono separati dai bus che si interfacciano con il resto del sistema. In questo modo gli accessi alla cache secondaria in caso di miss vengono garantiti sempre, qualsiasi cosa stia facendo il sistema. La figura 3 mostra un diagramma a blocchi di un’interfaccia condivisa e di una separata. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 31 Accesso a blocchi Quando avviene un cache miss on-chip, esiste un numero di byte, solitamente programmabile, che viene trasferito sul bus ogni volta che si accede alla cache secondaria. Questo numero è la dimensione di una linea di cache; per le architetture attuali la dimensione classica è di 32 byte. Il numero di accessi richiesto per effettuare il riempimento di una linea dipende dalla dimensione del bus di dati esterno del processore. Per esempio, un processore con bus dati a 64 bit che si interfaccia con una memoria a 64 bit impiegherà quattro accessi alla cache secondaria per riempire una linea di cache da 32 byte. Per completare tutto ciò il processore deve generare quattro indirizzi separati e guidare ognuno sul bus indirizzi esterno tramite appropriati segnali di controllo. Utilizzando l’accesso a blocchi il processore deve invece generare solo l’indirizzo iniziale della sequenza, mentre gli altri tre indirizzi vengono generati dalla logica di controllo della cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 32 Interleaving L’interleaving è una tecnica di progetto utilizzata per aumentare la larghezza di banda della memoria; tale tecnica può essere applicata sia alla cache secondaria che alla memoria principale. Il sistema di memoria più semplice è quello con un solo banco di memoria. Quando si accede a tale banco, deve trascorrere un certo intervallo temporale prima di un secondo accesso; quaesto intervallo dipende sia dal progetto del sistema sia dalla velocità dei dispositivi di memoria utilizzati. Se sono presenti più banchi, allora l’accesso ai banchi può essere sovrapposto. L’abilità di sovrapporre tali accessi aiuta a nascondere le latenze della memoria e diventa sempre più importante al crescere della dimensione dei dati richiesti. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 33 Una tipica memoria con interleaving consiste in banchi pari e dispari. Per esempio, il processore richiede dei dati ad un indirizzo pari, così il controller della memoria inizia un ciclo al banco pari. Una volta che l’indirizzo è stato raggiunto dalla logica di controllo della memoria, il processore può generare un nuovo indirizzo, il più delle volte nel ciclo di clock successivo. Se il nuovo indirizzo si riferisce ad un banco dispari, l’accesso alla memoria può iniziare immediatamente; in questo modo, non appena il banco pari ha completato l'operazione, il banco dispari è già pronto a fornire il dato. Pertanto più a lungo si riesce a minimizzare gli accessi sequenziali, più ci si avvicina alle prestazioni di tipo "zero wait state". I più comuni sistemi di memoria con interleaving sono quelli a due e a quattro vie; il numero di banchi e la larghezza di banda di ciascuno sono spesso determinati dal processore. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 34 Cache non bloccante In una tipica implementazione il processore agisce sulla cache finchè avviene un cache miss. A questo punto, trascorre un certo numero di cicli prima che i dati vengano riportati nella cache on-chip, permettendo la ripresa dell’esecuzione. Questo tipo di implementazione è detto bloccante, dato che non si può accedere alla cache finchè non viene risolto il cache miss. La cache di tipo non bloccante invece, permette accessi consecutivi anche in caso di cache miss. In questo caso, per aumentare le prestazioni globali del sistema, è cruciale localizzare il prima possibile i miss e effettuare i passi necessari per risolverli. La fig. 4 mostra un esempio di come le cache bloccanti e non bloccanti reagiscono a miss multipli. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 35 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 36 Prefetch Il prefetching è una tecnica con cui il processore può richiedere un blocco di cache prima del momento in cui è effettivamente necessario. L’istruzione di prefetch deve essere integrata nel set di istruzioni, e deve esserci un appropriato hardware per eseguirla. Per esempio, supponiamo che il compilatore stia avanzando in modo sequenziale attraverso un segmento di codice. Il compilatore può fare l’ipotesi che questa sequenza continuerà oltre il range degli indirizzi disponibili nella cache di primo livello, e può richiedere un’istruzione di prefetch, la quale carica il blocco di istruzioni successivo nella cache di secondo livello. Quindi, quando il processore richiede la sequenza successiva, questa può essere eseguita ad una frequenza maggiore; se per qualche motivo tale blocco non è necessario, l’area nella cache secondaria viene semplicemente sovrascritta da altre istruzioni. Il prefetching permette quindi al compilatore di anticipare la necessità di un dato blocco, e di piazzarlo il più possibile vicino alla CPU Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 37 DIPENDENZE FRA I DATI Per ridurre l’impatto negativo sulle prestazioni delle dipendenze fra i dati vengono utilizzate due tecniche, discusse qui di seguito. 2.6 Ridenominazione dei registri La ridenominazione dei registri distingue fra registri logici e registri fisici; i registri logici sono mappati dinamicamente nei registri fisici attraverso apposite tabelle che vengono aggiornate ogni volta che un’istruzione viene decodificata. Ogni nuovo risultato viene scritto in un registro fisico; tuttavia, il contenuto precedente di ogni registro logico viene salvato, e può essere recuperato nel caso l’istruzione debba essere abortita a causa di un’eccezione o di una previsione di salto non corretta. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 38 Mentre il processore esegue le istruzioni, vengono generati moltissimi risultati temporanei, i quali sono immagazzinati in appositi registri. I valori temporanei diventano permanenti quando la corrispondente istruzione viene "graduata", cioè quando tutte le istruzioni precedenti sono state completate con successo nell’ordine del programma. Il programmatore è consapevole dell’esistenza dei soli registri logici, mentre l’implementazione dei registri fisici è nascosta. La ridenominazione dei registri semplifica il controllo delle dipendenze fra i dati. In una macchina che può eseguire istruzioni fuori ordine, i numeri dei registri logici possono diventare ambigui, poiché ad uno stesso registro può essere assegnata una successione di valori diversi. Ma dato che i numeri dei registri fisici identificano in modo unico ogni risultato, il controllo delle dipendenze non risulta più ambiguo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 39 2.7 Esecuzione fuori ordine In un tipico processore che esegue le istruzioni in ordine, ogni istruzione dipende dall’istruzione precedente che produce i suoi operandi, e l’esecuzione non può iniziare finchè questi operandi non diventano validi. Se gli operandi richiesti per eseguire una data istruzione non sono validi, la pipeline stalla finchè tali operandi non diventano disponibili. Poiché le istruzioni vengono eseguite rispettando l’ordine del programma, solitamente gli stalli ritardano tutte le istruzioni seguenti. In una macchina superscalare "in-order", dove vengono eseguite più istruzioni per ciclo, varie istruzioni consecutive possono iniziare simultaneamente l’esecuzione solo se tutti i loro corrispondenti operandi sono validi, altrimenti il processore và in stallo. In una macchina superscalare "out-of-order", ogni istruzione può iniziare la sua esecuzione non appena gli operandi necessari diventano disponibili, senza riguardo per la sequenza originaria. L’hardware effettivamente riarrangia l’ordine delle istruzioni per tenere sempre occupate le varie unità di esecuzione. Questo processo viene chiamato dynamic issuing. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 40 PREDIZIONE DELLE DIRAMAZIONI Come già detto nella sezione 1.3, le diramazioni interrompono il flusso della pipeline; pertanto, per minimizzare il numero di interruzioni, sono necessari degli schemi di branch prediction. Le diramazioni accadono frequentemente, in media ogni sei istruzioni; in un’architettura superscalare, dove vengono eseguite anche quattro istruzioni per ciclo, la predizione di tali diramazioni diventa importante. Molti schemi di predizione utilizzano degli algoritmi che tengono traccia del comportamento delle diramazioni l’ultima volta che sono state eseguite. Per esempio, se il circuito che memorizza tali comportamenti mostra che la volta precedente un’istruzione ha preso la diramazione, allora si fa l’ipotesi che questa venga presa ancora. Un’implementazione hardware di questa assunzione significa che il programma invierà allo stesso indirizzo tutte le successive diramazioni. La pipeline ora contiene un’istruzione di salto condizionale e altre istruzioni successive ma in quel momento non si sa se tali istruzioni verranno eseguite; infatti se la diramazione non è stata predetta correttamente, le istruzioni nella pipeline devono essere abortite. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 41 Molte architetture implementano un branch stack nel quale vengono salvati gli indirizzi alternativi. Se si prevede che la diramazione non sarà presa, viene salvato l’indirizzo dell’istruzione di branch; in caso contrario viene salvato l’indirizzo immediatamente seguente a tale istruzione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 42 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 43 Attuali linee guida nell’evoluzione dei processori La storia del mercato dei microprocessori a partire dall’inizio degli anni ’90 potrebbe riassumersi come una sostanziale amalgama delle caratteristiche della filosofia di progettazione RISC (Reduced Instruction Set Computing) e delle caratteristiche della filosofia di progettazione CISC (Complex Instruction Set Computing) con maggior attenzione al raggiungimento delle migliori prestazioni più che ai "precetti" che questi due acronimi sottendono. Naturalmente le differenze strutturali tra i due approcci permangono (una su tutte: il numero di registri indirizzabili dai rispettivi set di istruzioni che consente ad esempio una gestione del compilatore per l’ottimizzazione più aggressiva da parte dei processori RISC) e non è nostra intenzione affrontare in questa sede il dibattito che prosegue da tempo ma solo rimarcare come le principali soluzioni adottate dai processori che stanno dominando il mercato dei PC stiano seguendo questa strada. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 44 Durante l’ultimo anno, spinte dalle evoluzioni del mercato sia nella crescente domanda di migliori prestazioni, soprattutto in campo grafico e multimediale, che dall’evoluzione di Internet, le principali aziende produttrici si sono date battaglia, più che nel realizzare sistemi veramente innovativi, nel portare all’esasperazione la ricerca della velocità di esecuzione maggiore per mezzo delle tecniche usate negli ultimi 10 anni raggiungendo e superando, anche grazie a nuovi processi tecnologici, con i processori AMD Athlon e Intel Pentium III la soglia del GHz di clock. A parte l’esecuzione più veloce delle singole operazioni, che attiene prettamente alla tecnologia impiegata nella realizzazione degli elementi logici e alla loro organizzazione, si possono eseguire un numero maggiore di operazioni in parallelo per incrementare le prestazioni ossia si persegue lo sviluppo a livello di parallelismo delle istruzioni (ILP). Le strade maestre per questo obbiettivo sono essenzialmente la realizzazione di pipeline più profonde (cioè con un numero di stadi maggiore) e la superscalarità che devono essere però accompagnate da tecniche di controllo e predizione delle diramazioni e riordino delle istruzioni. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 45 L’esecuzione in pipeline è naturalmente favorita da istruzioni di ridotta complessità e questo è uno dei motivi per cui gran parte delle risorse dei moderni processori x86 sono spese in fase di decodifica per scomporre le complesse (e di lunghezza variabile) istruzioni del ISA x86 in istruzioni likeRISC da inviare alle diverse unità di esecuzione. Analogamente tecniche come la predizione delle diramazioni o l’esecuzione fuori ordine contribuiscono a spostare la complessità dal software all’hardware, aspetto che sarebbe in contraddizione con la filosofia RISC, ma vengono adottate da moltissimi processori di ispirazione RISC, G4 compreso, perché consentono alte prestazioni. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 46 Molti processori, implementando l’esecuzione fuori ordine, richiedono anche tecniche di gestione delle false dipendenze dei dati come la ridenominazione dei registri (register renaming) che consiste in una mappatura dinamica dei registri architetturali su un set più esteso di registri fisici. Questo avviene anche per un processore RISC come il G4 che possiede un numero maggiore di registri indirizzabili rispetto a un processore di architettura x86 e dovrebbe avvertire meno questa esigenza. I processori più recenti hanno adottato soluzioni tutto sommato convenzionali in questi campi e le poche novità derivano dalla spinta del progresso tecnologico che ha consentito soluzioni quantitativamente diverse soprattutto per gestire l’aumentata profondità delle pipeline (ad esempio si pensi alla pipeline del Willamette di ben 20 stadi). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 47 La latenza di memoria continua ad essere una delle grandi sfide dei moderni processori e anche in questo campo le novità riguardano essenzialmente le possibilità offerte dalla integrazione. Prestando particolare attenzione come detto alle applicazioni multimediali che fanno grande uso della computazione intensiva per floating point si è andato affermando negli ultimi due anni la tendenza ad estendere il parallelismo ai dati di questa natura per processare un numero maggiore di elementi in minore tempo. Questa tecnica già adottata con successo dalla tecnologia MMX introdotta da Intel (che riguardava però dati interi) è conosciuta come Single Instruction Multiple Data (SIMD) e si esplicita per mezzo della estensione del set di istruzioni dei processori con apposite istruzioni Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 48 Per quanto riguarda questo ultimo aspetto abbiamo implicazioni anche per quanto riguarda l’evoluzione tecnologica dato che ha consentito l’integrazione di apposite unità esecutive dedicate a queste operazioni e ricadute sulla gestione della latenza di memoria dato che questi set di istruzioni prevedono generalmente istruzioni di gestione delle cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 49 La leva tecnologica Nel corso dell’ultimo anno i maggiori produttori hanno messo a punto processi tecnologici a 0.18 micron a 6 livelli di metallizzazione con connessioni in rame o alluminio che hanno avuto come effetti principali: • Riduzione delle dimensioni dei chip a parità di densità di transistori e quindi dei costi di produzione oppure incremento del numero dei transistori a parità di dimensioni del chip e quindi più unità funzionali oppure una combinazione delle due opzioni; • Riduzione delle tensioni di alimentazione dei core e quindi della potenza assorbita; • Incremento delle frequenze di lavoro dei processori. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 50 Mentre gli ultimi due effetti hanno immediate e ovvie ricadute sulle prestazioni complessive di un processore, la possibilità di integrare un numero maggiore di transistor può essere variamente sfruttata. Innanzitutto la possibilità di integrare più unità funzionali consente una maggiore superscalarità e la specializzazione di unità per specifiche applicazioni. Inoltre esiste la possibilità di dotare di un numero maggiore di buffer le unità dedicate al riordino o al temporaneo stoccaggio delle istruzioni per l’esecuzione fuori ordine o di incrementare le dimensioni delle Branch History Table per consentire accurate predizioni delle diramazioni che supportino adeguatamente le pipeline sempre più profonde. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 51 L’aspetto di sicuro maggiore impatto sulla latenza di memoria è però la possibilità sia di incrementare le dimensioni della cache di primo livello (si è giunti ad avere 128 KB di cache L1) che di integrare la cache di secondo livello direttamente su chip. Questa soluzione comporta una maggiore banda a disposizione e una riduzione dei costi complessivi ed è la caratteristica saliente delle versioni dei processori di questi ultimi mesi. Di questi aspetti si avvantaggiano soprattutto le architetture x86 dato che necessitano mediamente di un 40% in più di cache istruzioni o magari di precoded cache per la decodificazione delle istruzioni x86 e la sempre maggiore quantità di cache a disposizione ha contribuito notevolmente a colmare il gap di cui godevano nella computazione su interi rispetto i processori RISC. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 52 Di fatto le cache L2 on chip occupano ormai gran parte del die, anche fino al 90% in alcuni processori, ed è lecito attendersi che con il prossimo processo a 0.13 micron le cache esterne spariranno definitivamente o meglio assumeranno il ruolo di cache di terzo livello. La realizzazione on chip della L2 consente inoltre di aumentarne l’associatività per ridurre i conflitti raggiungendo con la Advanced Transfer Cache della Intel il limite dell’associatività a 8 vie che, ai fini pratici, equivale quasi alla piena associatività e altre caratteristiche, come ad esempio le porte multiple, difficilmente ottenibili da una cache L2 esterna. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 53 Per quanto riguarda la memoria principale abbiamo avuto nell’ultimo anno l’uscita, sebbene travagliata sia da problemi tecnici che commerciali, della Rambus Direct RAM (RDRAM) che consente una banda di 1,6 GB/s con bus da 100 MHz sulla quale Intel punta molto e l’affinamento di tecniche come la Double Data Rate SDRAM che consentono anch’esse bande superiori al GB/s. Da registrare infine la comparsa del bus di nuova generazione EV6 che, implementando la topologia "Point to Point", consente di collegare più processori senza suddividere la banda aprendo la strada ad una tendenza che potrebbe vedersi consolidata nei prossimi anni per un ulteriore salto nelle prestazioni Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 54 Altre innovazioni tecniche, non strettamente legate al processo realizzativo, che si annunciano assai significative sono state adottate da Intel con il Willamette come la ALU funzionante a frequenza doppia rispetto al processore o il bus a 400 MHz. Anche se i particolari tecnici di queste innovazioni non sono ancora perfettamente noti essi sembrano riferirsi ad uno sfruttamento di entrambi i fronti di salita dei segnali di clock. Anche questa tendenza potrebbe essere ulteriormente sviluppata nei prossimi anni. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 55 1.2 Parallelismo dei dati Gli algoritmi utilizzati nelle applicazioni multimedia e DSP (Digital Signal Processing) prevedono sostanzialmente l’applicazione della medesima operazione ad un grande numero di dati del medesimo tipo. Un tipico esempio può essere l’inversione di una immagine RGB per determinarne il negativo oppure la riproduzione del movimento in una scena 3D. Il modo migliore di trattare dati di tale natura consiste nel raggrupparne un certo numero all’interno di un vettore e operare su di esso piuttosto che operare sui singoli dati (un dato alla volta) per analogia definiti scalari. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 56 La tecnica che sottende a questo procedimento è conosciuta come SIMD ed è diventata una delle parole chiave dei processori di recente realizzazione che la applicano a dati floating point che sono i più coinvolti nelle applicazioni multimediali. A questa scelta, ancora una volta, sono giunti sia processori nativi CISC che RISC sebbene l’introduzione di nuove istruzioni e di nuove unità a livello hardware non appartenga certo al canone RISC. Le scelte che differenziano l’implementazione di tale tecnica riguardano essenzialmente l’introduzione di appositi registri o, analogamente a quanto fatto a suo tempo da Intel con la tecnologia MMX su interi, la condivisione di registri esistenti. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 57 Altre differenze riguardano il numero e le modalità di operazione delle unità dedicate alla esecuzione delle istruzioni SIMD. Vantaggi derivanti dalle tecniche SIMD sono ad esempio quelli del supporto dell’aritmetica di saturazione: se utilizzo la classica aritmetica di arrotondamento quando, ad esempio in un procedimento di incremento di colore, giungo al limite di rappresentazione di un dato un ulteriore incremento determina un overflow con il numero che raggiunge erroneamente il limite opposto. Quando io sommo invece ad esempio due valori a 32 bit che raggiungono un valore che eccede i limiti di rappresentazione avrei semplicemente bisogno di indicare che ho raggiunto il valore massimo rappresentabile. Questo è un evento particolarmente frequente in applicazioni multimediali (ad esempio nei valori di colore dei pixel) e l’aritmetica di saturazione serve appunto a questo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 58 Altri vantaggi derivano dalla possibilità di riempire i vettori che costituiscono i data type delle unità SIMD(Single Instruction, Multiple Data) con dati di varia dimensione (a patto di non eccedere naturalmente la dimensione del data type) in modo da poter gestire il parallelismo per più tipi di dati (e quindi diversi tipi di applicazioni). Con l’occasione offerta dalla introduzione di nuove istruzioni tutte le maggiori CPU hanno introdotto nel contempo istruzioni dedicate alla gestione via software di tecniche di prefetching cioè di caricamento dei dati prima del loro utilizzo per minimizzare la latenza dell’accesso ai dati mediante la scelta circa le modalità di scrittura in memoria e il livello di cache interessati Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 59 . Inoltre sono state predisposte istruzioni dette di streaming store per gestire dati caratterizzati da scarsa località temporale (ad esempio utilizzati una sola volta) tipici di applicazioni video e 3D che causerebbero un inutile inquinamento della cache e che sono gestibili meglio secondo politiche di cache di tipo write-combining. Tale tecnica prevede l’accumulazione in un buffer apposito di più write e il loro trasferimento in un solo accesso alla memoria principale riducendo così il traffico rispetto alla modalità writeallocate che alloca una nuova linea nella cache su un write miss. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 60 1.3 Front End e Back End Concettualmente ogni processore può essere suddiviso in due blocchi principali. Il primo si occupa di prelevare le istruzioni dalla gerarchia di memoria e di predisporle alla esecuzione. Questo significa che le istruzioni devono essere decodificate (mediante suddivisione in microistruzioni o decodifica hardware) per renderle "comprensibili" dalle unità di esecuzione e quindi distribuite ognuna alla propria unità di esecuzione. Questo blocco è conosciuto come il Front End del processore. Naturalmente quante più istruzioni esso riesce a inviare alle unità di esecuzione tanto più è efficiente. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 61 Importante per questo stadio è la comunicazione con la gerarchia di memoria (quindi le modalità e la velocità con cui essa opera) per rifornire continuamente di istruzioni il Front End, e la predizione delle diramazioni che cerca di impedire che la pipeline del processore abbia stadi che non eseguono alcuna operazione in attesa che sia noto l’esito della condizione di diramazione. Il secondo stadio del processore è quello che esegue effettivamente il "lavoro" cioè esegue le istruzioni e fornisce i risultati. Questo stadio è chiamato Back End. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 62 L’efficienza di questo stadio è fortemente condizionata dal numero di unità di esecuzione di cui dispone (per cominciare l’esecuzione di più di una istruzione per ciclo) e dal tempo di cui necessita ciascuna unità per processare una istruzione. I processori moderni fanno uso dell’esecuzione fuori ordine proprio per fare fronte alla carenza di risorse (registri, unità di esecuzione) di cui generalmente soffrono. Quello che qui si intende rimarcare è che questi due stadi influenzano reciprocamente le proprie prestazioni. Un Back End che esegue un elevato numero di istruzioni per clock deve essere continuamente rifornito di nuove istruzioni dal Front End da elaborare per non essere sottoutilizzato. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 63 Analogamente per facilitare il lavoro di distribuzione delle istruzioni alle unità di esecuzione del Front End le istruzioni devono essere eseguite efficacemente per liberare le risorse che questi deve alimentare e dirimere le diramazioni. Non è un caso se un processore come l’Athlon, che è dotato ad oggi probabilmente del più efficace Back End del mercato x86, sia stato fornito anche del Front End con il maggior numero, effettivo, di istruzioni decodificate per clock. Analogamente l’Itanium che, grazie alla definizione di una nuova architettura, riesce a decodificare e inviare alle unità di esecuzione ben 6 istruzioni per ciclo è stato dotato di massicce risorse di esecuzione. Un processore che non rispettasse questo principio di bilanciamento sarebbe destinato all’insuccesso Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 64 Cap. 3 La tecnologia MMX 3.1 Introduzione Intel ha negato che la parola magica MMX significhi MultiMedia Extensions, cioè estensioni multimediali (probabilmente per questioni legali: se la sigla non ha un significato comune è più facile proteggerla in tribunale); probabilmente indica qualcosa come Estensioni di Manipolazione Matriciale, e rappresenta le 57 nuove istruzioni aggiunte da Intel alla tradizionale architettura x86. Queste istruzioni utilizzano il modello Single Instruction, Multiple Data (SIMD) per eseguire più operazioni per ciclo di clock, tanto più numerose quanto più corti sono gli operandi. Dato che i registri MMX sono lunghi 64 bit, il massimo parallelismo per ciascuna delle due pipeline MMX è di otto istruzioni simultanee, ciascuna operante su un dato di otto bit. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 65 Pur avendo una collocazione fisica separata, gli otto registri MMX sono mappati logicamente sui registri floating-point (da 80 bit), per rendere più trasparente possibile l’utilizzo dei nuovi processori. Questo significa che le applicazioni devono tenere separate le operazioni floating-point da quelle MMX, per non pagare lo scotto di un centinaio di cicli di clock necessari per cambiare contesto. Le 57 istruzioni sono suddivise nelle categorie trasferimento, impacchettamento e disimpacchettamento, aritmetiche, di shift, logiche, di confronto e varie Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 66 Tra le istruzioni aritmetiche, ne sono presenti due di moltiplicazione tra Packed Word e una di moltiplicazione e somma, sempre a 16 bit. Queste operazioni sono al centro di molte elaborazioni audio e video; purtroppo Intel non ha incluso le istruzioni di multiply e multiply-add su operandi di 32 bit, che avrebbero richiesto un’ampia area di silicio ma che sono indispensabili per gli algoritmi audio avanzati (come il suono da wavetable) e per gran parte della geometria 3D. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 67 3.2 Come funziona la tecnologia MMX Facciamo un esempio: un programma di grafica potrebbe piazzare in un registro MMX otto valori da 1 byte ciascuno e chiedere alla CPU di sommare la cifra 10 a ciascuno di essi, allo scopo di produrre sullo schermo una maggiore luminosità dell’immagine (il passaggio non è così diretto ma serve ai fini dell’esempio). Questa operazione viene eseguita in un solo ciclo di clock. Di conseguenza l’MMX è una tecnica di elaborazione a 64 bit, anche se gli attuali processori hanno un’architettura interna che non supera i 32 bit. In questo modo diventano in parte competitivi con quei processori RISC a 64 bit che vengono già utilizzati nelle stazioni grafiche professionali. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 68 Nonostante ciò, non è necessario modificare la struttura dei registri già impiegata per i Pentium prima maniera, e non è quindi necessario ridisegnare completamente il chip, il che comporterebbe costi lunghi ed elevati. Inoltre l’ultima volta che Intel ha cambiato l’architettura x86 è stato 11 anni fa, e solo ora gli utenti dei PC stanno effettuando la transizione verso il software a 32 bit: lo scopo di Intel è quello di forzare una transizione un po’ più veloce! Inoltre l’MMX non eredita l’inefficiente sistema di gestione a stack che l’unità in virgola mobile utilizza per accedere ai propri registri, e invece indirizza direttamente uno qualsiasi dei registri senza sottostare a meccanismi di sequenzializzazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 69 In aggiunta offre una serie di funzioni che aiuteranno i programmatori a evitare diramazioni del codice (branch). Questo ridurrà la forte incidenza sulle prestazioni provocata dallo stallo della pipeline: ogni volta che si verifica una diramazione inattesa, in processore deve andare a prendere l’istruzione ed i relativi dati in un punto non inaspettato e quindi vanifica tutto il lavoro di preparazione che aveva eseguito in precedenza sulla pipeline. MMX permette anche ai programmatori di utilizzare maschere di filtro, in modo che le istruzioni possano operare solo su di una porzione del contenuto dei registri a 64 bit. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 70 3.3 Prestazioni MMX estende le potenzialità della CPU senza alterarne il comportamento quando si eseguono programmi tradizionali; perciò il chip rimane compatibile con tutti gli applicativi già in commercio, che esegue migliorando di circa il 10% il rendimento di un Pentium di pari frequenza, grazie non all’MMX, ma alla cache interna potenziata e all’architettura con predizione dei salti ereditata dal Pentium Pro. Con applicativi riscritti apposta, alcune operazioni (quelle grafiche soprattutto) possono migliorare dal 35 al 500%. Il fatto però che all’architettura MMX manchino gli operatori di moltiplicazione e moltiplicazione/addizione per operandi a 32 bit, caratteristica essenziale per le operazioni di grafica 3D, ne limita di fatto il campo di utilizzo alle applicazioni multimediali come il riconoscimento vocale, la videoconferenza e il trattamento delle immagini. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 71 Nelle applicazioni 3D la soluzione migliore è invece affidarsi ad una scheda 3D dedicata: nei test di grafica tridimensionale presenti nel DirectX SDK della Microsoft, una scheda 3D montata su un Pentium "liscio" è riuscita a produrre costantemente valori almeno 6 volte superiori rispetto ad un Pentium MMX non accelerato e oltre 20 volte maggiori di un Pentium senza scheda 3D. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 72 3.4 Approfondimento sulla tecnologia MMX Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 73 3.4.1 Motivi dell’introduzione dell’MMX Il volume e la complessità dei dati processati dagli attuali computer sta crescendo esponenzialmente: le applicazioni, i giochi e le comunicazioni comprendono sempre più elementi quali video, grafica 3D, animazioni, audio e realtà virtuale; ciò si traduce in richieste di performance sempre maggiori dei processori. La tecnologia MMX e' progettata per accelerare le applicazioni multimediali: in particolare sfrutta il parallelismo esistente in molti algoritmi di comunicazione e multimediali, mantenendo pero' una piena compatibilità con i sistemi operativi e le applicazioni esistenti. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 74 La definizione di questa tecnologia e' il risultato di una collaborazione fra i progettisti Intel e gli sviluppatori di software: sono state analizzate varie applicazioni, dalla grafica 3D ai video MPEG, dalla sintesi musicale alla compressione vocale, dall'elaborazione grafica alla videoconferenza. Tali applicazioni sono state sezionate per identificare le routines più "pesanti" per il processore, che sono state analizzate in modo esaustivo. Il risultato ha dimostrato l'esistenza di molte caratteristiche comuni fra le diverse categorie analizzate, dal cui miglioramento dipendono buona parte delle prestazioni dei programmi. Infatti, sebbene in generale i loop occupino circa il 10% del codice totale dei programmi, sono responsabili di più' del 90% del tempo di esecuzione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 75 Gli attributi fondamentali di queste applicazioni sono: • piccoli tipi di dati interi (es. pixel di 8 bit, campioni audio di 16 bit) • piccoli e ripetitivi cicli • frequenti operazioni di moltiplica e accumula • operazioni intensivamente parallele Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 76 La tecnologia MMX e' progettata per un insieme di istruzioni intere general purpose, che possono essere facilmente applicate alle più disparate applicazioni di comunicazione e multimediali; si basa su quattro punti fondamentali: • tecniche SIMD (Single Instruction, Multiple Data) • 57 nuove istruzioni • 8 registri MMX da 64 bit • 4 nuovi tipi di dati Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 77 La base della tecnologia MMX e' la tecnica SIMD: questa permette a molti pezzi di informazione di essere analizzati come se fossero un'unica istruzione, fornendo un grado di parallelismo che aumenta notevolmente le performance. Questa tecnologia, combinata con un’architettura superscalare, permette notevoli miglioramenti alla piattaforma PC, mantenendo inoltre una piena compatibilità con i sistemi operativi esistenti. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 78 3.4.2 Compatibilità La tecnologia MMX raggiunge la piena compatibilità con le applicazioni ed i sistemi operativi esistenti condividendo i suoi registri con i registri floating-point; pertanto non viene aggiunto nessun registro dedicato per supportare tale tecnologia. Ciò significa che il sistema operativo utilizza dei meccanismi standard per interagire con i registri floating-point, e salvare e ripristinare il codice MMX. Per esempio, durante un cambio di task, il sistema operativo userà le istruzioni FSAV e FRSTR per salvare sia il codice floating-point sia l’MMX. Sovrapporre gli stati floating-point con quelli MMX non preclude alle applicazioni l’esecuzione di routines scritte con entrambi i codici. Le istruzioni che si occupano del save/restore dello stato floatingpoint, così come le tecniche utilizzate per interfacciarsi con il sistema operativo, sono le stesse utilizzate dalle istruzioni MMX. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 79 3.4.3 Istruzioni Le istruzioni MMX coprono varie aree funzionali: • Operazioni aritmetiche elementari come somma, sottrazione, moltiplicazione, shift aritmetico e moltiplica-somma • Operazioni di confronto • Istruzioni di conversione fra i tipi di dati nuovi e quelli esistenti (impacchettamento e viceversa) • Operazioni logiche come AND, AND NOT, OR, XOR • Operazioni di scorrimento • Istruzioni di trasferimento dati (MOV) per i passaggi da registro a registro o per le operazioni di load/store in memoria. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 80 Le istruzioni logiche e aritmetiche sono progettate per supportare i differenti tipi di dati "packed integer"; queste istruzioni hanno un differente op code per ogni tipo di dato supportato. Come risultato, le nuove istruzioni MMX sono implementate con 57 differenti op codes. Tali istruzioni MMX sono di tipo general purpose, in modo da poter essere facilmente "digerite" dalle pipeline parallele dei processori Pentium. Si tratta di numeri interi, in cui il punto decimale e' implicito, e il suo controllo viene lasciato al programmatore per garantire la massima flessibilità. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 81 I quattro tipi di dati MMX sono: • packed byte: 8 bytes impacchettati in una parola di 64 bit • packed word: 4 word da 16 bit • packed doubleword: 2 doubleword da 32 bit • quadword: una quantita' da 64 bit Ad esempio, i pixel grafici sono generalmente rappresentati in interi di 8 bit, o byte. Con la tecnologia MMX, 8 di questi pixel sono raggruppati insieme in una quantita' di 64 bit e posti in un registro MMX; Quando si esegue un'istruzione MMX, questa prende tutti e otto i pixel dal registro, effettua le operazioni aritmetiche o logiche in parallelo su tutti e 8 gli elementi, e scrive il risultato in un registro MMX. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 82 3.4.4 Caratteristiche principali Le istruzioni MMX possono operare su dati con segno o senza segno, utilizzando l’aritmetica di saturazione (quando un numero eccede il range fissato per il suo tipo, satura al limite superiore o inferiore); tali dati possono essere immagazzinati in 8 appositi registri, a cui si può accedere direttamente, utilizzando i nomi dei registri da MM0 a MM7. Le istruzioni hanno solitamente questa sintassi: istruzione[dest,src] dove dest é l’operando destinazione e src é l’operando sorgente. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 83 Molte istruzioni hanno un suffisso che indica l’operazione e il tipo di dato: • US indica la saturazione senza segno • S o SS indica la saturazione con segno; se non sono presenti, viene utilizzata l’aritmetica per arrotondamento • B, W, D o Q indicano il tipo di dati; se vi sono due lettere, l’operando sorgente é trattato come il primo tipo dati, l’operando destinazione come il secondo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 84 Spendiamo ancora due parole sull’aritmetica di saturazione: se utilizzo un unsigned byte per rappresentare l’incremento di colore, quando questo raggiunge il suo limite superiore, cioè 255 (FFh) e tenta di incrementarsi ancora, cosa succede? Nel caso della classica aritmetica di arrotondamento, il numero va a zero, e il colore diventa erroneamente nero; nel caso dell’aritmetica di saturazione, il numero satura al limite massimo, ed il colore rimane bianco. Il limite dopo il quale un dato satura cambia a seconda che il dato sia con segno o senza segno: nel primo caso é 7FFFh, nel secondo FFFFh. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 85 3.4.5 Le istruzioni MMX Analizziamo un po' più in dettaglio le istruzioni; si dividono in questi gruppi: • EMMS • Somma e sottrazione • Scorrimento • Logiche • Moltiplicazione • Confronto • Impacchettamento • Trasferimento dati Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 86 Vediamole in dettaglio: • EMMS. Lo stato MMX é sovrapposto a quello floating-point, e quindi tutte le istruzioni MMX invalidano il tag floating-point quando vengono eseguite. L’istruzione EMMS libera lo stato MMX settando a valido lo stato del tag floating-point, pertanto va sempre utilizzata alla fine di ogni sequenza di codice MMX. • PADD, PADDS, PADDUS, PSUB, PSUBS, PSUBUS. Le operazioni di somma e sottrazione possono operare su bytes, words e doublewords, con segno o senza segno; possono utilizzare l'aritmetica di arrotondamento o quella di saturazione. • PSLL, PRSA, PSRL. Le istruzioni di scorrimento spostano ogni elemento di dati nell’operando destinazione dell’ammontare specificato nell’operando sorgente. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 87 • • • • • • • PAND, PANDN, POR, PXOR. Le istruzioni logiche effettuano operazioni logiche su 64 bit. PMADD, PMULH, PMULL. Le istruzioni di moltiplicazione operano su dati di 16 bit e forniscono prodotti intermedi a 32 bit con segno. PCMPEQ, PCMPGT. Queste istruzioni confrontano i dati contenuti negli operandi sorgente e destinazione; a seconda che il risultato sia vero o falso, viene generata una maschera di uni o di zeri nel corrispondente registro di destinazione. PACKSS, PACKUS, PUNPCKH, PUNPCKL. Le istruzioni di impacchettamento uniscono dati "grossi", come words e doublewords, in dati più piccoli; quelle di disimpacchettamento copiano e uniscono i dati degli operandi sorgente e destinazione. MOVD, MOVQ. Le istruzioni di trasferimento dati vengono utilizzate per la copia di dati da registro MMX a registro MMX, da registro MMX a memoria e viceversa, da registro MMX a registro intero e viceversa. In pratica sono istruzioni MMX che hanno un indirizzo di memoria o un registro come operando destinazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 88 Cap. 4 Analisi del processore Fino ad ora abbiamo analizzato sia le innovazioni introdotte da Intel in occasione del lancio del Pentium II, come AGP e Slot One, sia le caratteristiche ereditate dai modelli precedenti, come l'architettura MMX. Iniziamo ora ad occuparci in dettaglio delle caratteristiche interne del processore, come la cache e la pipeline; l'ordine con cui vengono trattati gli argomenti è il seguente: Chiamato Klamath fino a poco tempo fa, il Pentium II è stato inizialmente costruito con la stessa tecnica da 0,28 micron del Pentium MMX; in seguito si è passati alla versione da 0,25 micron (nome in codice Deschutes) da 300 MHz. Inizialmente era disponibile in un'unica versione da 233 MHz (seguita poi da quella a 266 MHz), a cui corrispondono frequenze di 66 MHz sul bus di sistema (da 64 bit per i dati e 36 bit per gli indirizzi) e 116,5 / 133 MHz per il bus della cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 89 Il Pentium II contiene 7,5 milioni di transistor in soli 203 mm², ma richiede 528 piedini contro i 387 del Pentium Pro. Il package è di tipo LGA (Land Grid Array) plastico, simile al BGA (Ball Grid Array) ma senza le sfere. La principale differenza rispetto al Pentium Pro è che nel Pentium II la cache è esterna, mentre il Pentium Pro è costituito da due chip (processore e cache) collegati tra loro. Il Pentium II non è disponibile come chip ma solo come scheda con a bordo il processore e i 512 KByte di cache (quattro chip di SRAM più un chip di tag). La cpu ha un involucro di plastica BGA (Ball Grid Array); un bordo della schedina funge da connettore a 242 piedini che si inserisce nello Slot One imposto da Intel per le schede madri che supportano il nuovo processore. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 90 Il Pentium II compensa con il raddoppio della cache (2x16 KByte) e con la maggiore frequenza di clock la perdita di prestazioni rispetto al Pentium Pro dovuta alla più lenta cache esterna. Inoltre l'introduzione della cache del registro di segmento migliora leggermente le prestazioni delle applicazioni a 16 bit, pur restando al di sotto della velocità di un Pentium MMX a parità di clock. Le prestazioni del PII saranno analizzate in una sezione a parte, comunque mi sembra opportuno dare una prima indicazione, dato che, a differenza delle proiezioni di Intel, secondo le prime misure di prestazioni pubblicate su Internet ( www.sysdoc.pair.com/klamath.html ), il Pentium II, a parità di clock, ha prestazioni Business Winstone 97 quasi uguali a quelle di un Pentium MMX e addirittura inferiori con l'HighEnd Winstone 97. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 91 Per quanto riguarda il confronto tra Pentium II e Pentium Pro, le misure in Windows NT confermano che, a parità di clock, il Pentium II è leggermente più lento. Tuttavia per i server e le applicazioni tecniche la cache a velocità dimezzata del Pentium II è un handicap e inoltre il Pentium II non supporta la configurazione a quattro processori. Vale la pena notare anche che, al di là della disponibilità delle motherboard (questa volta i taiwanesi sono già pronti), la costruzione di un sistema basato su Pentium II è più critica che in passato. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 92 Il Pentium II infatti richiede una tensione di alimentazione variabile secondo il lotto dei wafer, la frequenza di clock e la stessa motherboard; la cpu invia un codice a 5 bit all'alimentatore e questo deve fornire tra 2,1 e 3,5 volt al nucleo del processore con 100 mV di precisione. Inoltre, a causa della massiccia produzione di calore, la cpu spegne i circuiti inattivi ciclo per ciclo, come dire che può assorbire da 300 mA a 12 A nel giro di mezzo microsecondo, per cui le specifiche richiedono un adeguamento alle variazioni di carico entro 350 ns. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 93 Intel però richiede anche la vicinanza dell'alimentatore alla cpu, per cui le dimensioni dell'alimentatore devono essere particolarmente contenute. I produttori di alimentatori hanno dovuto quindi ricorrere a nuovi progetti, man mano sottoposti a Intel, e risolvere senza clamore le difficoltà incontrate. Il radiatore gigante richiesto dal Pentium II provvede a smaltire i circa 35-38 watt dissipati, poco meno dei 39 W del Pentium Pro/200 con 512 KByte di cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 94 In definitiva, il Pentium II introduce tecnologie proprietarie (come lo zoccolo Slot One) che portano royalty a Intel e ostacolano i concorrenti. La competizione più minacciosa per Intel sembra venire da AMD con il K6, un processore che si inserisce nel Socket 7 (che non richiede licenza da Intel), prolungando la vita delle attuali motherboard a basso costo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 95 Il titolo va inteso alla lettera. Con il Pentium II Intel si appropria di un pezzo di motherboard e lo include in una voluminosa cartuccia che si innesta in uno zoccolo nuovo di zecca, chiamato Slot One. Questo significa che occorre un nuovo tipo di scheda madre predisposto per il nuovo connettore e un case studiato per i nuovi ingombri e per i requisiti di alimentazione del nuovo processore. Come abbiamo preannunciato, il Pentium II deriva dal Pentium Pro con varianti significative. Per cominciare, la cache di secondo livello non è più contenuta nel package della CPU, ma è esterna e utilizza componenti commerciali, anche se è fornita da Intel nella cartuccia del Pentium II; in questo modo si riducono gli scarti e diminuiscono i costi di produzione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 96 L'allontanamento della cache L2 dal processore impone una diminuzione della frequenza del bus della cache: mentre nel Pentium Pro la cache funziona alla stessa frequenza del processore, nel Pentium II la frequenza è dimezzata. Questo causa un calo di prestazioni rispetto a un Pentium Pro di pari clock, ma la maggiore frequenza del Pentium II ne compensa la perdita, salvo in eventuali applicazioni particolarmente impegnative. Dobbiamo comunque notare che 116,5 o 133 MHz sulla cache L2 costituiscono un progresso rispetto ai 66 MHz a cui sono ancorati quasi tutti i processori di classe inferiore. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 97 La seconda novità del Pentium II rispetto al Pentium Pro è la presenza delle 57 istruzioni MMX, il che offre ai produttori di applicazioni professionali la possibilità di incrementare le prestazioni e le funzionalità dei propri pacchetti. Sebbene il Pentium II sia meno soggetto del Pentium Pro al crollo di prestazioni con le istruzioni a 16 bit, il suo impiego principale sarebbe con sistemi completamente a 32 bit, come Windows NT. Di fronte al prezzo del Pentium II e alla necessità di acquistare nuovi sistemi, la domanda spontanea è se questo processore è la soluzione a un problema degli utenti (necessità di potenza di calcolo in prospettiva di applicazioni MMX e di clock di cpu sempre più elevati) o al problema di Intel di mantenere alto il proprio tasso di espansione e di profitto Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 98 Perché si avveri lo scenario immaginato da Intel, dove gli utenti domestici (ma soprattutto le aziende) sfruttano sempre di più le possibilità offerte da Internet, Intranet e dalla manipolazione di dati sempre più ricchi di contenuti multimediali, occorre però una decisa crescita di banda passante delle linee di comunicazione a costo ragionevole e la trasformazione delle opportunità tecnologiche in reale espansione e profitto. La cartuccia in cui sono impacchettati il processore e i chip di cache si chiama Single Edge Contact, o cartuccia SEC. Questa tecnologia sostituisce il tradizionale Pin Grid Array ed è la base per aumentare in futuro le prestazioni della cpu senza creare problemi elettrici alle motherboard. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 99 Questa, al momento, è più una linea evolutiva che una realtà, visto che AMD, con schede madri di classe Pentium e il tradizionale Socket 7, non solo riesce a competere con i processori Intel di categoria P6 ma prevede di aumentare il clock sul bus di memoria e la frequenza interna del processore ancora per parecchio tempo. Tuttavia, se prevediamo un'evoluzione dell'hardware su un periodo più prolungato, è innegabile che ci troveremo di fronte a delle discontinuità (per esempio nella tecnologia delle RAM e nella capacità dei bus), quindi Intel con la sua cartuccia SEC ha solo anticipato i tempi. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 100 A favore dei concorrenti gioca comunque il fatto che la vita media dei sistemi è troppo breve per rinunciare a un sistema con K6, di costo assai contenuto e di prestazioni di tipo Pentium Pro, solo per adottare la linea evolutiva che Intel sta tracciando per gli anni a venire: le due cose non si escludono. Per quanto riguarda il software MMX, Intel ha dato un contributo concreto alla nascita e diffusione di applicazioni, tuttavia una manciata di programmi di edutainment non basta per creare una necessità diffusa; un cambiamento più radicale sarà forse introdotto dalla seconda generazione di istruzioni MMX. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 101 Soluzioni RISC nel Pentium II Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 102 Nella caccia a nuovi livelli di potenza, il PII ricorre ad alcuni stratagemmi che sono tipici del mondo RISC (Reduced Instruction Set Computer). Non solo la superscalarità è stata spinta al massimo (riesce a eseguire fino a tre istruzioni x86 in un singolo ciclo di clock contro le due del Pentium), ma Intel ha pure costruito un'architettura di tipo superpipeline. Questo significa che le pipeline del PII (i canali a più stadi attraverso i quali passano le istruzioni per essere preparate e quindi eseguite) hanno una profondità maggiore al fine di raggiungere una frequenza di lavoro di un terzo superiore rispetto a un Pentium costruito con lo stesso processo produttivo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 103 Il Pentium, lo ricordiamo, ha due pipeline a cinque stadi strettamente interconnesse (il concetto richiama quello di due tubi che corrono paralleli attraverso il processo elaborativo) e perciò ogni volta che una delle due si ferma per mancanza del dato che deve elaborare anche la seconda si ferma. Il PII invece dispone di una pipeline a 14 stadi divisa in tre sezioni che possono funzionare con una certa autonomia una rispetto all'altra, perciò se anche un particolare dato manca nella cache, il funzionamento non viene interrotto e può proseguire con un'altra istruzione nell'attesa che quella prima possa essere proseguita. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 104 Viene definita anche pipeline a tre vie perché dispone al proprio ingresso di tre decodificatori autonomi per leggere e predisporre le istruzioni e riesce di conseguenza a eseguire tre istruzioni (circa) per ciclo di clock. Tuttavia questa cosiddetta superpipeline è sia una benedizione quanto una maledizione visto che costituisce l'origine dei problemi nei confronti del codice a 16 bit. Il PII complementa la sua superpipeline con un motore capace di eseguire le istruzioni fuori sequenza. Mettendo da parte quelle istruzioni che non possono essere elaborate subito (perché mancano gli operandi oppure bisogna attendere qualche evento esterno) ed eseguendo subito quelle che sono pronte si riescono a superare alcune di quelle condizioni che oggi produrrebbero uno stallo nel ciclo elaborativo. Naturalmente il PII si assicura in ogni caso che le istruzioni rimaste in sospeso vengano portate a compimento al fine di produrre i risultati attesi. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 105 Al proprio interno il processore converte le istruzioni x86 in istruzioni RISC che Intel chiama micro-ops (microoperazioni) il che contribuisce a semplificare l'elaborazione del set d'istruzioni x86, notoriamente intricato. Queste microistruzioni RISC sono quindi accodate ed eseguite speculativamente e fuori ordine. La funzione di ridenominazione dei registri (register renaming) serve a consentire l'esecuzione delle istruzioni fuori sequenza e a scavalcare un altro dei colli di bottiglia dell'architettura x86: il numero limitato di registri che il set d'istruzioni consente di definire. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 106 Per quanto riguarda le capacità di esecuzione, il PII possiede due unità per gli interi, una per il floating point e le unità di load e di store; le differenze dell'esecuzione floating point e MMX determinano le diverse prestazioni dei processori in termini di ritmo di inizio esecuzione delle istruzioni e tempo di completamento delle medesime (latenza). Ad esempio, il K6 ha una latenza più breve perché esegue una semplice operazione floating point in due cicli, contro i tre del PII; tuttavia queste istruzioni non possono essere sovrapposte (in una pipeline verrebbero eseguiti simultaneamente vari stadi di diverse istruzioni), col risultato che si può iniziare un'operazione FP solo ogni due cicli, anziché ad ogni ciclo come sul PII. Le applicazioni che eseguono sequenze di calcoli FP risultano quindi più veloci sul PII. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 107 Per quanto riguarda le istruzioni MMX, K6 e PII possono iniziare una moltiplicazione MMX ad ogni ciclo, con una latenza di tre cicli per il PII e di un solo ciclo per il K6, ma la capacità del PII di eseguire due istruzioni MMX alla volta e l'ottimizzazione del software applicativo per il PII rendono quest'ultimo più veloce in questo genere di applicazioni. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 108 4.4 L'Esecuzione Dinamica del PII I processori della famiglia P6 supportano l'esecuzione dinamica tramite i seguenti meccanismi: • Branch prediction: il processore controlla i passi successivi del codice e predice quale delle istruzioni successive è meglio eseguire per prima • Register renaming: il processore mappa i registri x86 in un insieme di registri interni, in modo invisibile al software, rimuovendo così false dipendenze • Speculative execution: il processore esegue alcune istruzioni basandosi sulle indicazioni del flusso di programma previsto, immagazzinando i risultati temporaneamente finché il flusso predetto viene o no confermato. • Out-of-order (O-O-O) execution: il processore esegue ogni istruzione il più velocemente possibile, senza preoccuparsi dell'effettivo ordine sequenziale del programma; tale ordine viene poi ripristinato durante la fase di ritiro. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 109 Per ottenere i massimi benefici dall'esecuzione dinamica, le operazioni che immagazzinano i dati e le istruzioni per l'esecuzione devono essere veloci ed efficienti: • La predizione dei salti deve essere accurata, cioè i buffer di prefetch e le pipeline devono essere il più possibile impegnati; questo perché il costo di una mancata predizione è elevato • La decodifica sequenziale deve essere veloce, in modo da tenere il passo con l'esecuzione fuori ordine; per questo sono stati introdotti i tre decoder in parallelo • L'accesso alla memoria deve essere veloce, così come è importante avere un buon meccanismo di gestione della cache Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 110 Analizziamo ora l'esecuzione dinamica con particolare riferimento alla sua implementazione nel Pentium II; il PII utilizza la stessa microarchitettura con esecuzione dinamica degli altri membri della famiglia P6. Questa microarchitettura superscalare a tre vie è costituita da una superpipeline a più livelli, che compensa con il numero di livelli al minor lavoro svolto da ogni stadio. Il processore Pentium II, per esempio, ha dodici stadi, con un tempo dedicato ad ogni stadio inferiore del 33% rispetto ad un processore Pentium ; in questo modo si raggiunge una frequenza di clock più alta in ogni processo produttivo. L'approccio utilizzato nella famiglia P6 rimuove le restrizioni di sequenzializzazione lineare delle istruzioni tra le fasi di fetch e di execute, aprendo invece una larga finestra di istruzioni utilizzando una Instruction Pool (letteralmente "piscina di istruzioni"). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 111 Questo approccio permette alla fase di execute di avere molta più visibilità nel flusso di istruzioni del programma; ciò si traduce principalmente in un migliore scheduling. Tale soluzione però richiede alla fase di fetch/decode di essere molto più efficiente nel predire il flusso del programma. Uno scheduling ottimizzato richiede la sostituzione della fase di execute con due fasi disaccoppiate: quella di dispatch/execute e quella di retire. Ciò permette alle istruzioni di iniziare in un qualunque ordine, ma di essere sempre completate nell'ordine originale del programma. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 112 I processori della famiglia P6 possono essere pensati come tre motori indipendenti, uniti dall'Instruction Pool come mostrato nella figura 1. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 113 4.4.2 La pipeline Per analizzare più in dettaglio come la microarchitettura della famiglia P6 implementi l'esecuzione dinamica, partiamo da un semplice diagramma a blocchi del PII con la cache e l'interfaccia per la memoria. Le unità mostrate nella figura 2 rappresentano gli stadi della pipeline. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 114 • • • • Fetch/Decode: un'unità in-order (ad esecuzione lineare) che prende in ingresso dalla cache delle istruzioni il flusso del programma utente, e lo suddivide in una serie di microperazioni che rappresentano il flusso di dati del programma. Il pre-fetch è speculativo. Dispatch/Execute: un'unità out-of-order (esecuzione non lineare) che accetta il flusso di dati, schedula l'esecuzione delle microperazioni (a seconda delle dipendenze dei dati e della disponibilità delle risorse), e immagazzina temporaneamente i risultati di queste esecuzioni speculative. Retire: un'unità in-order che conosce come e quando consegnare i risultati speculativi temporanei a uno stato permanente Bus Interface: un'unità parzialmente lineare, responsabile della connessione tra queste tre unità interne e in mondo reale. Questa unità comunica direttamente con la cache di secondo livello (che supporta fino a quattro accessi concorrenti) e controlla un bus di transazioni alla memoria di sistema. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 115 L'unità Fetch/Decode La figura 3 mostra una vista più dettagliata dell'unità di Fetch/Decode. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 116 La cache L1 è una cache di istruzione locale. L'unità next_IP indicizza la cache L1, basandosi sugli ingressi dal branch targhet buffer (BTB), sullo stato dell'interrupt trap, e sulle indicazioni di errata predizione fornite dalla sezione di esecuzione intera. La cache L1 effettua il fetch della linea di cache corrispondente all'indice fornito da next_IP e della linea successiva, e fornisce al decoder 16 bytes allineati. Questi bytes vengono poi ruotati, in modo da essere giustificati per il decodificatore di istruzioni. Tre decoder paralleli accettano poi questo flusso di bytes e decodificano l'istruzione in essi contenuta. Il decoder converte l'istruzione x86 in microoperazioni; molte istruzioni vengono direttamente convertite in singole operazioni, alcune vengono decodificate in un massimo di quattro microoperazioni, mentre le istruzioni più complesse richiedono il microcodice (il box chiamato Microcode Instruction Sequencer nella figura 3). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 117 Questo microcodice è semplicemente un insieme di sequenze preprogrammate di normali microoperazioni. Le microoperazioni vengono accodate e spedite alla Register Alias Table (RAT), dove i riferimenti a registri logici vengono convertite in riferimenti a registri fisici, e allo stadio di allocazione il quale aggiunge un'informazione di stato alle microoperazioni e le immette nell'Instruction Pool. L'Instruction Pool è implementata come un vettore di memoria indirizzabile per contenuto detto reorder buffer (ROB). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 118 Questo microcodice è semplicemente un insieme di sequenze preprogrammate di normali microoperazioni. Le microoperazioni vengono accodate e spedite alla Register Alias Table (RAT), dove i riferimenti a registri logici vengono convertite in riferimenti a registri fisici, e allo stadio di allocazione il quale aggiunge un'informazione di stato alle microoperazioni e le immette nell'Instruction Pool. L'Instruction Pool è implementata come un vettore di memoria indirizzabile per contenuto detto reorder buffer (ROB). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 119 L'unità Dispatch/Execute L'unità di Dispatch seleziona le microoperazioni dell'Instruction Pool a seconda del loro stato. Se lo stato indica che una microoperazione ha tutti i suoi operandi, allora l'unità controlla se le risorse necessarie per l'esecuzione di quella microoperazione sono disponibili. In caso affermativo la Reservation Station rimuove quella microoperazione e le manda alla risorsa dove viene eseguita; il risultato della microoperazione viene ritornato più tardi all'Instruction Pool. Ci sono cinque porte sulla reservation station, e l'accesso alle risorse multiple avviene come mostrato dalla figura 4. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 120 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 121 Il Pentium II può schedulare ad una frequenza di picco di cinque microoperazioni per periodo di clock (una per ogni porta), ma è più tipica una frequenza di tre microoperazioni per periodo di clock. L'attività di questo processo di scheduling è l'esecuzione out-of-order: le microperazioni sono assegnate alle risorse in esecuzione in accordo con le restrizioni del flusso di dati e la disponibilità delle risorse senza preoccuparsi dell'ordine originale del programma. E' da notare che l'algoritmo utilizzato da questo processo di scheduling è basilare per la prestazione. Se una sola microperazione diventa disponibile ad ogni ciclo di clock non c'è possibilità di scelta, ma se ne sono disponibili più di una l'algoritmo deve scegliere. La microarchitettura della famiglia P6 utilizza un algoritmo di scheduling pseudo-FIFO. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 122 Molte delle microperazioni sono biforcazioni (branch). Il Branch Targhet Buffer predice correttamente molte di queste diramazioni, ma non può ovviamente predirle tutte in modo corretto. Consideriamo un BTB che sta predicendo correttamente la diramazione di ritorno alla fine di un ciclo; se questo ciclo termina la diramazione sarà errata. Le microperazioni di diramazione sono segnate nella pipeline con il loro indirizzo di fall-through e la destinazione che è stata predetta. Quando la diramazione va in esecuzione il suo comportamento è confrontato con la predizione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 123 Se queste coincidono allora la diramazione viene ritirata ed il lavoro eseguito specularmente tra questa diramazione e la successiva nell'instruction pool va bene. Ma se non coincidono allora l'unità di esecuzione del salto (JEU) cambia lo stato di tutte le microperazioni precedenti la diramazione per rimuoverla dall'Instruction Iool. In questo caso la destinazione corretta della diramazione viene fornita al BTB, che riavvia l'intera pipeline a partire dal nuovo indirizzo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 124 L'unità Retire La figura 5 mostra una vista più dettagliata dell'unità di Retire. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 125 L'unità di ritiro controlla lo stato delle microperazioni nell'Instruction Pool, cercando quelle microperazioni che sono già state eseguite e possono quindi essere rimosse dall'IP. Una volta rimosse, la destinazione originale delle microperazioni viene riscritta con il set di istruzioni x86. L'unità di ritiro non deve solo controllare quali microperazioni sono state completate ma deve anche reimpostare l'originale ordine del programma. In pratica legge l'instruction pool per trovare i potenziali candidati per il ritiro, e determina quale di questi candidati seguono nell'ordine originale del programma. Quindi scrive il risultato del ritiro nel Retirement Register File (RRF). L'unità Retire riesce a ritirare tre microperazioni per ciclo di clock. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 126 L'unità Bus Interface La figura 6 mostra una vista più dettagliata dell'unità di Bus Interface Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 127 Sono possibili due tipi di accessi alla memoria: Load (Caricamento) e Store (Immagazinamento). Il Load necessita solo di specificare l'indirizzo di memoria a cui accedere, la lunghezza del dato da recuperare, ed il registro di destinazione. Il Load viene codificato in una singola microperazione. Lo Store necessita degli indirizzi di memoria, della lunghezza del dato e del dato da scrivere; pertanto richiede due microperazioni, una per generare l'indirizzo e una per generare il dato. Queste microperazioni dovranno poi essere ricombinate per completare lo Store. Le operazioni di Store non vengono mai effettuate in modo speculativo né riordinate fra loro. Uno Store viene inviato solo quando sia l'indirizzo che il dato sono disponibili e non ci sono Store più vecchi in attesa di spedizione Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 128 Uno studio dell'importanza del riordinamento degli accessi alla memoria ha concluso che: • E' necessario imporre che gli store non possano superare altri store; ciò ha un piccolo impatto sulle prestazioni • Si può imporre agli store di oltrepassare i load con una perdita di prestazioni irrilevante • Imporre ai load di oltrepassare altri load ha invece un notevole impatto sulle prestazioni Il memory order buffer (MOB) permette ai load di oltrepassare sia load che store, trattiene i load e store sospesi e li rispedisce quando la condizione di blocco scompare. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 129 Come funziona la pipeline I processori Pentium II utilizzano un'architettura di esecuzione dinamica che unisce esecuzione speculativa e out-of-order con la ridenominazione hardware dei registri e la predizione dei salti. Questi processori utilizzano una pipeline in-order (le istruzioni vengono eseguite in ordine) che separa le macro istruzioni x86 in semplici microperazioni e un core superscalare e outof-order (le istruzioni vengono eseguite fuori ordine) che esegue le microperazioni. Il core del processore contiene numerose pipeline a cui vengono attaccate interi, salti e unità floating-point. Diverse unità di esecuzione possono essere raggruppate sulla stessa pipeline: per esempio un'unità di indirizzo logico di un intero e un'unità di esecuzione floating-point condividono una pipeline. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 130 La cache dati, attraverso l'interleaving, opera in modo pseudo duale, con una porta dedicata ai load e una agli store. Molte semplici operazioni (ad esempio operazioni su interi, somme su floatingpoint) possono essere messe in pipeline, con un throughut di una o due operazioni per ciclo di clock. Le operazioni a lunga latenza possono procedere in parallelo con quelle a latenza breve. La pipeline a 12 stadi del Pentium II è concettualmente divisa in tre parti: 1) In-order front-end: • predice l'instruction pointer (IP) successivo • effettua il fetch di un flusso di istruzioni x86 • decodifica le istruzioni in micro-operazioni • rinomina i registri esterni per rimuovere eventuali dipendenze • alloca lo stato di ogni micro-operazione nel reorder buffer (ROB) nell'ordine originale del programma Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 131 2) Out-of-order execution: • spedisce ed esegue le micro-operazioni • immagazzina temporaneamente i risultati nel ROB 3) In-order retirement: • scrive i risultati nei registri esterni • immagazzina i dati in modo permanente • rimuove le micro-operazioni dal ROB Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 132 Poiché i processori ad esecuzione dinamica eseguono le istruzioni fuori ordine, la più importante considerazione riguardante le prestazioni è la sicurezza che vi siano sempre abbastanza microperazioni pronte per l'esecuzione. Una corretta predizione dei salti e una decodifica veloce sono essenziali per raggiungere le migliori prestazioni al di fuori del Front-End. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 133 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 134 Il processore effettua il fetch leggendo una linea di cache da 32 byte a partire dall'indirizzo indicato dall'instruction pointer; in seguito marca l'inizio e la fine di ogni istruzione e trasmette 16 byte allineati al decoder. Durante ogni ciclo di clock possono essere decodificate fino a tre macro istruzioni nello stadio ID1. Tuttavia se le istruzioni sono complesse o superano i sette bytes il decoder è limitato a decodificare istruzioni più semplici. I decoder possono decodificare: 1. Fino a tre macro istruzioni per ciclo di clock 2. Fino a sei microperazioni per ciclo di clock 3. Macro istruzioni fino a sette bytes di lunghezza. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 135 Il processore possiede tre decodificatori, chiamati D0, D1 e D2, che lavorano in parallelo per separare le istruzioni x86 in micro-operazioni. D0 può decodificare istruzioni che generano una o più micro-op, producendo fino a quattro micro-op per ciclo di clock. D1 e D2 possono solo decodificare istruzioni che generano una micro-op. D0 decodifica la prima istruzione presente nei 16 byte inviati al decoder; in parallelo, D1 e D2 decodificano ciascuno una delle due istruzioni successive, a condizione che queste generino una sola micro-op. Nel caso D0 debba decodificare un'istruzione complessa, D1 e D2 sono inattivi; istruzioni composte da più di quattro microperazioni necessitano di più cicli per essere decodificate. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 136 Il processore possiede tre decodificatori, chiamati D0, D1 e D2, che lavorano in parallelo per separare le istruzioni x86 in micro-operazioni. D0 può decodificare istruzioni che generano una o più micro-op, producendo fino a quattro micro-op per ciclo di clock. D1 e D2 possono solo decodificare istruzioni che generano una micro-op. D0 decodifica la prima istruzione presente nei 16 byte inviati al decoder; in parallelo, D1 e D2 decodificano ciascuno una delle due istruzioni successive, a condizione che queste generino una sola micro-op. Nel caso D0 debba decodificare un'istruzione complessa, D1 e D2 sono inattivi; istruzioni composte da più di quattro microperazioni necessitano di più cicli per essere decodificate. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 137 Quando si programma in linguaggio assembly, schedulare le istruzioni in una sequenza di microperazioni di tipo 4-1-1 incrementa il numero di istruzioni che può essere decodificato per ciclo di clock. In generale: 1. Semplici istruzioni del tipo registro-registro sono equivalenti ad una microistruzione 2. Le istruzioni di load occupano una microistruzione 3. Le istruzioni di store occupano due microistruzioni 4. Le istruzioni di tipo leggi-modifica occupano due microistruzioni 5. Le istruzioni di tipo registro-memoria occupano due o tre microistruzioni 6. Le istruzioni di lettura occupano quattro microistruzioni 7. Le istruzioni complesse generalmente occupano più di quattro microistruzioni, e quindi richiedono più cicli di clock per essere decodificati. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 138 Una volta che le microistruzioni sono state decodificate vengono passate dal Front-End alla Reservation Station, che è lo stato iniziale del Core. Nell'RS le microperazioni attendono finchè i dati dei loro operandi sono disponibili. Quando questo si verifica, la specifica microperazione viene spedita dall'RS all'unità di esecuzione. Se una microperazione entra nell'RS con tutti i suoi dati già disponibili, allora viene immediatamente spedita ad un'unità di esecuzione (se disponibile). Una volta che la microperazione è stata eseguita ritorna all'ROB e attende di essere ritirata. In questo stadio tutti i dati vengono riscritti in memori e tutte le microperazioni vengono ritirate in ordine, tre alla volta. La figura successiva mostra alcuni dettagli del core e degli stadi di ritiro. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 139 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 140 Ad ogni ciclo di clock, il reorder buffer (ROB) può spedire fino a 5 micro-op, fuori ordine, alle unità di esecuzione; ad ognuna delle cinque porte possono essere collegate più unità di esecuzione, ed in questo caso solo un'unità alla volta può utilizzare la porta. Vediamo quali unità sono collegate ad ogni porta: • Porta 0: un'unità intera, due unità FP, una di generazione degli indirizzi, una per le operazioni di ALU sui tipi packed (istruzioni MMX) e una per le moltiplicazioni sui packed • Porta 1: un'unità intera, una per le operazioni di ALU sui tipi packed e una per lo shift dei packed • Porta 2: un'unità di load • Porta 3: un'unità di store degli indirizzi • Porta 4: un'unità di store dei dati Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 141 4.5 La Cache Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 142 Il Pentium II possiede due cache di primo livello separate, una per le istruzioni (di 16 KB) e una per i dati (di 16 KB); la cache dei dati ha due porte che permettono di eseguire simultaneamente le istruzioni di load e di store. La cache di secondo livello è invece unica, di 512 KB, e viene utilizzata sia per i dati che per le istruzioni. La lunghezza di linea in entrambe le cache è di 32 bytes. Quando il dato o l'istruzione richiesta si trovano nella cache, avviene un cache hit: ciò permette di risparmiare il tempo e le risorse necessarie per effettuare il fetch dalla memoria; la frequenza di hit ottenibili viene poi aumentata dalla lunghezza di una linea, fissata in 32 byte. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 143 Nel caso invece la richiesta non possa essere soddisfatta dalla cache, si ha un cache miss: il processore prova allora a cercare il dato nella cache di secondo livello e quindi in memoria. Esistono tre tipi di cache miss: • Compulsory: avviene con il primo accesso ad un indirizzo di memoria non presente nella cache • Conflict: avviene nelle cache set-associative, quando tutte le linee di un determinato insieme sono piene • Capacity: si presenta quando tutti gli insiemi della cache sono pieni La cache del Pentium II è di tipo set-associativo a quattro vie, in modo da permettere accessi veloci e simultanei. La struttura è non bloccante, cioè un accesso che si conclude con un miss non provoca lo stallo degli accessi successivi; infatti la cache può gestire autonomamente fino a 4 operazioni di recupero dei dati mancanti e, con l'assistenza del Memory Reorder Buffer interno al processore, i cicli pendenti possono diventare 12. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 144 La cache non bloccante si adatta particolarmente bene al nucleo di esecuzione fuori sequenza del PII, poichè consente al processore di continuare a funzionare durante i periodi di attesa associati all'accesso alla RAM centrale. A parità di condizioni, invece, il Pentium si ferma e resta bloccato fino a quando arrivano i dati dalla memoria centrale. L'algoritmo utilizzato è di tipo LRU (last-recently-used): quando un cache miss provoca il riempimento di una linea, e tutte le linee dell'insieme contengono dati validi, la cache sostituisce la linea utilizzata meno recentemente; in più, il processore alloca le linee nella cache dei dati dopo una scrittura, così come dopo una lettura. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 145 Come risultato, un cache hit è più probabile quando: • I dati o le istruzioni richiesti sono stati usati di recente (il codice utilizza una vicinanza temporale) • I dati o le istruzioni sono vicini a dati o istruzioni già in uso (il codice utilizza una vicinanza spaziale). Per quanto riguarda le politiche di scrittura, locazioni di memoria diversa possono essere configurate con politiche diverse, utilizzando flag di sistema e registri. Il processore Pentium II supporta varie politiche di scrittura: Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 146 • Write Back: scrive direttamente nella cache; il dato viene scritto in memoria solo quando la linea deve essere sostituita, riducendo il traffico sul bus • Write Combining: scrive temporaneamente il dato in un apposito buffer di scrittura, accumulando via via i 32 byte della linea; viene utilizzato quando il numero di scritture è molto maggiore del numero di letture, come nei frame buffer • Uncacheable: scrive il dato immediatamente in memoria, senza passare per la cache; è utile per la mappatura in memoria dei dispositivi di I/O • Write Through: scrive il dato nella cache, finché la linea non è più valida, e nella memoria di sistema, aumentando la coerenza fra cache e memoria di sistema • Write protected: scrive il dato in memoria e lo propaga nel bus di sistema, invalidando le corrispondenti linee di cache su tutti i processori Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 147 Sui processori Pentium MMX si può accedere alla cache dati simultaneamente da entrambe le pipeline, finché i riferimenti sono a banchi diversi. Sui processori della famiglia P6 si può accedere alla cache dati simultaneamente da parte di un'istruzione di load e un'istruzione di store finché i riferimenti sono a banchi diversi. Se i riferimenti sono allo stesso indirizzo allora bypassano la cache e vengono eseguiti nello stesso ciclo. Il ritardo dovuto ad un cache miss è di otto cicli di clock sui Pentium MMX e di almeno dieci cicli di clock sui Pentium II. I tag (indicatori che mostrano se un determinato dato si trova o meno nella cache) vengono conservati direttamente dalla CPU, senza cioè dover ricorrere a circuiteria aggiuntiva come accade nel caso della cache di secondo livello. In questo modo è possibile recuperare le informazioni dalla cache secondaria in un solo ciclo di clock, a differenza dei due necessari ai Pentium. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 148 4.6 Il Branch Target Buffer Il processore esegue le istruzioni in modo sequenziale, finché non incontra una diramazione: se questa è già stata correttamente o erratamente predetta, il branch target buffer (BTB) utilizza la storia contenuta nei suoi 512 valori, e con un meccanismo di predizione dinamico predice l'instruction pointer successivo. Se invece è la prima volta che si incontra tale diramazione, il BTB non è di alcun aiuto, e un algoritmo di esecuzione statico predice l'IP successivo in un secondo momento, quando l'istruzione viene decodificata (richiedendo così più cicli in caso di errata previsione). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 149 Per quanto riguarda l'algoritmo dinamico, è da notare che, per ogni indirizzo di salto contenuto nel BTB, la sua storia viene tenuta per le ultime quattro volte in cui il salto è eseguito; pertanto sono prevedibili solo le diramazioni che ripetono il loro corpo in meno di cinque iterazioni. Per esempio, un loop di quattro iterazioni dovrebbe avere una probabilità di corretta predizione prossima al 100%. Per quanto riguarda l'algoritmo statico, esso prevede: • un salto non condizionato come effettuato • un salto condizionato all'indietro come effettuato • un salto condizionato in avanti come non effettuato (passa all'istruzione successiva) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 150 Il BTB, in definitiva, raccoglie la storia delle diramazioni precedenti e dei loro target (gli indirizzi a cui salta il programma). Quando avviene il prefetch di una diramazione, il BTB passa il suo target direttamente nell' Instruction Fetch Unit (IFU); una volta che la diramazione viene eseguita, il BTB viene aggiornato con il target. Per aumentare le prestazioni dell'algoritmo di predizione dei salti, bisogna programmare le diramazioni condizionali (tranne i loop) in modo che la diramazione maggiormente eseguita segua immediatamente l'istruzione di branch. Il Pentium II possiede poi un Return Stack Buffer (RSB), che riesce a predire correttamente gli indirizzi di ritorno delle procedure che vengono chiamate, in successione, da locazioni differenti; ciò incrementa notevolmente i benefici dei loop contenenti chiamate a funzioni, e rimuove la necessità di costruire procedure strettamente lineari. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 151 Branch consecutivi Nei Pentium II le diramazioni possono essere predette in modo errato quando gli ultimi bytes di due istruzioni di tipo branch capitano nella stessa sezione di memoria di quattro bytes come mostrato nella figura seguente. Ciò può succedere quando ci sono due istruzioni di diramazione consecutive, senza altre istruzioni frapposte, e la seconda istruzione è di soli due byte più lunga (come ad esempio un salto di ±128). Per evitare una mancata predizione, in questi casi bisogna rendere il secondo salto più lungo, utilizzando uno spiazzamento relativo di 16 bit invece che di 8 bit. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 152 I buffer di scrittura I Pentium II hanno quattro buffer di scrittura, contro i due dei Pentium; poiché i write hit non possono oltrepassare i write miss nel flusso di esecuzione di un programma, le prestazioni dei loop critici possono essere migliorate effettuando uno scheduling delle scritture in memoria. In pratica, quando ci si aspetta un write miss, si dovrebbero schedulare le istruzioni di scrittura in gruppi non più larghi di quattro, e quindi schedulare altri tipi di istruzioni prima di introdurre altre istruzioni di write. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 153 Cap 1 Introduzione Nel mese di Febbraio del 1999 Intel ha cominciato a commercializzare il successore del Pentium II: il Pentium III. E' bene chiarire subito che il Pentium III non rappresenta, neppure con la versione Coppermine commercializzata a partire dal terzo trimestre del 1999 (che pure ha introdotto alcune innovazioni), un processore della cosiddetta settima generazione avendo sostanzialmente mantenuto il core del Pentium II Deschutes. Le difficoltà incontrate nello sviluppo e nella produzione dei nuovi chipset che dovevano supportare il nuovo processore e la formidabile concorrenza esercitata dalla AMD con il K6 e soprattutto con l'Athlon, hanno posto in una posizione difficile l'Intel, che già incontrava problemi nella realizzazione del progetto per l'architettura a 64 bit, portandola a dare un deciso impulso allo sviluppo del vero processore P7 (chiamato Willamette) la cui realizzazione era in deciso ritardo rispetto alle roadmap rilasciate nel 1998. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 154 L'aspetto più innovativo del Pentium III è rappresentato dall'introduzione del set di istruzioni SSE (Streaming SIMD Extension), originariamente denominate KNI (Katmai New Instruction), e dall'implementazione della tecnologia a 0.18 micron che ha aperto la strada a una maggiore integrazione con i prevedibili effetti di incremento del clock e diminuzione della potenza assorbita. Altre 'minori' innovazioni riguardano il package, il discusso Processor Serial Number (PSN) e appunto la serie di nuovi chipset che però hanno visto la luce, solo a quasi un anno dall'uscita del primo Pentium III. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 155 Il processore risulta essere composto da 9.5 milioni di transistor su un die di 125 mm2 realizzato con processo CMOS a 5 livelli di metallizzazione a 0.25 micron. E' ai processori realizzati con questa tecnologia cui ci si riferisce parlando di "core Katmai" (che si distinguono da quelli realizzati con tecnologia a 0.18 micron identificati col nome Coppermine). L'alimentazione del core è a 2.0 V e la potenza assorbita è compresa tra i 25 W del Pentium III a 450 MHz (il primo prodotto) e i 34 W del Pentium III a 600MHz La prima differenza del Pentium III rispetto al predecessore che salta agli occhi è rappresentata dal nuovo package denominato OLGA (Organic Land Grid Array) per altro adottato anche dagli ultimi PentiumII, il quale è sensibilmente più piccolo del package precedente, lo standard PLGA ( Plastic Land Grid Array). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 156 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 157 Per le CPU realizzate con la tecnologia a 0.25 micron si è mantenuta la struttura tipica del Pentium II e cioè le usuali tecniche di esecuzione dinamica (Multiple Branch Prediction, Dataflow Analysis e Speculative Execution), l'architettura DIB (Dual Independent Bus), la gerarchia di memoria composta da una cache non bloccante di primo livello L1 di 32KB (16 KB Dati /16 KB Istruzioni) più una di secondo livello L2 di 512 KB operante a metà della frequenza di clock della CPU. Le cache di entrambi i livelli sono set associative a 2 vie. La configurazione della memoria ha imposto inizialmente il mantenimento dello Slot 1 seppure nella forma compatibile SECC2 la quale appare come la classica cartuccia SECC(Single Edge Contact Cartridge peraltro mantenuta per qualche tempo) alla quale è stata rimossa la copertura per collegare direttamente al core il dissipatore migliorandone l'efficienza. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 158 La differenza essenziale tra le CPU Katmai a varie frequenze risiede nel moltiplicatore (cioè nel rapporto tra la frequenza operativa della CPU e quella effettiva del bus) che ne determina la frequenza di clock operativa e la qualità delle cache L2 esterne impiegate che ne influenzano assai più il prezzo che non le prestazioni. Il limite dei 600 Mhz risiede proprio nella tecnologia utilizzata che non consente, con la necessaria affidabilità di produzione e di operatività, ulteriori innalzamenti. Per fare fronte a questi problemi Intel è stata costretta ad aumentare la tensione di alimentazione per la CPU che opera a questa frequenza portandola a 2.05 V. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 159 Quando si sono resi disponibili i primi chipset con bus a 133 MHz Intel ha previsto per le CPU il supporto a tali chipset e le CPU che ne dispongono sono state rinominate aggiungendo una B al nome. L'impatto determinato dall'incremento della frequenza di bus, a parità di processore e di frequenza di clock, sulle prestazioni complessive per sistemi basati su Slot 1 è però assai minore che per sistemi basati su Socket 7 in quanto nei primi la frequenza di lavoro della cache L2 non è legata al bus ma alla frequenza di clock mentre nei secondi è basata sulla frequenza di bus. Naturalmente ciò è ben più marcato per calcoli su interi assai più influenzati dalle prestazioni della cache L2 che non calcoli su floating point. Per quanto riguarda la larghezza di banda i 133 MHz hanno portato ad un incremento del 33% rispetto ai 800 MByte/s del bus a 100 MHz arrivando a una banda di poco superiore al GByte/s. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 160 Per il mercato dei server Intel ha basato sulla tecnologia 0.25 micron il Pentium III Xeon conosciuto come Tanner il quale è essenzialmente un Pentium II Xeon con l'implementazione delle SSE. Pur non essendo definibile propriamente una CPU Katmai (ad esempio per il supporto della cache L2 operante alla frequenza di clock di dimensioni fino a 2 MB e per l'utilizzo di conseguenza di uno Slot più grande a 330 pin chiamato Slot 2) si è ritenuto di inserirlo nella tabella riassuntiva delle caratteristiche principali delle CPU basate su core Katmai in quanto insieme rappresentano il primo step del Pentium III pure se per due mercati differenti. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 161 1.2 Processor Serial Number La campagna promozionale all'uscita del Pentium III insistette molto circa le possibilità offerte nell'impiego in Internet. Per offrire supporto ad una univoca identificazione del consumatore (per la sicurezza del commercio elettronico) Intel ha definito il Processor Serial Number (PSN). Questo numero è derivato dalla marcatura per stress elettrico di fusibili di silicio sul wafer che forniscono bits letti dal microcodice che supporta l'istruzione CPUID (destinata a fornire a software esterno parametri specifici del processore) e che, concatenati opportunamente, vanno a formare un valore a 64 bits scritto in due registri general purpose. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 162 Siccome la funzione CPUID è accessibile a ogni livello (da quello applicativo, al sistema operativo, al BIOS) qualsiasi programma che ne faccia richiesta lo può desumere. Le implicazioni in termini di privacy sono evidenti e la possibilità di disabilitare questa funzione non ha frenato, all'uscita del Pentium III, un acceso dibattito (anche a livello governativo e militare) che ha portato Intel a consigliare i rivenditori di fornire le CPU con il PSN disabilitato e secondo alcune fonti starebbe pensando di togliere il PSN dai processori futuri o modificarlo in senso restrittivo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 163 1.3 Chipset 810 e 810E Come detto il Pentium III doveva essere supportato alla sua uscita da un chipset innovativo data la crescente importanza, che a partire dall'introduzione della connessione AGP, hanno assunto questi componenti ma per alcuni mesi si è dovuto appoggiare al 440BX il primo chipset Intel a supportare il bus da 100 MHz. L'uscita del chipset i810 conosciuto anche come Whitney è stato in pratica un ripiego di natura "economica" a causa delle difficoltà legate all'uscita del vero chipset del Pentium III (cioè il Camino o i820) legate agli alti prezzi delle memorie RDRAM che doveva supportare. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 164 Il chipset i810 impiega infatti la meno costosa memoria SDRAM PC100 e comunque presenta le principali caratteristiche architetturali (struttura HUB o accentrata) dei chipset della serie i800 che lo hanno seguito (che tratteremo nel capitolo relativo al Coppermine). Concettualmente tutti i chipset della serie i800 sono composti dai seguenti componenti: • Ich (I/O Controller HUB) che assolve il compito del South Bridge tradizionale cioè quello di gestire la connessione tra le porte di I/O e bus PCI con la differenza che contiene il controllor PCI; Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 165 • Mch (Memory Controller HUB) che interpreta il ruolo di controllo dei flussi tra memoria e processore e si occupa delle connessioni ad alta velocità; • Fwh (Firmware HUB) che ha il compito di integrare la memoria volatile per il Bios di sistema e che detiene il controllo di un generatore hardware (mediante rilevazione del rumore termico di un resistore) di numeri casuali (RNG, Random Number Generator) utile ai fini della sicurezza nelle applicazioni di crittografia (utili in trasmissioni dati e quindi in Internet) rispetto ai numeri pseudocasuali ottenuti per via algoritmica. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 166 A differenza dalla tradizionale architettura Northbridge/Southbridge però il Mch e il Ich non comunicano tra loro tramite il bus PCI ma tramite un bus dedicato operante a 133 MHz in modalità doppio fronte e ampio 8 bit con ampiezza di banda doppia (cioè 266 MByte/s). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 167 Per le varie versioni della serie i800 il Ich e il Fwh rimangono sostanzialmente invariati mentre il Mch cambia. Nell'i810 si chiama Gmch (Graphic Mch) dato che integra un controller grafico 2D/3D per ridurre il prezzo del PC basato su di esso. Le frequenze di bus supportate sono 66 MHz (per compatibilità con Celeron), 100 MHz e con l'apparizione del i810E (introdotto, oltre che per incrementare la banda, anche per riparare un bug del i810) anche 133 MHz. Naturalmente ci riferiamo alla frequenza del Front Side Bus (FSB) che è quello responsabile della connessione tra CPU e memoria principale. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 168 Cap 2 Le istruzioni SSE Nel mercato moderno del PC appare evidente l'importanza che ha assunto la grafica 3D per la riproduzione di filmati e l'animazione soprattutto con i possibili scenari futuri introdotti da Internet. Conscia di questo aspetto l'Intel si è posta come obbiettivo con il Pentium III di incrementare le prestazioni in questa direzione. Il software 3D necessita per una buona resa che la stessa operazione sia eseguita contemporaneamente su più vertici 3D in modo da rendere più "fluido" lo scorrere delle immagini. Questo si traduce in una elaborazione di tipo parallelo dei dati 3D che, come noto, sono trattati in virgola mobile. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 169 Questo fatto ha portato a sviluppare una estensione del set di istruzioni Intel, in maniera analoga a quanto fatto con gli interi con le istruzioni MMX secondo una logica SIMD (Single Instruction Multiple Data), anche per le operazioni in virgola mobile a singola precisione chiamata Internet SSE (Internet Streaming SIMD Extension) o più semplicemente SSE. L'obbiettivo propostosi dai progettisti Intel era di raggiungere un incremento delle performance floating point tra il 70% e il 100%, ritenuto sufficiente a rendere percettibile la differenza e quindi competitivo il prodotto, al minor costo possibile in termini di incremento della complessità e aumento delle dimensioni del die. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 170 Nel contempo si decise di estendere le applicazioni Multimedia introdotte con la tecnologia MMX (quale ad esempio codifiche in tempo reale di tipo MPEG-2) e di introdurre istruzioni per mascherare la latenza che deriva dalle notevoli dimensioni, in termini di memoria, dei dati implicati in applicazioni video. Il termine "Streaming" del nome si riferisce appunto alla presenza di istruzioni che permettono il prefetch di dati simultaneamente all'elaborazione di altri già disponibili velocizzando il flusso (stream) dei dati in ingresso e in uscita del processore nascondendo nel tempo di esecuzione la latenza del fetch. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 171 2.1 Definizione delle SSE Una delle scelte basilari nella definizione di un'architettura SIMD consiste nel definire su quanti dati contemporaneamente si vuole operare in modo da raggrupparli in un vettore di dimensioni adeguate, che costituirà il nuovo tipo di dato cui faranno riferimento le istruzioni SIMD. Il team di sviluppatori di Intel ritenne che la computazione parallela di 4 floating-point a singola precisione (32 bit) e quindi di un data-type SSE da 128 bit consentisse un raddoppio delle performance senza aggiungere eccessiva complessità essendo tendenzialmente ottenibile con un doppio ciclo della esistente architettura a 64 bit. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 172 La scelta di operare su 2 floating-point non avrebbe consentito di ottenere paragonabili prestazioni mentre l'adozione di un datapath di 256 bit (8 FP da 32 bit) avrebbe determinato un impatto maggiore in termini di complessità. Mentre i 128 bit possono essere separati in 2 istruzioni da 64 bit che possono essere eseguite, come vedremo, in un ciclo, con 256 bit si sarebbe dovuto, per mantenere lo stesso throughput, raddoppiare la larghezza delle unità di esecuzione e quindi la banda di memoria per alimentarle. Stabilito il datapath di 128 bit si poneva la domanda se implementare i registri a 128 bit nei registri MMX/x87 esistenti oppure definire un nuovo stato con registri appositi. La prima scelta, analoga a quella attuata con l'estensione alla tecnologia MMX, avrebbe comportato il vantaggio della piena compatibilità con il sistema operativo ma lo svantaggio di dover condividere i registri, già penalizzanti, della architettura IA-32. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 173 La seconda scelta avrebbe comportato il problema di dover adattare i sistemi operativi, problema poco sentito da Intel data la sua forza contrattuale, ma avrebbe avuto il vantaggio di facilitare i programmatori e la possibilità eseguire contemporaneamente istruzioni MMX, x87 o SIMD-FP. I progettisti Intel optarono per aggiungere un nuovo stato architetturale, per la prima volta dai tempi dell'aggiunta di quello x87 al i386 nel 1985, con la definizione di 8 nuovi registri da 128 bit (chiamati registri XMM), cosa che non era stata fatta con l'introduzione delle istruzioni MMX che operavano su 2 interi da 32 bit utilizzando 64 degli 80 bit dei registri x87. Qui di seguito vediamo illustrati i registri SSE e i registri MMX seguiti dall'illustrazione di come sono sistemati i 4 dati floating point single precision standard IEEE 754 (quindi da 32 bit) nel registro a 128 bit. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 174 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 175 Si è previsto inoltre un nuovo control/status register a 32 bits (MXCSR) utilizzato per la gestione delle eccezioni numeriche, per visualizzare i flag di stato o per gestire il passaggio dall'aritmetica FP standard IEEE alla modalità Flush-To-Zero che, sacrificando la piena precisione, favorisce molte applicazioni high-performance 3D in tempo reale. Per una efficiente gestione della memoria bisognava prevedere un meccanismo di gestione per gli accessi alla memoria non allineati a 128 bit ossia 16 byte. Giudicate eccessivamente penalizzanti per le prestazioni la rilevazione e la gestione assistita da microcodice dei casi di mancato allineamento si è optato per la generazione di un esplicito errore. Per i dati, come quelli video, per i quali l’allineamento non può essere garantito si sono previste apposite istruzioni che ne consentono l’esecuzione in maniera più efficiente senza allineamento Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 176 2.2 Le istruzioni SSE in dettaglio Il set di istruzioni SSE è costituito da 70 nuove istruzioni che, a seconda dell'aspetto che si vuole focalizzare, si usa raggruppare diversamente. Una prima suddivisione possibile è quella in base al tipo di applicazioni cui sono dirette e possono vedersi ordinate, senza indicarle esplicitamente, come: • SIMD-FP: 50 istruzioni per gestione SIMD di numeri floating-point a singola precisione; • New Media: 12 istruzioni per operazioni di multimedialità orientate ad esempio alla codifica e decodifica di video MPEG-2 in tempo reale; • Streaming Memory: 8 istruzioni per il miglioramento della gestione della gerarchia di memoria. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 177 Un'altra interessante suddivisione che si può operare è quella in base a come i dati che devono essere manipolati vengono gestiti. In quest'ottica facciamo riferimento a due categorie principali: istruzioni su dati packed, identificate dal suffisso "PS" e istruzioni su dati scalari, identificate dal suffisso "SS". Si è scelto di definire esplicitamente operazioni scalari nel nuovo set di istruzioni e non di usare per le operazioni scalari solo le istruzioni x87 in quanto ciò avrebbe comportato problemi di compatibilità tra i risultati (calcolo in 32 bit per SIMD-FP contro gli 80 bit in x87) e costo in termini di tempo di esecuzione nel caso di utilizzo di istruzioni packed per operazioni scalari. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 178 Le istruzioni packed operano su tutti e quattro gli elementi dei due operandi mentre le istruzioni Scalari operano solo sull'elemento "least-significant" dei due operandi passando direttamente gli altri tre elementi del registro sorgente al registro destinazione come illustrato nella figure. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 179 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 180 2.2.1 Istruzioni Aritmetico-Logiche e di Comparazione Le Istruzioni Aritmetiche comprendono, sia per packed che scalari, le usuali istruzioni di calcolo fondamentali quali ADD, SUB, MUL, DIV ect .Sono inoltre previste due istruzioni RCP (operazione di reciprocità) e RSQRT (che effettua il reciproco della radice, in pratica una normalizzazione) che derivano da tabelle via hardware risultati meno precisi (12 bit di mantissa) delle normali istruzioni di divisione e radice dello standard IEEE (23 bit di mantissa) e velocizzano la pipeline geometrica. Queste operazioni di reciprocità sono usate in molti algoritmi di elaborazione geometrica. Le Istruzioni Logiche sono solo per dati packed e sono ANDPS,ANDNPS, ORPS e XORPS. L'istruzione di comparazione principale è la CMP, sia PS che SS, che in maniera analoga alle istruzioni di confronto MMX genera maschere di uno e zero nel registro destinazione a seconda del risultato del confronto tra gli operandi.(CMPPS, CMPSS, MAXPS, MAXSS, MINSS, MINPS) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 181 2.2.2 Istruzioni di Shuffle e Movimento Dati Le Istruzioni di movimento dati sono usate per le normali operazioni di Load e Store, e per riarrangiare più dati 3D i quali sono tipicamente organizzati in struttura AoS (Array of Structures), nella quale abbiamo un array in cui vengono depositate le coordinate un punto dopo l'altro, in dati con struttura SoA (Structure of Array) nella quale abbiamo invece più array, ciascuno dei quali contiene la medesima coordinata di più punti e che favorisce l'elaborazione di tipo SIMD. Nell’immagine seguente vediamo una trasformazione da struttura AoS a struttura SoA.(MOVHPS, MOVLPS, MOVMSKPS, MOVUPS, MOVSS) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 182 Le Istruzioni Shuffle eseguono operazioni di estrazione di float da parti di registri o operandi in maniera analoga alle istruzioni di spacchettamento MMX e supportano operazioni di mescolamento dati tipo rotate, swap, reverse ect.(UNPCKHPS, UNPCKLPS, SHUFPS). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 183 2.2.3 Istruzioni di Conversione Le Istruzioni di Conversione consentono essenzialmente la conversione tra SIMD-FP e MMX per dati packed e tra ScalarFP e interi IA-32 per dati scalari e conversioni a e da doubleword. Dato che esistono istruzioni MMX che possono efficacemente convertire da/a double-word a/da word e byte e numerose altre conversioni possono essere emulate da sequenze di istruzioni si è preferito non introdurre un set eccessivamente esteso di istruzioni di conversione. (CVTTPS2PI, CVTPI2PS, CVTPS2PI, CVTSS2SI,CVTTSS2SI,CVTSI2SS). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 184 2.2.4 Istruzioni di Stato Le Istruzioni di Stato gestiscono lo stato architetturale aggiuntivo e il control/status register MXCSR consentendo di salvare o ripristinare le informazioni dello stato architetturale del processore (registri MMX, XMM e x87) in formato a 512 byte e nelle operazioni di load e store l’indirizzo è allineato a 16 byte. (FXRSTOR, FXSAVE, STMXCSR,LDMXCSR). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 185 2.2.5 Istruzioni per Estensione tecnologia MMX Le Istruzioni estensive per la tecnologia MMX supportano come detto le operazioni multimediali. Le più importanti istruzioni introdotte sono: • una moltiplicazione per interi senza segno PMULHUW (che mancava nel set MMX) usata per valori assoluti nella gestione dei pixel ed evitare le inefficienze nelle operazioni di scansione 3D dovute all'aggiustamento dei dati con segno; • l'istruzione PSADBW che facilita il calcolo della funzione SAD (Sum of Absolute Difference o Sum of Absolute Distortion) il cui minimo è utilizzato per individuare il vettore di movimento più opportuno per la stima del moto effettuando in un'istruzione il calcolo di otto differenze assolute e la loro somma; Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 186 • due istruzioni packed (PAVG e PAVGW) che effettuano le addizioni con un bit supplementare di accuratezza (quindi in totale 9 bit per PAVG e 17 bit per PAVGW) richiesta per le operazioni di media alla base delle interpolazioni necessarie, con MPEG-2, alla compensazione di moto sia in codifica che decodifica (consentendo il supporto di codifica in tempo reale MPEG-2 di 30 frame/s); • alcune istruzioni (PMOVMSKB, PSHUFW, PINSRW, PEXTRW) che ovviano ad alcuni inconvenienti nelle elaborazioni digitali e nella dipendenza dati legati all'immagazzinamento di dati in registri MMX non direttamente indirizzabili; • due istruzioni packed (PMIN, PMAX) utilizzate per algoritmi di riconoscimento vocale e per la saturazione del colore Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 187 2.2.6 Istruzioni di Streaming Memory/Prefetching Le istruzioni di Streaming Memory/Prefetching sono utilizzate per consentire ai programmatori una gestione più diretta della gerarchia di memoria. Innanzitutto vi sono 4 nuove istruzioni di prefetch dei dati che consentono, ad esempio, di immagazzinare dati solo nella cache L1 evitando, se il dato non è presumibilmente a breve richiesto, di doverlo rimuovere anche dalla L2 (PREFETCHNTA) o di immagazzinare una linea di cache sia nella L2 che nella L1 (PREFETCH0). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 188 Le istruzioni di prefetch agiscono come hints (cioè suggerimenti) e quindi per mantenere questa caratteristica non causano eccezioni. Non si genera alcun errore cercando di fare il prefetch di un indirizzo non valido. Le istruzioni di prefetch agiscono in sostanza caricando un dato prima del suo utilizzo e possono nascondere parzialmente o totalmente lo stallo dovuto all’attesa da parte del processore che il dato venga caricato dalla memoria alla cache o ai registri. Si consideri lo schema seguente: Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 189 Come si vede cominciando il caricamento dei dati solo al momento della richiesta della CPU, che avviene al termine della esecuzione della istruzione precedente, si ha un periodo di tempo, durante il quale i dati vengono trasferiti attraverso la gerarchia di memoria, e il processore non lavora. Eseguendo il movimento dei dati prima della loro richiesta si annulla lo stallo (Fig. A) o lo si nasconde solo parzialmente, cioè lo si riduce in durata, nel caso di esecuzione di operazioni particolarmente brevi (Fig. B) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 190 Inoltre per molte applicazioni 3D la natura dei dati è tale (spesso sono letti e usati una sola volta senza essere modificati e quindi poco adatti ad essere gestiti via cache non godendo di località temporale) che si ha un guadagno delle prestazioni bypassando la cache. Sono state per questo scopo adottate le istruzioni di Streaming Store come MOVNTPS per packed FP e MOVNTQ per interi packed (dove NT sta per "non temporale") le quali, associate a buffer più capienti, consentono una politica di scrittura write-combining assai più adatta a dati di questo tipo che non eventualmente una politica di scrittura write-back. Il writecombining è una politica di scrittura che prevede l’accumulazione in un buffer apposito di più write e il loro trasferimento in un unico accesso alla memoria principale riducendo così il traffico. Nel caso del Pentium III tali buffer sono di dimensione 32 bytes. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 191 L’istruzione MOVNTPS trasferisce 128 bit dai registri XMM alla memoria principale in un cache miss senza aggiornare la cache. In un cache miss la cache è aggiornata e il dato non è scritto direttamente in memoria. L’indirizzo di memoria deve essere allineato a 16 byte altrimenti scatta un errore di protezione. L’istruzione MOVNTQ agisce nello stesso modo ma opera su registri MMX a 64 bit. Vi è anche una istruzione che esegue una mascheratura (cioè scrive alcuni byte in specifiche posizioni di un operando) sfruttando il trasferimento dei dati del sottosistema di memoria e implementando anch'essa una politica write-combining per ridurre l'impiego di banda. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 192 L’utilizzo delle politiche di write-combining e l’esecuzione outof-order comportano accessi alla memoria debolmente ordinati (gli accessi alla memoria non sono eseguiti in ordine di programma) e per prevenire ciò si è prevista l’istruzione SFENCE che forza l’ordine degli accessi alla memoria assicurando che tutti gli store che precedono la sua esecuzione siano scritti in memoria rendendoli globalmente visibili prima di procedere con un altro store. (PREFETCH, MOVNTQ, MOVNTPS, MASKMOVQ, SFENCE) Con l’uso combinato delle SIMD-FP, le istruzioni di prefetch e le streaming store ad esempio le SSE consentono, in una tipica pipeline 3D, di processare 3 vertici nel medesimo intervallo di tempo in cui, senza le SSE, se ne sarebbero potuti processare solo 2. I vantaggi nella computazione in parallelo di dati FP a semplice precisione sono ovvi. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 193 2.3 Implementazione delle SSE nel Pentium III L'implementazione del set di istruzioni SSE, data la loro natura esplicitamente parallela, nella microarchitettura out-oforder superscalare del P6 imponeva due linee chiave per i progettisti: sviluppare hardware che incrementasse il throughput computazionale soprattutto per operazioni FP per tradurre il parallelismo in maggiori performance e sostenere il maggior afflusso di dati derivante dal parallelismo incrementando la banda di memoria e nascondendo la latenza di memoria. Tutto ciò andava combinato con l'obbiettivo propostosi di contenere il conseguente aumento dell'area del die (obbiettivo raggiunto, essendo passati dal core Deschutes al core Katmai con un incremento di circa il 10% a parità di processo tecnologico) e minimizzare la complessità aggiuntiva. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 194 .3.1 Gestione Esecutiva delle Istruzioni SSE Le istruzioni SSE da 128 bit sono scomposte in due microoperazioni interne da 64 bit che, come detto in precedenza, consentono di limitare tendenzialmente le modifiche alla fase di decodifica, al riutilizzo o all'estensione delle funzionalità delle precedenti Unità di esecuzione, alla definizione di nuove Unità di esecuzione. La microarchitettura è essenzialmente quella del Pentium II e i cambiamenti più significativi sono facilmente visibili confrontando le Unità Dispatch/Execute dei due processori. Nella figura dell’unità Dispatch/Execute del Pentium III sono evidenziate in verde le nuove unità e quelle modificate per l'implementazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 195 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 196 Per assicurare il dispatch simultaneo di un'operazione di somma FP a 64 bit e di un'operazione di moltiplicazione FP a 64 bit le due unità di somma e moltiplicazione per FP sono state poste su due porte separate consentendo il raddoppio delle performance di questo tipo rispetto al Pentium II. Sulla Porta 0 della Reservation Station abbiamo il moltiplicatore per packed FP ottenuto modificando l'esistente moltiplicatore e ottenendo un throughput di 2 packed FP per ciclo e una latenza di 4 cicli. In sostanza abbiamo la condivisione del medesimo moltiplicatore per le moltiplicazioni SIMD-FP e le normali moltiplicazioni FP al fine di ridurre l'occupazione d'area Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 197 Sulla Porta 1 sono state aggiunte tutte le nuove unità che sono: • Un sommatore per packed FP (PFADD) che opera su 2 packed FP con un throughput di un ciclo e una latenza di 3 cicli che esegue anche le operazioni di sottrazione, confronto, min/max e conversione. Per non appesantire lo scheduling si è preferito non unire il sommatore FP con quello packed FP. • Una unità Shuffle che costituisce un supporto hardware per le istruzioni SSE di manipolazione dati per la loro organizzazione in un'ottica SIMD e quindi una migliore utilizzazione delle istruzioni SSE. Essa esegue le operazioni di unpack, move e alcune micro-ops (cioè le microistruzioni tipo RISC utilizzate dalle unità di esecuzione) logiche. L'operazione di shuffle a 128 bit è eseguita mediante tre microistruzioni ed inoltre l'unità Shuffle si occupa anche dell'esecuzione delle istruzioni su interi packed come PINSRW e PEXTRW. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 198 • Una unità chiamata ISSE Reciprocal con il compito di supportare le funzioni RCP e RSQRT mediante lettura di tabelle via hardware. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 199 2.4 Gestione delle Eccezioni. La realizzazione di un datapath di 128 bit mediante due microistruzioni da 64 bit determina la possibilità che possa verificarsi un'eccezione per una delle due microistruzioni dopo che l'altra e già stata ritirata (ossia completata e quindi estratta dal flusso istruzioni) determinando un aggiornamento solo parziale del registro di destinazione da 128 bit che conterrà pertanto dati errati. Per prevenire ciò è stato previsto il meccanismo hardware Check Next MicroOperation (CNU dove la U sta per micro) che previene il ritiro della prima microistruzione se la seconda causa un eccezione. La prima microistruzione della coppia viene "marcata" dal CNU, il decodificatore invia il bit del CNU al ROB che ritarda il ritiro della coppia di microistruzioni fino a quando non riceve l'assicurazione che può essere ritirata anche la seconda microistruzione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 200 Naturalmente il meccanismo di ritiro viene così rallentato e per questo è stato previsto che, nel caso di eccezioni masked (cioè indicate dal programma come da ignorarsi, molto frequenti nel software di gestione multimediale come overflow o FTZ underflow), le microistruzioni possano ritirarsi individualmente ed inoltre sono state adottate misure hardware per velocizzare la gestione delle eccezioni masked. L'esecuzione dell'istruzione PSADBW che calcola la differenza assoluta di dati packed MMX viene implementata con tre microistruzioni (calcolo della differenza, calcolo del valore assoluto e somma dei valori assoluti) mediante accomodamento degli esistenti sommatore e moltiplicatore (e sfruttando il carry) al fine di contenere il die size. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 201 2.5 Gestione della Memoria I più importanti cambiamenti per la gestione della memoria sono il supporto per il prefetching dei dati (Senior Load) e il miglioramento dei meccanismi di scrittura dei buffers soprattutto per il supporto del write-combining. 2.5.1 Senior Load Consideriamo una istruzione di load in caso di un miss di cache. L'istruzione successiva nella pipeline viene eseguita ma non può essere ritirata fino a quando il load non restituisce il dato causando lo stallo della pipeline. Queste istruzioni in attesa di ritiro possono saturare il ROB mandando in stallo il front-end del processore. Nel Pentium III si evita questo problema per le istruzioni di prefetch consentendone il ritiro prima del completamento dell'accesso di memoria riducendo gli stalli da saturazione delle risorse e incrementando la simultaneità di computazione e accessi alla memoria grazie alla implementazione del Senior Load. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 202 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 203 Nella figura si vede come, in caso di load, l'istruzione è inviata dalla Reservation Station nella pipe di memoria. In caso di miss nella cache dati (DCU Data Cache Unit) tramite il Bus viene fatta richiesta a L2 e Memoria. Se il dato è rimandato da bus o L2 la DCU tramite il Load WB Valid dichiara il load e la istruzione relativa ritirabili. Nel caso del Prefetch invece, tramite il Pref WB Valid, il completamento viene segnalato quasi immediatamente e non si deve attendere fino all'effettivo fetch dal sottosistema di memoria. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 204 2.5.2 Write e Buffer Come detto in precedenza occorreva sostenere l'alto throughput in scrittura per le operazioni multimediali con una larga banda. Con le innovazioni adottate il Pentium III può godere di una banda di trasmissione di 800 Mbyte/s adottando un bus da 100 MHz (1.066 Mbyte/s con una frequenza di bus da 133 MHz) con un incremento di circa il 20% rispetto al Pentium II. La differenza tra i buffer di riempimento del Pentium II e del Pentium III (o meglio nel loro impiego) è determinata dalla natura vettoriale delle SSE. Prima del Pentium III lo scopo dei buffer di riempimento era avere alto throughput istantaneo per gestire i burst dei miss tipici di applicazioni scalari e si dava meno importanza al throughput medio. Esso è invece molto più importante per l'utillizzo dei buffer SSE. In termini di capacità i buffer di riempimento del Pentium II sono comunque sufficienti per le esigenze delle SSE ma devono essere gestiti in modo più efficiente predisponendo più buffer contemporaneamente e provvedendo ad un loro svuotamento più rapido. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 205 La capacità write-combining (WC) è stata incrementata rendendo disponibili 4 buffer di riempimento contemporaneamente (contro uno solo del Pentium II) e di conseguenza definendo una diversa politica di svuotamento dei buffer basata su due modalità essenziali: • Un buffer è svuotato quando tutti i bytes sono scritti senza attendere una specifica richiesta di allocazione di un nuovo buffer da parte della DCU; • Se tutti i buffer di riempimento sono occupati e la DCU richiede l'allocazione di un nuovo buffer un WC buffer può essere svuotato anche se non è ancora pieno. Il risultato della implementazione delle SSE grazie anche ad un riuso dell’hardware esistente ha consentito di ottenere queste nuove dotazioni in termini di calcolo FP a basso costo per quanto riguarda le dimensioni del die e quindi dei costi di produzione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 206 Cap 3 Core Coppermine Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 207 I primi processori denominati Coppermine sono stati commercializzati da Intel a partire dal terzo quadrimeste del 1999. A dispetto del nome il core non è realizzato con una tecnologia basata su rame (copper-technology) sul tipo di quella di IBM ma differisce dal core Katmai per il processo tecnologico con il quale è realizzato: 0.18 micron contro 0.25 micron. Naturalmente l’alto potenziale di integrazione che accompagna questo processo tecnologico ha determinato altre interessanti evoluzioni che analizzeremo in questo capitolo come la cache di secondo livello on-die, un incremento dei buffer, e conseguenti differenze di package e di chipset per sfruttarne meglio le prestazioni. Il core Coppermine rappresenta, anche grazie al raggiungimento della soglia del GHz di clock, l’ultima incarnazione del core P6 che è, almeno concettualmente, quello del Pentium Pro lanciato quasi 6 anni fa. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 208 Il passaggio al processo tecnologico a 0.18 micron a 6 livelli di metallizzazione (contro i 5 del processo precedente) è stato ottenuto piuttosto agevolmente considerando che la prima CPU realizzata con questo processo è stata il Pentium II Mobile a 400 MHz nel giugno del 1999 e che il successo, commerciale e in termini di costi produttivi, della CPU ha indotto Intel a pianificare una massiccia produzione di chip con questa tecnologia ed entro il 2000 a produrre solo con questo processo. Il chip alloca ben 28 milioni di transistori su un die di area 106 mm2 (a fronte dei 128 mm2 con 9.5 milioni di transistori del core Katmai) anche se approssimativamente 19 milioni di questi transistori sono per la cache L2 integrata la quale occupa poco più del 30% dell’area totale del die come si può vedere dalla foto del die riportata. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 209 L’integrazione della cache L2 nel die fa venire meno la necessità del package SECC2 basato su Slot 1 e consente l’utilizzo di un nuovo package denominato Flip-Chip PGA (FC-PGA), dove il termine flip-chip indica il meccanismo in base al quale il dissipatore è a contatto diretto con il core per migliorarne l’efficacia e il termine PGA indica la form compatibile con il Socket 370. L’utilizzo del socket consente un notevole risparmio dei costi di produzione come ha dimostrato il formato PPGA del Celeron che, anche grazie a questo socket, consente di contenerne il prezzo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 210 Un secondo effetto dell’impiego del processo a 0.18 micron porta alla diminuzione della tensione di alimentazione del core ora compresa tra gli 1.1 V delle applicazioni mobile e gli 1.7 V dei Coppermine a più alte frequenze operative che necessitano di una tensione più elevata per la stabilità. Con il Coppermine si adotta definitivamente il bus a 133 MHz (relegando i processori destinati al mercato low end al bus a 100 MHZ) affiancandolo con chipset ulteriormente evoluti rispetto a quelli che hanno accompagnato il Katmai. Vediamo ora più in dettaglio le innovazioni che caratterizzano il core Coppermine che sono quella che Intel chiama Advanced Transfer Cache (ATC) e Advanced System Buffer (ASB) più a fini di marketing che non di reale distinzione tecnologica. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 211 Nella figura sono evidenziate la L2 con la logica di interfaccia con il backside bus (BBL) e la cache dati L1 (DCU), che gestisce i buffer di riempimento e i buffer di write-back, con la logica di interfaccia con il bus esterno (EBL). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 212 3.1 Advanced Transfer Cache (ATC) La ATC è una cache di secondo livello di dimensione 256 KB (metà della L2 esterna supportata dai Katmai) funzionante, essendo on die, alla frequenza di clock del processore (anziché a metà del clock) ricordando quindi l’impostazione tipica del Celeron il quale però monta solo128 KB di L2. Dal punto di vista dei costi è assai più vantaggioso integrare la cache on die L2 che non montarla in una cartuccia con il processore e difatti non appena il processo tecnologico lo ha reso possibile così è stato fatto. La cache L2 e di tipo non bloccante ed ha inoltre incrementato l’associatività essendo ora a 8 vie (contro le 4 della L2 off chip) con incrementi delle performance stimati intorno al 3% per applicazioni business (tipicamente su dati interi) e 6% per applicazioni server. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 213 Oltre a funzionare con la frequenza del core (con la possibilità di seguirla in futuro su maggiori frequenze) il bus della L2 è stato inoltre ampliato portandolo da 64 bit a 256 bit il che consente il trasferimento di 32 bytes ogni due clock il che comporta una banda tra core e L2 di 11.2 GB con clock a 700MHz. Le linee di cache sono a 32 byte e sono supportate da 4 byte per l’Error Correcting Code (ECC) per assicurare l’integrità dei dati portando quindi in realtà la profondità di trasferimento alla L2 a 288 bit (256 per i dati più 32 per ECC). La latenza della cache L2 risulta ridotta ad un quarto di quella presente con la riduzione delle penalità dei miss della cache L1 e la riduzione degli stalli determinati dagli snoops (cioè le ispezioni che vengono fatte nella L2 per determinare se i dati sono stati alterati). La coerenza è assicurata dal protocollo a 4 stati MESI. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 214 3.2 Advanced System Buffer (ASB) Per sfruttare la banda offerta dal bus di sistema a 133 MHz sono stati incrementati i buffer di riempimento da 4 a 6 accompagnandoli con un numero doppio di entrate (da 4 a 8) del bus queue in modo da sostenere un maggior numero di operazioni in sospeso (outstanding) tra memoria e bus. Inoltre in luogo del singolo write-back buffer di cui disponeva la cache dati ora vi sono 4 write-back buffers per consentire minori tempi di deallocazione per i buffer di riempimento (come detto ora più numerosi) e per ridurre i blocchi durante le operazioni di sostituzione delle linee di cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 215 Come si è potuto vedere si tratta di potenziamenti tecnologici più che di vere innovazioni di design che hanno però consentito a Intel di fronteggiare il grande successo dell’Athlon con la possibilità di incremento del clock e tutto sommato anche per le performance anche se un vero confronto è lecito solo tra il Pentium 600E e il 600B e diversi test hanno confermato che, su piattaforma basata sul chipset i820, si ottengono incrementi di circa il 20% su SPEC95-FP e del 12% su SPEC95-Int. Indicativamente si può anche riportare il risultato del Pentium 800E, su analoga piattaforma, che ha fatto rilevare un 38.4 per SPEC95-Int e 28.9 per SPEC95-Fp. L’Intel ha deciso di distinguere le CPU basate su core Coppermine e dotate quindi di ATC e ASB affiancando una E (per enhanced) alla sigla che contraddistingue la CPU combinata con la B già usata per indicare l’impiego del bus a 133 MHz come visto con il core Katmai. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 216 3.3 Chipset i820 La Intel ha tradizionalmente accompagnato ogni nuova CPU con una o più piattaforme di supporto e, seppure in ritardo sui tempi, il Chipset i820 ha seguito di poco l’uscita del Coppermine. Esso è basato essenzialmente sulla architettura HUB del i810e [link] dal quale differisce essenzialmente per 3 aspetti: • l’impiego di RDRAM in luogo della SDRAM PC-100; • il supporto della modalità AGP 4X; • l’assenza di un controller grafico (in luogo del Graphic MCH del i810 abbiamo un Memory Controller HUB che è dotato dei controller per AGP 4X e RDRAM.) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 217 Il chipset i820 inoltre consente la configurazione SMP (Multiprocessore Simmetrica) a 2 CPU anche se espressamente deputata a questa funzione è il chipset i840 (Carmel) che è un potenziamento del i820 dotato di doppio canale RDRAM che fornisce una banda di 3.2 GB/s, slot PCI a 64 bit per l’impiego su diversi I/O in ambito server, di una prefetch cache e di un Memory Repeater HUB che consente per impieghi a basso costo l’utilizzo di memorie SDRAM anziché RDRAM Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 218 3.3.1 RDRAM Il ritardo della uscita del chipset i820 è legato all’impiego di memoria RDRAM i cui costi, lievitati nei mesi scorsi, ne hanno differito l’impiego anche da parte delle case produttrici di motherboard e a non meglio specificati problemi legati al dimensionamento del numero di slot RIMM (Rambus In-line Memory Module) di supporto. La Intel ha posto da anni lo sviluppo della memoria RDRAM come condizione per il raggiungimento di elevate prestazioni in considerazione della grande ampiezza di banda che sono in grado di assicurare. Grazie all’integrazione di un solo segnale di clock che percorre tutto il bus e alla notevole semplificazione del tracciato e del numero di piste per la connessione memorie-controller il sistema funziona con frequenze fino a 400 MHz con uso del doppio fronte (ascendente e discendente del segnale di sincronizzazione) per inviare due dati per clock. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 219 Il canale Rambus trasporta solo 16 bit che però inviati a 400 MHZ con modalità doppio fronte portano ad ottenere una banda di 1.6 GB/s . Di contro i sistemi basati su SDRAM PC100 impiegano un bus largo 64 bit il quale, operando a 100 MHz, consente una banda di 800 MB/s. Inoltre per gestire i comandi e i dati si servono di una rete di collegamenti di differente lunghezza che comporta differenti proprietà. L’impiego della tecnologia RSL (Rambus Signaling Level) con basso swing di segnale consente il trasferimento, da ogni pin dei dati, di 800 Mbps. Ogni core di DRAM da 8 MB che compone la RDRAM e suddiviso in 16 banchi da 0.5 MB ognuno organizzato in 512 righe formate da 64 dualocts (la più piccola unità di dati indirizzabile) contenenti 16 bytes ciascuno. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 220 Il sistema è dotato del controller che risiede nel MCH, e del canale Rambus costituito da una serpentina di 30 distinti segnali (16 per i dati più due bit per il controllo di parità, i segnali di decodifica dell’indirizzo di memoria con 3 pin per le righe e 5 pin per le colonne e infine 4 pin per il clock) che collega serialmente i moduli di RDRAM allocati fino ad un numero massimo di 32 nei moduli RIMM. Dai 3 pin di riga si ottengono mediante dei multiplexer dei pacchetti da 24 bit utilizzati per attivare una riga o eseguire operazioni di riga. Analogamente dai 5 pin di colonna si ottengono pacchetti da 23 bit per operazioni su colonna più 17 bit per altre operazioni come mascheratura per la scrittura. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 221 Il compito dei segnali di riga è gestire il trasferimento di dati tra i banchi della RDRAM e i sense amps interni alla RDRAM che si incaricano di mantenere le righe lette o scritte mentre quello dei segnali di colonna di gestire il trasferimento dei dati dai sense amps e i pins dei dati. Anche i 18 pin suddivisi all’ingresso della RDRAM in due ingressi da 9 pin passano ciascuno per un demultiplexer (in scrittura) per ottenere due data path interni 72 bit. In lettura dai 2 data path da 72 bit per mezzo di un multiplexer si ritorna alle 2 coppie da 9 segnali. In fase di scrittura si fa inoltre uso di write buffer per limitare la latenza. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 222 Il collegamento seriale implica che negli eventuali RIMM vuoti debbano essere posti dei moduli appositi (CRIMM) che fanno da semplici conduttori senza contenere alcun elemento di memoria. La memoria SDRAM utilizza invece moduli DIMM che allocano 8 SDRAM da 8 bit ciascuno e operano in parallelo per formare il bus dati da 64 bit. Il numero minimo di dispositivi SDRAM per incrementare la memoria è quindi di 8 dato che si devono rispettare le specifiche del bus a 64 bit. Con le RDRAM invece, siccome ogni dispositivo ha l’ampiezza dei 16 bit richiesti dal data path, si può avere la configurazione voluta aggiungendo anche un solo modulo RDRAM al RIMM. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 223 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 224 Il fatto che i dati viaggino separatamente dagli indirizzi di riga e colonna ne consente la trasmissione simultanea (a differenza delle SDRAM dove sono trasmessi uno di seguito all’altro) incrementando il pipelining delle operazioni evitando conflitti di risorse per differenti operazioni che possono caratterizzare le SDRAM in caso di massiccio utilizzo. Inoltre ciò consente il temporaneo store dei soli dati in attesa che la CPU li possa ricevere. Infine dato che si ha un solo segnale di sincronizzazione da tarare è possibile gestire più canali in parallelo, ciascuno indirizzato sul proprio banco, sullo stesso sistema per ottenere un parallelismo di trasmissione. Ad esempio la Playstation2 della Sony utilizza 2 canali RDRAM in parallelo godendo di una banda di 3.2 GB/s. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 225 Un altro aspetto vantaggioso delle RDRAM riguarda il conflitto di banchi. Quando un banco è stato raggiunto da un accesso occorre un certo tempo perché un’altra riga di questo stesso banco possa essere utilizzata. Ciò comporta un incremento della latenza e un degrado delle prestazioni. Più banchi sono accessibili contemporaneamente meno questo problema si fa sentire. Nei sistemi RDRAM abbiamo per ogni modulo 16 banchi mentre nei sistemi SDRAM i banchi sono solo 4. Inoltre gli 8 moduli che compongono un DIMM sono attivati contemporaneamente per dare i 64 bit quindi i banchi accessibili per ogni singolo DIMM sono 4. Nelle RDRAM invece ognuno degli 8 dispostivi allocati in un RIMM di uguale capacità agisce indipendentemente e siccome ognuno di essi ha 16 banchi i banchi accessibili sono 128. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 226 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 227 Lo svantaggio di questa tecnologia è nella latenza la quale, dal momento che entrambe sono basate sul medesimo core DRAM, è pari a quella delle SDRAM (almeno per traffici non particolarmente intensivi dove fattori come la riduzione dei conflitti di banchi e la "banda" degli indirizzi, che sono alcuni dei punti forti della tecnologia RDRAM, rivestono minore importanza) e come detto nei costi che sono elevati a causa dei RIMM assai più costosi dei DIMM, dei chip delle RDRAM che sono realizzati in package di tipo BGA sensibilmente più costoso del TSOP tipico delle SDRAM e in virtù della natura "seriale" del bus che ne pregiudica il funzionamento in caso di rottura di uno dei moduli obbligando ad un attento dimensionamento dei dispositivi per la dissipazione di calore. I benchmark che riguardano confronti tra sistemi basati su RDRAM e SDRAM tendono a far prevalere le prestazioni dei secondi probabilmente a causa dell’odierno sottoutilizzo delle prime. In futuro con sistemi sempre più stressanti per le memorie le parti potrebbero invertirsi e Intel conta proprio su questo. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 228 .3.2 AGP 4X Il supporto della modalità AGP 4X è un ulteriore passo verso l’ottimizzazione delle applicazioni 3D in quanto tale modalità assicura una banda superiore al GB/s (quindi il doppio della modalità AGP 2X e 8 volte quella del bus PCI) sempre alla frequenza di 66 MHz che dovrebbe, il condizionale è d’obbligo dopo il relativo fallimento in termini di performance del passaggio da 1X a 2X, significativamente migliorare la grafica in termini di poligoni e size delle textures. E chiaro che essendo la banda di un bus a 133 MHz anch’essa di poco superiore al GB bisognava prevedere un adeguato supporto ora presente con la RDRAM. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 229 Cap 4 Prospettive Future La Intel, per facilitare l’adattamento del mercato al nuovo set di istruzioni IA-64 che richiede una diversa prospettiva da parte degli sviluppatori, ha optato per la produzione affiancata dei nuovi processori IA-32 e IA-64. Il primo processore IA-64, l’Itanium (conosciuto inizialmente con il nome Merced), sarà destinato inizialmente, anche in considerazione del costo che si prefigura alto, al solo mercato workstation e server, mentre i processori Willamette, che rappresentano probabilmente l’ultimo esemplare dell’architettura IA-32, saranno destinati a tutti i segmenti di mercato offrendo diverse soluzioni ai consumatori. Quasi sicuramente si dovranno attendere alcuni anni prima di vedere sistemi desktop basati su processori IA-64. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 230 PENTIUM IV A partire dalla realizzazione del Pentium Pro (ossia il core P6 su cui si basa il Pentium III) nel 1996 la Intel pianificò la realizzazione di quello che allora si riteneva il processore di nuova generazione, il Merced, che doveva costituire il ponte verso l’architettura IA-64 con piena compatibilità con l’architettura x86. Nel 1996 l’Intel dichiarò che il Merced sarebbe stato realizzato in quantità nel corso del 1998. Come noto ciò non avvenne e quindi Intel, che stava portando parallelamente avanti con il design team di Hillsboro, in Oregon, il progetto di estendere l’architettura x86 a 64 bit ripetendo quanto fatto nel passaggio dai 16 bit ai 32 bit con il 386, si orientò verso il "semplice" sviluppo di un nuovo core x86. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 231 Il nome Willamette deriva da un fiume, secondo una tradizione invalsa da alcuni anni alla Intel, appunto dell’Oregon. Come sappiamo la strada dell’estensione ai 64 bit dell’architettura x86 è stata poi intrapresa dal grande competitore di Intel, l’AMD con lo Sledgehammer o K8. Il core P6 nei suoi cinque anni di vita ha contribuito, almeno fino alla comparsa dell’Athlon, a consolidare il ruolo di Intel nel mercato delle CPU soprattutto nel segmento desktop e portatile. Vediamo nella Figura 1 l’evoluzione storica delle CPU Intel fino al Willamette e a seguire nella Figura 2 più dettagliatamente l’evoluzione a partire dal Pentium II con gli aspetti distintivi di ciascuna versione del core P6 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 232 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 233 Gli aspetti distintivi del Willamette noti, almeno a grandi linee, ad oggi sono: • Pipeline molto profonda; • Trace Cache; • 2 Unità ALU per Interi Double Pumped; • Introduzione del set di istruzioni SSE2 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 234 4.1.1 Pipeline Le più semplici operazioni su interi richiedono, secondo quanto emerso dalle informazioni di Intel, ben 20 stadi determinando così attualmente la pipeline più profonda tra i processori noti (si pensi ai 12 stadi del Pentium III o ai 10 dell’Athlon. Questo naturalmente consente il raggiungimento di alti clock di lavoro e difatti il Willamette dovrebbe inizialmente operare tra 1.3 GHz e 1.5 GHz con possibilità di ulteriori incrementi futuri. Già attualmente promette di incrementare di oltre il 50% il clock del Pentium III Coppermine a parità di processo. Questi 20 stadi dovrebbero comprendere la fase di fetch delle microperazioni dalla cache L1 istruzioni (che come vedremo nel Willamette assume la forma di Trace Cache). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 235 Non è comunque ancora noto quanti stadi dovrebbe comprendere questa pipeline di Front End. Con pipeline dotate di un tale numero di stadi diventa fondamentale implementare un meccanismo di predizione delle diramazioni veramente efficace perché in caso di errata predizione si pagherebbero penalità assai maggiori degli 11 cicli dichiarati da Intel per il P6 (il Willamette dovrebbe avere un minimo di 19 cicli di penalità). Intel dichiara di aver predisposto un potenziamento della branch prediction per mezzo di un largo Branch Target Array (BTA) e con l’adozione di algoritmi di predizione più sofisticati rispetto a quelli utilizzati dal Pentium III ancora non rivelati Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 236 Comunque rimane il problema, almeno per le operazioni non su interi come vedremo successivamente, dell'incremento della latenza delle istruzioni legata a pipeline con molti stadi. Intel ha dichiarato che sarà approntato un buffer significativamente più capiente del ROB da 40 microistruzioni del Pentium III e probabilmente vicino alle 72 OPs dell' Athlon. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 237 4.1.2 Trace Cache Una Trace Cache differisce fondamentalmente da una normale cache istruzioni L1 per due caratteristiche principali: • Immagazzina microistruzioni invece che istruzioni x86; • Riordina queste microistruzioni secondo un criterio di flusso di esecuzione piuttosto che di locazione di memoria. Il problema che si incontra nelle tradizionali cache istruzioni L1 è che la predizione delle diramazioni comporta per il fetcher delle istruzioni frequenti salti all’interno della cache istruzioni mentre se operasse su istruzioni posizionate in zone contigue potrebbe effettuare il fetch in maniera più efficace aumentando il numero di istruzioni prelevate per clock. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 238 Questo appunto è quello che fa la Trace Cache la quale cerca di organizzare dinamicamente le microistruzioni in sequenze o tracce (trace in inglese) caratterizzate dal fatto che in esse le istruzioni che costituiscono un probabile target di un branch seguono da presso il branch senza tenere conto del loro indirizzo. Inoltre nelle cache istruzioni tradizionali ogni volta che una microistruzione è prelevata occorre un nuovo intervento di decodifica per ottenere la prossima microistruzione. Nel caso della Trace Cache invece, dato che contiene le microistruzioni esse possono essere trattenute, già decodificate, pronte per essere eseguite nuovamente altre volte come nel caso di un loop. Gli indirizzi delle microistruzioni e le informazioni di controllo sono immagazinati in un tag array mentre le microistruzioni sono immagazzinate in un data array. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 239 La Trace Cache del Willamette in realtà opera con due modalità distinte. In presenza di un miss da parte del processore la logica di controllo preleva le istruzioni x86 secondo il previsto flusso di esecuzione e costruisce le tracce di microistruzioni. Terminata la costruzione la Trace Cache consente il prelievo dal data array delle microistruzioni ora organizzate in ordine per il previsto flusso di esecuzione. Nel caso l’istruzione che segue la traccia costruita sia la prima di una traccia presente nella Trace Cache il fetch dalla gerarchia di memoria e la decodifica sono arrestate e la Trace Cache costituisce la fonte delle istruzioni. Ora il grado di parallelismo disponibile dipenderà solo dal numero di microistruzioni prelevabili dalla Trace Cache per clock e non dal numero e dal tipo dei decodificatori che nel caso del Pentium III costituiva un certo limite. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 240 In sostanza questa rimozione della fase di decodifica dal ciclo di esecuzione principale libera il Willamette dalla necessità di un decoder superscalare (in effetti il Willamette dovrebbe avere solo uno o due decoder x86). Grazie alla Trace Cache il Willamette dovrebbe alimentare le unità esecutive con un massimo di 3 microistruzioni per clock che è anche il massimo rate di microistruzioni distribuite dal P6 (anche se assai più teorico che pratico). Un altro aspetto interessante della Trace Cache risiede nella gestione della branch prediction. La Trace Cache e la logica di predizione dei branch collaborano sia nella fase di costruzione dei segmenti di tracce sia nella fase di prelievo delle microistruzioni dalla Trace Cache nel qual caso in presenza di errata predizione si interrompe l’invio della traccia corrente e comincia la ricerca e l’eventuale allocazione di una nuova traccia in accordo con la reale diramazione. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 241 Per le istruzioni x86 particolarmente complesse che potrebbero richiedere numerose microistruzioni per essere eseguite, inquinando la Trace Cache, è previsto il contrassegno, nella fase di costruzione delle tracce, di un tag per la traccia che le riguarda. Questo sarà rilevato nella fase di invio alle unità esecutive e si attiverà una modalità di invio della lunga catena di microistruzioni, attraverso il meccanismo di output della Trace Cache, governato da un sequencer di microcodice. Questa modalità ricorda quella adottata dall’Athlon con Direct Path e Vector Path per quanto riguarda la differenziazione del percorso in base alla complessità dell'istruzione x86 da decodificare. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 242 4.1.3 ALU Double Pumped Al Developer Forum di Marzo 2000 Intel ha dichiarato che le due Unità di ALU per interi presenti nel Willamette operano al doppio del clock del processore (3 GHz se la versione iniziale opererà a 1.5 GHz) secondo una modalità Double Pumped. Non è ancore chiaro se con questa terminologia si intende la classica modalità di funzionamento su entrambi i fronti del ciclo di clock o se impieghi una unità apposita che partendo dalla frequenza del clock generi un clock locale di frequenza doppia. Questa scelta di operare con le ALU ad una tale frequenza sembra essere determinata dalla necessità di ridurre la latenza delle istruzioni, almeno di quelle su dati interi, che una pipeline così profonda può incrementare. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 243 Intel ha dichiarato che la latenza delle operazioni elementari su interi è di ½ ciclo. Considerando che le ALU sono 2 ci si potrebbe attendere teoricamente per le operazioni su interi 4 microistruzioni per ciclo ma occorre ricordare che possono essere assunte un massimo di 3 microistruzioni per ciclo dalla Trace Cache. Il fatto di avere una ALU Double Pumped inoltre consente un minore impiego di area e transistori rispetto a quanto si avrebbe con 4 ALU. Nella Figura 3 vediamo uno schema a blocchi del Willamette con evidenziati i blocchi riguardanti la Trace Cache (si noti sulla sinistra il sequencer di microcodice) e la due ALU Double Pumped. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 244 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 245 4.2 Introduzione del set di Istruzioni SSE2 Il set di istruzioni aggiuntive SSE2 provvedono a incrementare le prestazioni per applicazioni come multimediali (grafica 3D, riconoscimento vocale, codifica e decodifica video digitale ect), scientifiche e sicurezza per E-commerce. Il loro numero non dovrebbe essere inferiore a 144. Le istruzioni SSE2 estendono le istruzioni SIMD dell’architettura IA32 in tre modi essenziali: • Possibilità di operare su dati packed per floating point a doppia precisione con benefici per computazioni ad alta precisione in ambito scientifico e ingegneristico. Estensione delle possibilità di gestione dei dati floating point anche in modalità scalare. • Possibilità di operare su interi packed a 128 bit in diversi formati (Bytes, Word, Double Word e Quad Word) nei registri XMM consentendo grande flessibilità e nuove possibilità di operare con un maggiore set di operandi per le operazioni packed su interi. • Ulteriori funzioni di supporto allo Streaming Store e Prefetching. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 246 Le SSE2 in aggiunta al data-type di 4 floating point a singola precisione introdotto, con i registri XMM a 128 bit, dalle SSE introduce 6 nuovi data-type (qui sotto illustrati) che sono rispettivamente: 1) 2 floating point da 64 bit (doppia precisione); 2) 1 intero a 64 bit (Quad Word) con o senza segno; 3) 16 interi da un byte con o senza segno; 4) 8 interi da 16 bit (Word) con o senza segno; 5) 4 interi da 32 bit (Double Word) con o senza segno; 6) 2 interi da 64 bit (Quad Word) con o senza segno. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 247 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 248 Le istruzioni SSE2 possono essere suddivise in quattro gruppi funzionali. 4.2.1 Floating point a doppia precisione (Packed e Scalari) Le istruzioni scalari FP a doppia precisione (da ora DP-FP) operano solo sui 64 bit meno significativi dei 2 operandi e quelle packed invece utilizzano tutti e 2 i segmenti da 64 bit in maniera analoga a quanto visto con le SSE solo che gli operandi in quel caso erano FP a singola precisione (32 bit). Tali istruzioni sono divise nei seguenti gruppi: • Istruzioni di Movimento Dati; Sono istruzioni che si occupano del trasferimento di DP-FP tra registri XMM e registri XMM e memoria. Possono richiedere o meno l’allineamento a 16 byte. • Istruzioni Aritmetico-Logiche; Sono le usuali istruzioni fondamentali estese a DP-FP sia per packed che scalari comprese inoltre funzioni di divisione, radice, massimo e minimo, e le usuali operazioni logiche tutte per packed. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 249 • Istruzioni di Comparazione; Comparazione tre DP-FP packed e scalare più una istruzione di compare per scalari che oltre a effettuare la comparazione aggiorna alcuni flag del registro EFLAGS. • Istruzioni di Shuffle; Oltre a una istruzione che mescola i dati DP-FP di due registri vi sono due funzioni di unpacked che trasferiscono in un registro i DP-FP alti di due registri ignorando i bassi o viceversa. • Istruzioni di Conversione; Supportano la conversione, packed e scalari, tra DP-FP e FP a singola precisione (in questo caso gli operandi sono nei registri XMM o in memoria), tra DP-FP e interi Double Word (interessando i registri XMM, MMX o la memoria e prevedendo per alcune di esse la modolatà di arrotondamento o di troncamento) e tra FP a singola precisione e interi Double Word (tutte usando i registri XMM e completano le istruzioni di conversione previste nelle SSE). Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 250 4.2.2 Istruzioni SIMD a 64 bit e 128 bit per Interi Le istruzioni in versione a 128 bit operano sui registri XMM mentre quelle a 64 bit operano sui registri MMX. Comprendono istruzioni di operazioni elementari (ADD, SUB, MUL) istruzioni di shuffle analoghe a quelle per DP-FP e inoltre 2 istruzioni di movimento dati interi tra registri XMM e MMX. 4.2.3 Istruzioni a 128 bit SIMD per Interi. Queste istruzioni replicano tutte le istruzioni SIMD a 64 bit di interi introdotte con la tecnologia MMX e le SSE estendendone la capacità a 128 bit. Tale estensione riguarda anche le convenzioni che riguardavano la versione a 64 bit. Ad esempio se una istruzione a 64 bit operava su 8 bytes packed la versione a 128 bit opera su 16 bytes packed. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 251 4.2.4 Istruzioni di Gestione Memoria Esiste una funzione che invalida la linea di cache associata ad un determinato indirizzo propagando tale invalidazione a tutti i livelli della gerarchia di memoria e al dominio di coerenza. Esistono inoltre funzioni di hints per la gestione dei dati non temporali supportandone la gestione secondo una politica di scrittura di tipo write-combining che contribuisce a diminuire l’inquinamento di cache. Tutte queste istruzioni sono implicitamente debolmente ordinate e quindi, analogamente a quanto visti con le SSE, sono previste istruzioni analoghe alla SFENCE delle SSE: la LFENCE (Load-FENCE) che forza l’ordine dei load assicurando che tutti i load che precedono la sua esecuzione siano scritti in memoria rendendoli globalmente visibili prima di procedere con un altro load (in pratica è la versione per load della SFENCE) e la MFENCE che combina SFENCE e LFENCE assicurando che sia i load che gli store siano globalmente visibili prima di procedere ad altri. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 252 4.3 Ulteriori considerazioni Il Willamette dovrebbe essere dotato, oltre che delle 2 ALU per interi, anche di una unità MMX/SSE o Multimedia e di una unità FP (entrambe con porte da 128 bit), di una unità di Load e di una di Store. Il sistema di memoria comprende una cache dati di primo livello L1 (per le istruzioni è presente la Trace Cache) e di una cache unificata di secondo livello L2 set associativa a 8 vie (il che comporta a fini pratici quasi la piena associatività) realizzata su chip. Secondo indiscrezioni questa dovrebbe essere assai simile alla Advanced Transfer Cache del Coppermine anche per quanto riguarda il dimensionamento a 256 KB. Le linee di cache dovrebbero essere da 128 byte composte da 2 settori di 64 byte. Per sostenere il throughput offerto della pipeline e favorire l’esecuzione fuori ordine per incrementare il parallelismo si è provveduto a fornire la CPU di 48 buffer di load e 24 di store. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 253 Lo scheduler è in grado di gestire fino a 100 microistruzioni "in flight" e può effettuare il dispatch di 6 microistruzioni per ciclo anche se sia la Trace Cache che lo stadio di ritiro (che si occupa di determinare mediante il Reorder Buffer quali microistruzioni sono terminate e di ripristinare i risultati in ordine di programma) possono rispettivamente inviare e ritirare 3 microistruzioni per ciclo. Con il termine "in flight" si intende che, siccome molte delle unità pipelined possono assumere una nuova microistruzione ogni ciclo e alcune (le ALU interi) possono eseguire 2 microistruzioni per ciclo, sono complessivamente in esecuzione in un qualche stadio della pipeline un totale di circa 100 microistruzioni. Per quanto riguarda l’unità FP essa sarà dotata di 2 porte da 128 bit separate per FMOVE e FSTORE oltre che di quella dell’unità funzionale per FADD e FMUL che dovrebbe essere stata pienamente pipelined cercando di superare così un grave limite del core P6 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 254 Questa unità non sembra essere comunque in grado di miglioramenti sensibilmente superiori come in altri aspetti (ad esempio la FPU non è double pumped come l’ALU e inoltre dovrebbe essere in grado di eseguire un addizione o una moltiplicazione per ciclo e non, come l’Athlon, una addizione e una moltiplicazione per ciclo) probabilmente perché per mezzo delle SSE2 dovrebbe essere in grado di eseguire, supponendo un clock di 1.4 GHz, un picco di 5.6 GFLOPS. Per queste ragioni potrebbe rivelarsi necessario migrare velocemente dall'originario processo a 0.18 micron al processo a 0.13 micron per scalare ulteriormente in frequenza. Il die dovrebbe essere composto da una decina di milioni di transistori in più rispetto al Coppermine in gran parte dovuti all'implementazione della Trace Cache. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 255 Il Front Side bus a 400 MHz (grazie ad una non meglio specificata forma di quad pumped del bus da 100 MHz che consentirà il caricamento di 4 volte maggiore di dati in maniera analoga a quella dell’AGP 4X ) di cui si dota il Willamette dovrebbe essere sensibilmente diverso come design dal bus utilizzato per il P6 e Intel pare intenzionata a non estendere automaticamente la licenza ai produttori di motherboard e mantiene ad oggi un certo riserbo circa le specifiche di questo bus. Comunque sia sarà in grado di offrire una banda di 3.2 GB/s anche se non è ancora chiaro se il Willamette sosterrà una tale potenzialità con l’impiego per il chipset Tehama o i850 che lo supporterà di sola memoria RDRAM oppure di DDR SDRAM per altri chipset per il mercato low-end. Il package sarà basato su Socket 423. Clicca qui per una foto del chip (57 KB) Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 256 Il processore MPC 7400 della Motorola, conosciuto come G4, rappresenta l’ultima evoluzione della famiglia di processori RISC nota come PowerPC che ha prevalentemente avuto una collocazione di mercato orientata alle applicazioni integrate ma ha sempre prodotto processori per desktop e portatili con prestazioni di punta. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 257 Ritenendo i tempi per sviluppare un'architettura completamente nuova eccessivi si optò per l'utilizzo di una architettura preesistente come punto di partenza: l'architettura POWER (Performance Optimized with Enhanced Risc architecture), una architettura RISC di seconda generazione sviluppata da IBM con registri dedicati a operazioni in virgola fissa (GPR) e registri dedicati a operazioni in virgola mobile (FPR) che gestiva, in un ottica di design Superscalare, separatamente le operazioni di controllo del Flow Program, di calcolo in virgola fissa e di calcolo in virgola mobile. La prima realizzazione di un sistema basato su architettura POWER prevedeva un complesso di 7 chips con cache per i dati da 32 KB e cache per le istruzioni da 8 KB successivamente estesa a 32 KB. L'architettura che si intendeva sviluppare doveva permettere un'ampia possibilità di sviluppo in senso superscalare, essere sufficientemente semplice da permettere un design con breve tempo di ciclo, implementare caratteristiche multiprocessore, essere a 64 bits essendo ottenuta come estensione di una architettura a 32 bit mantenendo compatibilità con le applicazioni a 32 bits. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 258 1.2.1 G1 Il primo processore a fregiarsi del nome di PowerPC è stato il 601 il quale però fu in realtà un ibrido usato per la transizione dall'architettura POWER a quella PowerPC ottenuto seguendo un aggressivo piano di sviluppo con l'obbiettivo di collocarlo sul mercato nel più breve tempo possibile. Realizzato con processo CMOS a 0.6 micron allocava, in un die di 121 mm2, 2.8 milioni di transistor e fu disponibile in un range di frequenze tra 50 MHz e 120 MHz in un package ceramico a 304 pin. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 259 L'organizzazione superscalare del 601 poteva eseguire fino a tre istruzioni da 32 bit per ciclo e si avvaleva di numerose unità funzionali fra cui una per l'out-of-order dispatch, una per il fetch delle istruzioni dalla cache, una unità di calcolo in virgola fissa (FXU) con pipeline a tre stadi che operava su praticamente tutte le principali istruzioni eccetto diramazioni e operazioni in virgola mobile e provvedeva anche alla compatibilità con le istruzioni POWER, una unità di calcolo in virgola mobile (FPU) con pipeline a quattro stadi che lavorava indipendentemente ma anche concorrenzialmente rispetto la FXU, una Branch Processing Unit (BPU) con pipeline a due stadi che lavorava in out-oforder rispetto la FXU con uso del register renaming per sincronizzarsi con essa ed infine di una Memory Management Unit (MMU) che provvedeva alla traduzione degli indirizzi, avvalendosi anche di un TLB 256-entry set-associative a 2 vie per dati e istruzioni, e usava pagine di dimensione fissata in 4 Kbyte. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 260 La cache era unica e di tipo non bloccante, da 32 Kbyte, setassociativa a 8 vie indicizzata fisicamente, con linee da 64 bytes rimpiazzate con algoritmo LRU, supportava generalmente la politica di scrittura Copy-back e per la coerenza il protocollo MESI. L'interfaccia bus era basata su quella del processore 88110 della Motorola e definiva un bus indirizzi a 32 bit e un bus dati a 64 bit. Della "famiglia" G1 fecero parte anche la CPU 601v (o 601+) realizzata con processo CMOS a 0.5 micron (quindi con minor consumo di potenza, die più piccolo e clock più alto) e la 602 destinata all'elettronica di consumo e ai sistemi di controllo integrati. Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 261 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 262 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 263 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 264 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 265 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 266 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 267 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 268 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 269 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 270 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 271 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 272 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 273 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 274 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 275 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 276 Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 277 http://www.ce.unipr.it/~stocchi/ Calcolatori Elettronici a.a. 2001-2002 Omero Tuzzi Esempi di Microprocessori 278