Reduced instruction set computer: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
FrescoBot (discussione | contributi)
m Bot: sintassi dei link e modifiche minori
Nessun oggetto della modifica
Riga 3:
'''''Reduced instruction set computer''''' (in [[acronimo]] '''RISC'''), nell'[[elettronica digitale]], indica un'idea di [[progettazione]] di architetture per [[microprocessore|microprocessori]] che predilige lo sviluppo di un'architettura semplice e lineare. Questa semplicità di progettazione permette di realizzare microprocessori in grado di eseguire il [[set di istruzioni]] in tempi minori rispetto a una architettura [[CISC]].
 
I più comuni processori RISC sono: [[Atmel AVR|AVR]], [[PIC (microcontrollore)|PIC]], [[Architettura ARM|ARM]], [[DEC Alpha]], [[PA-RISC]], [[SPARC]], [[Architettura MIPS|MIPS]], [[POWER]] e [[PowerPC]].
 
== Storia ==
Riga 22:
[[File:PowerPC G4e.png|thumb|Architettura PowerPC G4 (RISC)]]
[[File:Architettura Pentium 4.png|thumb|Architettura Pentium 4 (CISC), notare la complessità di questa architettura rispetto a quella RISC del PowerPC G4]]
Verso la fine degli [[anni 1970|anni settanta70]], ricercatori dell'[[IBM]] e di progetti analoghi dimostrarono che la maggior parte dei modi di indirizzamento non veniva utilizzato nei programmi. Questo era dovuto alla diffusione dei compilatori che, sostituendosi all'ottimizzazione a basso livello applicata dai programmatori, ignoravano i modi di indirizzamento più potenti per concentrarsi su quelli semplici. I compilatori di allora erano in grado di gestire solo le caratteristiche più semplici dei processori anche perché, alloraal'epoca, la teoria dei compilatori era solo agli inizi. Comunque il mercato si stava muovendo con rapidità verso l'utilizzo sempre più massiccio dei compilatori, dato che i linguaggi ad alto livello permettevano di realizzare programmi con rapidità riusando il codice in modo efficiente.
 
Gli studi dimostrarono che molte istruzioni esotiche venivano utilizzate molto raramente e a volte erano più lente del codice scritto con le istruzioni generiche. L'esempio classico era l'istruzione <code>INDEX</code> dei [[VAX]]: questa istruzione era più lenta di un loop implementato con le istruzioni comuni.
Riga 28:
In quel periodo la velocità delle CPU e delle memorie era simile, ma era evidente l'incremento di velocità delle prime e pertanto in futuro si avrebbe avuto un divario sempre maggiore tra le due. Per ridurre il problema i progettisti pensarono di includere più registri e [[cache]] nei processori in modo da ridurre gli accessi alla memoria; i registri e la cache richiedevano molto spazio e allora si cercò di recuperare spazio riducendo la complessità dei processori.
 
Studi effettuati da informatici come [[Andrew S. Tanenbaum|Andrew Tanenbaum]] dimostrarono che le CPU prodotte allora erano molto sovradimensionate rispetto alle reali esigenze dei programmi. Tanenbaum dimostrò che il 98% delle costanti in un programma poteva essere memorizzato con [[Parola (informatica)|parole]] di 13 bit sebbene la maggior parte delle CPU utilizzasse parole a multipli di 8 bit (8/, 16/, 24, ecc.) e quindi sprecassero spazio. Questi studi suggerirono di memorizzare le costanti nei bit non utilizzati del set di istruzioni, riducendo il numero degli accessi alla memoria; le costanti non verrebbero caricate dalla memoria o dai registri ma sarebbero state inglobate direttamente nel codice binario dell'istruzione rendendo la CPU più veloce ed efficiente. Tuttavia questo approccio richiedeva istruzioni con codifiche corte e una lunghezza di parola di almeno 32 bit per poter aver a disposizione uno spazio ragionevole per le costanti.
 
Dato che nelle applicazioni reali la maggior parte del tempo viene dedicata all'esecuzione di operazioni molto semplici, i ricercatori si concentrarono su queste operazioni comuni cercando di rendere la loro esecuzione il più veloce possibile. Visto che la massima velocità di funzionamento delle unità era limitata dal tempo necessario ad eseguire le istruzioni più lente e i modi di indirizzamento più esotici, si decise di eliminare le istruzioni e i modi di indirizzamento poco usati in modo da ottenere un set di istruzioni più snello contenente solo quelle istruzioni che effettivamente venivano richieste e che potevano essere ottimizzate per essere eseguite rapidamente, spesso in un solo ciclo di clock.<ref>[http://www.ercb.com/ddj/1990/ddj.9009.html Microprocessors From the Programmer's Perspective Review by Andrew Schulman Copyright (C) Dr. Dobb's Journal, Settembre 1990]</ref>
 
