Caratteristiche principali (I) Architettura interna a 32 bit Address bus a 32 bit: si possono indirizzare fino a 4 GB di memoria fisica Data bus a 64 bit (si tratta in pratica di 2 data bus a 32 bit in parallelo). Con cicli di bus pipelined in burst-mode, si arriva ad un transfer rate di 528 MB/s (ipotizzando di avere un clock di 66 MHz) Address bus e data bus hanno un parity bit per ogni byte 2
Caratteristiche principali (II) Architettura superscalare: vi sono due pipeline intere ed una floating point Unità floating point integrata On-chip cache da 16 KB: 8 KB per il codice e 8 KB per i dati Supporto per la cache di secondo livello Totale compatibilità software con i precedenti processori della famiglia x86, pur avendo un set di istruzioni più ampio 3
Caratteristiche principali (III) Il Pentium è stato progettato con tecniche RISC: molte istruzioni sono eseguite in un solo colpo di clock Supporto per l ambiente multiprocessore Clock da 60 MHz a 166 MHz Fino a 200 MIPS
Architettura Code Cache Branch Prediction 64 bit 256 bit 64 bit Bus Interface U pipe Prefetch Buffers Integer ALU Integer ALU V pipe 64 bit Pipelined Floating Point Unit 64 bit 32 bit 32 bit Register Set Data Cache Multiplier Adder Divider 6
Pipeline Il Pentium, come il 486, esegue le istruzioni mediante una pipeline composta da 5 stadi: Prefetch, Decode1, Decode2, Execute e Write Back Rispetto al 486, il Pentium integra hardware aggiuntivo, in modo da aumentare la velocità di esecuzione Di conseguenza, vengono eseguite in un solo colpo di clock molte istruzioni che nel 486 ne richiedono 2. Ne sono un esempio le istruzioni con un displacement ed un dato immediato e le istruzioni con indirizzamento indicizzato 7
Prefetch (PF) E la fase in cui la CPU esegue il prefetch delle istruzioni dalla code cache, inserendole nel Prefetch Buffer attivo E presente una coppia di buffer da 32 byte ciascuno, dei quali uno solo è attivo ed esegue il fetch delle istruzioni in modo sequenziale Nel caso in cui compaia nel buffer un istruzione di salto, se il BTB (Branch Target Buffer) predice che il salto verrà eseguito, diviene attivo l altro buffer, nel quale vengono caricate le istruzioni a partire dal punto a cui punta il salto 8
Decode1 (D1) E la fase in cui la CPU effettua una prima decodifica delle istruzioni, generando una control word In questo stadio inizia e finisce la decodifica delle istruzioni semplici Le istruzioni più complesse, invece, richiedono una sequenza di controllo di microcodice 9
Decode2 (D2) In questa fase prosegue l operazione di decodifica delle istruzioni complesse iniziata nello stadio precedente (D1) Questa fase non viene quindi eseguita nel caso in cui si abbia un istruzione semplice In questo stadio viene inoltre generato l indirizzo nel caso in cui si debba accedere a dati presenti in memoria 10
Execute (EX) E la fase in cui la CPU accede alla data cache o svolge i calcoli nella ALU o in un altra unità funzionale presente nel data path In questo stadio vengono eseguiti sia i calcoli nella ALU sia l accesso alla cache: di conseguenza, un istruzione che debba effettuare entrambe le operazioni richiede più di un ciclo di clock Nello stadio EX vengono verificate le predizioni riguardanti i salti su condizione eseguiti nella U pipe 11
Write Back (WB) E la fase in cui la CPU aggiorna i registri ed i flag in base ai risultati ottenuti nello stadio precedente (EX) Tutte le condizioni che possono generare un eccezione devono essere risolte prima che l istruzione arrivi a questo stadio In questo stadio vengono verificate le predizioni riguardanti i salti su condizione eseguiti nella V pipe 12
Esecuzione superscalare (I) L organizzazione superscalare (ossia la presenza di 2 pipe intere) del Pentium consente l esecuzione contemporanea di 2 istruzioni, secondo il seguente algoritmo: 13
Algoritmo Decodifica 2 istruzioni successive I1 e I2; if (I1 è semplice && I2 è semplice && I1 non è un salto && (Destinazione di I1!= Sorgente di I2) && (Destinazione di I1!= Destinazione di I2)) Invia I1 alla U pipe e I2 alla V pipe; else Invia I1 alla U pipe;
Esecuzione superscalare (II) Le istruzioni eseguite in parallelo devono procedere di pari passo nelle 2 pipeline: di conseguenza, se una delle due provoca uno stallo, si ferma anche l altra In particolare, le 2 istruzioni devono entrare ed uscire contemporaneamente dagli stadi D1 e D2 Nella fase EX, se si blocca la U pipe, si ferma anche la V pipe. Se invece si blocca la V pipe, la U pipe continua l esecuzione, ma nessun altra istruzione vi può entrare fintanto che la V pipe non sia uscita dalla situazione di stallo 14
Istruzioni semplici Le istruzioni semplici sono quelle che non richiedono una sequenza di microcodice per essere eseguite e che, quindi, richiedono un solo colpo di clock. Esse sono: operazioni ALU reg, reg/mem/imm MOV, INC, DEC, PUSH, POP, LEA e NOP salti, salti su condizione e CALL di tipo near 15
Istruzioni semplici (2) Le istruzioni ALU mem, reg (es.: ADD [BX], CX) sono considerate semplici anche se vengono eseguite in 2 colpi di clock. Un istruzione semplice (single-cycle) non può essere eseguita in parallelo ad una complessa (multiple-cycle).
Dipendenza dalle risorse Si ha una dipendenza dalle risorse quando 2 istruzioni richiedono l utilizzo della stessa unità del data path Nel Pentium, questo tipo di dipendenza è fortemente ridotto, poiché le istruzioni eseguite in parallelo sono semplici Le istruzioni eseguite dalla V pipe sono le operazioni ALU, i riferimenti in memoria e i salti Le istruzioni eseguite dalla U pipe sono le stesse della V pipe, più altre che utilizzano unità 16 funzionali presenti unicamente nella U pipe stessa
Dipendenza dai dati Si ha una dipendenza dai dati quando un istruzione scrive un risultato che viene letto o scritto da un altra istruzione La logica presente nello stadio D1 permette di risolvere i conflitti di tipo RAW (Read After Write) e WAW (Write After Write) Una logica opportuna consente di risolvere alcuni tipi di dipendenze dai dati. Ad esempio, un salto condizionale che effettui un test sul valore di un flag può essere eseguito in parallelo ad un istruzione che modifichi lo stesso flag (il salto viene eseguito nella V pipe) 17
Dipendenza dal controllo Si ha una dipendenza dal controllo quando l esecuzione di un istruzione è determinata dal risultato dell istruzione precedente Le dipendenze di questo tipo sono eliminate nello stadio D1, evitando di inviare un istruzione alla V pipe nel caso in cui la U pipe stia eseguendo un istruzione di salto 18
Branch Prediction (I) La pipeline offre le migliori prestazioni nel caso in cui non si abbiano né istruzioni di salto su condizione né interrupt, dato che in tale caso si può continuare a fare il fetch delle istruzioni in modo continuo I salti su condizione comportano un overhead nel caso in cui il processore sbagli nel prevedere che un certo salto venga eseguito o meno 19
Branch Prediction (II) Il Pentium effettua una predizione dinamica del fatto che un salto venga eseguito o meno. In pratica, il Pentium realizza un profiling dei programmi in esecuzione, utilizzando il BTB (Branch Target Buffer) per mantenere traccia della destinazione dei salti eseguiti in precedenza Il BTB è una memoria associativa di 1 KB con 256 entry, ognuna delle quali contiene un branch target address e 2 bit di history. Il tag è costituito dall indirizzo dell istruzione di salto Il BTB garantisce un efficienza dell 80% nelle predizioni 20
Floating Point Unit (I) Il Pentium è dotato di una Floating Point Unit con una struttura a pipeline I dati sono rappresentati internamente secondo un formato speciale su 80 bit Le istruzioni f. p. sono eseguite con un throughput di un istruzione/colpo di clock, purché: non si abbiano dipendenze dai dati si abbia cache hit nella code cache e nella data cache 21
Floating Point Unit (II) Le istruzioni f.p. sono eseguite nella U pipe e, in generale, non possono essere eseguite in parallelo ad un altra istruzione f.p. o intera Esiste un unica eccezione a questa regola: l istruzione FXCH (che scambia il contenuto del Top Of Stack con quello di un altro registro f.p.) può essere eseguita nella V pipe contemporaneamente ad un altra istruzione f.p. nella U pipe 22
Floating Point Unit (III) Il set di istruzioni f.p. prevede un operando a 64 bit in memoria e l altro nel register file floating point Le 2 porte della data cache, normalmente usate dalla U pipe e dalla V pipe, sono utilizzate in parallelo per leggere un dato a 64 bit in un solo colpo di clock Questa pipeline si articola in 8 stadi: Prefetch (PF), Decode1 (D1), Decode2 (D2), Operand Fetch (EX), Execute1 (X1), Execute2 (X2), Write Float (WF) e Error Reporting (ER) 23
Floating Point Unit (IV) Durante l esecuzione di un istruzione f.p., il Pentium può generare diverse eccezioni: invalid operation, divide by zero, denormalized operand, overflow, underflow, inexact (che si ha quando è richiesto un arrotondamento) E indispensabile garantire che le eccezioni vengano notificate in modo corretto: per tale motivo, un istruzione non può procedere oltre lo stadio X1 (bloccando pertanto l istruzione precedente allo stadio EX), finché non si è sicuri che non genererà eccezioni 25
Floating Point Unit (V) Se così non fosse, un istruzione potrebbe modificare lo stato della CPU mentre quella precedente genera una trap per il gestore software delle eccezioni Le istruzioni f.p. sono quindi suddivise in 2 categorie: safe: istruzioni che certamente non generano eccezioni unsafe: istruzioni che possono generare un eccezione Il Pentium usa la logica di Safe Instruction Recognition per decidere se un istruzione sia safe oppure no, prima dello stadio X1 26
Floating Point Unit (VI) Se la logica SIR decide che l istruzione è unsafe, la pipeline ha uno stallo di 3 colpi di clock, in modo tale da permettere all istruzione stessa di raggiungere lo stadio ER e di generare l eventuale eccezione, evitando così che le istruzioni successive modifichino lo stato del processore
Cache (I) Il Pentium ha una on-chip cache di 16 KB, suddivisa in modo da avere 8 KB per il codice e 8 KB per i dati, secondo l architettura Harvard Entrambe le cache sono 2-way associative Ogni via consta di 128 set di dimensione pari a 32 byte, che vengono caricati effettuando 4 letture in memoria in burst mode (l aggiornamento avviene in modalità LRU) 27
Cache (II) La data cache supporta completamente il protocollo MESI (Modified Exclusive Shared Invalid), mentre la code cache lo supporta solo parzialmente (protocollo SI). Pertanto, ogni entry nella data cache ha 2 bit di stato, mentre le entry nella code cache ne hanno solo uno I tag della data cache sono a tripla porta per consentire alle due ALU di accedere ai dati contemporaneamente, mentre la terza porta è usata ai fini del bus snooping in ambiente multimaster 28
Cache (III) La linea di dato è invece a singola porta ed è divisa in 8 banchi da 4 byte ciascuno: di conseguenza, si ha l accesso simultaneo ai dati soltanto se essi sono contenuti in banchi differenti In caso di accesso simultaneo al medesimo banco, la U pipe assume priorità più elevata ed accede ai dati, mentre la V pipe è costretta a fermarsi Anche i tag della code cache sono a tripla porta: la terza, come prima, è usata per il bus snooping 29
Cache (IV) 2 porte consentono l accesso simultaneo alla metà inferiore ed a quella superiore della linea Il bus di uscita dalla code cache consente di riempire in un singolo ciclo uno dei due Prefetch Buffer (256 bit) La cache del Pentium può essere gestita, oltre che in modalità write-through, anche in modalità writeback (la modalità write-back è disponibile a partire dal Write Back Enhanced 486DX2)