|
Quando si parla di Pentium 4 e di Athlon, non si può fare a meno di mettere a
confronto le differenti
pipeline. Nei numerosi test che sono stati fatti su queste CPU, spesso è stato
messo in risalto il fatto che le prestazioni di un processore Pentium 4 a 3GHz
fossero più o meno pari a quelle di un Athlon XP 3000+ funzionante, realmente, a
2167 MHz. Come mai accade questo? Alla domanda si può rispondere, praticamente,
in un solo modo: la differenza della profondità della pipeline. Nel caso del
Pentium 4 la pipeline è lunga 20 stadi mentre l'Athlon 64 ne ha solo 12.
La pipeline, un argomento di sempre scottante attualità! Questa tecnica è
sfruttata in tutti i chip che si occupano di eseguire dei task, come CPU, GPU,
processori RISC, etc. Grazie a tale meccanismo è possibile dotare il processore
di una "catena di montaggio" nella quale vengono impilate tutte le operazioni da
eseguire secondo un ordine stabilito.
Anche se non staremo qui a discutere di tutti i dettagli in merito, che
potete trovare a questo
indirizzo, è
bene ricordare quelli che sono i classici stadi di una pipeline in una CPU:
- Instruction Fetch: caricamento dell'istruzione;
- Instruction Decode: decodifica dell'istruzione caricata;
- Operand Fetch: caricamento degli operandi relativi all'istruzione;
- Execute: esecuzione dell'istruzione sugli operandi caricati;
- Store: memorizzazione del risultato in cache.
Ovviamente questi stadi sono del tutto generici: ad essi se ne possono
aggiungere altri a proprio piacimento. Se gli stadi della pipeline vengono
incrementati in numero, ognuno di essi svolgerà un compito minore e più
specifico: così possiamo splittare la fase di caricamento dell'istruzione in una
fase di reperimento ed una di caricamento vera e proprio.
A questo punto potreste chiedervi perché fare una pipeline più o meno lunga e
quali possono essere gli effetti del differente numero di stadi. Ebbene, il
pipelining è una tecnica molto interessante che permette di avere prestazioni
notevolmente più elevate di una situazione senza pipeline. Ma, come tutte le
cose belle, anche il pipelining ha qualche difetto di efficienza: questa è
massima solo quando la pipeline lavora con tutti gli stadi pieni ed è minima
quando è vuota w comincia ad essere riempita. Nella tabella qui sotto abbiamo
schematizzato quanto stiamo dicendo:
|
I1 IN |
I2 IN |
I3 IN |
I4 IN |
I5 IN |
|
|
|
|
| IF |
IF |
IF |
IF |
IF |
|
|
|
|
| |
ID |
ID |
ID |
ID |
ID |
|
|
|
| |
|
OF |
OF |
OF |
OF |
OF |
|
|
| |
|
|
E |
E |
E |
E |
E |
|
| |
|
|
|
S |
S |
S |
S |
S |
| |
|
|
|
I1 OUT |
I2 OUT |
I3 OUT |
I4 OUT |
I5 OUT |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Con la pipeline vuota, la prima fase della prima istruzione viene immessa
nella pipeline al momento 1 e subisce la fase di Instruction Fetch (IF). Al
secondo passo la prima istruzione passa alla fase di Instruction Decode (ID)
mentre una nuova istruzione entra in pipeline nella fase IF... E così via. Dopo
5 passi ecco che la prima istruzione restituisce il suo risultato. Solo dal
quinto passo in poi, quando la pipeline è piena, essa diventa efficiente ed ogni
ciclo di clock tira fuori un risultato.
Ma allora cosa rende la pipeline inefficiente? Quando il microcodice dato in
pasto alla CPU richiede che ci sia un salto condizionato o incondizionato, la
pipeline deve essere svuotata perché la sequenza di istruzioni cambia ed essa
deve essere riempita con una nuova serie di istruzioni. Più salti si incontrano
nell'esecuzione di un compito e più diminuisce l'efficienza della pipeline.
Ecco, allora che entrano in gioco meccanismi di predizione dei salti: questi
permettono di non interrompere il normale flusso delle istruzioni continuando a
caricare la pipeline anche in presenza di un salto con istruzioni che "con molta
probabilità" dovrebbero essere eseguite. Se poi sono proprio quelle le
istruzioni da eseguire a seguito del salto tanto di guadagnato: la pipeline non
viene svuotata e l'efficienza rimane al massimo. Se le istruzioni previste non
erano quelle caricate,
allora occorre svuotare la pipeline e ripartire da zero: comunque il fatto di
aver continuato a riempire la pipeline con istruzioni che poi non sono servite
non ha causato nessun ritardo ulteriore. Statisticamente, perciò, conviene
predire i salti e più la previsione è certa e più la pipeline funziona al
massimo delle possibilità. Non per nulla, Intel ed AMD hanno lavorato e continuano a
lavorare molto per ottimizzare l'unità di Branch Prediction (previsione
dei salti) al fine di renderla una "maga" infallibile!
L'ultima domanda che viene da porci, dunque, è perché fare una pipeline più o
meno lunga? La sola ragione per volere una pipeline più lunga di un'altra è
quella di semplificare i compiti di ogni stadio: in questo modo ogni compito
richiederà un tempo minore per essere eseguito. E questo porta come conseguenza,
il poter arrivare ad una frequenza di funzionamento della CPU più elevata.
Infatti, a determinare la massima frequenza di funzionamento di un processore, è
lo stadio della pipeline più lento.
Ad esempio, se ogni stadio della pipeline viene eseguito in un ciclo di clock
e lo stadio più lento impiega un secondo per essere portato a termine, la
frequenza massima di funzionamento di una tale CPU è pari ad 1Hz. Se riusciamo a
fare una pipeline col doppio degli stadi, allora potrebbe accadere che lo stadio
più lento impieghi 0.5 secondi ad essere completato e questo porterebbe la
massima frequenza di funzionamento a 2Hz, il doppio della precedente.
Quindi, ciò che viene contrapposto, è l'efficienza della pipeline e la
frequenza di funzionamento della CPU: con una pipeline più lunga posso salire in
frequenza ma, statisticamente, è più difficile tenere la pipeline completamente
piena e quindi efficiente.
Un altro parametro molto importante nella valutazione delle prestazioni
teoriche, è l'IPC o Instruction Per Clock. Il numero di istruzioni per ciclo di
clock che il processore Intel Pentium 4 è in grado di completare è pari a 6. Per
un processore Athlon XP questo numero è pari a 9 ed è leggermente superiore per
la serie a 64-bit. In effetti, stando alla teoria, non si può dire che un
processore ad 1Hz in grado di eseguire 1 milione di IPC sia migliore o peggiore
di uno funzionante a 1 milione di Hz ma in grado di eseguire 1 solo IPC: il
tutto dipende dall'applicazione che si vuole eseguire!
A sostegno della tesi che Intel intende investire in una CPU in grado di
eseguire meno calcoli in un ciclo di clock ma che possa raggiungere frequenze di
funzionamento più elevate, troviamo anche le due unità di calcolo ALU (Arithmetic Logic Unit)
contro le tre di un Athlon XP e di un Athlon 64. Ma, mentre le ALU delle
soluzioni AMD lavorano alla stessa frequenza della CPU, quelle del Pentium 4
lavorano al doppio della frequenza: nel caso del Pentium 4 Extreme Edition che
stiamo analizzando, le due ALU lavorano a 6.40GHz!
|