Salta al contenuto
Note per Studenti Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento

Architettura del repertorio di istruzioni - RISC, CISC, VLIW e indirizzamento

In questa pagina 6

L'architettura di un processore è l'insieme delle risorse che ne permettono la programmazione in linguaggio macchina (la "architetturainsieme delle risorse visibili al programmatore lato utente"). Discutere un'architettura vuol dire valutare tre cose: la struttura delle istruzioni, i modi di indirizzamento dei dati e le funzioni che le istruzioni realizzano. Dietro ogni architettura c'è sempre una precisa organizzazione hardware (Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registriOgni processore ha ALU, memoria e dispositivi di I/O. Nell'organizzazione Von Neumann dati e istruzioni stanno nella stessa memoria e viaggiano su un solo sistema di bus (semplice ed economica, usata nei µC più semplici); nell'organizzazione Harvard memorie e bus sono separati (più accessi per ciclo: tipica di DSP e µC veloci). I bus sono pilotati da porte tri-state; l'ALU lavora su registri (accumulatore o molti registri); il controllo è cablato o microprogrammato; la gerarchia di memoria va dai registri alla RAM interna e a quella esterna.Organizzazione del processore - Von Neumann, Harvard, bus, ALU e registri →); l'architettura incide sul numero di istruzioni di un programma, l'organizzazione su tempo di ciclo e cicli per istruzione (Misura delle prestazioni - tempo di calcolo e indici MIPSLe prestazioni di un processore si misurano col tempo di calcolo di un programma: $T_{cal}=T_{clk}\sum_{i}N_i,NC_i$ (periodo di clock per numero di istruzioni di classe $i$ per cicli medi della classe). Aumentare la velocità vuol dire ridurre $T_{clk}$, i cicli per istruzione (organizzazione) o il numero di istruzioni (architettura). Gli indici MIPS, DMIPS, FLOPS misurano solo un picco e non permettono di confrontare famiglie diverse: si usa il benchmarking (kernel benchmarking per i DSP).Misura delle prestazioni - tempo di calcolo e indici MIPS →).

Qualità di un repertorio di istruzioni

  • Simmetria: nessun caso particolare. Se un registro si può caricare dalla memoria, si può anche copiare in memoria; se un dato si sposta da un registro a un altro, vale anche lo spostamento inverso.
  • Ortogonalitàtipo di istruzione e modo di indirizzamento sono indipendenti: ogni modo vale per ogni istruzione.
  • Regolarità: tutte le instruction wordIW: la parola binaria che codifica una istruzione hanno la stessa lunghezza e i campi (OPCODE, registri) la stessa posizione.
  • Compattezza: dimensione del codice macchina; architetture regolari e semplici (RISC) sono in genere più compatte.
  • Velocità di esecuzione, facilità di debugging (somiglianza con un linguaggio ad alto livello) e costo.

RISC e CISC

RISC (Reduced Instruction Set Computer): istruzioni poche decine, semplici nel formato e nelle funzioni, tutte della stessa dimensione (per esempio 16 bit). La decodifica quasi sempre cablata è semplice, quindi di norma ogni istruzione dura un solo ciclo macchina. L'area di silicio risparmiata nell'unità di controllo permette banchi di registri e cache: l'organizzazione è quasi sempre "a molti registri". Le prime realizzazioni RISC erano a accumulatoreregistro implicito su cui agiscono le istruzioni a un solo operando o a stack (istruzioni senza operandi), ma generavano troppo traffico con la memoria, che è il collo di bottiglia, e sono state abbandonate.

CISC (Complex Instruction Set Computer): centinaia di istruzioni di struttura variabile e complessa; la decodifica è spesso microprogrammata, l'esecuzione richiede più cicli. Era comune nei processori generici fino ai primi anni '90; tra i µC resta in alcune famiglie datate degli anni '70 (Intel 8XC196, Renesas H8S). Spesso ha un'organizzazione Von Neumann con aggiunte: cache, coprocessori, blocchi di debug.

I processori di nuova concezione per controllo real time sono RISC e hanno caratteristiche prossime a quelle di un DSP a virgola fissa. I DSP seguono la filosofia RISC (molti registri, controllo cablato) ma con istruzioni compatte a molti campi: questo rende il repertorio asimmetrico e non ortogonale, quindi difficile da programmare in assembly e, nelle prime generazioni, con compilatori poco efficienti.

Parallelismo: VLIW, SIMD, processori su misura

Dagli anni '90 la complessità degli algoritmi (telefonia mobile) ha spinto verso architetture più facili da programmare:

  • VLIW (Very Long Instruction Word): più istruzioni semplici (4, 8) sono impacchettate in una sola macro-istruzione letta in un solo prelievo e eseguita in parallelo in un ciclo. Il codice occupa più memoria. Non è equivalente al superscalare: solo certe sequenze si impacchettano bene (per esempio una cella di filtro FIR), il parallelismo hardware è ridotto, la pipeline è statica, il bus istruzioni è largo (anche 256 bit).
  • Istruzioni a lunghezza variabile: le istruzioni aritmetiche in stile VLIWVery Long Instruction Word: più istruzioni semplici impacchettate in una sola, quelle di controllo o di manipolazione di bit in formato compatto.
  • SIMDSingle Instruction Multiple Data: la stessa istruzione su più dati (Single Instruction, Multiple Data): la stessa istruzione su più dati. Nell'ARM Cortex-M4 l'ALU a 32 bit esegue in un ciclo 2 somme a 16 bit o 4 somme a 8 bit, se il compilatore le usa.
  • Processori su misura (licensable corenucleo di processore concesso in licenza, di cui l'utente può personalizzare repertorio e hardware): ottimi ma con sviluppo lungo; oggi si usano molto le FPGA.

Istruzioni tipiche di un DSP

Esempio: arrotondamento da 8 a 4 bit

Sia a7…a0a_7\dots a_0 l'operando a 8 bit e si voglia b3…b0b_3\dots b_0 = i 4 bit alti.

  • Troncamento: b=a7a6a5a4b=a_7a_6a_5a_4.
  • Arrotondamento: b=a7a6a5a4+a3b=a_7a_6a_5a_4+a_3.
  • Convergente: come l'arrotondamento, ma se a3a2a1a0=10002a_3a_2a_1a_0=1000_2 (esattamente a metà) si somma a4a_4 invece di a3a_3, cioè si arrotonda al pari, eliminando l'errore sistematico. Per a=0xA8=1010 10002a=\texttt{0xA8}=1010\,1000_2: troncamento 10101010, arrotondamento 10111011, convergente 10101010 (perché a4=0a_4=0); per a=0xB8=1011 10002a=\texttt{0xB8}=1011\,1000_2: troncamento 10111011, arrotondamento 11001100, convergente 11001100 (perché a4=1a_4=1).

Struttura delle istruzioni e modi di indirizzamento

Le istruzioni hanno fino a tre operandi: ADD X, Y, Z. Con un solo operando (ADD X) c'è un accumulatore implicito; senza operandi sono le macchine a stack, abbandonate.

Modi di indirizzamentoil modo in cui l'istruzione specifica dove si trova il dato più comuni: immediato (l'operando è nella IW), a registro, diretto o assoluto (la IW contiene l'indirizzo dell'operando), indirettomodo di indirizzamento in cui l'istruzione contiene l'indirizzo dell'indirizzo del dato (la IW contiene l'indirizzo dell'indirizzo, cioè un puntatore). Molto comuni nei µC e nei DSP: indiretto con auto-incremento (al puntatore si somma automaticamente ±1\pm1) e indiretto con offset (indicizzato: puntatore più costante). Le AGUAddress Generation Unit: unità che calcola gli indirizzi in background, fuori dall'ALU rendono possibili modi ancora più efficienti:

  • circolare: per gestire vettori di dati (buffer di un filtro), quando un puntatore di lettura o scrittura raggiunge la fine del vettore ripassa da solo all'inizio, senza istruzioni di controllo;
  • a bit rovesciati: la lettura con indice a bit invertiti di una sequenza ordinata produce l'ordinamento della uscita della DFTDiscrete Fourier Transform, trasformata di Fourier discreta, calcolata dalla FFT.

Esempio a bit rovesciati con 8 elementi (3 bit): l'indice 1=0011=001 legge la posizione 100=4100=4; 3=011→110=63=011\to110=6; 2=010→010=22=010\to010=2. La sequenza di lettura è 0,4,2,6,1,5,3,70,4,2,6,1,5,3,7: è proprio l'ordine in cui la FFT a decimazione in frequenza (ingresso in ordine) produce gli elementi X0,X4,X2,X6,…X_0, X_4, X_2, X_6,\dots e permette di mettere il vettore in ordine con un solo ciclo. I dsPIC 33F e i DSP Freescale 563xx supportano entrambi i modi ottimizzati.

Errori comuni

Versione ripasso

Esercizi su questo argomento

Teoria collegata