Per
rinfrescarvi le idee sulle differenze CISC-RISC, date
un'occhiata a questa tabella :
|
Caratteristiche
CISC |
Caratterisitiche
RISC |
Approccio
fondamentale |
La
complessità si sposta dal codice all'hardware |
La
complessità si sposta dall'hardware al software, ovvero
al compilatore che deve essere molto efficiente |
| Conseguenze
della scelta per il programmatore |
Il
codice è molto compatto e occorre poca memoria per contenerlo;
è l'hardware che si incarica di decodificare istruzioni
anche molto compatte e molto complesse |
La
dimensione del codice aumenta in favore della semplificazione
dell'hardware. |
| Conseguenze
della scelta a livello hardware |
-Pochi registri.
-Presenza di una ROM di decodifica.
-ISA molto articolato con centinaia di istruzioni.
-Modalità di indirizzamento memoria-memoria |
-Molti
registri
-Non esiste la modalità di indirizzamento memoria-memoria,
ma alla memoria si accede solo con il load e lo store
-ISA con qualche decina di istruzioni soltanto
-Direct execution
-Uso della pipeline per diminuire il ritardo del critical
path. |
La tabella sovrastante fissa,
a mio avviso, le caratteristiche salienti delle due filosofie
di progettazione . A questo punto, cari lettori, vi starete
probabilmente domandando: ma l'Athlon o il Pentium4
sono CISC o RISC? La domanda non è banale, visto che
in precedenza ho scritto che il Pentium4 è obbligato, per ragioni
di retrocompatibilità, a eseguire il vecchio codice ISA a 8
e 16 bit. Poichè l'ISA della Intel è stato concesso in licenza
ad AMD e a Transmeta, anche l'Athlon e il Crusoe devono potere
eseguire le medesime operazioni e quindi complessivamente si
parla di piattaforme x86 . Come venga poi effettivamente eseguito
il codice x86, beh, a questo punto ognuno segue ciò che ritiene
sia la strada migliore e più performante. La situazione è così
schematizzabile :

Se il Pentium o l'Athlon
(o quello che è) sono ancorati alla decodifica di un set di
istruzioni arcaico e complicato come quello x86, dovrebbero
essere considerati processori CISC, quindi poco performanti...eppure,
sappiamo bene che l'Athlon ha una struttura a pipeline composta
da ben 10 stadi, è superscalare ed ha un sacco di "chicche"
in più! Così anche il P4 che di stadi nè ha addirittura
20. Quindi dovrebbero essere RISC, secondo la tabella di cui
sopra! Insomma ,CISC o RISC? La risposta è: entrambi! Confusi?
Avete motivo di esserlo. Ma adesso cercherò di chiarirvi le
idee.
I processori Post-CISC : una
visione dall'alto
Prima di proseguire, ci
tengo a fissare un punto: quanto segue NON È un'analisi comparativa
fra le architetture dei processori AMD o Intel. Affronterò il
confronto prestazionale in un 'altra sede (confronto unità in
virgola mobile, decoder units, modalità di accesso alle cache
e così via), mentre per ora voglio focalizzare l'attenzione
sulle straordinarie tecnologie che stanno dietro il boost prestazionale
conseguito in questi ultimi anni dai processori che eseguono
codice x86. L'architettura interna dei processori general purpose
odierni, quali appunto il Pentium4 e l'Athlon (il Transmeta
è un caso a parte....poi dirò perchè), ha poco o nulla a che
vedere con l'approccio CISC descritto in precedenza. Infatti,
essi sono ancorati al passato solo perchè devono essere retrocompatibili
con i vecchi programmi e dunque con le obsolete istruzioni ISA
che questi vecchi programmi utilizzavano. Il codice x86 è un
codice "brutto", frammentato, disomogeneo, e il fatto che sia
riuscito a sopravvivere per quasi trent'anni costituisce la
prova de facto dell'importanza della backward compatibility
per il successo delle macchine Intel e suoi cloni. Se la stessa
Intel decide per la prima volta nella sua storia di buttare
a mare il codice sulla quale essa ha costruito la sua fortuna
commerciale, optando per la nuova piattaforma IA64 dell'Itanium,
vuol dire che l'ISA x86 è veramante giunto al capolinea della
sua corsa e che sono finiti i trucchi tecnologici che possono
mantenerla ancora in vita.
Il K7 o il P4 possono essere considerati
come dei processori che offrono un' interfaccia CISC al codice
ISA che devono eseguire (accettano cioè senza problemi le istruzioni
ISA che il programma corrente genera) ma, una volta decodificate
le istruzioni, il risultato di tale decodifica viene "digerito"
da una serie di stadi di elaborazione che nel loro insieme costituiscono
in tutto e per tutto un processore RISC. La figura seguente
chiarisce le idee.

