View Single Post
Old 29-09-2005, 09:00   #42
scorpionkkk
Senior Member
 
L'Avatar di scorpionkkk
 
Iscritto dal: Feb 2001
Città: Roma
Messaggi: 1353
Quote:
Originariamente inviato da cdimauro
Al contrario, da questo punto di vista non ci sono molte differenze fra CISC e RISC moderni: hanno tutti un set d'istruzioni vasto e abbastanza "complesso".

La caratteristicha che ancora oggi distingue sicuramente un processore CISC da un RISC è la presenza di un set d'istruzioni con opcode a lunghezza variabile, al contrario di quello fisso usato da questi ultimi.

Poi ci sarebbe da considerare anche la presenza di modalità d'indirizzamento più complesse (i RISC ne hanno di molto semplici) e la presenza di istruzioni non di load/store che accedono direttamente alla memoria (i RISC hanno soltanto load/store per accedere alla memoria, e tutte le altre istruzioni fanno uso di registri).

Questo in generale e prendendo soltanto gli elementi più significativi (non ho parlato di istruzioni specifiche, come può essere una AAD in un x86, né di microcodice, ad esempio).
1)l'opcode a lunghezza variabile non ha alcun senso..ciò che ha senso è solo l'opcode dell'istruzione effettivamente calcolata che poi è solo la microistruzione..non è un caso infatti che sia assolutamente impossibile progettare a livello hardware un processore senza definire il set d'istruzioni (e quindi la lunghezza in bit dell'opcode)..questo infatti comporta una minimizzazione e ottimizzazione dell'hardwrae sempre e comunque.
2)Modalità d'indirizzamento complesse sono tipiche solo dei DSP..che possono anche confondersi con processori "normali" ma non lo sono affatto..possono anche confondersi con processori CISC..ma anche in questo caso non lo sono affatto.
3)Ancora confusione con i DSP che non sono innaznitutto macchine CISC (e ci mancherebbe) ma sono solo macchine vettoriali con particolari istruzioni come la MAC che possono permettersi l'accesso in memoria.

Quote:
Bisogna vedere cosa intendi con ciò.

A livello implementativo i CISC hanno iniziato a utilizzare tecnologie prima apparse sui RISC (che sono stati il "fiore all'occhiello" della ricerca e sviluppo nel campo dei microprocessori) per migliorare le prestazioni: mi riferisco alla presenza della cache (L1 e poi L2 ed L3), della separazione fra cache codice e dati, l'uso di bus multipli, di superpipeline che permettevano di eseguire più istruzioni, di esecuzione fuori ordine, di politiche di aggiornamento / consistenza dei dati (write through, write-back, bus snooping, ecc.).
80386, 80486, Pentium, 68020, 68030, 68040, 68060, ecc. hanno fatto parecchio uso di tutto ciò, ma sono pur sempre rimasti dei CISC...

Soltanto a partire dal K5 di AMD (a cui ha fatto seguito Intel col PentiumPro) è stata integrata un'unità RISC-like per l'esecuzione delle istruzioni, per cui le istruzioni x86 veniva "tradotte" in una o più istruzioni "RISC-86" e poi eseguite.
Ma il K5 è rimasto sempre un CISC: non è diventato un RISC soltanto perché A LIVELLO IMPLEMENTATIVO (lo voglio sottolineare ancora una volta), si è fatto uso di un'architettura basata sulla "filosofia RISC".

E si badi bene: non a caso ho parlato di "filosofia". Questo perché arrivare alla conclusione che "i RISC sono migliori dei CISC perché ormai questi ultimi ne integrano uno" è quanto di più sbagliato si possa pensare di fare.
Quei "RISC" hanno motivo di esistere soltanto in seno all'architettura per cui sono stati pensati e utilizzati: non è possibile ipotizzare, ad esempio, che se fossero costruiti dei processori senza tutto "l'orpello" di cui sono circondati, e quindi con un'ISA "nativa" (verrebero eseguite direttamente le istruzioni RISC senza alcuna traduzione), avrebbero buone prestazioni e forse anche molto migliori; al contrario, il decadimento prestazionale sarebbe notevole.

Conclusione: i CISC continuano a rimanere sempre tali, e lo stesso vale per i RISC...
Questa è una visione macroscopico-commerciale di un processore che comporta solo confusione.

A livello implementativo basta poco per definire una macchina RISC o comuqnue un approccio RISC:
1)Architettura Harvard
2)Architettura Load/store e operazioni registro/registro
3)formato istruzioni fisso (a livello ultimo)
4)durata fissa di una singola istruzione (1 ciclo o meno)
5)ISA modellato sulle applicazioni
6)istruzioni semplici e hardware esposto al compilatore..
7)Pipeline a più di 3 stadi.

ovvio che l'approccio esposto da questi punti si sia evoluto..ma l'evoluzione successiva è comuqnue partita da qui..e da qui non si è mossa.
Le macroistruzioni che sono rimaste ad essere spezzettate in microoperations non hanno alcun significato a livello progettuale se non quello di semplificare la comunicazione tra progettista ed hw...a livello progettuale tutto è partito da quio e da qui si è evoluto e da qui il "vero" CISC è morto.

PS:cache L1,L2,bus nooping,write back etc etc...sono cose macroscopiche a livello progettuale..non sono certo quelle che determinano la differenza tra architetture.Se si pensa infatti che il Pentium2 è stato il primo processore superscalare commerciale..eppure conteneva tutti questi elementi..senza parlare dell'evoluzione vliw o vettoriale.
scorpionkkk è offline   Rispondi citando il messaggio o parte di esso
 
1