L'obiettivo di ridurre le istruzioni portò all'ideazione del nome ''reduced instruction set computing'' (lett. "elaborazione con insieme di istruzioni ridotto"): un numero ridotto di istruzioni con metodi di accesso semplici e lineari che permetteva l'utilizzo di soluzioni di tipo [[pipeline dati|pipeline]]. L'utilizzo di pipeline permette di realizzare microprocessori in grado di eseguire la maggior parte delle istruzioni in un ciclo di clock. In un'architettura CISC è molto più difficile includere una pipeline dato che i molteplici metodi di indirizzamento complicano nettamente il funzionamento dell'unità e perciò a parità di potenza di calcolo, un'architettura CISC a pipeline richiede molti più transistor di una architettura RISC a pipeline più significative di quella monoistruzione del CISC ada 8 bit [[6502]].
 
L'acronimo RISC ha portato spesso dei fraintendimenti. Molti, leggendo «insieme di istruzioni ridotto», pensarono ad un insieme menomato, inadeguato a eseguire con semplicità programmi complessi. Invece i processori RISC moderni sono spesso dotati di un set di istruzioni molto completo, ma non forniscono metodi di indirizzamento esotici o istruzioni utilizzate raramente. Ispirati dalla filosofia RISC, sono state sviluppate macchine basate su set di istruzioni minimali come le [[Minimal instruction set computer|MISC]], le [[One instruction set computer|OISC]] e le ''[[transport triggered architecture]]'', mentre alcune ricerche si sono mosse verso il [[Turing tarpit]].
Line 40 ⟶ 41:
Nel frattempo, gli ingegneri trovarono alcuni metodi e tecnologie migliori per incrementare la capacità dei processori senza aumentare la frequenza.
 
All'inizio degli [[Anni 1980|anni '80]] era diffusa l'idea sbagliata che l'architettura avesse raggiunto il suo limite teorico di velocità. Si riteneva che nuovi incrementi di prestazioni si sarebbero ottenuti solamente grazie ai miglioramenti nei materiali semiconduttori o all'aumento di frequenza. Permettendo transistori più compatti, avrebbero permesso di innalzare la frequenza di funzionamento. Molti sforzi furono rivolti verso il [[calcolo parallelo]] e verso metodi di collegamento rapidi.
Si riteneva che nuovi incrementi di prestazioni si sarebbero ottenuti solamente grazie ai miglioramenti nei materiali semiconduttori o all'aumento di frequenza.
Permettendo transistori più compatti, avrebbero permesso di innalzare la frequenza di funzionamento. Molti sforzi furono rivolti verso il [[calcolo parallelo]] e verso metodi di collegamento rapidi.
 
[[File:Fivestagespipeline.png|thumb|upright=1.2|Esecuzione delle istruzioni in un microprocessore con pipeline]]
Line 55 ⟶ 54:
Queste nuove idee avevano lo svantaggio di richiedere molti transistor per essere implementate.
 
I RISC furono inizialmente avvantaggiati dalla semplicità di progetto, e il parco dei transistor lasciava molto spazio libero nel processore per poter implementare queste tecniche. I CISC, invece, con la loro architettura più complessa, si trovarono ad implementare con maggior difficoltà queste idee, anche perché il loro ampio set di istruzioni, e i molti modi di indirizzamento rendevano più complesso implementare una pipeline rispetto a un classico processore RISC. I primi RISC avevano prestazioni inferiori agli equivalenti CISC, ma i processori RISC colmarono presto il divario e all'inizio degli [[anni 1990|anni 90]] superavano i processori CISC praticamente in ogni campo.
I CISC invece, con la loro architettura più complessa, si trovarono ad implementare con maggior difficoltà queste idee, anche perché il loro ampio set di istruzioni, e i molti modi di indirizzamento rendevano più complesso implementare una pipeline rispetto a un classico processore RISC. I primi RISC avevano prestazioni inferiori agli equivalenti CISC, ma i processori RISC colmarono presto il divario e all'inizio degli [[anni 1990]] superavano i processori CISC praticamente in ogni campo.
 
Oltre a considerazioni di carattere prestazionale, il fatto di dedicare pochi transistor al core vero e proprio del processore permetteva al progettista di un processore RISC un approccio molto flessibile. Con i molti transistor liberi si poteva per esempio:
Line 78 ⟶ 76:
 
