ARCHITETTURA elementi di base Contenuto della lezione Richiami sulla struttura del calcolatore (CPU) Logica cablata/microprogrammazione Repertorio istruzioni (RISC/CISC) Prestazioni Classificazione architetture AA 2004-2005
Struttura (anni 70) MINI (HP 2100) MAINFRAME (IBM 370) MEMORIA MEMORIA CPU I/O bus CPU bus di I/O controllore di canale modulo I/O modulo I/O modulo I/O modulo I/O
Struttura PDP-11 (anni 70-80) POWER SUPPLY MODULO MICROCOMPUTER PDP-11 MODULO DI MEMORIA LETTURA/SCRITTURA MODULO MEMORIA SOLA LETTURA REAL TIME CLOCK BACKPLANE UNIBUS MODULO INTERFACCIA LINEA SERIALE ( CONSOLE ) MODULI OPZIONALI SUPPORTI MAGNETICI ROTANTI STAMPANTE AD ALTA VELOCITA' La console è su linea seriale RS-232 CONVERTITORE A/D CONVERTITORE D/A INTERFACCIA PARALLELA INTERFACCIA SERIALE INTERFACCIA DMA ACCESSORI
Struttura PC (anni 80) scheda madre CPU MEMORIA PC bus E sparita la console RS232 Il Video e la tastiera sono collegati direttamente alla scheda madre. Per il video c è una RAM apposita Memoria di espansione e periferici sono su schede collegate sul bus memoria I/O
Struttura PC (non più) corrente
Struttura PC corrente
The Topmost Intel (Maggio 2005)
Schema di riferimento Per Il momento lo schema di riferimento sarà quello di figura Corrisponde allo schema dei PC anni 80 Tuttora in largo uso nei sistemi di controllo
Transazioni sul bus
di Von Neuman memoria indifferenziata per dati o istruzioni, solo l'interpretazione da parte di CPU stabilisce se una data configurazione di bit è da riguardarsi come un dato o come un'istruzione
Harward Due memorie distinte: la memoria istruzioni e la memoria dati. Il comando di lettura della memoria istruzioni è superfluo, in quanto si può immaginare che questa memoria sia sempre e soltanto letta
Schema aggregato della CPU
Fetch-Esecuzione Fetch: Prelievo e decodifica dell istruzione Fase comune a tutte le istruzioni Esecuzione: Fase in cui vengono eseguite le azioni previste dal codice di operazione Fase diversa da istruzione a istruzione
Componenti essenziali
Registri di CPU IR: usato per contenere l'istruzione in corso di esecuzione. Caricato in fase di fetch. Rappresenta l'ingresso che determina le azioni svolte durante la fase di esecuzione. PC: tiene traccia dell'esecuzione del programma MAR: contiene l'indirizzo della locazione di memoria da leggere o scrivere. La dimensione di MAR determina l'ampiezza dello spazio di memoria fisica; dalla fine degli anni '80 vengono prodotti microprocessori con bus indirizzi a 32 bit MDR: registro attraverso il quale viene scambiata l'informazione tra la memoria e la CPU Tradizionalmente MDR dà la misura del grado di parallelismo della macchina (8, 16, 32, 64 bit) La dimensione di R0, R1,...Rn: Registri di uso generale
Fase di Fetch
Organizzazione a singolo bus interno
Registri Nel seguito il clock non si indica è sempre sottinteso
Commutazione Registri
Trasferimento registro registro RA RB T1: RB out, RA in FF comandati dal fronte di discesa
Altre operazioni Impiego ALU (RD RA+RB) T1: RA out, TI in T2: RBout, ADD, TOin T3: TOout, Rdin Registro DTR T1: DTRout T1: SELDTRdir, DTRin Aggiornamento PC T1: Pcout, SEL4, ADD, Toin T2: TOout, PCin Lettura (verso l interno) Scrittura (verso l esterno)
Lettura memoria (FETCH) Ipotesi la memoria risponde entro il clock successivo a quello in cui viene asserito MRD (Memory Read) T1: PCout, MARin T2: MDR T3: MDR, DTRin T4: DTRout, IRin Sfruttiamolo bene: T5: PCout, MARin, SEL4, ADD, TOin T6: MDR, TOout, PCin T7: MDR, DTRin T8: DTRout, Irin
Data Path - 1 bus Esecuzione in più passi. Esempio: ADD R3,R1,R2 Richiede Almeno tre periodi di clock: R1_out; TEMPI_in R2_out; ADD; TEMPO_in TEMPO_out; R3_in
Data Path - 3 bus L istruzione ADD R3,R2,R1 viene eseguita in un solo clock: R1_out1; R2_out2; ADD; R3_in
Logica cablata
Logica cablata Progetto Come sintesi di rete sequenziale ingressi: IR, stato di UO uscite: comandi Uso di ROM. La rete combinatoria ha come ingressi (indirizzi alla ROM): IR, stato di UO, stato di UC uscite: comandi, ingressi di eccitazione dei FF di stato Logica programmabile (PLA) Progettazione con CAD per VLSI Misura della complessità di UC: N_stati x N_ingressi x N_uscite
UC microprogrammata
UC microprogrammata Tecnica affermatasi negli anni 70 UC è una sorta di calcolatore nel calcolatore La memoria di controllo contiene le microistruzioni: mpc: contatore di microprogramma. Contiene l indirizzo della prossima microistruzione All inizio della fase di fetch mpc contiene l indirizzo (I 0 ) del tratto di microprogramma corrispondente al fetch Alla fine della fase di fetch mpc viene aggiornato con il contenuto (o una opportuna decodifica) di IR in modo da puntare alla microroutine che effettua le azioni richieste dalla particolare istruzione Al termine, mpc viene di nuovo caricato con (mi0)
UC microprogrammata Differenti soluzioni: sequenza di micro control word (CW) microprogramma con subroutine microistruzioni che contengono codificato al loro interno l indirizzo della prossima microistruzione nanoprogrammazione: le microistruzioni sono a loro volta interpretate da una unità nanoprogrammata (68000) Microprogrammazione orizzontale: ogni bit di una CW corrisponde ad una linea di comando Microprogrammazione verticale le CW contengono i comandi in forma convenientemente codificata Bit sliced microprocessors (AMD 29000)
Cablata o microprogrammata? Fino a fine anni 60: logica cablata (PDP8, HP 2116) Anni 70: microprogrammazione (VAX, Z80, 8086, 68000) Repertorio di istruzioni molto esteso e variato: CISC Il VAX 11/789 (Digital) e il 370/168 (IBM) avevano oltre 400.000 bit di memoria di controllo Dagli anni 80 si è tornati alla logica cablata; Affermazione delle macchine RISC Istruttivo è esaminare l evoluzione dell architettura Intel: da CISC a (praticamente) RISC
Ragioni per le CISC Un repertorio di istruzioni esteso è preferibile perché: Istruzioni potenti semplificano la programmazione Riduce il gap tra linguaggio di macchina e linguaggio di alto livello Software crisis L uso efficiente della memoria (all epoca era costosa) era la preoccupazione principale: meglio avere codici compatti Essendo (allora) la memoria di controllo molto più veloce della memoria centrale, portare funzionalità nella prima avrebbe migliorato le prestazioni della macchina
...Tuttavia Memorie RAM: molto più veloci delle precedenti a nuclei Cache: riducono ulteriormente i tempi di esecuzione Comportamento dei programmi: l'80% delle istruzioni eseguite corrispondeva al solo 20% del repertorio. conviene investire nella riduzione dei tempi di esecuzione di quel 20%, anziché aggiungere raffinate istruzioni, quasi mai usate, ma responsabili dell'allungamento del tempo di ciclo di macchina conviene costruire processori molto veloci, necessariamente con repertori semplici, e contare sull ottimizzazione del compilatore
Criteri di progetto per le RISC Le istruzioni devono essere semplici Se l'introduzione di una operazione di macchina fa crescere del 10% il periodo di clock, allora essa deve produrre una riduzione di almeno un 10% del numero totale di cicli eseguiti. Con memorie attuali le istruzioni di macchina possono essere eseguite alla stessa o maggior velocità delle microistruzioni non c'è vantaggio a spostare le funzionalità a livello di microcodice; ciò ha solo l'effetto di rendere più difficoltose modifiche e cambiamenti molto meglio modificare una libreria di sistema che modificare una memoria di controllo.
Criteri di progetto per le RISC Tutte le istruzioni occupano lo stesso spazio di memoria (una parola) Ristretto numero di formati l'interpretazione del codice avviene attraverso un semplice decodificatore (una rete AND-OR) la codificate ``ordinata'' consente accorgimenti per velocizzare l'esecuzione (pipeline), difficilmente applicabili a repertori di istruzioni complesse La semplificazione del repertorio tende a far aumentare la dimensione del codice non è un problema, vista la tendenza alla riduzione dei costi e all'aumento della densità delle memorie dal punto di vista della velocità i guadagni che si ottengono nel semplificare le istruzioni sono superiori all'effetto negativo del maggior numero di istruzioni per programma.
Criteri di progetto per le RISC Compilatori ottimizzati. in grado di produrre sequenze ottimizzate di semplici operazioni di macchina, indipendentemente dalla complessità del linguaggio Il compilatore sbroglia in modo automatico e efficiente tutte le complicazioni che possono sorgere nel tradurre da linguaggio di alto livello a linguaggio di basso livello Il compilatore è motivo di semplificazione del repertorio di istruzioni anziché di complicazione
Criteri di progetto per le RISC Conclusioni L'architettura dovrebbe prevedere solo operazioni tra registri (e non tra registri e memoria o tra memoria e memoria) e semplici operazioni di lettura/scrittura in memoria, con ridotte modalità di indirizzamento Il compilatore deve essere costruito in modo da fare il miglior uso dei registri, tenendo, per quanto possibile, le variabili nei registri stessi, riducendo al minimo il traffico con la memoria Per il precedente motivo la CPU dovrebbe presentare un consistente numero di registri
Impatto sull architettura X86 L 8086 è un tipico rappresentante dell architettura CISC. I modelli successivi si avvicinano sempre più ai RISC Pipeline: una (vera) pipeline appare con il 486 Cache: con il 486 Predizione dei salti con il Pentium Dal Pentium Pro: Esecuzione fuori ordine (speculativa) Superscalarità Register renaming
Prestazioni Si consideri un generico programma N: numero di cicli di clock richiesti per la sua esecuzione f: frequenza del clock t: tempo di CPU richiesto per l'esecuzione t = N / f I: numero di istruzioni di macchina richiesto per la sua esecuzione CPI: numero medio di clock per istruzione di macchina CPI=N / I
Dipendenza Repertorio Tecnologia t= I * CPI * T Compilatore
Prestazioni t= I * CPI/f = I* CPI * T I dipende dal repertorio di istruzioni e dal grado di ottimizzazione del compilatore. Compilatori diversi possono dare luogo a I diversi. Uno stesso compilatore, che genera codice per due macchine diverse, dà I diversi. Un repertorio CISC favorisce il miglioramento delle prestazioni (riduce I).
Prestazioni t= I * CPI/f = I* CPI * T f è legata alla tecnologia e all'organizzazione architetturale della CPU Oggi 2 GHz sono la norma Istruzioni complesse richiedono di norma frequenze di più basse Istruzioni semplici (RISC) permettono di diminuire i ritardi di propagazione nella logica di controllo e, quindi, di diminuire l'ampiezza del periodo di clock.
Prestazioni t= I * CPI/f = I* CPI * T CPI dipende dall'architettura e dal repertorio delle istruzioni Istruzioni semplici richiedono un minor numero di cicli. Attraverso tecniche come la pipeline è possibile portare CPI ad un valore molto vicino ad 1. L'aggiunta di più unità di esecuzione in parallello (macchine superscalari) permette di rendere CPI minore di 1.
Indici di prestazione MIPS (Milioni di istruzioni al secondo) MIPS = I / (t*10 6 ) E un indice che ha poco significato MFLOPS (Milioni di istruzioni in virgola mobile al secondo) MFLOPS = I_vm / (t*10 6 ) Ci sono indici migliori SpecINT 2000 SpecFP 2000
Repertorio stile RISC Il PowerPC ADD RD,RA,RB (OE=0, Rc=0) ADD. RD,RA,RB (OE=0, Rc=1) ADDO RD,RA,RB (OE=1, Rc=0) ADDO. RD,RA,RB (OE=1, Rc=1)
Formato Intel Esempio EA= scost(v)+ebx+esi Indir.Fisico= ES:EA CLI 1 solo byte PUSH EAX 1 solo byte PUSH Var[EBX] fino a 6 byte MOV EAX, ES:V[EBX+ESI] 6 byte (probabilmente) EA= scost(v)+ebx+esi Indir.Fisico= ES:EA
Modello di programmazione (386)
Istruzioni e architettura a= b+c; Soluzione 1 (macchina a 3 indirizzi) ADD A, B, C Soluzione 2 (stile RISC) LD R1,B LD R2,C ADD R3,R1,R2 ST A,R3 Soluzione 3 (un indirizzo) LD R1,B ADD R1,C ST A,R1
Istruzioni e architettura a= b+c; Soluzione 4 (Stack - 0 indirizzi) PUSH B PUSH C ADD POP A
Classificazione architetture In base al modello di esecuzione, ovvero al modo in cui la CPU accede e manipola gli oggetti dell'elaborazione determina il numero di operandi esplicitamente o implicitamente rappresentati nell'istruzione Modello a stack Modello registro-registro Modello registri-memoria Modello memoria-memoria
Confronto In riferimento all istruzione di alto livello a=b+c; STACK REGISTRO-REGISTRO MEMORIA- REGISTRO (*) MEMORIA- MEMORIA PUSH B LOAD R1, B LOAD B ADD A,B,C PUSH C LOAD R2,C ADD C ADD ADD R3,R1,R2 STORE A POP A STORE A, R3 0 indirizzi Load/Store 1 indirizzo 3 indirizzi (*) Assume un registro accumulatore