Anteprima
Vedrai una selezione di 8 pagine su 33
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 1 Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 2
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 6
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 11
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 16
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 21
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 26
Anteprima di 8 pagg. su 33.
Scarica il documento per vederlo tutto.
Riepilogo Esame di Calcolatori Elettronici - Architetture Pag. 31
1 su 33
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

ISADispense e appunti goodnotesSyscall: chiamate a sistema per operazione non effettuabili dai programmi utente. Si mette in un registro $v0/1 ilnumero della procedura da far eseguire dal sistema operativo insieme agli argomenti che servono (da mettere neiregistri $a0123.Datapath a ciclo unicoUnità di controlloTutti i segnali possono essere decisi solo guardando il campo OPCODE, tranne PCSrc, che viene determinatodall'AND tra BRANCH e l'uscita ZERO dell'ALU. Ai segnali dell'unità di controllo bisogna aggiungere i duesegnali di controllo dell'ALU, i due ALUOp.Esame 14RegDst entra in gioco nelle operazioni aritmetiche 1 e logiche e nelle lw 0RegWrite comanda il WB nel register destination comandato dal RegDst e dice se scrivere o noALUSrc entra in gioco nelle operazioni di tipo R 0 e in tutte quelle di tipo I 1 tranne le branch 0, manon è decisionale nel caso delle jump: per le R e la branch legge il

secondo registro, per le altre di tipo I legge il campo immediate presente nell'istruzione estesa di segno. Il PCSrc decide se nel PC mettere PC+4 o il risultato del sommatore che calcola l'indirizzo nel caso delle branch. MemRead serve solo per le lw perché invia il dato letto all'uscita della memoria e dentro al MUX alla fine dello stato WB. MemWrite serve solo per le sw perché mette all'ingresso della memoria il dato da scrivere letto dal registro. MemtoReg entra in gioco nelle operazioni aritmetiche e nelle lw: dice quale dato scrivere nel registro indicato dalla RegDst: si scrive quello che esce come risultato dall'ALU (operazioni R) o quello prelevato dalla memoria (lw). Branch dice se ho una branch in lettura e serve per l'AND che determina il segnale PCSrc. JUMP (non nella tabella): serve per pilotare un altro MUX messo dopo il MUX che decideva se prendere PC+4 o il salto della branch. Il MUX aggiunto sceglie l'indirizzo della

jump o il dato selezionato dal primoMUX. Per le jump i segnali vanno messi come quelli della branch

Esame 15

Quando si implementa la pipeline ci serve anche un'altro segnale, IF.Scarta. Il segnale è asserito quando si ha una branch che determina in salto: in quel momento però ho già un'altra istruzione nello stato di IF/ID, che però deve essere scartata, mettendo a zero tutti i campi dell'istruzione appena decodificata e salvata nel registro di pipeline ID e creando così un'istruzione che non fa nulla.

Nella gestione delle eccezioni si introducono altri segnali che azzerano i segnali di controllo salvati nei registri di pipeline così da annullare le istruzioni negli stadi ID e EX prima che scrivano dati sbagliati nei registri. Questi nuovi segnali sono ID.Scarta e EX.Scarta.

Segnali di controllo dell'ALU → guardare descrizione tabella sopra

Esecuzione vari tipi di istruzioni con CPU a singolo ciclo

Implementazione CPU

attualeTipo RSi preleva l'istruzione dalla memoria e si incrementa il PCIl CodeOp viene mandato all'unità di controllo e calcola i segnali di controllo da asserire (vd toggle prima), mentre vengono prelevati i due registri argomento. Inoltre si seleziona il registro di scrittura con il segnale RegDst (a 1).La ALU effettua l'operazione prelevando i dati letti (il secondo operando viene selezionato con ALUSrc a 0 e guardando il campo FUNCT e il segnale ALUOp il controllore dell'ALU decide l'operazione da fare (ALUOp 10).Il risultato viene scritto bypassando la lettura della memoria (MEMtoReg a 0) e scrivendo nel registro destinazione.Load WordIstruzione prelevata e incremento PCEsame 16Il CodeOp viene mandato all'unità di controllo e calcola i segnali di controllo da asserire (vd toggle prima)e viene letto il registro argomento, mentre il secondo registro indicato viene selezionato nel MUX come destinazione da RegDst (a 0).La ALU

Esegue la somma tra il dato letto e la costante estesa a 32 bit selezionata nel MUX da ALUSrc (a1) e il segnale ALUOp (a 00 per indicare la somma senza guardare il campo funct). Il risultato viene mandato in memoria per sapere che indirizzo selezionare, poi mandato al MUX in uscita (MemRead a 1) dove il segnale MemtoReg sarà asserito per indicare che il dato uscente dalla memoria deve essere scritto. Il dato viene scritto nel registro indicato in precedenza.

Store Word Istruzione prelevata e incremento PC. Lettura registri, il primo serve per calcolare l'indirizzo di scrittura, il secondo è il dato da scrivere, RegDst è don't care. L'ALU calcola l'indirizzo di scrittura sommando il registro letto e l'offset esteso (ALUSrc a 1). Il dato viene scritto in memoria (MemWrite a 1) prendendo il risultato dell'ALU come indirizzo di scrittura, ma non viene scritto niente nei registri (MemtoReg don't care e RegWrite obbligatorio a 1).

  1. Branch: Istruzione prelevata e incremento PC
  2. Lettura dei due registri per il confronto, RegDst don't care e altri segnali a 0 tranne branch
  3. La ALU fa la sottrazione (ALUOP 01), il PC+4 viene sommato al campo offset esteso e shiftato (indirizzo di salto)
  4. L'AND dei segnali branch e zero determina il valore di PCSrc, che quando a 1, mette nel PC il valore del salto
  5. Jump: Istruzione prelevata e incremento PC
  6. Tutti i segnali di controllo sono a 0, tranne jump, viene preso il campo indirizzo della jump, viene shiftato a sinistra di due e viene messo insieme alle prime 4 cifre del PC+4
  7. Viene preso il campo indirizzo della jump, viene shiftato a sinistra di due e viene messo insieme alle prime 4 cifre del PC+4
  8. Il MUX aggiuntivo seleziona il salto della jump
  9. Pipeline
  10. Pipeline senza ottimizzazioni
  11. Operazioni aritmetiche e logiche
  12. Il registro che contiene il risultato è aggiornato nel WB
  13. Hanno bisogno dei registri che contengono gli operandi nello stato ID
  14. Operazioni di trasferimento

datila lw scrive il dato nella WB

la sw preleva il dato da mettere in memoria nello stato ID

Istruzioni di salto nelle branch l'indirizzo di salto viene calcolato nello stato MEM

Esame 17anche per le jump sappiamo con certezza l'indirizzo a cui saltare solo nello stato MEM

Con ottimizzazioni (cosa cambia)

Operazioni aritmetiche e logiche

Il risultato dell'operazione si ha già nella fase EX

Gli operandi si possono mandare anche nello stesso ciclo del ID perché i registri possono essere letti e scritti nello stesso ciclo

Operazioni di trasferimento dati nella lw, il dato prelevato dalla memoria è già disponibile nello stato MEM

Istruzioni di salto

Nelle branch il calcolo dell'indirizzo viene deciso nello stato ID

Per le jump anche c'è l'anticipazione

Scenari possibili

Nelle operazioni aritmetiche si possono mandare in forward i dati se servono a istruzioni successive, ma solo nei seguenti stadi: da EX posso andare a EX o da MEM a EX

non nello stesso ciclo di clock, perché l'hardware di propagazione è aggiunto all'inizio dell'ALU e basta

Da WB a ID solo nel caso in cui però si abbia l'ottimizzazione sui registri che permettano lettura e scrittura nello stesso clock

Le sw danno problemi solo se non hanno i dati disponibili nello stadio ID qui si agisce con stalli o con l'aggiunta di hardware di forwarding da MEM a MEM (caso Memory-to-Memory copy)

Si aggiungono segnali di controllo per forwarding e hazard:

  • PC.Write: sceglie se aggiornare o no il PC (no in caso di stallo)
  • IF/ID.Write blocca la scrittura di una nuova istruzione nel registro di pipeline

Segnali di controllo da portare avanti nei vari stadi:

Esame 18

Hazard sui dati

Due tipi:

  • Read before write
  • Load use

Hazard sul controllo

Spostando il check della condizione di salto nello stadio ID si incorre comunque in uno stallo per far arrivare al PC l'indirizzo di salto o per verificare se esso debba essere eseguito.

Vedere

Anche le 3 situazioni di stallo o forwarding sulle slide. Con aggiunta di hw si può fare forwarding da MEM a ID per avere la comparazione dei salti condizionati. Salti ritardati. Per evitare lo stallo necessario (nel caso di verifica della condizione nello stadio ID) si possono usare i delayed branches: visto che un'istruzione dopo la branch viene sicuramente prelevata, si fa in modo che essa sia un'istruzione sicuramente da eseguire. Ci sono 3 scenari:

Esame 19. Questo procedimento tuttavia è limitato, perché deve essere effettuato dal compilatore o dal programmatore e perché le istruzioni che possono riempire i delay slots sono poche.

Predizione statica. Salto non eseguito (vista per gli esercizi) → occorre uno stallo (qui flush) se la predizione è sbagliata. Viene bene per branch all'inizio del loop.

Salto sempre eseguito (non vista nel dettaglio ma cercare) → occorre sempre uno stallo (flush) se la decisione del salto è spostata.

in IDPredizione dinamicaQuando un'istruzione di salto viene eseguita vado a vedere se l'ultima volta aveva comportato un salto o meno: in caso affermativo si carica già l'istruzione a cui saltare dopo la branch.

Per fare questo serve mettere il risultato del confronto delle branch passate dentro a un buffer detto BHT (Branch History Table), una piccola memoria indicizzata guardando i bit meno significativi del PC. Per via dell'indicizzazione così pensata la correttezza della predizione non è assoluta, dato che i bit meno significativi di due branch diverse possono coincidere.

Esame 20Esiste anche un altro buffer, il BTB (Branch Target Buffer) che memorizza invece il salto da effettuare per ogni branch salvata nel BHT (due diverse opzioni di implementazione su slide).

Schemi di predizione

Schema di predizione a un bit: 0 → salto non eseguito l'ultima volta, 1→salto eseguito l'ultima volta; nel caso di cicli o di branch

Eseguite quasi sempre ci può essere una predizione sbagliata due volte, anche quando potrebbe essercene soltanto una (esempio pag 281 e slide).

Schema di predizione a due bit con macchina a stati finiti.

Per quanto riguarda le jump è obbligatorio uno stallo (flush in questo caso), fortunatamente però sono istruzioni poco frequenti.

Eccezioni

Eventi che alterano il normale flusso delle istruzioni: overflow, chiamate a sistema, richiesta di un dispositivo I/O etc. Si deve interrompere la pipeline e fare un flush per le istruzioni che seguono.

Si classificano due tipi di interrupt:

INTERRUPT: causati da eventi esterni alla CPU, si possono completare le istruzioni che sono già in esecuzione nella pipeline e poi passare il controllo al SO. Semplicemente si ferma e poi si fa riavviare il programma utente. La richiesta di un dispositivo I/O ne è

Dettagli
Publisher
A.A. 2019-2020
33 pagine
4 download
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher pontemon99 di informazioni apprese con la frequenza delle lezioni di architettura dei calcolatori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Genova o del prof Baglietto Pierpaolo.