Università di Parma Dipartimento di Ingegneria dell

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