Dopo aver parlato dei livelli di astrazione arriviamo dritti al cuore della questione che passa necessariamente dalla definizione di cosa siano i RISC
e, di conseguenza (perché i due concetti sono mutuamente esclusivi, come già preannunciato), cosa saranno, quindi, i CISC
.
RISC
: Reduced Instruction Set Computer
L’idea di un’architettura RISC
era già stata concepita verso la metà degli anni ’70 da alcuni ingegneri di IBM, che l’avevano poi concretamente realizzata in quello che è considerato il primo RISC
: il processore 801.
E’, però, nel 1980 che l’acronimo viene coniato in un articolo di Patterson e Ditzel che è passato alla storia: The Case for the Reduced Instruction Set Computer. Il quale illustra i principi ispiratori di questa nuova (macro)famiglia di processori. Ne riporto uno stralcio esplicativo:
Le parti evidenziate ne rappresentano i cardini, ma lasciano ancora dei dubbi: l’insieme di istruzioni dovrebbe essere molto semplice, OK, ma è relativo (anche) al numero (piccolo?) di istruzioni a disposizione? La prima parte evidenziata sembrerebbe propendere in tal senso.
Non è, inoltre, chiaro se ciò si riferisca anche alla struttura / complessità delle istruzioni: dovrebbero essere intrinsecamente “semplici” (quindi non istruzioni che internamente facciano “tanto lavoro”)? L’aver legato il tutto alle prestazioni (le istruzioni possono essere molto veloci) dovrebbe portare a convalidare questa tesi (istruzioni “complicate” tendono a essere lente in esecuzione).
Comunque la lettura dell’intero articolo porta, infine, esattamente a tali conclusioni: il processore dovrebbe avere un numero ridotto di istruzioni, le quali devono essere anche semplici.
Concetto che viene ancora meglio ribadito nonché definito un paio d’anni dopo, in un articolo che può essere considerato il manifesto dei RISC
, firmato da Patterson (ancora una volta) e Séquin: Design and implementation of RISC I (1982), dal quale estraggo le porzioni rilevanti che portano all’intelligibile definizione di architettura RISC
:
Il tutto si può sintetizzare in quelli che io definisco i quattro pilastri delle architetture RISC
:
- Dev’esserci un insieme ridotto di istruzioni.
- Soltanto le istruzioni cosiddette di load/store possono accedere alla memoria (lettura/scrittura dati).
- Le istruzioni devono avere una lunghezza fissa –> no alla loro lunghezza variabile.
- Le istruzioni devono essere semplici –> eseguite in un singolo ciclo di clock.
Due cose saltano immediatamente fuori da questa definizione. La prima è che le architetture RISC
devono soddisfare tutti e quattro i suddetti requisiti: è sufficiente non soddisfarne una per non avere un RISC
. E, di conseguenza, ci troveremmo davanti a un CISC
.
Se qualcuno avesse ancora dei dubbi consiglio caldamente di leggere con attenzione entrambe le pubblicazioni per verificare come effettivamente i RISC
, per come sono stati definiti (e anche realizzati, all’epoca), debbano rispettare fedelmente i suddetti quattro requisiti.
Com’è pure vero che venga fatta una netta distinzione fra i RISC
e “tutto il resto”, che è rappresentato dai CISC
, i quali sono stati citati, a tal proposito, sempre in netta contrapposizione ai RISC
(ed è un discorso generale, che non riguarda soltanto queste due pubblicazioni). Non si scappa!
Conseguenze immediate
Come avevo già anticipato nel precedente articolo, le conseguenze immediate di tutto ciò sono che molte architetture, anche famose e che da tempo immemore (e ancora oggi!) vengono fatte ricadere sotto il blasone dei RISC
, in realtà… sono (non sarebbero: sono!) dei CISC
.
Prendiamo, ad esempio, quelle sviluppate da ARM: almeno il quarto requisito risulta certamente non soddisfatto, perché è ben noto che diverse istruzioni delle sue ISA
siano particolarmente complicate (specialmente quelle di ARM32
, Thumb
, e
–Thumb
2
, le quali supportano anche istruzioni di load/store che operano su più registri).
Il terzo requisito non è certamente vero per tutte le architetture Thumb
, perché dispongono di un insieme di istruzioni a lunghezza variabile (16 o 32 bit). Il primo requisito, infine, è banalmente non verificato per tutte le architetture (perfino il primissimo modello, l’ARM1
, aveva una ventina di istruzioni, la maggior parte delle quali si “sdoppiavano” potendo specificare anche un valore immediato, oltre che riccamente potenziate dall’uso di un tutt’altro che “semplice” barrel shifter).
In definitiva, tutto ciò significa che parlare di ARM
vs x86
in termini di RISC
vs CISC
diventa completamente inutile, oltre che totalmente insensato: sono entrambi CISC
!
L’indissolubile legame dei RISC
con le microarchitetture
A questo punto sarebbe interessante vedere, definizione alla mano, quante e quali architetture potrebbero realmente essere classificate come RISC
. Fra quelle più note, probabilmente soltanto la versione “base” di RISC-V
potrebbe esserlo, ed esclusivamente se ci fosse almeno una microarchitettura in grado di eseguire tutte le sue istruzioni in un solo ciclo di clock (cosa di cui dubito fortemente sia possibile. E con ciò non mi riferisco soltanto agli effetti del fallimento della predizione dei salti).
Ciò porta inevitabilmente al secondo elemento che deriva dalla definizione di RISC
: sia i requisiti architetturali (ISA) sia microarchitetturali vi fanno parte. Il che implica, di conseguenza, che il secondo e il terzo livello di astrazione (di cui abbiamo parlato nel precedente articolo) vi sono indissolubilmente coinvolti / affetti.
In sintesi, è la definizione stessa di RISC
che comporta delle implicazioni a livello di microarchitettura. Quindi e a prescindere dagli altri tre requisiti / pilastri, un processore che si definisca RISC
non può assolutamente esimersi dal fatto che le sue istruzioni siano “semplici” perché l’obiettivo è che la loro esecuzione debba essere portata a termine in un solo ciclo di clock.
A questo punto qualcuno (pure ben più di qualcuno, in quanto lo si legge spesso in giro, da parecchio tempo) potrebbe anche sostenere che questa definizione non si applicherebbe più perché il mondo è cambiato da allora e “non ci sono più RISC
o CISC
poiché sono entrambi mischiati”.
Sono fieramente avverso a questa presa di posizione perché si vorrebbe far carta straccia di definizioni che erano e rimangono oggettive e, soprattutto, le quali sono ancora perfettamente valide di per sé (non vedo alcun motivo per cui non lo sarebbero più). Oltre al fatto che uno “scambio” / “rimescolamento” fra RISC
e CISC
in realtà non ci sia stato (ma di questo ne parlerò meglio in un altro articolo della serie).
Per il momento mi fermo qui, perché lo scopo era di fornire delle definizioni precise da utilizzare per classificare correttamente i membri delle due macrofamiglie. Il prossimo pezzo verterà sulla propaganda a senso unico che è stata messa in atto (e lo è ancora!) in questi più di 40 anni, avente lo scopo di esaltare i RISC
e, all’esatto contrario, dileggiare e mettere alla berlina i CISC
.