=== Primi RISC ===
Il primo sistema al mondo che si può ritenere aderire alla filosofia RISC fu il [[supercomputer]] [[CDC 6600]] sviluppato nel 1964 da Jim Thornton e [[Seymour Cray]]. Thornton e Cray progettarono una CPU specializzata per eseguire calcoli (dotata di 74 opcode, un numero nemmeno paragonabile alle 400 opcode dell'[[Intel 8086]]) e 10 processori periferici dedicati alla gestione dell'I/O. Il CDC 6600 è dotato di un'architettura load/store con solo due metodi di accesso. Il computer aveva 10 unità funzionali aritmetiche/logiche più cinque unità dedicate al caricamento e al salvataggio dei dati. La memoria era suddivisa in più banchi in modo da consentire alle unità load/store di funzionare in parallelo. Il clock del processore era dieci volte il clock della memoria.
Thornton e Cray progettarono una CPU specializzata per eseguire calcoli (dotata di 74 opcode, un numero nemmeno paragonabile alle 400 opcode dell'[[Intel 8086]]) e 10 processori periferici dedicati alla gestione dell'I/O. Il CDC 6600 è dotato di un'architettura load/store con solo due metodi di accesso. Il computer aveva 10 unità funzionali aritmetiche/logiche più cinque unità dedicate al caricamento e al salvataggio dei dati. La memoria era suddivisa in più banchi in modo da consentire alle unità load/store di funzionare in parallelo. Il clock del processore era dieci volte il clock della memoria.
 
Un'altra delle prime macchine load/store fu il minicomputer [[Data General Nova]] sviluppato nel 1968.
Line 90 ⟶ 87:
 
[[File:Pipeline MIPS.png|thumb|upright=1.4|Pipeline del processore MIPS]]
Nello stesso periodo, [[John L. Hennessy]] iniziò un progetto simile chiamato [[Architettura MIPS|MIPS]] alla [[Stanford University]] nel 1981. Il progetto MIPS si concentrava sul realizzare un processore ove la pipeline fosse sempre operativa. La pipeline era già in uso allora su alcuni processori, ma il progetto MIPS sviluppò molte soluzioni che sono diventate di uso comune. Per ottenere una pipeline sempre piena era necessario garantire che le operazioni fossero sempre completate in un solo ciclo di clock da tutte le unità funzionali, quindi i progettisti decisero di eliminare dal processore tutte le istruzioni troppo lente anche se utili. Ad esempio il processore MIPS non prevedeva operazioni di moltiplicazione o divisione.
 
Il primo progetto di produrre una CPU su un singolo chip lo si deve all'IBM, che nel 1975 iniziò un progetto che fu di ispirazione per i gruppi successivi. Il progetto di ricerca ha portato allo sviluppo del processore [[IBM 801]]. L'801 venne prodotto su singolo chip nel 1981 con il nome di ROMP, un acronimo che indica ''Research (Office Products Division) Mini Processor''. Come dice il nome, la CPU era progettata per svolgere compiti d'ufficio; nel 1986 l'IBM presentò l'[[IBM RT]] che non ebbe successo per le prestazioni non all'altezza delle aspettative. Nonostante tutto il progetto 801 ispirò molti altri progetti di ricerca, incluso il progetto [[POWER]] della stessa IBM.
Line 105 ⟶ 102:
Molti altri progetti sono sorti rapidamente. Dal Regno Unito ricerche simili hanno portato alla creazione di processori come l'[[INMOS Transputer]] e l'[[architettura ARM]]. L'architettura ARM ha avuto un'enorme diffusione nel settore dei dispositivi embedded e mobili. [[Intel]] ha prodotto i processori [[i880]] e [[Intel i960|i960]] alla fine degli anni '80, sebbene questi abbiano avuto poco seguito commerciale. [[Motorola]] ha prodotto il [[Motorola 88000]], un processore che non ha mai avuto molto successo e che è stato abbandonato quando Motorola si è consociata con IBM per produrre i processori PowerPC. [[Advanced Micro Devices|AMD]] ha realizzato l'[[AMD 29000]], un processore molto utilizzato nelle stampanti laser e nelle macchine per l'ufficio.
 
Attualmente la maggior parte delle CPU prodotte seguono un approccio RISC. La filosofia RISC offre potenza con costi ridotti e consumi parchi, difatti domina il settore dei dispositivi embedded. Telefoni cellulari, palmari, automobili, videogiochi portatili e altri si affidano a processori RISC. I processori RISC, inoltre, diventarono i dominatori incontrastati dei server ad alte prestazioni durante gli anni '90. Dopo la presentazione delle Sun SPARCstation, i concorrenti della Sun si convertirono alle macchine RISC rendendo il mercato dei server totalmente RISC in breve tempo.
 
Nonostante i molti successi dei processori RISC, attualmente la piattaforma di riferimento per i computer da tavolo è l'architettura [[x86]] prodotta da Intel; il fatto è che Intel e il suo contendente diretto AMD dominano il mercato dei personal computer con macchine ad architettura CISC, in quanto gli utenti preferiscono mantenere la compatibilità con le loro applicazioni piuttosto che ricercare prestazioni più elevate utilizzando architetture più moderne. Difatti nessuna architettura RISC ha una base utenti talmente ampia da poter competere con quella dell'architettura x86. Inoltre Intel, avendo enormi guadagni dai suoi processori, può investire immense cifre di denaro in ricerca per produrre processori che, pur rispettando i vincoli dell'architettura x86, offrano ottime prestazioni. Comunque, dall'avvento del processore [[Pentium Pro]] in poi, i processori Intel prelevano le istruzioni x86 di tipo CISC dalla memoria e le traducono internamente in rapide istruzioni RISC che poi il processore elabora come un RISC classico. Tali famiglie di processori, pur comportandosi da processori CISC, in realtà funzionano internamente come processori RISC.
Line 113 ⟶ 110:
Comunque le soluzioni RISC hanno portato ad alcuni prodotti di grande successo come:
*[[Architettura MIPS|MIPS]] utilizzato inizialmente da [[Silicon Graphics]] per i suoi computer e in seguito alla base di [[PlayStation]], [[PlayStation 2]], [[PlayStation Portable]] e [[Nintendo 64]]
*[[POWER]], utilizzato nelle sue mille varianti da [[Apple|Apple Inc.]] per anni nei suoi computer prima del passaggio all'architettura X86x86 e da [[IBM]] per i suoi sistemi, compresi i supercomputer più veloci del pianeta. Il processore viene utilizzato anche dal [[Nintendo GameCube]], dadalla [[Wii]], dalla [[Xbox 360]] e dalla [[PlayStation 3]].
*[[SPARC]] e UltraSPARC, utilizzato nei server Sun Microsystem.
*[[PA-RISC]] utilizzato per anni da Hewlett-Packard per alcuni suoi server.
*[[DEC Alpha]] prodotto da [[Digital Equipment Corporation|DEC]] e utilizzato su server e workstation.
*[[Architettura ARM|ARM]], utilizzato in [[Computer palmare|PDA]] come l'[[Apple Newton]] e altri. Le sue varianti sono incluse in moltissimi prodotti di consumo come il [[Game Boy Advance]], il [[Nintendo DS]], l'[[iPod]] e in molti telefoni cellulari, come alcuni [[IPhoneiPhone]], [[High Tech Computer Corporation|HTC]], [[Sony Ericsson]], (in particolate la serie Smartphone "P", "M" e alcuni "W") e [[Nokia]].
*Bisogna inoltre ricordare come la grande espansione del mercato di smartphone e tablet avvenuta negli anni compresi tra il 2010 ede il 2014 abbia contribuito a rilanciare la domanda di processori ad [[architettura ARM]], nonché ad una rinnovata spinta della ricerca in questo settore, con la realizzazione di processori ARM della serie [[ARM Cortex-A8|Cortex A8]], [[ARM Cortex-A9 MPCore|Cortex-A9]] o dei [[System-on-a-chip|SOC]] [[Apple A5]] ede [[Apple A6]].
 
== Descrizione ==
L'architettura CISC prevede un set esteso di istruzioni con metodi di indirizzamento complessi. Una definizione semplicistica dei microprocessori RISC parla di microprocessori con un set di istruzioni ridotto (semplificato) rispetto a quello dei classici processori CISC. La definizione attualmente più diffusa in ambito informatico parla di architettura load-store dato che le architetture RISC permettono di accedere alla [[memoria (informatica)|memoria]] unicamente tramite delle istruzioni specifiche (''load'' e ''store'') che provvedono a leggere e scrivere i dati nei [[registro (informatica)|registri]] del microprocessore, mentre tutte le altre istruzioni manipolano i dati contenuti all'interno dei microprocessori. Nei microprocessori CISC è l'esatto opposto, praticamente tutte le istruzioni possono accedere ai registri o alla memoria utilizzando [[Metodo di indirizzamento|metodi di accesso]] anche molto sofisticati.
 
L'idea che ha ispirato questa architettura è la constatazione che i progettisti hardware impiegavano molte risorse e molto tempo per realizzare metodi di accesso molto potenti che i programmatori in realtà ignoravano. Gli sviluppatori e i compilatori infatti tendevano a utilizzare le istruzioni e i metodi di indirizzamento più semplici ignorando tutti gli altri metodi e le istruzioni specializzate. Inoltre, negli [[Anni 1980|anni ottanta80]] il divario tra la velocità dei processori e delle memorie aumentava, perciò i progettisti iniziarono a studiare tecnologie che riducessero gli accessi alla memoria e aumentassero la velocità dei processori; tuttavia queste tecnologie erano molto difficili da implementare con metodi di accesso alla memoria complessi.
 
== Note ==