I commenti che si possono
fare sono i seguenti:
1) Il codice ISA x86 complesso (nel senso di tante istruzioni
di natura diversa) e disomogeneo (nel senso che alcune istruzioni
sono lunghe 8 bit, altre 16 e quelle degli applicativi più recenti
32 bit) viene decodificato secondo lo schema già studiato: una
ROM contiene la corrispondenza fra le istruzioni complesse e
quelle più semplici omogenee. L'unità di controllo è il regista
dell'operazione di decodifica.
2) Alle poche compatte istruzioni ISA x86 vengono sostituite
le più numerose istruzioni di formato omogeneo (a 32 bit) che
possono essere quindi immesse in una memoria tampone (buffer)
in attesa di venire processate dalle unità di elaborazione più
a valle. Le istruzioni decodificate sono RISC-like, nel senso
che appartengono ad un "alfabeto" meno ricco del codice nativo
ISA x86 ma altamente ottimizzato per essere convenientemente
compreso dalla circuiteria preposta al suo trattamento.
3) Queste istruzioni Risc-like possono allora essere
manipolate secondo quanto di meglio la tecnologia odierna possa
offrire.
Conclusione
Dopo quanto detto è abbastanza evidente come nello
scontro CISC vs RISC sia stata quest'ultima filosofia ad aver
avuto la meglio. Di processori RISC oggigiorno ne abbiamo piene
le letteralmente le tasche: dai palmari ai cellulari della prossima
generazione, oggi ogni processore che voglia essere snello e
al contempo potente nasce sotto l'effige del RISC (Tranmeta
Crosue è un caso particolare di cui parleremo in altra
sede). Gli stessi processori x86, come abbiamo visto hanno assimilato
il paradigma RISC unica e vincente mossa che ne ha prorogato
la vita oltre ogni rosea aspettativa. Del resto il percorso
di sviluppo delle capacità di un processore non si ferma
a quello che abbiamo detto.
L'obiettivo di qualsiasi progettista
di processori è quello di ottenere sempre il max throughput
complessivo, cioè ,detto in italiano (cara vecchia lingua!),
il massimo volume di dati processati e consegnati in uscita
nell'unità di tempo. Come conseguire il massimo rendimento?
la parola d'ordine in questi casi è parallelismo.Il parallelismo
è stato il passo successivo compiuto dalla tecnologia
dei processori dopo l'affermazione del RISC. Questo si esplica
principalmente in due modalità differenti all'interno di un
singolo processore: il pipelining e il superscaling.
Un'altra tecnica di ottimizzazione delle risorse è il
multithreading, che come scuola di pensiero ha pochi
anni alle spalle ma già promette interessanti innovazioni. Questi
argomenti saranno oggetto di altri articoli di approfondimento
che troverte pubblicati su Lithium nelle settimane a
venire. In un 'altra occasione parleremo invece dell'implementazione
della VLIW architecture nell'Itanium di Intel/HP
e nel Crusoe di Transmeta. Per qualsiasi commento, critica,
consiglio o discussione sul presente articolo potete scrivere
al sottoscritto
o alla redazione di
Lithium, e mi raccomando state pronti, perchè
il viaggio è ancora molto lungo...
Lorenzo Marchetti