Salta al contenuto
Note per Studenti Architetture RISC e CISC

Architetture RISC e CISC

In questa pagina 8
In questa pagina 5

CISC: perché istruzioni complesse

Negli anni '70 i linguaggi ad alto livello si allontanavano dal linguaggio macchina (divario semantico). La risposta CISC (Complex Instruction Set Computer, es. VAX, x86): molte istruzioni, molte modalità di indirizzamento, istruzioni che fanno direttamente operazioni da linguaggio ad alto livello (copie di stringhe, chiamate di procedura con salvataggio del contesto). Obiettivi: compilatori più semplici, programmi più corti, più funzioni in microcodice (vedi Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo →).

Che cosa eseguono davvero i programmi

Le misure sull'esecuzione di programmi compilati (Pascal, C) mostrano che:

  • dominano gli assegnamenti (circa il 40% delle istruzioni ad alto livello) e le istruzioni condizionali;
  • le chiamate di procedura sono le più costose in tempo (accessi alla memoria per parametri e contesto);
  • la grande maggioranza delle procedure ha meno di 6 parametri e poche variabili locali;
  • gli operandi sono per lo più variabili scalari locali.

Conclusione: conviene rendere veloci le operazioni semplici e frequenti e tenere gli operandi nei registri.

Caratteristiche RISC

Reduced Instruction Set Computer (es. MIPS, ARM, RISC-V):

  1. un'istruzione per ciclo (a regime, in PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →);
  2. operazioni registro-registro, solo load e store accedono alla memoria (architettura load/store);
  3. poche modalità di indirizzamento semplici;
  4. formato fisso (32 bit) e pochi formati, decodifica semplice;
  5. molti registri (16–32 o più);
  6. unità di controllo cablata;
  7. il lavoro di ottimizzazione passa al compilatore (allocazione dei registri, riordino delle istruzioni).

Finestre di registri

Per rendere veloci le chiamate (soluzione hardware, es. SPARC): molti registri fisici divisi in finestre; ogni procedura attiva vede una finestra con registri per parametri, variabili locali e registri temporanei. La finestra di chi chiama e quella della procedura chiamata si sovrappongono: i registri temporanei del chiamante sono i registri parametro del chiamato, quindi i parametri passano senza copiarli. Le finestre sono organizzate in modo circolare: quando le chiamate annidate le esauriscono, le più vecchie vengono salvate in memoria.

Allocazione dei registri con colorazione

Soluzione software: il compilatore assegna le variabili ai registri fisici. Costruisce un grafo in cui ogni nodo è una variabile (o valore temporaneo) e un arco collega due variabili vive contemporaneamente. Assegnare kk registri = colorare il grafo con kk colori in modo che nodi adiacenti abbiano colori diversi. Le variabili che non si riescono a colorare vengono tenute in memoria (spill).

Esempio: aa e bb vive insieme, bb e cc vive insieme, aa e cc mai. Bastano 2 registri: a,c→a, c \to R1, b→b \to R2.

Confronto

CISC RISC
istruzioni molte, complesse, lunghezza variabile poche, semplici, lunghezza fissa
accesso alla memoria in molte istruzioni solo load/store
cicli per istruzione molti e variabili circa 1 in pipeline
registri pochi molti
controllo spesso microprogrammato cablato
codice più compatto più lungo

Oggi la distinzione è sfumata: i processori x86 traducono internamente le istruzioni CISC in micro-operazioni di tipo RISC eseguite in pipeline; ARM ha aggiunto istruzioni più ricche e un formato compatto a 16 bit (Thumb). Per retrocompatibilità nessuna architettura commerciale diffusa è "puramente" RISC o CISC.

MIPS in breve

Esempio storico di RISC usato nei libri di testo: 32 registri a 32 bit ($0 vale sempre 0 e non è scrivibile), istruzioni di 32 bit nei formati R, I, J (vedi Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →).

add  $1, $2, $3      # $1 = $2 + $3
addi $2, $2, 4       # $2 = $2 + 4 (immediato)
lw   $1, 12($2)      # $1 = M[$2 + 12]
sw   $1, 12($2)      # M[$2 + 12] = $1

Il caso di studio del corso è ARM: L'architettura ARMARM a 32 bit come caso di studio: registri r0-r15 con SP, LR e PC, registro di stato CPSR con flag NZCV, modi del processore, architettura load/store, istruzioni condizionate, secondo operando flessibile, Thumb; differenze principali con ARMv8 a 64 bit.L'architettura ARM →.

Errori tipici

  • Pensare che RISC significhi "meno potente": esegue più istruzioni ma ciascuna in meno tempo.
  • In una sw il primo registro è letto (il dato da scrivere), non scritto.

Versione ripasso

CISC

Per il divario semanticodistanza tra linguaggi ad alto livello e linguaggio macchina: molte istruzioni e modalità di indirizzamento (VAX, x86), programmi corti, più funzioni in microcodice (Unità di controlloCompiti dell'unità di controllo e micro-operazioni; segnali di controllo del datapath con tabella per le classi di istruzioni; controllo cablato (combinatorio o a stati finiti) e controllo microprogrammato (memoria di controllo, microistruzioni orizzontali e verticali); confronto.Unità di controllo →).

Perché RISC

I programmi compilati eseguono soprattutto assegnamenti (circa 40%) e condizionali; le chiamate di procedura costano di più; quasi tutte le procedure hanno meno di 6 parametri e operandi scalari locali. Conviene velocizzare le operazioni semplici e tenere gli operandi nei registri.

RISC (MIPS, ARM, RISC-V):

  1. un'istruzione per ciclo a regime (PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →);
  2. registro-registro, solo load e store accedono alla memoria;
  3. poche modalità di indirizzamento, formato fisso (32 bit);
  4. molti registri (16-32 o più), controllo cablato, ottimizzazione al compilatore.

Registri

  • Finestre di registri (SPARC): la finestra del chiamante e quella del chiamato si sovrappongono, i parametri passano senza copiarli; organizzazione circolare, le più vecchie vanno in memoria.
  • Colorazione di un grafo: nodo = variabile, arco = variabili vive insieme; kk registri = kk colori con nodi adiacenti diversi; le non colorabili in memoria (spill). aa-bb e bb-cc vive insieme, aa-cc mai: 2 registri (a,c→a, c \to R1, b→b \to R2).

Confronto

CISC: istruzioni complesse a lunghezza variabile, memoria in molte istruzioni, pochi registri, microprogrammato, codice compatto. RISC: l'opposto. Oggi x86 traduce in micro-operazioni RISC; ARM ha Thumb a 16 bit.

MIPS

32 registri da 32 bit ($0 sempre 0), formati R, I, J (Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →): add $1,$2,$3; addi $2,$2,4; lw $1,12($2); sw $1,12($2). Caso di studio: L'architettura ARMARM a 32 bit come caso di studio: registri r0-r15 con SP, LR e PC, registro di stato CPSR con flag NZCV, modi del processore, architettura load/store, istruzioni condizionate, secondo operando flessibile, Thumb; differenze principali con ARMv8 a 64 bit.L'architettura ARM →.

Errori tipici: RISC non è "meno potente"; in sw il primo registro è letto.

Lezioni in cui compare

Teoria collegata